CVE-2026-22698RustCrypto: Elliptic Curves是一个通用的椭圆曲线密码学(ECC)支持库,提供了用于表示各种椭圆曲线形式、标量、点和公私钥的类型和特性。该库的SM2公钥加密(PKE)实现中存在一个严重的安全漏洞。在0.14.0-pre.0和0.14.0-rc.0版本中,临时随机数k的生成存在严重的熵不足问题。由于单位不匹配错误,nonce生成函数仅请求32位的随机性,而非预期的256位。这将加密的安全性从128位级别降低到微不足道的16位级别,使得攻击者可以在仅获得公钥和密文的情况下,通过实际可行的攻击恢复随机数k,从而解密任何密文。该漏洞影响使用该库进行SM2加密的所有应用场景,包括但不限于数字签名、密钥交换和数据加密。攻击者无需任何特殊权限或用户交互,即可远程利用此漏洞。
漏洞根源在于SM2公钥加密实现中的单位转换错误。在生成 ephemeral nonce k时,代码错误地将256位(32字节)的随机数请求误写为32位。具体表现为:在调用随机数生成器时,单位参数使用了错误的值,导致实际只获取了4字节(32位)的随机数据,而代码逻辑认为这是256位的随机数。由于SM2算法的安全性依赖于nonce的不可预测性,这种严重的熵减少使得攻击者可以通过穷举搜索(2^16次尝试)来恢复k值。一旦k被恢复,攻击者即可利用SM2算法的数学性质,通过已知的公钥和密文计算出明文。攻击过程涉及:首先获取目标公钥和密文,然后穷举恢复k值(约65536次尝试),最后使用恢复的k计算共享秘密并解密。该漏洞影响所有使用受影响版本进行SM2加密的操作。