HTTPS 学习

Posted by Charlie Lin on August 6, 2021

网络中的安全通信

对称加密

加密:$f(k, data) = X$
解密:$f’(k, X) = data$

服务端与客户端采用同一个密钥 k,服务端用 k 和函数 f 加密数据 data,得到密文 X;客户端在收到密文 X 后,使用对应的函数 f’ 和相同的密钥 k 解密 X,得到 data。
这种对称的加密方式应用在网络中有几个弊端:

  1. 如果 n 个客户端与服务端都使用相同的密钥 k,那么毫无隐私可言。
  2. 如果 n 个客户端与服务端采用 n 对不同的密钥,那么对于服务端而言,需要维护 n 对密钥,当 n 巨大的时候,维护这个密钥集合就是一个非常巨大的开销。
  3. 如果 n 个客户端与服务端采用 n 对不同的密钥,那么这个密钥本身要如何安全的在网络中传输而不被劫持?

非对称加密

加密:$f(pk, data) = X$
密钥:$f(sk, X) = data$
签名:$f(sk, digest) = signature$
验证签名 $f(pk, signature) = digest$

非对称加密应用在网络通信中也有一些弊端:

  1. 非对称加密加解密过程开销比较大
  2. 只能保证拥有公钥的一方想拥有私钥的一方通信的安全,反之则不安全。因为公钥是人人都可以获取的。

对称加密与非对称加密的结合

  1. 服务端产生一对 pk 与 sk
  2. 客户端向服务端申请 pk
  3. 客户端获取到 pk 后,生成一个对称加密的密钥 k,用 pk 对 k 加密,发送给服务端
  4. 服务端用 sk 解密,得到 k
  5. 客户端与服务端开始采用对称加密进行通信

这种方式还是不够安全,黑客可以使用中间人攻击,伪装成服务端与客户端通信、伪装成客户端与服务端通信。

引入 Certificate Authority

  1. 引入一个可信任的 Certificate Authority,该机构也拥有一组 cpk 与 csk
  2. 服务器的 pk 发送给 CA,CA 利用 csk 进行加密,得到 license,返回给服务端
  3. 服务器的 license 发送给客户端
  4. 客户端使用浏览器(操作系统)内置的 cpk 对证书进行解密,得到 pk。