Diffie-Hellman 加密

DES 认证中使用的公用密钥方案是具有 192 位密钥的 Diffie-Hellman。 Diffie-Hellman 加密方案包含两个常量 :BASE 和模数。

对于 DES 认证协议,它们的值为:

const BASE = 3;
const MODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b"; /* hex */
两个程序员 (A 和 B) 可以通过以下方式向彼此发送加密消息。 首先,程序员 A 和 B 随机独立生成密钥,可以表示为 SK (A) 和 SK (B)。 然后,两个程序员都在公共目录中发布其公用密钥 PK (A) 和 PK (B)。 这些公用密钥是根据密钥计算的,如下所示:

PK(A) = ( BASE ** SK(A) ) mod MODULUS
PK(B) = ( BASE ** SK(B) ) mod MODULUS

** (双星号) 表示法表示指数。 程序员 A 和 B 都可以到达公共密钥,这里表示为 CK (A , B) ,而不透露他们的密钥。

程序员 A 计算:

CK(A, B) = ( PK(B) ** SK(A)) mod MODULUS
而程序员 B 计算:

CK(A, B) = ( PK(A) ** SK(B)) mod MODULUS
这两个可以证明是等价的:

(PK(B) ** SK(A)) mod MODULUS = (PK(A) ** SK(B)) mod MODULUS
如果mod MODULUS省略了参数,模运算可以简化如下的事情:

PK(B) ** SK(A) = PK(A) ** SK(B)
然后,如果在 B 上先前计算的结果替换 PK (B) ,而在 A 上先前计算的结果替换 PK (A) ,那么公式为:

((BASE ** SK(B)) ** SK(A) = (BASE ** SK(A)) ** SK(B)
这个方程可以简化如下:

BASE ** (SK(A) * SK(B)) = BASE ** (SK(A) * SK(B))

这将生成公用密钥 CK (A , B)。 此公用密钥不直接用于加密协议中使用的时间戳记。 相反,它用于加密对话密钥,然后用于加密时间戳记。 这样,常用的钥匙就尽量少用,防止坏了。 中断对话密钥通常会产生不太严重的后果,因为对话相对较短。

对话密钥使用 56 位 DES 密钥进行加密,而公共密钥为 192 位。 为了减少比特数,从公共密钥中选择了 56 个比特,如下所示。 从公共密钥中选择中间 8 个字节,并将奇偶校验添加到每个字节的低阶位,生成具有 8 位奇偶校验的 56 位密钥。