[学习笔记] 非对称加密和签名认证
现代密码学中,加密算法包括两部分
- 算法,一组规定如何进行加解密的规则,描述加解密的具体操作步骤。为了方便使用及保证算法可靠性,算法都是公开的
- 密钥,用于算法的秘密参数
在对称加密中,无论加密还是解密,都使用同一个密钥。因此
- 对密钥的保护十分重要,泄露则意味着密码被破解
- 通信双方在密钥交换时,特别是在公开/不可信链路(互联网)上进行密钥交换时,要保证密钥不泄露(Diffie-Hellman密钥交换算法)
受Diffie-Hellman密钥交换算法的启发,人们意识到加密和解密可以使用不同的秘钥,只要这对秘钥有某种对应关系即可
这种新的加密模式被称为非对称加密
- 有两把密钥,一把是公开的公钥,还有一把是不公开的私钥
- 公钥和私钥一一对应,有一把公钥就必然有一把与之对应的、独一无二的私钥,反之亦成立
- 同时生成公钥和私钥应该相对比较容易,但是从公钥推算出私钥,应该是很困难或者是不可能的
- 所有的秘钥对(公钥, 私钥)都是不同的
- 用公钥可以解开私钥加密的信息,反之亦成立
加密和解密
如果李雷想给韩梅梅发一段加密信息
- 韩梅梅生成一对秘钥(公钥、私钥),保存好私钥,公开自己的公钥
- 李雷用韩梅梅的公钥,加密要发给韩梅梅的信息
- 韩梅梅收到密文后,用自己的私钥解密
只要韩梅梅的私钥没有泄露,这段密文就只有韩梅梅能解开,即使其他人获得密文,也无法解密。 常用的非对称加密算法包括 RSA、Elgamal、ECC等
举个栗子
课上,李雷写了一张纸条,让同桌传给韩梅梅,纸条内容为
韩梅梅,我是李雷,我喜欢你。
对李雷来说
- 要确认韩梅梅收到纸条时内容未经改动(完整性)
对韩梅梅来说
- 要确认纸条是李雷写的,而不是别人冒充李雷写的(身份认证)
摘要和签名
结合栗子,李雷需要
- 将纸条Hash,得到摘要(Digest)
- 用自己的私钥,加密摘要,生成签名(Signature)
- 让同桌传递 纸条 和 签名
韩梅梅收到纸条和签名后
- 用李雷的公钥,对签名解密,得到
摘要[1]
- 对纸条内容Hash,得到
摘要[2]
。
如果摘要[1] = 摘要[2]
,则说明纸条确实由李雷所写,且内容未经改动。因为
- 只有李雷持有李雷的私钥,用私钥(李雷的私钥)加密的内容(签名)只有对应的公钥(李雷的公钥)才能解开(身份认证)
- 如果纸条内容在传递过程中改变,则得到的
摘要[2]
一定与摘要[1]
不同(完整性)。关于Hash的介绍,可以参考[学习笔记] 哈希函数和 SHA-256
总结
对于双钥系统,加密解密时
- 公钥用于加密,私钥用于解密
身份认证时
- 私钥用于签名,公钥用于验证
参考
- RSA算法原理(一),阮一峰
- RSA算法原理(二),阮一峰
- 数字签名是什么?,阮一峰
- 密码学笔记,阮一峰
- 程序员之网络安全系列
编辑于 2020-02-21 09:50