CRYSTALS-Dilithium 后量子数字签名算法中的环与模数多项式运算
字数 2290 2025-12-01 03:01:29
CRYSTALS-Dilithium 后量子数字签名算法中的环与模数多项式运算
题目描述
CRYSTALS-Dilithium 是一种基于格的后量子数字签名算法,其安全性依赖于模块化格(Module-Lattice)上的计算困难问题。算法的核心运算是环 \(R_q = \mathbb{Z}_q[X]/(X^n + 1)\) 上的多项式运算,其中 \(n=256\),\(q=8380417\)(一个素数)。题目要求详细解释该环上的多项式乘法、模运算及优化方法。
解题过程
1. 环 \(R_q\) 的结构与参数选择
- 环定义:\(R_q\) 由所有系数在 \(\mathbb{Z}_q\) 中、次数小于 \(n\) 的多项式构成,模多项式 \(X^n + 1\) 保证环是循环的(\(X^n \equiv -1\))。
- 参数意义:
- \(n=256\):平衡安全性与计算效率,适合快速数论变换(NTT)。
- \(q=8380417\):满足 \(q \equiv 1 \pmod{2n}\),确保 \(\mathbb{Z}_q\) 中存在 \(2n\) 次本原单位根,支持 NTT 优化。
2. 多项式表示与运算规则
- 系数表示:多项式 \(a(X) = a_0 + a_1X + \dots + a_{n-1}X^{n-1}\) 存储为长度为 \(n\) 的数组。
- 模运算规则:
- 系数模 \(q\):所有系数运算结果需模 \(q\),例如 \(a_i \cdot b_j \mod q\)。
- 多项式模 \(X^n + 1\):利用 \(X^n \equiv -1\) 简化高次项。例如:
\[ X^{n+k} \equiv (-1) \cdot X^k \pmod{X^n + 1}. \]
3. 多项式乘法的朴素方法(非优化)
若直接计算 \(c(X) = a(X) \cdot b(X) \mod (X^n + 1)\):
- 计算普通多项式乘法(次数最高为 \(2n-2\))。
- 利用 \(X^n \equiv -1\) 折叠高次项:
- 对 \(k \geq n\),项 \(c_k X^k\) 转换为 \(-c_k X^{k-n}\)。
- 合并同类项,并对所有系数模 \(q\)。
- 缺点:时间复杂度 \(O(n^2)\),对 \(n=256\) 效率较低。
4. 快速数论变换(NTT)优化
NTT 是有限域上的快速傅里叶变换(FFT),将多项式乘法复杂度降至 \(O(n \log n)\)。
步骤:
-
预处理单位根:
- 在 \(\mathbb{Z}_q\) 中找 \(2n\) 次本原单位根 \(\omega\),即 \(\omega^{2n} \equiv 1\),且 \(\omega^k \not\equiv 1\)(对 \(k < 2n\))。
- 由于 \(q \equiv 1 \pmod{2n}\),这样的 \(\omega\) 存在(例如 \(\omega = 3^{(q-1)/2n} \mod q\))。
-
正向 NTT(求值):
- 将多项式 \(a(X)\) 的系数转换为 \(n\) 个点值 \(\hat{a}_i = a(\omega^{2i+1})\)。
- 使用 Cooley-Tukey 蝶形算法分治计算,复杂度 \(O(n \log n)\)。
-
点乘:
- 对两个多项式的点值逐点相乘:\(\hat{c}_i = \hat{a}_i \cdot \hat{b}_i \mod q\)。
-
逆向 NTT(插值):
- 将点值 \(\hat{c}_i\) 转换回系数形式,需乘 \(n^{-1} \mod q\) 进行缩放。
关键点:
- NTT 要求多项式模 \(X^n - 1\),但 Dilithium 使用 \(X^n + 1\)。解决方案:
- 通过负缠绕技巧(negative wrapped convolution)调整:将 \(a(X)\) 预乘 \(\omega^i\) 再执行 NTT。
5. 实际运算示例(简化)
设 \(n=4\),\(q=17\)(满足 \(q \equiv 1 \pmod{8}\)),计算 \(a(X) = 1 + 2X\),\(b(X) = 3 + 4X\) 在 \(R_q\) 中的乘积:
-
朴素方法:
- \(a \cdot b = 3 + 10X + 8X^2\)。
- 模 \(X^4 + 1\):\(8X^2 \equiv -8 \Rightarrow c(X) = 3 + 10X - 8 \equiv -5 + 10X\)。
- 系数模 \(17\):\(c(X) = 12 + 10X\)。
-
NTT 方法(略去详细蝶形计算):
- 单位根 \(\omega=2\)(因 \(2^8 \equiv 1 \mod 17\))。
- 通过预乘调整后执行 NTT,点乘后逆 NTT,结果与朴素法一致。
总结
CRYSTALS-Dilithium 的环运算通过 NTT 实现高效多项式乘法,结合模数 \(q\) 的巧妙选择,兼顾安全性与性能。理解这一过程是掌握 Dilithium 签名生成与验证的基础。