跳到主要内容

4. 安全考虑事项 (Security Considerations)

[RFC9935] 和 [RFC9629] 的安全考虑事项章节同样适用于本规范.

关于 ML-KEM 特定安全考虑事项的持续讨论, 请参见 [MLKEM-SEC-CONS].

实现 MUST 保护 ML-KEM 私钥, 密钥加密密钥, 内容加密密钥, 消息认证密钥和内容认证加密密钥. 在这些密钥中, 除私钥以外均为临时密钥, 使用后 MUST 擦除. 泄露 ML-KEM 私钥可能导致使用该密钥保护的所有消息被攻破. 泄露密钥加密密钥, 内容加密密钥或内容认证加密密钥可能导致相关加密内容被攻破. 泄露密钥加密密钥, 消息认证密钥或内容认证加密密钥可能允许修改相关认证内容.

与密钥管理相关的其他考虑事项可见 [NIST.SP.800-57pt1r5].

私钥生成依赖随机数, ML-KEM 的封装函数也是如此. 使用不充分的伪随机数生成器 (Pseudorandom Number Generator, PRNG) 生成这些值可能导致安全性很低甚至没有安全性. 对于密钥生成, 会使用随机 32-byte 种子以确定性方式派生密钥(另有 32 bytes 保留为拒绝值). 对于封装, KEM 是通过针对公钥确定性加密随机 32-byte 消息, 从底层 ML-KEM 公钥加密算法派生而来. 如果随机值选择较弱, 攻击者可能会发现, 与其对 ML-KEM 执行更复杂的算法攻击, 不如重现产生密钥或密文的 PRNG 环境, 并在由此得到的小型可能集合中搜索匹配的公钥或密文值. 生成高质量随机数很困难; 更多信息见 [FIPS203] 第 3.3 节.

ML-KEM 封装和解封装只输出共享秘密和密文. 实现 MUST NOT 为任何目的直接使用中间值.

实现 SHOULD NOT 通过计时或其他 "side channels" 泄露有关中间值或计算的信息; 否则, 对手可能能够确定有关密钥数据和/或接收者私钥的信息. 虽然并非所有中间信息都可能对对手有用, 但除非分析明确表明该信息对对手无用, 否则最好尽可能隐藏更多信息.

通常, 良好的密码实践只在一个方案中使用给定的 ML-KEM 密钥对. 这种做法避免了一个方案中的漏洞可能危及另一个方案安全性的风险, 并且对于保持可证明安全性可能是必要的.

各方可以通过正式的实现验证来确信实现是正确的, 例如 NIST Cryptographic Module Validation Program (CMVP) [CMVP].