以A将信息发送给B为例
对称加密:A生成密钥,将密钥给B。A使用密钥将信息进行加密,将加密后的信息发送给B,B得到信息后,使用A给他的密钥进行解密。
对称加密中的问题:对称加密中的密钥很容易被第三方获取。
非对称加密:A要将信息发送给B,首先B生成密钥,B生成的密钥中包含公钥和私钥(公钥加密的文件只有私钥能够解开,私钥加密的数据只能公钥解),然后B将公钥给A,A得到数据后通过B给他的公钥进行加密数据。A将加密后的数据发送给B;
非对称加密过程中的问题:
- 在B将公钥交给A的过程中,可能会被第三方C进行拦截,然后C也生成公钥以及私钥。 然后C将自己的公钥发送给A。A收到公钥之后使用C提供的数据对信息进行加密,就会导致信息的泄露。
问题:A得到B的公钥之后怎样确保得到的公钥是B产生的呢?
解决办法:通过第三方机构(CA)。B产生公钥和私钥之后,先将公钥交给CA进行担保,CA为B出示一份数字证书(数字证书中包含B的公钥),B再讲数字证书交给A。A收到数字证书之后,A可以验证数字证书是否是CA颁发的,如果是,则可以确定此密钥是B产生的。(问:如果C拦截数字证书呢?答:密码学没有安全性可言,密码学必须以一个信任点(CA)来建立密码结构)
举例:在互联网上进行登录银行网站的时候,银行网站首先向用户出示数字证书(将公钥交给用户),用户拿到数字证书的时候,首先验证此证书是否是银行的(浏览器内部自带校验功能,判断数字证书是否有CA颁发)。验证成功之后用户再使用此数字证书(证书中的公钥)对用户名和密码进行加密。 - C如果拦截到B给A的数字证书之后。当A将加密之后的信息发送给B的过程中,C将信息拦截下来,再将自己的信息使用数字证书进行加密发送给B。
问题:B收到A的回信时,如何判断此信息是由A发送的呢?
解决办法:A产生公钥和私钥,A将带有自己公钥的数字证书发送给B。然后A使用B的公钥对信息进行加密之后,A得到信息的摘要(数字签名,即使用MD5算法得到信息的编码),A使用自己的私钥对摘要(数字签名)进行加密,然后将信息发送给B,B得到信息之后,先使用A的私钥岁数字签名进行解密,得到A发送过来的数字签名。在通过信息得到信息的数字签名(使用MD5算法),比较两个数字签名是否相同,如果相同说明信息是A发送的并且信息没有被改动。