Diffie-Hellman 密钥交换数学
逐步学习 DH 协议和离散对数困难性假设
Diffie-Hellman 密钥交换数学 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
欢迎
本课将逐步追踪 Diffie-Hellman 密钥交换的过程:从公开参数,到 Alice 和 Bob 的私有指数,再到共享密钥。
公开参数
Alice 和 Bob 公开约定:
- p:一个大素数(生产环境中为 2048 位以上)
- g:Z*p 的生成元(通常为 g=2 或 g=5)
Eve 可以看到 p 和 g。知道这些并不会破坏协议。
Alice 的私钥
Alice 生成一个随机秘密值:a(1 < a < p-1)
Alice 计算她的公开值:A = g^a mod p
Alice 将 A 发送给 Bob。Eve 可以看到 A。
Eve 无法从 A 求出 a——这就是离散对数问题。
Bob 的私钥
Bob 生成一个随机秘密值:b(1 < b < p-1)
Bob 计算他的公开值:B = g^b mod p
Bob 将 B 发送给 Alice。Eve 可以看到 B。
Eve 无法从 B 求出 b。
共享密钥计算
Alice:S = B^a mod p = (g^b)^a mod p = g^(ab) mod p
Bob: S = A^b mod p = (g^a)^b mod p = g^(ab) mod p
双方都能计算出相同的 S = g^(ab) mod p,却始终不需要传输它。
小数值示例
p=23,g=5
Alice:a=6,A = 5^6 mod 23 = 8
Bob: b=15,B = 5^15 mod 23 = 19
Alice:S = 19^6 mod 23 = 2
Bob: S = 8^15 mod 23 = 2 ✓
Eve 可以看到:23、5、8、19,但无法轻易求出 2。
离散对数问题
给定 A = g^a mod p,求 a。对于较大的 p(2048 位),已知的最佳算法(数域筛法)需要亚指数但仍极其漫长的时间:对于 2048 位 DH,约需执行 2^100 次运算。
中间人攻击
DH 容易受到 MITM 攻击:Mallory 截获 A 和 B,并替换成她自己的值。她分别与 Alice 和 Bob 建立不同的共享密钥。解决方案是对交换过程进行身份验证(使用证书或预共享身份验证信息)。
安全素数
必须谨慎选择 p。安全素数 p=2q+1(其中 q 为素数)可以确保 DH 群不存在可被小子群攻击利用的小子群。NIST 规定了获批准的 DH 群。
DH 参数大小
NIST 建议:
- 2048 位:新部署的最低要求
- 3072 位:安全性相当于 RSA-3072
- 4096 位:高安全性
永远不要使用预先生成的 Oakley Group 1/2(768/1024 位)——它们已被国家级行为体攻破(Logjam 攻击)。
Logjam 攻击(2015 年)
Logjam 表明,许多 TLS 服务器使用了同一个 1024 位 DH 素数。国家级行为体可以针对这些特定素数预先计算离散对数,从而实现实时解密。解决方案是使用 2048 位以上的唯一素数。
快速检查
在 p=23、g=5、a=4、b=3 的 DH 中,共享密钥是多少?
回顾
DH 密钥交换的数学原理已经清晰。接下来,我们将在椭圆曲线上应用相同的概念,得到 ECDH——相同的安全性,更小的密钥。
常见问题解答
「Diffie-Hellman 密钥交换数学」课时是免费的吗?
是的 — 「Diffie-Hellman 密钥交换数学」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「Diffie-Hellman 密钥交换数学」这节课中我会学到什么?
逐步学习 DH 协议和离散对数困难性假设 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Diffie-Hellman 密钥交换数学」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 密钥分发问题
- Diffie-Hellman 密钥交换数学
- ECDH:用于密钥交换的椭圆曲线
- 前向保密与临时密钥交换