CRYSTALS-Kyber 后量子密钥封装机制
字数 2014 2025-11-04 08:32:42
CRYSTALS-Kyber 后量子密钥封装机制
题目描述
CRYSTALS-Kyber 是一种基于格的后量子密码学算法,专为密钥封装(Key Encapsulation Mechanism, KEM)设计。其安全性依赖于模块化格上带错误学习问题(Module-LWE)的困难性。题目要求理解 Kyber 的密钥生成、封装和解封装过程,并分析其如何通过多项式环上的向量运算实现安全性与效率的平衡。
解题过程
1. 背景知识:Module-LWE 问题
- 核心思想:在多项式环 \(R_q = \mathbb{Z}_q[X]/(X^n + 1)\) 上(例如 \(n=256, q=3329\)),攻击者需要从一组形如 \((A, A s + e)\) 的方程中恢复秘密向量 \(s\)(其中 \(A\) 为随机矩阵,\(s, e\) 为小随机向量)。
- Kyber 的优化:使用模块格(Module-LWE)而非标准 LWE,通过调整维度参数平衡安全性与计算效率。
2. Kyber 的参数设置
以 Kyber-512(NIST 安全级别 1)为例:
- 环维度 \(n = 256\),模数 \(q = 3329\);
- 模块维度 \(k = 2\)(即向量长度为 2);
- 错误分布:中心二项分布 \(B_\eta\)(例如 \(\eta=2\))。
3. 密钥生成(KeyGen)
步骤分解:
- 生成随机矩阵 \(A\):
- 通过扩展函数(如 SHAKE-128)从种子 \(\rho\) 确定性地生成 \(A \in R_q^{k \times k}\),避免存储大矩阵。
- 生成秘密向量 \(s\) 和错误向量 \(e\):
- \(s, e \leftarrow B_\eta^k\)(每个分量从二项分布采样)。
- 计算公钥 \(t\):
- \(t = A s + e \in R_q^k\)。
- 输出:
- 公钥 \(pk = (t, \rho)\);
- 私钥 \(sk = s\),并保存 \(pk\) 的哈希值用于封装时验证。
关键点:公钥中的 \(t\) 看似随机,但隐藏了 \(s\) 和 \(e\) 的结构。
4. 封装(Encapsulate)
目标:生成共享密钥 \(K\) 和其密文 \(c\)。
步骤:
- 生成随机向量 \(r\) 和错误项 \(e_1, e_2\):
- \(r, e_1 \leftarrow B_\eta^k\),\(e_2 \leftarrow B_\eta\)。
- 计算密文组件:
- \(u = A^T r + e_1 \in R_q^k\)(转置确保维度匹配);
- \(v = t^T r + e_2 + \lfloor q/2 \rfloor \cdot m \in R_q\),其中 \(m\) 为 1 比特编码的明文(0 或 1)。
- 压缩密文:
- 对 \(u, v\) 进行无损压缩(如四舍五入到较低精度),减少密文大小。
- 派生密钥 \(K\):
- 使用 \((c, \text{哈希}(pk))\) 通过哈希函数(SHAKE-256)生成密钥 \(K\)。
安全性:攻击者仅知 \((u, v)\),而恢复 \(m\) 需要解决 Module-LWE 问题。
5. 解封装(Decapsulate)
目标:从密文 \(c\) 恢复共享密钥 \(K\)。
步骤:
- 解压缩 \(u, v\):恢复近似值 \(u', v'\)。
- 计算近似明文 \(m'\):
- \(w = v' - s^T u' \in R_q\)。
- 比较 \(w\) 与 \(\lfloor q/2 \rfloor\):若距离更近则解码为 1,否则为 0。
- 重新派生密钥 \(K\):
- 使用相同的哈希函数处理 \((c, \text{哈希}(pk))\) 得到 \(K\)。
- 关键验证:解密者需验证密文是否由合法公钥生成,防止攻击者注入恶意密文。
错误容忍性:由于压缩引入误差,但 \(\lfloor q/2 \rfloor\) 的缩放确保解码容错。
6. 安全性分析
- IND-CCA2 安全:通过 Fujisaki-Okamoto 变换将 Module-LWE 的 CPA 安全提升至 CCA2 安全。
- 侧信道防护:采用常数时间实现,避免通过运行时间泄露秘密信息。
总结
Kyber 通过多项式环上的向量运算和错误容忍设计,实现了高效且抗量子攻击的密钥封装。其核心在于 Module-LWE 的困难性,以及通过压缩和哈希函数优化实际性能。