[控场AI]
· 5 分钟阅读· 2,700 字

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

私钥设为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”(视频中演示的证书私钥,实际对应某个坏证书)。

截图:PEM文件内容展示

椭圆曲线密钥与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的审计、密钥生成的规范、以及公开的漏洞披露,缺一不可。

对于普通用户,保持系统和浏览器更新仍然是最有效的防护。对于安全从业者,这个案例则是极佳的反面教材——它生动地展示了哪怕一个数字的疏忽,也足以让精心构建的信任大厦摇摇欲坠。

#私钥安全#TLS证书#证书颁发机构#暴力破解#公钥基础设施#PKI#OpenSSL#椭圆曲线加密
分享:

相关推荐