RSA
RSA是使用最广泛的的公钥密码算法,它的名字是由它的三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母组成的。
RSA可以被用于公钥密码和数字签名。
RSA加密
在RSA中,明文、密钥和密文都是数字。RSA的加密过程可以用下列公司来表达:
密文 = 明文^E mod N (RSA加密)
也就是说,RSA的密文是对代表明文的数字的E次方求mod N的结果。换句话说,也就是明文和自己做E次乘法,就是这么简单。
加密公式中出现两个函数——E和N,到底是什么?RSA的加密时求明文的E次方mod N,因此只要知道E和N两个数,任何人都可以完成加密的运算。所以说,E和N是RSA加密的密钥,也就是说,E和N的组合就是公钥。通常表示为 “公钥是(E,N)”或是“公钥是{E,N}”。
RSA解密
RSA的解密公式如下:
明文=密文 ^D mod N (RSA解密)
也就是说,对表示密文的数字的D次方求mod N就可以得到明文。因此D和N的组合就是私钥。只有知道D和N两个数的人才能够完成解密运算。
对RSA的攻击手段
- 通过密文来求得明文
- 通过暴力破解来找D
- 通过E和N求出D
- 中间人攻击
- 选择密文攻击
其他公钥密码
- EIGamal方式
EIGamal方式是由Taher EIGamal设计公钥算法。RSA利用了质因数分解困难度,而EIGamal方式则利用mod N下求离散度数的困难度。EIGamal方式有一个缺点,就是经过加密的密文长度会变成明文的两倍。密码软件GnuPG中就支持这种方式。
- Rabin方式
Rabin方式是由M.O.Rabin设计的公钥算法。Rabin方式利用了mod N下求平方根的困难度。上文中,我们提到了破解RSA有可能不需要通过对大整数N进行质因数分解,而破译Rabin方式公钥密码的困难度与质因数分解则是相当的,这一点已经得到了证明。
- 椭圆曲线密码
椭圆曲线密码*(Elliptic Curve Cryptography,ECC)是备受关注的一种密钥密码算法。它的特点是所需要的密钥的长度比RSA短。椭圆曲线密码是通过将椭圆曲线上的特定点进行特殊的乘法运算来实现的,它利用了这种乘法运算的逆运算非常困难这一特性。
混合密码系统
混合密码用对称密码来加密明文,用公钥密码来加密对称密码中所使用密钥。通过使用混合密码系统,就能够在通信中将对称密码和公钥密码的优势结合起来。
对称密码与公钥密码
通过使用对称密码,我们就能够在通信中确保机密性。然而要在实际中运用对称密码,就必须解决密钥配送问题,而通过前面介绍的公钥密码,解决了配送问题,但是公钥密码还有两个很大的问题:
- 公钥密码的处理速度远远低于对称密码
- 公钥密码难以抵御中间人攻击。
混合密码系统
混合密码系统中会先用快速的对称密码来对消息进行加密,这样消息就被转换为了密文,从而保证了消息的机密性。然后我们只要保证对称密码的密钥的机密性就可以了。这里就轮到公钥密码出场了,我们可以同公钥密码对加密消息时使用的对称密码的密钥进行加密。由于对称密码的密钥一般比消息本身要端,因此公钥密码速度慢的问题就可以忽略了。
下面罗列一下混合密码系统的组成机制:
- 用对称密码加密消息
- 通过伪随机数生成器生成对称密码加密使用的会话密钥
- 公钥密码加密会话密钥
- 从混合密码系统外部赋予公钥密码加密使用的密钥
混合密码系统运用了伪随机数生成器、对称密码和公钥密码这三张密码技术。
加密
解密
参考资料
该系列的主要内容来自《图解密码技术第三版》