版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lewis_007/article/details/73336758
概述
非对称加密算法需要两个密钥:公开密钥(public key)和私有密钥(private key)。
公开密钥与私有密钥是一对。公钥加密,只能用对应的私钥解密。私钥加密,只能用对应的公钥解密。
因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
目的
相比对称加密,非对称加密的提出,主要是解决两个问题:
- 数据加密传输,防止消息明文传输时被拦截和篡改
- 数字签名,防止伪造冒充信息源头
数据加密传输
甲方给乙方发送消息
- 双方都需要生成一套密钥,其中私钥自己保存,公钥公开出去
- 甲方,使用乙方的公钥,加密消息,传递给乙方
- 乙方收到消息,使用乙方的私钥,解密消息
注释:如果消息被拦截,拦截者没有乙方的私钥,无法解密消息
乙方给甲方回复消息
- 乙方,使用甲方的公钥,加密待回复消息,传递给甲方
- 甲方收到消息,使用甲方的私钥,解密回复消息
注释:如果消息被拦截,拦截者没有甲方的私钥,无法解密消息
数字签名
甲方给乙方发送消息
- 甲方,使用甲方的私钥,对信息签名,传递给乙方
- 乙方收到消息,使用甲方的公钥,对信息验签
注释:第三方无法伪造甲方的私钥,验签通过,就防止了伪造和冒充
总结
通过以上,可以总结:
- 公钥加密,私钥解密
- 私钥签名,公钥验签
使用的原理,开头已提到:
- 公钥加密,只能用对应的私钥解密
- 私钥加密,只能用对应的公钥解密
问题
思考
甲方给乙方发送消息这个过程,如何同时保证以下两点:
- 甲方的消息不怕第三方拦截
- 乙方收到的消息来自甲方,而不是第三方通过乙方的公钥伪造
自问
甲方给乙方发送消息,到底是用乙方的公钥加密,还是甲方的私钥加密?
因为,公钥是对外公布的:
- 只用 公钥加密、私钥解密,如何做到验签,也就是,如何确认消息来自甲方
- 只用 私钥加密、公钥解密,如何做到加密,也就是,任何拿到甲方公钥的第三方都可以解密
自答
甲方给乙方发送消息,这么优化一下:
- 双方都需要生成一套密钥,其中私钥自己保存,公钥公开出去
- 甲方,使用乙方的公钥,加密消息,并且加上甲方的私钥(数字签名),传递给乙方
- 乙方收到消息,使用乙方的私钥和甲方的公钥,解密消息
再思考
按照上面的解答,如果第三方,拦截了甲方的消息,保留甲方的数字签名,用乙方的公钥,加密任意消息,这不就做到了伪造甲方的消息,但是消息内容被篡改?
自问
甲方给乙方发送消息,如何防止消息被篡改?
他答
甲方使用甲方的私钥加密的内容,最好是MD5签名后的明文。
—— 没看懂
最后
到这里,大致搞清楚原理了,具体如何实现,不在这里说,可能实际的项目中,会进一步演化,加入 SHA-256 等。但是无论如何演化,其基本原理和目的就是这些了。