什么是非对称加密?
非对称加密是指给数据加密和解密用的不是相同的密钥。密钥分为公钥和私钥。公钥是公开的,私钥只有一方拥有。可以通过公钥加密--私钥解密,也可以通过私钥加密--公钥解密
以一个例子来理解
阿深和小星想要进行通信,他们各自都有一套属于自己的公钥和密钥,并且由于公钥是公开的,所以也有对方的公钥。
此时小星要给阿深传递消息,就要用阿深的公钥加密消息,阿深得到加密后的消息后,使用自己的私钥解密。就实现了通信。
然而如果有人冒充小星给阿深传递消息呢?
所以小星在给阿深传递消息的时候,不仅要用阿深的公钥进行加密,之后还要再用自己的私钥进一步加密。小婷收到消息后,先用小星的公钥对小星的私钥进行解密,成功则表明是消息发送的消息,不成功就是干扰消息;成功之后,阿深再用自己的私钥进行解密,得到最里层的数据。
小星想要回复信息,就只需要用自己的私钥对信息进行加密,阿深用小星的公钥再进行解密就可以获取回复的信息
数字签名
然而阿深怎么确定小星回复的信息没有被修改过呢?这里就需要用到数字签名。小星在发送消息之前,对消息内容进行hash算法,生成一个信息摘要,以免被更改,再用自己的私钥进行加密生成数字签名。之后将数字签名和加密后的消息一起回复给阿深。
阿深在收到后,对解密后的消息进行hash算法,得到信息摘要;再将数字签名解密得到另一个信息摘要;将两个信息摘要对比,如果相同,说明消息没有被更改过,如果不同,则消息被更改了。
注意:利用hash算法生成信息摘要的过程是不可逆的,也就是不能通过信息摘要得到信息内容。
数字证书
另一个问题又来了,阿深怎么确定收到的消息的来自小星的呢?这里又需要用到数字证书来证明。
数字证书包含了:证书的发布机构、证书的有效期、公钥、证书所有者、签名用到的算法、指纹以及指纹算法。
数字证书生成过程
将用户的公钥、用户的姓名、证书的发布机构和证书有效期进行hash算法得到信息摘要,加密后得到数字签名
将用户的公钥、用户的姓名、证书的发布机构和证书有效期以及数字签名一同组成数字证书
小星给阿深回复信息的时候,携带了数字证书
阿深得到数字证书,拿出证书的发布机构,然后从操作系统的受信任发布机构列表中查找该发布机构的公钥对其进行解密,如果找不到该发布机构,则表示小星发过来的数据是不可靠的
如果得到了公钥,解出数字证书,拿到了用户信息和数字签名
对用户信息进行hash算法得到信息摘要,与解密后的数字签名对比,如果相同说明的确的确来源于小星。