私钥设为4?CA机构低级错误致TLS体系裸奔

eMudra CA将私钥设为4等极小数值,导致证书可被暴力破解并伪造。
eMudra证书颁发机构将椭圆曲线私钥设置为4、56、115等极小数值,使384位密钥强度形同虚设。Computerphile通过Python脚本暴力枚举私钥并比对公钥,在一分钟内破解出私钥115,并成功伪造了包含BBC公钥的证书。事件暴露了CA密钥生成流程的严重漏洞,可能源于自行编写工具绕过了HSM和OpenSSL的安全限制。尽管问题证书已被撤销,但该案例警示密钥生成必须使用密码学安全的随机源,且私钥生命周期应在受控硬件内完成。
一个数字引发的信任崩塌
上周三,安全圈被一则消息炸开了锅:一家名为eMudra的证书颁发机构(CA)竟然将私钥设置成了数字“4”。这不是什么比喻,而是字面意义上的“4”——一个在密码学中本应拥有384位(约120位十进制数字)强度的椭圆曲线私钥,被简化成了个位数。Computerphile的这期视频详细拆解了这场闹剧的来龙去脉,并亲手演示了如何利用这个低级错误伪造证书。

要理解问题的严重性,得先回顾公钥基础设施(PKI)的信任链条。当你访问银行或BBC时,浏览器地址栏的小锁图标背后是一套TLS连接。服务器会出示证书,里面包含域名和公钥,而证书由中间CA签名,中间CA又由根CA签名。你的操作系统或浏览器内置了根CA的公钥,因此整个链条得以验证。私钥的唯一职责就是生成签名,一旦泄露,攻击者就能以该CA的名义签发任意证书——包括伪造BBC的公钥,从而实施中间人攻击。
从“4”到“115”:暴力破解实录
按照eMudra的新闻稿,出问题的私钥不止“4”,还包括56、151、66、155、156、230和237。这些数字的共同点是:小得离谱。如果随机选取一个120位的数字,它几乎不可能只有一两位。正如视频中所说:“如果你说你是随机选的4,没人会信。”
为了验证这些证书是否真的可以被破解,主持人下载了公开的坏证书,开始用OpenSSL和Python脚本进行暴力搜索。核心思路是:对于给定的椭圆曲线算法(secp384r1),每个私钥唯一对应一个公钥。因此,只要从1开始递增生成私钥,计算公钥,并与证书中的公钥比对,就能在有限次数内找到正确的私钥。
实际操作中第一个障碍是OpenSSL默认不允许用户指定私钥——它只接受随机生成的私钥。主持人通过修改PEM文件中的Base64编码,手动构造了私钥为小数值的密钥文件。随后用一个“丑陋的Python脚本”循环调用OpenSSL生成公钥并比对。脚本效率很低,每次操作约需一秒,但即便如此,也在短时间内找到了私钥“115”(视频中演示的证书私钥,实际对应某个坏证书)。

椭圆曲线密钥与secp384r1
椭圆曲线密码学(ECC)中,私钥是一个随机选取的整数,公钥则是该整数与椭圆曲线上一个固定基点相乘的结果。secp384r1是NIST标准化的椭圆曲线,其私钥空间大小为2^384,约等于1.15×10^115。由于从公钥反推私钥需要求解椭圆曲线离散对数问题(ECDLP),在经典计算机上目前没有可行算法,因此私钥的随机性至关重要。如果私钥被限制在极小的集合内(例如个位数或三位数),攻击者只需遍历整个小空间即可快速找到对应私钥。视频中演示的暴力搜索正是利用了这一点:从1开始递增生成私钥,计算公钥并与证书中的公钥比对,直到匹配为止。由于空间极小,即使使用效率低下的脚本也能迅速破解。
证书伪造与修复现状
拿到私钥“115”后,主持人演示了完整的攻击链:用该私钥为一个包含“BBC公钥”的证书签名,然后让旧版系统验证。结果验证通过——因为签名确实使用了正确的私钥。这意味着在漏洞修复前,攻击者可以伪造任意网站的证书。

当然,如今主流浏览器和操作系统已经撤销了这些有问题的中间证书,验证会失败。但这件事暴露的问题远不止技术失误:CA机构本应使用硬件安全模块(HSM)生成密钥,而HSM的设计初衷就是防止私钥以任何形式被导出或指定。eMudra声称使用了专用硬件,那他们究竟是如何把私钥设成4的?视频主持人推测,他们可能自行编写了密码学工具,绕过了标准流程。
硬件安全模块(HSM)的作用
硬件安全模块是一种专用密码设备,用于安全地生成、存储和管理密钥。其核心设计原则是私钥永不以明文形式离开HSM,所有签名操作均在模块内部完成,外部只能调用接口而无法导出私钥。HSM还会内置高质量的随机数生成器,确保密钥的随机性。在CA的密钥生成流程中,使用HSM是行业最佳实践,也是审计要求的一部分。eMudra声称使用了专用硬件,但私钥却被设置为4等小数值,这暗示其可能未正确配置HSM,或者自行编写了绕过HSM的软件工具,直接指定了私钥。这一漏洞凸显了流程合规与审计的重要性。
为什么随机性如此致命
384位的私钥空间大约是2的384次方,即使以每秒十亿次的速度尝试,也需要远超宇宙年龄的时间。但一旦私钥选自一个小集合(比如个位数或三位数),暴力破解就变得轻而易举。视频中强调,即便用效率低下的脚本,破解也只花了“一杯咖啡的时间”。如果使用优化过的工具,速度还能提升数千倍。
这个案例给所有依赖PKI的系统敲响了警钟:密钥生成必须使用密码学安全的随机源,且私钥的整个生命周期都应在受控硬件内完成。任何允许“手动指定私钥”的流程都是危险的倒退。对于开发者而言,OpenSSL默认拒绝用户提供私钥的行为看似不便,实则是最后一道防线。
密码学安全的随机源
密码学安全伪随机数生成器(CSPRNG)是生成密钥的基础。它必须满足两个条件:一是统计随机性,即输出看起来均匀分布;二是不可预测性,即即使知道之前的所有输出,也无法预测下一个输出。常见的CSPRNG包括操作系统提供的/dev/urandom、CryptGenRandom等,它们从硬件熵源(如中断时序、磁盘抖动)收集随机性。非密码学安全的随机源(如标准库的rand())可能被预测或存在偏差,绝不能用于密钥生成。eMudra事件中,私钥被设为4等小数字,表明其随机源可能完全失效或被故意绕过,导致密钥空间坍缩,使暴力破解变得可行。
信任链的脆弱与韧性
PKI体系依赖少数根CA的诚信。一旦某个CA出错,整个链条上的所有依赖方都会受影响。好消息是,现代浏览器和操作系统具备证书撤销机制(如CRL、OCSP),能够较快地隔离问题。但这次事件也提醒我们:安全不是一个产品,而是一个过程。CA的审计、密钥生成的规范、以及公开的漏洞披露,缺一不可。
对于普通用户,保持系统和浏览器更新仍然是最有效的防护。对于安全从业者,这个案例则是极佳的反面教材——它生动地展示了哪怕一个数字的疏忽,也足以让精心构建的信任大厦摇摇欲坠。
相关推荐

WebMCP安全指南:三个注解让AI代理更安全
Chrome团队演示WebMCP工具的三种安全注解:readOnlyHint消除无效确认弹窗,consequentialHint强制高危操作人工确认,untrustedContentHint抵御间接提示注入,一两行代码即可提升AI代理安全性。

湍流为何是流体力学最难问题?AI或成破局关键
湍流为何是流体力学最难问题?本文基于Lex Fridman播客对话,解析湍流的多尺度本质、经典物理热力学的对比,以及AI通过发现坐标变换来简化湍流描述的可能性,探讨涡旋形成与数学物理的交汇。

R.L. Stine谷歌访谈:恐怖大师如何点燃儿童阅读热情
R.L. Stine在谷歌访谈中分享从喜剧转向恐怖的偶然经历、儿童恐怖创作原则、手机对叙事的冲击,以及如何用Goosebumps激发儿童阅读动机。