目录
一、对称加密
对称加密其实就是通过同一个 "密钥" , 把明文加密成密文, 并且也能把密文解密成明文。
特点:计算起来比较快速。
这样做,即使数据被截获,但是黑客不知道密钥是什么,也就无法进行解密,无法获得请求的内容是什么。
但是问题来了,服务器在同一时刻不是只服务于一台客户端的,每个客户端与服务器之间的密钥是不同的,因此服务器必须维护每个客户端和每个密钥之间的滚连联系,过于繁琐。
所以我们想是否可以在客户端与服务器建立连接时,双方就协商好,确定这次交互的密钥是什么。
事实证明这种方法是行不通的:如果将密钥进行传输,黑客就能获取到密钥,从何谈起安全性呢,所以必须对密钥进行加密后传输,此时又回到最开始的问题,周而复始。
那么我们如何才能将密钥进行传输呢?
二、非对称加密
非对称加密包含两种密钥:公钥、 密钥。
缺点:运算速度非常慢。
公钥和密钥是配对的,对同一个明文来讲:
明文 + 公钥 == 密文 明文 + 私钥 == 密文
密文 + 私钥 == 明文 密文 + 公钥 == 明文
客户端获取到服务器的公钥,用公钥将 对称加密的密钥key 加密,然后将密文发给服务器。
服务器得到密文后,通过私钥进行解密,就知道了key。最后双方就可以进行对称加密式的交互。
在这个过程中,黑客也能获得了服务器的公钥以及密文,但是由于没有配套的私钥,所以无法进行解密。
采用这种方式就安全了吗,当然是不可能的。
中间人攻击
黑客在中间伪造公钥,就能获取到key,并且客户端与服务端也发现不了异常。
为解决中间人攻击,我们提出一个新的概念--证书!
证书
在客户端和服务器刚一建立连接的时候, 服务器给客户端返回一个 证书.。这个证书包含了刚才的公钥, 也包含了网站的身份信息。
证书 可以理解成是一个结构化的字符串, 里面包含了以下信息:
证书发布机构
证书有效期
服务器的公钥
证书所有者
被加密的签名
。。。
当客户端获取到证书时,为防止证书是伪造的,会对证书进行校验:
① 判定证书的有效期是否过期。
② 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构)。
③ 验证证书是否被篡改: 从系统中拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为hash2.对比 hash1 和 hash2 是否相等.如果相等,则说明证书是没有被篡改过的。
此时又会有一个新的疑问:黑客是否能通过修改证书这一行为获取密钥key呢。
答案是否定的:证书这个东西每个人都能获取到,黑客也不例外。
以下是黑客的操作:
① 获取证书。
② 对签名进行解密。
③ 黑客想修改证书携带的公钥,他将公钥修改后,将证书的各个属性进行计算,算出一个新的签名。然后用这个新签名把证书的签名进行替换。
问题的关键在于黑客不知道发布机构的私钥,使得这个签名就算加密后,也无法用机构的公钥进行解密。
当然这种方式也不是万无一失的,黑客当然也可以想办法获取机构的私钥,但是成本的多少往往是与利益挂钩的。黑客也不想花高成本得到你想吃蛋炒饭这一条消息,他会崩溃的🤡
The End