后量子加密算法 Kyber 实现中的漏洞

Kyber 加密算法赢得了量子计算机上的抗暴力破解密码算法竞赛,在该算法的实现过程中,发现了一个漏洞,允许侧通道攻击根据测量解密过程中的操作时间来重新创建密钥。攻击者提供的密文。该问题影响 CRYSTALS-Kyber KEM 密钥封装机制的参考实现和许多支持 Kyber 的第三方加密库,包括 Signal Messenger 中使用的 pqcrypto 库。

该漏洞的代码名称为KyberSlash,其本质是在解码消息的过程中使用除法运算“t = (((t < 1) + KYBER_Q/2)/KYBER_Q) & 1;” ,其中被除数包含类型为“double”的秘密值“t”,除数是众所周知的公开值KYBER_Q。问题是除法运算的时间不是恒定的,并且在不同的环境中执行除法的CPU周期数取决于输入数据。因此,根据运算次数的变化,我们可以了解除法中使用的数据的性质。

密码学领域的知名专家丹尼尔·J·伯恩斯坦 (Daniel J. Bernstein) 准备了一个可行的演示,证明该攻击可以在实践中进行。在进行的三个实验中的两个中,当在 Raspberry Pi 2 板上运行代码时,可以根据测量数据解码时间完全重新创建 Kyber-512 私钥。该方法还可以适用于 Kyber-768 和 Kyber-1024 密钥。为了成功地进行攻击,需要使用相同的密钥对来处理攻击者指定的密文,并且能够准确地测量操作的执行时间。

在某些库中已发现另一个泄漏 (KyberSlash2),这也是由于在执行除法时使用秘密值而发生的。与第一个选项的区别在于加密阶段的调用(在 poly_compress 和 polyvec_compress 函数中),而不是解密期间的调用。然而,仅当该过程用于密文输出被视为机密的重新加密操作时,第二个选项才可能对攻击有用。

该漏洞已在库中修复:

  • zig/lib/std/crypto/kyber_d00.zig(22 月 XNUMX 日),
  • pq-crystals/kyber/ref(30 月 XNUMX 日),
  • symbolicsoft/kyber-k2so(19 月 XNUMX 日),
  • cloudflare/circl(8 月 XNUMX 日),
  • aws/aws-lc/crypto/kyber(4 月 XNUMX 日),
  • liboqs/src/kem/kyber(8 月 XNUMX 日)。

最初不受该漏洞影响的库:

  • Boringssl/加密货币/kyber,
  • filippo.io/mlkem768,
  • formosa-crypto/libjade/tree/main/src/crypto_kem,
  • 凯伯/通用/amd64/avx2,
  • formosa-crypto/libjade/tree/main/src/crypto_kem/kyber/common/amd64/ref,
  • pq-晶体/kyber/avx2,
  • pqclean/crypto_kem/kyber*/avx2.

该漏洞在库中仍未修补:

  • antontutoveanu/crystals-kyber-javascript,
  • 阿盖尔软件/kyber,
  • debian/src/liboqs/unstable/src/kem/kyber,
  • 库德尔斯基安全/crystals-go,
  • mupq/pqm4/crypto_kem/kyber*(20月1日仅修复了XNUMX个版本的漏洞),
  • PQClean/PQClean/crypto_kem/kyber*/aarch64,
  • PQClean/PQClean/crypto_kem/kyber*/clean,
  • randombit/botan(20月1日仅修复XNUMX个漏洞),
  • rustpq/pqcrypto/pqcrypto-kyber(5 月 XNUMX 日在 libsignal 中添加了修复程序,但 pqcrypto-kyber 本身尚未修复该漏洞)。

来源: opennet.ru

添加评论