CRYSTALS-Kyber是量子安全算法Kyber密钥封装机制(key encapsulation mechanism,KEM)的官方实现,也是代数格加密套件(Cryptographic Suite for Algebraic Lattices, CRYSTALS)的一部分,还是NIST选出的抗量子计算机攻击的安全算法之一。
许多项目都使用了Kyber实现,其中就包括Mullvad VPN和Signal APP。2023年,Signal宣布采用CRYSTALS-Kyber KEM进行额外安全防护,攻击者必须破解保护用户通信的密钥才能破解通信内容。
近日,研究人员发现多个Kyber密钥封装机制实现受到KyberSlash安全漏洞的影响,攻击者利用这些漏洞可以恢复出密钥。KyberSlash漏洞属于时序攻击,攻击者在Kyber解封装的过程中执行特定除运算时,可以分析执行时间并推算出秘密信息,以破解解密过程。如果实现 Kyber的服务允许针对同一密钥对的多个操作请求,那么攻击者就可以通过度量时间差异并逐渐计算出密钥。有漏洞的代码存在于KyberSplash1 和 KyberSplash2中。
在针对KyberSlash1的测试中,研究人员在3次尝试中有两次成功恢复了Kyber的密钥。
事件轴和补丁
研究人员在2023年11月底发现了该安全漏洞,并将其报告给了Kyber开发者。但该补丁最初并未被视作安全相关的补丁,直到12月15日研究人员公开了相关信息后,受影响的项目才被告知需要更新其Kyber 实现。
12月30日,KyberSlash2也发布了相关的补丁,截止1月2日,部分受影响的项目补丁修复状态如下:
·pq-crystals/kyber/ref – 完全修复
·symbolicsoft/kyber-k2so – 完全修复
·aws/aws-lc/crypto/kyber, main branch – 完全修复
·zig/lib/std/crypto/kyber_d00.zig – 完全修复
·liboqs/src/kem/kyber – KyberSlash1修复
·aws/aws-lc/crypto/kyber, fips-2022-11-02 branch – KyberSlash1修复
·randombit/botan – KyberSlash1修复
·mupq/pqm4/crypto_kem/kyber – KyberSlash1修复
·antontutoveanu/crystals-kyber-javascript – 未修复
·Argyle-Software/kyber – 未修复
·debian/src/liboqs/unstable/src/kem/kyber – 未修复
·kudelskisecurity/crystals-go – 无补丁
·PQClean/PQClean/crypto_kem/kyber/aarch64 – 未修复
·PQClean/PQClean/crypto_kem/kyber/clean – 未修复
·rustpq/pqcrypto/pqcrypto-kyber (used in Signal) – 未修复
以下库未受到该漏洞的影响:
·boringssl/crypto/kyber
·filippo.io/mlkem768
·formosa-crypto/libjade/tree/main/src/crypto_kem/kyber/common/amd64/avx2
·formosa-crypto/libjade/tree/main/src/crypto_kem/kyber/common/amd64/ref
·pq-crystals/kyber/avx2
·pqclean/crypto_kem/kyber/avx2
该漏洞被利用的最坏情况是密钥泄露,但并不是所有使用Kyber的项目都会泄露密钥,具体要根据使用的场景和安全防护措施来确定,比如Mullvad称KyberSlash并不影响其VPN产品,因为其对每个通道连接使用了唯一的密钥对,使得攻击者不可能针对同一密钥对进行时序攻击。
参考及来源:https://www.bleepingcomputer.com/news/security/kyberslash-attacks-put-quantum-encryption-projects-at-risk/