CRYSTALS-Kyber 后量子密钥封装机制的解密过程
字数 2117 2025-11-05 08:30:59
CRYSTALS-Kyber 后量子密钥封装机制的解密过程
我将为您详细讲解 CRYSTALS-Kyber 后量子密钥封装机制中的解密过程。Kyber 是一种基于模格上带误差学习问题(Module-Learning With Errors, MLWE)的密钥封装机制(KEM),已被 NIST 选为后量子密码标准化项目的主要算法。
题目描述
在 Kyber 的解密过程中,接收方(Bob)使用自己的私钥对收到的密文进行解密,以恢复出封装在其中的对称密钥。解密过程的核心是使用私钥信息来“消除”密文中的公开部分和误差,从而还原出原始消息。这个过程需要精确的模运算和多项式运算,以确保解密的正确性。
解题过程
1. 预备知识:Kyber 的基本参数与符号
- 令 \(q = 3329\) 为模数(在 Kyber-512/768/1024 中通用)。
- 令 \(n = 256\),即环 \(R_q = \mathbb{Z}_q[X] / (X^n + 1)\) 中的多项式次数。
- 密文 \(c = (u, v)\),其中 \(u\) 是一个或多个多项式(向量),\(v\) 是一个多项式(标量)。
- 私钥 \(s\) 是一个小系数多项式向量(其系数取自中心二项分布)。
- 解密过程的目标是从 \(c\) 中恢复出消息 \(m\)(一个 256 比特的串,但封装时被编码为多项式)。
2. 解密过程的第一步:计算近似消息多项式
解密过程的核心公式是计算:
\[\tilde{m} = v - s^T u \mod q \]
- \(s^T u\) 表示私钥向量 \(s\) 与密文向量 \(u\) 的内积(在多项式环 \(R_q\) 上进行)。
- 这个计算的结果 \(\tilde{m}\) 是一个多项式,其系数在 \([-q/2, q/2)\) 范围内。
- 关键点:在加密时,消息 \(m\) 被编码并添加了小的误差。因此,\(\tilde{m}\) 是原始编码消息的一个“近似”版本,包含了加密时引入的误差。
3. 第二步:从近似消息中解码出原始消息比特
由于 \(\tilde{m}\) 的系数是接近 0 或 \(q/2\) 的值(取决于原始消息比特是 0 还是 1),我们需要将其解码回比特串。
- 对于 \(\tilde{m}\) 的每个系数 \(\tilde{m}_i\)(共 256 个系数,对应 256 比特消息):
- 将系数值范围 \([0, q)\) 划分为两个区间:
- 区间 \([0, q/2)\) 对应消息比特 0。
- 区间 \([q/2, q)\) 对应消息比特 1。
- 但由于计算是在模 \(q\) 下进行的,我们通常将系数调整到 \([-q/2, q/2)\) 范围内(通过模约简),然后:
- 如果 \(\tilde{m}_i\) 接近 0(即其绝对值小于 \(q/4\)),则解码为 0。
- 如果 \(\tilde{m}_i\) 接近 \(\pm q/2\)(即其绝对值大于 \(q/4\)),则解码为 1。
- 将系数值范围 \([0, q)\) 划分为两个区间:
- 数学表达:解码函数可以写为:
\[ m_i = \lfloor 2 \cdot \tilde{m}_i / q \rceil \mod 2 \]
其中 \(\lfloor \cdot \rceil\) 表示四舍五入到最近的整数。
4. 第三步:处理解密失败的可能性
- Kyber 的设计使得解密失败的概率极低(通常小于 \(2^{-128}\)),但理论上仍存在因误差过大导致解码错误的可能。
- 解密失败是指解码出的消息 \(m'\) 与原始封装的消息 \(m\) 不一致。在 Kyber 的规范中,通过精心选择误差分布和参数,确保了解密的可靠性。
- 在实际实现中,解密后得到的消息 \(m'\) 会通过密钥派生函数(KDF)生成对称密钥,用于后续加密通信。即使解密失败,其影响也仅限于本次会话。
5. 完整解密流程总结
- 输入:密文 \(c = (u, v)\),私钥 \(s\)。
- 计算近似消息:\(\tilde{m} = v - s^T u \mod q\)。
- 解码消息:对 \(\tilde{m}\) 的每个系数应用解码规则,得到 256 比特的消息 \(m'\)。
- 输出:\(m'\) 作为解密结果,后续通过 KDF 派生密钥。
为什么解密过程是安全的?
- 安全性基于 MLWE 问题:即使攻击者知道公钥 \((A, t)\) 和密文 \((u, v)\),在没有私钥 \(s\) 的情况下,无法区分 \(\tilde{m}\) 是由真实消息还是随机值生成的。
- 误差的引入使得直接求解变得困难,而合法的解密者利用私钥 \(s\) 可以有效地消除主项,只留下小的误差,从而正确解码。
通过以上步骤,Kyber 的解密过程实现了高效且安全的密钥恢复,是其后量子安全性的关键组成部分。