-
对称加密 client和server持有相同密钥,对数据进行加解密,一旦密钥被黑客获取,加密内容形同虚设。
-
非对称加密
- server端持有公钥pubKey和私钥priKey
- client端向server端索要公钥pubKey,server端将pubKey返回给client端
- client端的数据经公钥pubKey加密发至server端,再由server端的私钥priKey解密;
- server端的数据经私钥priKey加密发至client端,再由公钥pubKey解密。
问题:client端持有的公钥pubKey是server端下发的,黑客有可能拿到,这样一来,server端发至client的数据就有可能被黑客拦截并解密
-
https: 非对称加密 + 对称加密
- client向server索要pubKey,server端返回pubKey至client;
- client 生成一个随机数rn,并用公钥加密,形成一个新的加密数据newdata,并发送至server,server使用私钥对newKey进行解密,得到rn,后续client和server使用rn作为对称加密密钥进行数据传输;
特点:rn分别存放在client端和server端,黑客理论上无法拦截。
问题:中间人攻击,client最开始索要公钥的时候被黑客截获,黑客返回一个假的公钥给client,同时,黑客冒充client向server索要真实的公钥,后续,client与server的数据交互将由黑客这个中间人一直中转。
- CA证书。
- CA机构也有自身的公钥和私钥,
CPubKey和CPriKey,CA机构使用CPriKey对一个网站server端的pubKey进行加密,得到一个license证书派发给server端(这个过程通常是需要给CA机构付费的 - client端要跟server端进行数据传输,就先向server端请求这个license证书(CPriKey+pubKey),再用已经提前写死到client端系统内的CA公钥CPubKey,对license进行解密,就能
拿到server端的pubKey了 - 接着,client端会生成一个对称密钥rn,也称为会话密钥,并用pubKey加密它,然后传给server端,(这个过程中即使有中间人也没什么影响,因为中间人没法拿到priKey,因此没办法对使用pubKey进行非对称加密的内容进行解密,也就
无法获取到随机数rn) - server端用priKey解密得到rn,之后
client和server就使用这个rn进行对称加密的数据传输了。
- CA机构也有自身的公钥和私钥,
整个过程中,即使插入中间人,也是安全的,原因如下:
- 中间人是无法伪造license的,因为license是由CA机构的CPriKey生成的,如果伪造,client端的CPubKey就解密不出来,会提示证书不可信任
- 中间人最多只能拿到server端下发的pubKey,但是也没啥用,client发出的数据(pubKey+rn)本身只能通过priKey解密,而priKey存在服务端,黑客没办法拿到,因此也就没办法解密拿到后续用于对称加密的密钥rn了。