https加密那点事儿

347 阅读3分钟

一、对称加密

在每次发送真实数据之前,服务器先生成一把密钥,然后先把密钥传送给客户端。之后在服务器向客户端发送真数据时,先用这把密钥对数据进行加密,客户端收到数据后再用刚才收到的密钥进行解密。


存在的问题:

假设密钥被中间人截取了,加密的数据对于中间人来说和明文没啥区别。问题就在于怎么把密钥安全的传送给客户端。

二、非对称加密

这种方法就是,客户端和服务器都有两把钥匙,一把是公钥,一把是私钥。用公钥加密的数据只有对应的私钥才能解密,用私钥加密的数据只有对应的公钥才能解密。

服务器在给客户端传输数据的过程中,可以用客户端的公钥对数据进行加密,客户端收到数据后,再用自己的私钥进行解密。客户端向服务器发送数据同理。


三、对称加密+非对称加密

思想:服务器以明文的方式向客户端发送自己的公钥,客户端收到公钥后(非对称加密),生成一把密钥(对称加密),然后用服务器的公钥对这把密钥进行加密,之后再把密钥传到服务器,服务器收到之后用自己的私钥进行解密,最后服务器就可以得到这把密钥了。而客户端也有同样的一把密钥,他们就可以进行对称加密了。

存在问题:服务器以明文的方式给客户端传送公钥的时候,被中间人截取了服务器的公钥,并用中间人自己的公钥冒充服务器的公钥传给客户端。客户端会用中间人的公钥来对自己生成的密钥进行加密,在把密钥传回服务器的过程中,中间人又把密钥给截取了,中间人用自己的私钥进行解密,解密之后就可以获得到这把密钥了。最后中间人再对这把密钥用刚才截取到的服务器的公钥进行加密,发送给服务器。

总结:客户端无法知道这把公钥是否来自服务器,而不是冒充的。


四、数字证书

我们需要找到一个具有公信力、大家都认可的证书中心(CA)。

1、服务器在给客户端发送公钥时,会把公钥和服务器个人信息通过hash算法生成信息摘要。


2、为了防止信息摘要被人替换,服务器会利用CA提供的私钥对信息摘要进行加密,形成数字签名。


3、最后还会把原来没有hash的服务器个人信息,公钥,数字签名合成数字证书。


客户端拿到数字证书后,使用CA提供的公钥进行解密,然后对服务器个人信息和服务器的公钥进行hash算法,得到的两份信息进行比对,如果相同,说明是来自服务器的,否则不是。