熵枯竭与弱密钥漏洞
学习 Debian OpenSSL RNG 漏洞及其他现实中的随机性故障
熵枯竭与弱密钥漏洞 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。
什么是熵匮乏
当系统缺少足够的不可预测输入来为 CSPRNG 播种时,就会发生熵匮乏。这种情况会出现在刚启动的嵌入式设备、虚拟化服务器或没有用户输入的系统中。此时 RNG 的输出会变得可预测。
Debian OpenSSL 漏洞(CVE-2008-0166)
2006 年,一名 Debian 开发者删除了 Valgrind 标记的一行:MD_Update(&m, buf, j)。这一行原本是熵源。结果是,Debian 上的 OpenSSL 只使用 PID 进行播种(最多 32,768 个值)。2006—2008 年生成的所有密钥都属于一个仅有 32,768 种可能性的集合。
Debian 漏洞的影响
2006—2008 年在 Debian/Ubuntu 系统上生成的 RSA、DSA 和 ECDSA 密钥、SSH 主机密钥、TLS 证书以及 SSL VPN 密钥均已遭到破坏。受影响的系统包括:Debian Etch、Debian Lenny、Ubuntu 7.04—8.04。相关黑名单已经发布,证书也已撤销。
虚拟机 RNG 问题
虚拟机可以在磁盘状态完全相同的情况下被克隆。如果两台虚拟机从相同的 CSPRNG 状态生成密钥,它们就会产生相同的密钥。现在,虚拟机监控程序会通过 VirtIO RNG 或 ACPI 表注入熵,但配置不当的虚拟机在启动时仍然面临这一风险。
嵌入式系统与物联网
物联网设备(路由器、摄像头)经常会在首次启动时生成 SSH/TLS 密钥,此时它们还没有积累足够的熵。研究发现,数百万台设备共享几千个 RSA 密钥对,因为它们都从相同的低熵启动状态进行播种。
针对 RSA 密钥的 GCD 攻击
Lenstra 等人于 2012 年收集了 1,170 万份 TLS 证书,并计算两两 GCD。研究发现,12,720 个 RSA 密钥共享一个素因子——这意味着两个密钥都可以被完全分解。所有公钥中有 0.2% 已被破解。原因是启动时熵不足。
ECDSA 中重复使用一次性数值
ECDSA 要求每个签名使用唯一的随机一次性数值 k。如果重复使用 k(或 k 较弱),就可以立即恢复私钥:d = (s1-s2)^{-1} * (z1-z2) * k / (r1-r2) mod n。Sony 的 PS3 使用了 k=constant,因此所有游戏都可以使用恢复出的密钥进行签名。
Android 比特币钱包漏洞(2013 年)
在某些条件下,Android 4.x 上的 Java SecureRandom 使用系统时间进行播种。多个比特币钱包应用使用相同的 k 一次性数值生成签名,从而泄露了私钥。数百万美元因此被盗。Google 修复了 SecureRandom 的实现。
检测弱密钥
工具包括:ssh-vulnkey(对照 Debian 弱密钥黑名单进行检查)、badkeys(检查 TLS 证书中是否存在已知的弱素数),以及用于批量 RSA 密钥审计的 GCD 批处理算法。证书透明度日志支持大规模群体分析。
缓解措施
首次生成密钥时使用 getrandom(GRND_RANDOM)。等待初始播种完成后,再从 /dev/urandom 读取(检查 /proc/sys/kernel/random/entropy_avail > 128)。使用硬件 RNG(RDRAND)作为补充熵。绝不要在首次启动时不经等待就生成密钥。
种子文件持久化
跨重启持久化 CSPRNG 状态:关机时从 /dev/urandom 保存 32 个字节到种子文件中;启动时读取该文件并将其反馈给 CSPRNG。这可以在冷启动之间保持熵的连续性。Linux 会自动执行此操作,而嵌入式系统通常不会。
快速检查
Debian OpenSSL 熵漏洞的根本原因是什么?
回顾
熵匮乏会导致密钥可预测。真实案例包括:Debian OpenSSL(仅使用 PID 播种)、物联网设备上的 GCD 攻击、PS3 的 ECDSA 一次性数值重复使用,以及 Android 比特币钱包漏洞。始终使用 OS 熵进行播种,并仔细审计嵌入式设备的密钥生成过程。下一节:安全地生成密钥、一次性数值和 IV。
用 AI 导师学习 Cryptology Academy — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 67
- 课程
- 261
常见问题解答
「熵枯竭与弱密钥漏洞」课时是免费的吗?
是的 — 「熵枯竭与弱密钥漏洞」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。
「熵枯竭与弱密钥漏洞」这节课中我会学到什么?
学习 Debian OpenSSL RNG 漏洞及其他现实中的随机性故障 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cryptology Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「熵枯竭与弱密钥漏洞」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cryptology Academy 课中编写并运行代码吗?
能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 真随机性与伪随机性
- 密码学安全的 PRNG
- 熵枯竭与弱密钥漏洞
- 安全生成密钥、随机数和 IV