跳到主要内容
ecdsa.com

无效曲线攻击

一种攻击:对端发送不在约定曲线上的点,跳过点校验的实现就会在一条更弱的曲线上计算,从而一点一点地泄露自己的私钥。
其他写法invalid curve attacktwist attackpoint validationCurveBall

Weierstrass 加法公式不使用系数 b,因此从不检查曲线方程的代码会照样为另一条带有小子群的曲线上的点 P 计算 d·P。每次响应(ECDH 共享密钥、加密消息、MAC)都会泄露 d 对某个小素数取模的值,借助中国剩余定理,把足够多的这类值组合起来就能得到完整的密钥。Biehl、Meyer 和 Müller 于2000年描述了这种攻击;Jager、Schwenk 和 Somorovsky 于2015年针对 TLS-ECDH 实现演示了它;2017年,又发现多个 JOSE 库在 ECDH-ES 中接受无效点。

修复成本很低:检查该点位于曲线上、不是无穷远点,并且在余因子大于 1 时位于正确的子群中(SEC 1 §3.2.2,SP 800-56A §5.6.2.3)。大多数现代库在导入时就会校验。X25519 和 X448 的设计使 Montgomery 阶梯在扭曲线上也保持安全,只需再检查输出是否全为零。

与之相关的一种错误是信任调用方提供的曲线参数:Windows CryptoAPI 的 CVE-2020-0601(“CurveBall”)会接受用显式参数把生成元替换为攻击者选定的点的证书,使伪造的证书得以冒充受信任的根证书。按照 RFC 5480 的要求只使用命名曲线,就能堵住这条路。

标准与参考资料

全部术语