我成功分解了 90 年代 CA 的 RSA 密钥
I've factored the RSA keys of a Certificate Authority from the 90s

最近我在思考 RSA 加密的安全性,特别是那些早期的弱密钥。Web PKI 早在十多年前就弃用了 1024 位 RSA,但 90 年代初期由于缺乏标准,许多浏览器仍内置了极短的密钥。我从 archive.org 下载了旧版 Internet Explorer 和 Netscape 的归档,利用 Claude Code 提取了所有根证书。意外发现 Netscape 4.51 在 1999 年曾内置了加拿大证书机构 E-Certify 的 512 位 RSA 根证书。我在自己的 Ryzen 9 5950X 台式机上运行 CADO-NFS,仅用 32 小时就成功分解了该密钥并重构了私钥。现在,你可以利用这些私钥在配置了旧时钟的 Netscape 4.51 环境中签发证书,甚至搭建一个仅能被旧浏览器识别的网站。
RSA 的加密依赖于分解大半素数的难度,但究竟多大的数才算“大”,这是一个有趣的问题。
HN 评论区
59- 63
有点遗憾的是,很多有趣的部分都留给了 AI。我本希望能看到一些关于为何需要自定义 TLS 实现的评论。算了。
更新:在链接仓库中那个( surprisingly short)Go 文件的顶部评论里找到了这个解释:
目标客户端是 Netscape Communicator 4.51(包括 40 位出口版和 128 位美国版),其时钟设定为 2000 年。
Go 的 crypto/tls 帮不上忙:它在 Go 1.14 中移除了 SSLv3,从未接受过 Netscape 4 发送的兼容 SSLv2 的 ClientHello,也从未支持过 RC4-MD5 或 40 位出口套件。因此,这个文件在标准库原语(RSA PKCS#1 v1.5、RC4、DES、3DES、MD5、SHA-1)之上实现了自己的一套微型 SSLv3 服务端逻辑。服务器密钥是 512 位 RSA,这样出口客户端就可以直接将预主密钥加密给它,而无需 ServerKeyExchange。
- goalieca
基本上是在消费级 GPU 上花了 2 天就破解了一个 512 位的证书。关键在于,当时的许多流量并没有使用临时密钥。事实上,大部分流量甚至根本没有加密!但大约十年后,加密一切就成了常态。我不禁好奇,全球有哪些政府正等着通过记录和保存匿名政治言论,以便日后解密时再行破解。
- teiferer
> 我没有什么好理由去做这件事,但这看起来很有趣。
做一件事还有什么比“有趣”更好的理由吗?
- pvillano
那份 SSL 报告里有四个自动生成的 'F',真是个绝妙的点睛之笔。
- mitxela
> 虽然我没有验证这个 LLM 的输出是否完全可信,但看起来相当合理。
你必须去验证,因为生成看似合理的输出正是 LLM 的拿手好戏。否则,只有你实际测试过的那个才应该被认为是正确的。