加密算法
概述
在阅读本文之前建议先读一下这篇文章 -- HTTPS 的故事-前端外刊评论
关于加密,其实就是把“明文”变成“密文”的过程;而“解密”,就是把“密文”变为“明文”的过程。在这两个过程中,都需要一个关键的东西叫做“密钥”。
“密钥”分为公钥(Public Key)与私钥(Private Key),它们两者是通过一种算法得到的一个密钥对。其中公钥是密钥中对外公开的部分,私钥则是非公开的部分。
对称加密
图:对称加密
所谓的“对称加密技术”,意思就是说:“加密”和“解密”使用相同的密钥。这个比较好理解。就好比你用 7zip 或 WinRAR 创建一个带密码(口令)的加密压缩包。当你下次要把这个压缩文件解开的时候,你需要输入同样的密码。在这个例子中,密码/口令就如同刚才说的“密钥”。
缺点:
- 客户端和服务端都需要保存大量的加密算法和对应的密钥,管理成本巨大且容易泄漏。
- 无法保证密钥可以安全地传递给对方。
非对称加密
图:非对称加密
所谓的“非对称加密技术”,意思就是说:“加密”和“解密”使用不同的密钥。服务端将公钥(密码箱)发送给客户端,客户端使用公钥加密信息(锁箱子),服务端接受消息后使用私钥解密。当年“非对称加密”的发明,还被誉为“密码学”历史上的一次革命。
非对称加密的缺点:
图:非对称加密被劫持
窃听者可以伪造服务器的公钥与客户端通讯,客户端以为是跟服务器通讯,其实是与窃听者在通讯,后果可想而知。其实这个过程窃听者也要和服务器端进行通信继续所要公匙 A。
CA 证书
CA 是认证机构(Certification Authority)的简称。CA 是 PKI 系统中通信双方信任的实体,被称为可信第三方(Trusted Third Party,简称 TTP)。CA 证书,顾名思义,就是 CA 颁发的证书。
CA 的初始是为了解决上面非对称加密被劫持的情况,服务器申请 CA 证书时将服务器的“公钥”提供给 CA,CA 使用自己的“私钥”将“服务器的公钥”加密后(即:CA 证书)返回给服务器,服务器再将 CA 证书提供给客户端。一般系统或者浏览器会内置 CA 的根证书(公钥)
图:HTTPS 中 CA 证书的获取
上图步骤 2 之后,客户端获取到“CA 证书”会进行本地验证,即使用本地系统或者浏览器中的公钥进行解密,每个“CA 证书”都会有一个证书编号可用于解密后进行比对(具体验证算法请查阅相关资料)。
图:非对称加密被劫持
图中步骤 5 之前使用的是非对称加密,之后将使用对称加密来提高通讯效率。