笔记:网络加密

加密算法

分为两类:

  • 对称密钥加密(Symmetric-key algorithms):加密、解密都是用相同的密钥,速度相对 非对称加密 较快。 常见有DES、AES算法。
  • 非对称加密(Asymmetric cryptography):也就是公开密钥加密(public-key cryptography),一对密钥,对外公开的叫公钥,公钥可提供给所有人,私钥是保密的不对外公开。常见有RSA算法。
    使用公钥加密的信息,只有私钥才能解密(私钥加密的数据,用公钥也能解密)。
数字签名(Digital Signature)与摘要(digest)
  • 摘要:针对 原始数据 通过 hash 算法计算得到一串固定长度的字符,不同数据通过 hash 算法得到的字符串是不一样的,摘要主要用来判断数据是否被篡改了;
  • 将摘要用私钥加密得到的密文就称作 数字签名
数字证书(Digital Certificate)
  • 由 数字证书认证机构(Certificate Authority)颁发,用户可向 CA 申请(世界上有多个CA机构);2)自签名,即自己制作,不会被广泛信任;
  • 数字证书,主要包含了1)认证的CA机构名称、2)证书持有者的公钥、3)证书内容本身的数字签名(CA用它的私钥加密)4)证书的签名算法标识,包括公开密钥算法和 hash 算法;

简单举例:以用户上网通过浏览器访问安全网站为例:

  1. 浏览器使用网站的公钥加密数据后发给网站,传输途中数据如果被第三方监听窃取了也没关系(第三方没有网站的私钥解密不了)
  2. 网站接收到数据,使用其私钥解密,就可以得到用户的明文数据;
  3. 网站加密数据返回给用户

几个问题:

  1. 浏览器怎么获取公钥呢?
  • 网站会把数字证书发给浏览器,数字证书中包含公钥了信息(这里,公钥的形式就是 数字证书
  1. 为什么用数字证书?
    为了确保浏览器收到的网站公钥不是第三方伪造或篡改了,浏览器会内置大多数权威可靠的CA根证书(含有CA的公钥!),当接收到网站的数字证书,会校验证书:

    • 证书颁发的机构是否伪造的,浏览器不认识不信任,则列为危险证书;
    • 根据证书的机构名称找到了内置CA证书中的公钥,对证书的数字签名(由CA机构用CA私钥加密了的)解密,解密失败则列为危险证书;
    • 解密成功的话,得到了证书的摘要 A;此时还要根据证书中标明的 hash 算法重新计算得到证书的摘要 B,两者比较,不相同的话,说明证书内容被篡改了,公钥可能被修改了;
  2. 网站怎么加密数据返回给用户?

    • 方案一:用网站的私钥加密返回,浏览器再用网站公钥解密得到明文;但是在数据传输过程中第三方获取了该加密数据的话,也可以用网站的公钥解密出来,所以这方案不靠谱。
    • 实际方案:使用对称密钥,网站和浏览器都用相同的密钥加解密数据;问题是网站和浏览器得先协商出一个对称密钥,保证对称密钥不被第三方知道窃取;另外使用对称密钥的原因出自于性能,使用对称加密速度更快,
  3. 对称密钥的生成?(使用RSA算法为例)

  • 浏览器发送随机数 client_random 、支持的加密方式(明文传输)
  • 网站返回随机数 server_random 、选择的加密方式和证书 (明文传输)
  • 浏览器验证网站的证书,使用证书中的公钥加密随机数 premaster secret 发送给网站 (加密传输)
  • 网站接收数据后,使用私钥解密 premaster secret
  • 浏览器与网站都有了三个随机数,通过约定的加密方式使用client_random server_random premaster secret 生成了一把对称密钥,称作会话密钥,之前的步骤称为 握手阶段(handshake)
  • 随后浏览器与网站使用这把对称密钥 加密数据进行通信;
笔记:网络加密_第1张图片
image.png
学习来源
  • Keyless SSL: The Nitty Gritty Technical Details
  • SSL/TLS协议运行机制的概述
  • 数字签名是什么?

你可能感兴趣的:(笔记:网络加密)