我把90年代CA的RSA密钥因式分解了——那时的Web安全简直无法无天
密码学圈每隔几年就会悄悄"淘汰"一个密钥长度
90年代的128位加密现在看起来已经危险得不行,而当年那些"大得不得了"的RSA密钥,现在用普通电脑几个小时就能分解出来。
这不,最近有个安全研究员发了篇报告,说他把一些古老的512位RSA密钥给分解了。这些密钥来自一家叫E-Certify的加拿大CA——就是浏览器用来验证网站身份的那些"信任锚"。这些证书是1999年3月发布的Netscape 4.51自带的,一直被当作可信根证书用到2003年。密码学界那年才终于承认:512位从来就不够用。
512位RSA:从一开始就是个坑
RSA-512,名字就告诉你了,用的是512位模数——就是两个大质数的乘积。90年代的时候,分解这个数理论上可行,实际上挺难。但数学没变啊,变的是我们的算力。现在一块AMD Ryzen 9处理器,用开源工具CADO-NFS,大概30个小时就能分解一个512位RSA密钥。搁1999年,想破这个得动用超级计算机,或者搞个大规模分布式计算。
有意思的是,就算回到1999年,这也已经很悬了。RSA-155(就是那个155个十进制位的512位数)在1999年8月被分解了——离E-Certify发证书才几个月。这位研究员说了,这些密钥压根儿就不应该被签发。
Web PKI的草莽时代
Web PKI——就是支撑HTTPS的那套证书颁发体系——当年建立的时候,大家对"信任"的理解跟现在完全不一样。90年代的时候,浏览器厂商往产品里塞了几十个根证书,来自世界各地的各种机构,密钥大小、操作规范什么的都没什么标准。
Netscape算是web商务的开创者,1994年就搞出了SSL,态度特别开放。IE就保守多了——IE从来没带过512位RSA根证书。但Netscape这一放开,就留下了历史遗留问题:那些512位CA证书,在任何运行旧版Netscape、时钟还设错了的系统上,一直被当作可信的。
对现在的安全有啥启发
重要的不是"别用512位RSA"——这谁都知道了。更重要的是:安全标准是活的,会变的。现在最佳实践要求用2048位RSA,但将来这个长度也会被认为不够用。NIST的后量子密码学标准化项目已经在推进了,因为研究者们预计量子计算机迟早能破解RSA。
对现在的开发者和企业来说,这段历史教训告诉我们几件事:
- 提前规划算法迁移:你的基础设施迟早要跟着密码学标准更新。别把具体算法写死在代码里。
- 关注废弃时间表:CA和浏览器会定期公布旧密钥长度和哈希算法的"退役"日期。
- 自动化证书续期:手动操作容易忘,最后证书过期了、配置过时了都不知道。
- 用证书透明度:现代CA必须公开记录证书,这让坏人更难搞到伪造证书。
有点意思的部分
除了安全启示,破解一个早已倒闭的CA的密钥还是挺酷的。这位研究员直接把E-Certify的私钥公开了,甚至搭了个测试用的HTTPS服务器,Netscape Navigator 4.51还能正常连接。就像个时间胶囊,证明这些老证书还能认证连接——至少对那些软件版本比现在很多开发者还老的浏览器来说是这样。
如果你想自己玩一玩老证书档案,研究员也发布了工具和教程,教你怎么提取和分析历史根证书。说不定能挖到其他被遗忘的CA,里面也有同样脆弱的密钥。这提醒我们:互联网的历史会留下痕迹,而且不是所有痕迹都是安全的。
下次给你的应用配置TLS的时候,花点时间想想我们走了多远——还有,你的主机平台大概已经在自动处理证书续期、密钥长度、加密套件选择了。512位CA的"蛮荒时代"已经过去了,但密码学卫生的教训永远不过时。