CRYSTALS-Kyber 后量子密钥封装机制
字数 1757 2025-11-02 11:43:41
CRYSTALS-Kyber 后量子密钥封装机制
我将为您详细讲解CRYSTALS-Kyber算法,这是一个被NIST选为标准的后量子密钥封装机制(KEM)。
题目描述
Kyber是一种基于格上带错误学习问题(Learning With Errors, LWE)和模上带错误学习问题(Module-LWE)的公钥加密方案,可构造密钥封装机制。其安全性依赖于在格中寻找最短向量问题的难度。核心任务是通过公钥加密技术安全地协商共享密钥。
解题过程
1. 数学基础
- 环结构:Kyber在多项式商环 \(R_q = \mathbb{Z}_q[X]/(X^n + 1)\) 上操作,其中典型参数 \(n=256\)(固定),\(q=3329\)(质数)。多项式系数模 \(q\) 运算。
- 向量和矩阵:使用模模块(module)结构,密钥和密文为多项式向量或矩阵。例如,Kyber-768的参数为 \(k=3\),表示使用3维向量。
2. 密钥生成(KeyGen)
- 私钥(sk)生成:采样一个秘密向量 \(\mathbf{s}\),其中每个多项式的系数从中心二项分布(CBD)抽取(小系数,如{-1,0,1})。
- 公钥(pk)生成:
- 均匀采样矩阵 \(\mathbf{A}\)(可被随机种子生成)。
- 采样小错误向量 \(\mathbf{e}\)(类似CBD)。
- 计算 \(\mathbf{t} = \mathbf{A} \mathbf{s} + \mathbf{e}\)。
- 公钥为 \((\mathbf{t}, \text{种子})\),私钥为 \(\mathbf{s}\)(并存储种子和部分公开参数)。
3. 加密(Encapsulate)
- 输入公钥 \(pk\),输出密文 \(c\) 和共享密钥 \(K\)。
- 步骤:
- 编码消息:将随机消息 \(m\) 编码为环上的多项式(使用压缩技术)。
- 采样随机向量 \(\mathbf{r}\) 和错误 \(\mathbf{e}_1, \mathbf{e}_2\)(均从小分布)。
- 计算密文两部分:
- \(\mathbf{u} = \mathbf{A}^T \mathbf{r} + \mathbf{e}_1\)(转置操作依赖具体表示)。
- \(v = \mathbf{t}^T \mathbf{r} + \mathbf{e}_2 + \lfloor q/2 \rfloor \cdot m\)(\(\lfloor q/2 \rfloor\) 用于编码比特)。
- 压缩 \(\mathbf{u}\) 和 \(v\) 以减少尺寸。
- 用哈希函数从 \(m\) 和公钥派生共享密钥 \(K\)。
4. 解密(Decapsulate)
- 输入密文 \(c = (\mathbf{u}, v)\) 和私钥 \(\mathbf{s}\),输出共享密钥 \(K\)。
- 步骤:
- 解压缩 \(\mathbf{u}\) 和 \(v\)。
- 计算 \(w = v - \mathbf{s}^T \mathbf{u}\)(近似为 \(\lfloor q/2 \rfloor \cdot m + \text{错误项}\))。
- 解码 \(w\):将系数四舍五入到最近的 \(0\) 或 \(\lfloor q/2 \rfloor\) 以恢复 \(m\)。
- 用相同哈希函数从恢复的 \(m\) 和公钥重新计算 \(K\),确保一致性。
5. 安全性关键点
- 错误项的作用:错误(\(\mathbf{e}, \mathbf{e}_1, \mathbf{e}_2\))使直接解方程困难,基于LWE问题的难度。
- 压缩优化:通过降低数值精度减少密文大小,但不影响解密正确性(错误在容差范围内)。
- 后量子安全:无已知量子算法能高效解决Module-LWE问题。
总结
Kyber通过线性运算(矩阵-向量乘法)叠加小错误,实现高效且安全的密钥交换。其设计平衡了安全参数(如模数 \(q\) 和维度 \(k\))与性能,适用于后量子时代。