公开密钥加密技术又称为非对称密钥加密技术,与对称密钥加密技术不同,它使用一对密钥分别进行加密和解密操作,其中一个是公开密钥(Public-Key),另一个是由用户自己保存(不能公开)的私有密钥(Private-Key),发送方用公钥或私钥进行加密,接收方使用私钥或公钥进行解密。公钥加密的模型如图1-3所示。
图1-3
使用公钥加密技术,通信双方事先不需要通过通信信道进行密钥交换,并且公钥是公开的,因此密钥的持有量得到了减少,密钥保存量少,密钥分配简单,便于密钥的分发与管理。常用的公开密钥加密算法有RSA算法、DH算法等。
当前应用最为广泛的公钥系统RSA(Rivest、Shamir、Adleman三人名字的缩写)是基于大数因子分解的复杂性来构造的,它是公钥系统最典型的加密算法,大多数使用公钥加密技术进行加密和数字签名的实际应用都是使用的RSA算法。RSA算法如下:
(1)用户选择两个足够大的保密素数p、q。
(2)计算n=pq,n的欧拉函数为F(n)=(p-1)(q-1)。
(3)选择一个相对比较大的整数e作为加密指数,使e与F(n)互素。
(4)解方程:ed=1modF(n),求出解密指数d。
(5)设M、C分别为要加密的明文和已被加密的密文;加密运算为C=M e mod n,解密运算为M=C d mod n。
每个用户都有一个密钥(e,d,n),(e,n)是可以公开的密钥PK,(d,n)是用户保密的密钥PR,e是加密指数,d是解密指数。RSA算法的两个密钥中的任何一个都可用来加密,另一个用来解密。
RSA算法的安全性基于数论中大数分解为质因子的困难性,从一个公开密钥加密的密文和公钥中推导出明文的难度,等价于分解两个大素数的乘积。可见分解越困难,算法的安全性就越高。
DH(Diffie-Hellman)算法是最早的公钥算法,实质上是一个通信双方进行密钥协定的协议,它的用途仅限于密钥交换。DH算法的安全性依赖于计算离散对数的难度,离散对数的研究现状表明所使用的DH密钥至少需要1024位才能保证算法的安全性。