Skip to content

5.5.7 公共密钥方法

虽然约定加密方法可以有效地用现代计算机实施, 并且对于双向通信仅需要单个密钥, 但仍然有几点值得注意:

(1)加密的安全性仅靠保持下一个密钥的秘密性.

(2) 在进行任何通信前, 密钥必须用足够安全的信道交换; 非人工通信是违规的.

(3) 此外, 绝不可能对第三方证实特定的消息已被特定发件人发送.

5.5.7.1 迪菲-赫尔曼密钥交换

用公开密钥加密的概念是迪菲 (Diffie) 和赫尔曼 (Hellman) 于 1976 年提出的. 每个参与者拥有两个密钥: 公布在一般容易接受的寄存器中的公共密钥, 以及只有参与者知道并且绝对保持机密的私人密钥. 具有这些性质的方法称为不对称密码 (参见第 517 页 5.5.2).

i 个参与者的公开密钥 KPi 控制加密步骤 Ei ,他的私人密钥 KSi 控制解密步骤 Di . 下列条件必须满足:

(1) DiEi 组成恒等映射.

(2) EiDi 的有效实施方法是知道的.

(3) 私人密钥 KSi 不能由公开密钥 KPi 在可预见到的未来时日推出.

(4) EiDi 也产生恒等映射.

那么加密算法能够作为使用公开密钥的电子签名方法. 电子签名方法可使发信人查出对信息的伪证签名.

如果 A 要向 B 发送加密消息 m ,那么 A 从寄存器中取回 B 的公开密钥 KPB , 应用加密算法 EB ,并计算 EB(m)=c.A 通过公开网络将密文 c 发送给 B,B 将应用他的解密函数 DB 中的私人密钥 KSB 恢复信息的明文: DB(c)=DB(EB(m))=m . 为了预防信息被破坏, A 可以通过下列方式应用借助公开密钥的电子签名方法将他发送给 B 的消息电子签名: A 用他的私人密码加密信息 m:DA(m)=d.Ad 附加他的签名 “A” 并且应用 B 的公开密钥对总体加密: EB(DA(m), “A” )= EB(d, “A” )=e . 于是签名且加密的文件由 A 发送给 B.

参与者 B 应用他的私人密钥将消息解密,并且得到 DB(e)=DB(EB(d,"A"))= ( d ,“A”). 依据这个文件 B 可以证实 A 是发送者,并且现在可以应用 A 的公共密钥解密 d:EA(d)=EA(DA(m))=m .

5.5.7.2 迪菲-赫尔曼单向函数

应用公开密钥的方法的加密算法必须确立具有 “陷门” 的单向函数. 在此所谓陷门是某个必须保持秘密的特殊的附加信息. 一个单射函数 f:XY 称为具有陷门的单向函数, 如果下列条件成立:

(1) 存在 ff1 的有效计算方法;

(2)在不知道保密的附加信息时不能从 f 算出 f1 .

在没有保密的附加信息时不可能产生从 f 得到 f1 的有效方法.

5.5.7.3 RSA 码和 RSA 方法

1. RSA 码

Rivest, Shamir 和 Adleman 发展了一种基于欧拉-费马定理的保密信息的加密方法 (参见第 510 页 5.4.4, 2.). 这个方法称为RSA 算法 (用他们的姓氏的第一个字母命名), 可以使解密所需要的密钥部分公开而不危害消息的机密性. 有鉴于此, 在本书中也使用术语公开密钥码.

为了应用 RSA 算法,接受者 B 选取两个非常大的素数 pq ,算出 m=pq , 并且选取数 r 使与 φ(m)=(p1)(q1) 互素,而且 1<r<φ(m) . B 公布数 mr ,因为它们对于解密是必须的.

为从发送者 A 向接受者 B 传送一个保密信息,首先必须将消息文本转换为数字串,并且将数字串分裂成 N 个相同长度的 (小于 100 个十进数位) 的区组. 现在 A 算出 m 除以 Nr 的余数 R :

(5.276a)NrR(modm).

发送者 A 对于由原文本得到的 N 个区组中的每一个计算出数 R ,并且将它发送给 B. 如果接受者有线性同余式 rs1(modφ(m)) 的解,那么他就能将消息 R 解密. 数 Nm 除以 Rs 的余数:

(5.276b)Rs(Nr)sN1+kφ(m)N(Nφ(m))kN(m).

这里应用了欧拉-费马定理 (参见第 510 页 5.4.4,2.) 以及 Nφ(m)1(m) . 最后, B 将数字串转换成文本.

接受者 B 希望得到从 A 发送来的机密信息,选取素数 p=29q=37 (实际上这对于实用目的太小了),算出 m=2937=1037 (以及 φ(1037)=φ(29)φ(37)= 1008) ,并且取 r=5 (它满足要求 gcd(1008,5)=1 ). B 将值 m=1037r=5 传递给 A.

A 想将机密消息 N=8 发送给 B. A 通过计算 Nr=85578(1073)N 加密为 R=578 ,并且确实将值 R=578 发送给 B. B 解同余式 5s(1008) ,得到解 s=605 ,于是确定 Rs=5786058=N(1073) .

注 RSA 码的安全性与非法窃听者分解 m 所需要的时间有关. 依据当代计算机的速度, RSA 算法的使用者应该选取素数 pq 至少具有 100 个十进制数位,迫使窃密者要花费大约 74 年实施解密. 但对于合法的使用者确定与 φ(pq)= (p1)(q1) 互素的 r ,其付出两相比较是小的.

2. RSA 方法

RSA 方法是最普及的非对称加密方法.

(1) 假设pq 是两个素数,并且 pq102048 ,以及 n=pq.pq 的十进制数位相差应该是一个小的数; 还有, pq 相差不太大. 此外,数 p1q1 应当含相当大的素因子,同时 p1q1 的最大公因子应当相当小. 设 e>1(p1)(q1) 互素,并且令 d 满足 de1(mod(p1)(q1)) . 现在将 ne 作为公共密钥,而将 d 作为私人密钥.

(2) 加密算法

(5.277a)E:{0,1,,n1}{0,1,,n1},E(x):=xe(modn).

(3) 解密算法

(5.277b)D:{0,1,,n1}{0,1,,n1},D(x):=xd(modn).

于是对于信息 mD(E(m))=E(D(m))=m .

n>10200 时这个加密方法中的函数成为一个侯选的具有陷门的单向函数 (参见第 522 页 5.5.7.2). 要求的附加信息是怎样分解 n 的知识. 没有这种知识就不可能解同余式 de1(mod(p1)(q1)) . 只要上面的条件被满足, RSA 方法实用中将被看作是安全的. 与其他方法相比较, 它的缺点是密钥相对较大, 并且 RSA 比 DES 慢 1000 倍.

version 1.24.0