1999 年随 Netscape 4.51 发布的一款根证书,在 2026 年 9 月被一台台式机分解出了私钥。加拿大 CA 公司 E-Certify 当年签发的两枚 512 位 RSA 根密钥(E-Certify RSA 512 Gold Server 与 Gold Client),被工程师 Matthew McPherrin 用 CADO-NFS 在 Ryzen 9 5950X 上分别跑了 32 小时和 29 小时完成分解。他随后用复原出的私钥给一个测试域名签发证书,让 1999 年的 Netscape 4.51 浏览器原样信任了这个站点。整件事的完整工具链、证书和私钥都开源在 GitHub 仓库 mcpherrinm/ancientroots 中。
这项实验出现在一个微妙的时间点:九天之前的 9 月 3 日,工程师 Eric Lu 宣布分解了 862 位的 RSA-260,把「被分解过的最大 RSA 挑战数」的纪录从 829 位(RSA-250,2020 年)推高了 33 位。一边是 862 位纪录在超级计算量级上再次失守,一边是 512 位古董密钥在单台桌面机上一天内陷落。两条新闻放在一起看,RSA 这套 1991 年定下的安全标尺,此刻正从两端同时被压缩。

从浏览器安装包里找靶子
这项实验的起点是一个考古问题:Web PKI 早期没有最低密钥长度标准,Netscape 在 1994 年给浏览器加入 SSL 支持,当时正值密码出口管制年代,浏览器里到底塞过多少弱密钥根证书?
McPherrin 的办法是把 archive.org 上存档的 Internet Explorer 和 Netscape 安装包全部翻出来,提取里面带的根证书。他整理出一个包含 230 个去重根证书的网页数据库(ancientroots 项目站点),支持按浏览器版本、密钥长度、是否信任 SSL 过滤。过滤结果显示:Internet Explorer 从未随包分发过 512 位 SSL 根证书,而 Netscape 4.51(1999 年 3 月发布)带了两枚 512 位 RSA 根,都来自 E-Certify,一枚信任 SSL,一枚用于 S/MIME 邮件签名。

这两枚证书的有效期到 2003 年 10 月 16 日,Netscape 在 2002 年就把它们移除了。换句话说,这批密钥的可攻击窗口早在二十多年前就已关闭。选择它们做实验,安全影响约等于零,但作为分解难度的样本再合适不过:512 位正好是 RSA-155 挑战数的位长,而 RSA-155 恰好在 1999 年(与 E-Certify 证书同一年)被国际团队用 35.7 CPU 年的算力分解。E-Certify 把当年超级计算机跑 nine 周的难题,装进了随浏览器分发的根证书里。
32 小时分解一台「CA」
分解 RSA 公钥意味着把模数 N 拆回两个素数 p 和 q,拿到 p 和 q 就能重建私钥。McPherrin 用的工具是 CADO-NFS,法国 INRIA 主导开发的开源广义数域筛(GNFS)实现,也是 2019 年 RSA-240、2020 年 RSA-250 两次纪录分解所用的同一套软件。
在他的 Ryzen 9 5950X 台式机上,Gold Server 密钥跑了 32 小时,Gold Client 密钥跑了 29 小时。作为对比:1999 年分解同位长的 RSA-155 动用了约 160 台工作站和 PC 筛选四周、Cray C916 超级计算机算 224 小时线性代数;2026 年一台桌面 CPU 一天半搞定。软硬两条曲线叠加,把 27 年前的「全球性计算工程」压缩成了周末挂机任务。
分解完成后,用 OpenSSL 对文中公布的证书与私钥做了配对验证:Gold Server 证书的公钥模数与私钥模数完全一致,长度 512 位,有效期 1998-10-16 至 2003-10-16。也就是说,文中附带的私钥确实就是那枚随 Netscape 4.51 分发的根证书对应的私钥,任何人下载后都能签出被这版浏览器信任的证书。

让 1999 年的浏览器信任 2026 年的网站
拿到私钥后,McPherrin 又做了一层验证:他写了一个 Go 语言的「复古 TLS 服务器」部署在 e-certify.fly.dev,然后在真实的 Netscape 4.51 虚拟机里加载该站点。这里有个技术夹层:Netscape 4.51 支持的是 SSL 3.0 和 512 位出口级套件,与现代 TLS 协议栈零交集,所以普通 Web 服务器根本无法与它握手,这个自定义服务端专门为旧协议而写。
Netscape 的证书查看器里,e-certify.fly.dev 的证书签发者正确显示为 E-Certify RSA 512 Gold Server,有效期从签发日至 2003 年 10 月 16 日(浏览器时钟被拨回 2000 年)。SSL Labs 对这个站点的扫描给出了 F 评分,理由包括仅支持 SSL 3、512 位密钥过小、可能受 FREAK 攻击影响。这些在现代语境里的「严重漏洞」,恰恰是这次实验的完整性证明:整条 1999 年的信任链被原样复现了。
同一周的另一头:RSA-260 与 7000 CPU 年
这次实验的新闻热度,很大程度借了 RSA-260 分解的东风。RSA-260 是 1991 年 RSA 实验室挑战数列中的一员,260 位十进制数、862 位二进制。9 月 3 日,Cognition 工程师 Eric Lu 在 X 上贴出一个 130 位的整数,配文只有「divides RSA-260」。社区验证很快完成:这个数确实整除 RSA-260,商同样是 130 位,两个因子都通过了素性检验。
Lu 没有披露算法、软件、硬件和耗时。社区按 GNFS 复杂度公式从 RSA-250 的 2700 CPU 年外推,估计这次分解消耗了约 7000 CPU 年量级的算力,以 10000 核并行折算也需要数月。第三方分析(如 lilting.ch 的复核文章)确认了因子有效性,并指出流传的「徒手试了七个月素数」说法源自其同事的玩笑帖,却被聚合账号当成了真事。
把历次纪录放在一张表里,算力曲线的陡峭程度直接可见:
| 挑战数 | 位长 | 分解时间 | 算力消耗 |
|---|---|---|---|
| RSA-155 | 512 位 | 1999 年 8 月 | 约 8000 MIPS 年,超级计算机数月 |
| RSA-768 | 768 位 | 2009 年 12 月 | 约 2000 单核年 |
| RSA-240 | 795 位 | 2019 年 11 月 | 约 900 CPU 年 |
| RSA-250 | 829 位 | 2020 年 2 月 | 约 2700 CPU 年 |
| RSA-260 | 862 位 | 2026 年 9 月 | 未披露(社区估算约 7000 CPU 年) |
这两个现象可以放在同一张表里理解。其一,算法进步比硬件快:RSA-240 比 RSA-768 位长更长,算力消耗却不到一半,RSA-240 团队在论文中把提速归因为算法与参数选择贡献 3 至 4 倍、硬件贡献 1.25 至 1.67 倍。其二,位长每增加一步,代价仍然以数十倍增长:从 829 位到 862 位,外推算力涨了约 2.6 倍。
对今天部署的实际含义
E-Certify 的 512 位根证书早已无人使用,这次分解不构成任何现实威胁。它真正的参考价值在边界线上:Web PKI 在 2013 年前后淘汰了 1024 位 RSA,如今 2048 位是最低标准,而 NIST SP 800-57 已将 RSA-1024 的安全强度评级为 80 位以下,禁止用于新保护场景。
RSA-260 的分解给出了另一条边界数据:862 位模数对应约 74 位对称安全强度,而 2048 位 RSA 对应约 107 位。按 GNFS 复杂度外推,从 862 位到 1024 位算力涨约 200 倍(约 54 万 CPU 年),到 2048 位则涨约 9×10^10 倍。短期内 2048 位 RSA 仍然是安全的,但两件事在收紧它的剩余寿命:GNFS 的算法效率仍在逐年提升(RSA-240 团队的测算显示算法贡献已超过硬件),以及量子计算机对 Shor 算法的工程化推进。NIST 已在 2024 年发布 ML-KEM 等后量子标准,联邦机构被要求在 2030 年前完成迁移规划,2035 年前基本完成部署。
对普通开发者和运维,这次实验对应的检查清单比「RSA 不安全了」的标题更具体:其一,扫描自家证书链和内网服务,确认不存在 1024 位及以下的 RSA 密钥(512 位理论上只应出现在测试环境,顺手确认一遍成本很低);其二,老系统的信任库和代码签名链是重灾区,尤其 2010 年前构建、从未升级过根证书的嵌入式设备和离线镜像;其三,新部署的系统在 RSA 之外评估混合密钥交换方案(如 X25519MLKEM768),把后量子迁移纳入路线图,而不是等浏览器生态强制后才动。
E-Certify 的密钥在 2002 年被 Netscape 移除时,就已经退出了历史。二十四年后的这次分解没有改变任何人的安全状况,它改变的是参照系:当年需要超级计算机数月的计算,现在是一台桌面机的一天半;当年 862 位不可逾越的墙,现在有了清晰的攀登路线图。密码学里「大」的定义,就这样被一代代 CADO-NFS 参数和 CPU 年重新写了一遍。
来源:Matthew McPherrin《I've factored the RSA keys of a Certificate Authority... from the 90s》(mcpherrin.ca);ancientroots 项目仓库(github.com/mcpherrinm/ancientroots);lilting.ch《What is known about how Eric Lu factored the 862-bit RSA-260》;John D. Cook《New RSA number factored》;Wikipedia《RSA numbers》