软件密码学基础---非对称加密

来源:互联网 发布:印度发展现状知乎 编辑:程序博客网 时间:2024/06/07 19:33

1、基础

密钥对:公钥和私钥;
特点:如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密;
一般:公钥用来加密信息,私钥用来数字签名;

2、通信过程分析

第一:
A和B通信;
首先,B利用非对称加密算法(比如RSA),生成一对密钥,包括公钥和私钥,该对密钥的特点:公钥加密的特点只能私钥解,私钥加密的数据只能公钥解;
其次,B将公钥传递给A,传递过程中公钥可能会被C窃取;
然后,A将要发送给B的数据利用A的公钥加密,然后将加密后的数据传递给A;此过程中,A发送的数据可能被C窃取,但由于C只有公钥,不能解密,所以C不能获取A发生的真正数据;(不排除C采取暴力破解—但是时间周期会很长);
这里写图片描述
上述过程存在的问题:
B向A传递B公钥的过程中,公钥被C拦截,C自己也生成一对密钥(C的公钥和私钥),C将自己的公钥传递给A,A接收到该公钥后,以为是A的公钥;此后A发送经该公钥加密的数据,会被C用公钥解密获取;并且B受到数据后无法解密;
这里写图片描述
存在的问题:A无法验证获得的公钥是否是B的;

第二:
A如何确保收到的公钥是B的?数字证书
数字证书,是对用户的公钥的认证,是可靠的第三方认证机构出示的,第三方机构CA;(网络没有绝对安全,都是基于一定的信任基础—CA);

B生成一对密钥后,通过CA认证,出示一份数字证书;数字证书的生成:CA利用自己的私钥,对B的公钥和B的一些相关信息一起加密,生成“数字证书”,之后发送信息时,可以在信息后附上数字证书即可;
A获取B的数字证书,用CA的公钥解密数字证书,得到B的真实公钥; C也可以获取B的数字证书,经CA的公钥解密,得到B的公钥,但无法冒充B的公钥,发给A;
这里写图片描述

该过程又存在问题:
A向B发送加密数据,被C拦截,C会重新生成新的数据,经B的数字证书中的公钥加密,然后再发给B;

存在的问题:B无法确保收到的数据是A发送的;

第三:
B如何确保数据没有被篡改?数字签名;
B发送数据之前,也会生成一对自己的密钥,并让CA认证出示一份自己的数字证书;
A将想要发送给B的数据,采用摘要算法(比如MD5)提取出摘要,使用自己的私钥加密摘要,即数字签名;同时使用B公钥加密要发送的数据;然后将加密后的数据和数字签名,一起发送给B;
B收到后,如果可以用A的公钥解密,则说明数据是A发送的;同时解密数据,并得出数字签名,将A发送的数字签名,进行对比,如果一致,说明数据没有被篡改;

参考

数字签名: http://www.youdzone.com/signature.html