2.3 混合加密方式
接下来我们探讨采用对称加密+非对称加密混合加密方式。
通过2.1 对称加密方式 一节的分析,我们知道,此种方式最大的问题在于密钥的安全性,一旦密钥被攻击者获取,那么本次传输将变为明文传输。通过2.2 非对称加密方式 我们了解非对称加密只是单向安全的数据传输,即只有客户端到服务器的传输才是安全的。
结合二者的特点,我们提出,通信双方所有的数据传输采用对称加密方式,密钥的传输采用非对称加密方式。
一种典型的场景是:
- 服务器生成公钥和私钥,并将公钥发给客户端;
- 客户端生成对称加密的密钥,用公钥对该密钥进行加密,并发给服务器,之后所有的数据传输都使用该密钥进行加密;
- 服务器收到该客户端发过来的经公钥加密的数据,使用私钥对其解密,从而得到客户端的密钥,之后所有来自该客户端的数据,都使用该密钥解密。
这种混合加密的方式在一定程度上确实能提高数据传输的安全性,但是它就一定安全吗? 我们日常上网经常会使用代理服务器,如果代理服务器伪造来自真实服务器的公钥并发给客户端,那么之后所有的传输也将变为明文传输。
因此,对于混合加密方式核心的问题在于无法确认该公钥是否来自真实服务器,而不是代理服务器的公钥。
2.4 证书
在混合加密方式中,客户端是直接向服务器请求公钥,该公钥有可能被伪造。我们改进一下这种方式,引入证书的概念。
证书包含三部分信息:
- 服务器公钥等明文信息;
- 摘要;
- 数字签名;
摘要 = hash(明文信息);
数字签名 = 该证书的颁发机构私钥加密(摘要);
一种典型的场景是:
- 客户端向服务器请求证书;
- 找到证书颁发机构的证书,获取公钥,然后解密数字签名,得到摘要A;
- hash(明文信息) = 摘要B;
- 比较A和B是否相等,验证证书合法性。
此举能够验证该证书确实是由某证书机构颁发的,但是该机构就一定是合法的吗?所以需要再次验证它的合法性。
采取上述同样的方法来验证该机构的合法性,一层层的向上验证,最终在客户端浏览器中会预先安装全球受信任的证书颁发机构的证书,我们称之为根证书。
所以对于每一个服务器的证书,采取向上一层层的验证证书颁发颁发机构的合法性,只要最终经过了根证书的验证,则表示该证书是合法的。