CRYSTALS-Dilithium 后量子数字签名算法中的多项式运算与NTT加速
题目描述
CRYSTALS-Dilithium 是一种基于格的后量子数字签名算法,其安全性依赖于模块格上带误差学习问题(MLWE)和模块短整数解问题(MSIS)的困难性。该算法的核心操作是在多项式环 \(R_q = \mathbb{Z}_q[X]/(X^n + 1)\)(例如 \(n=256, q=8380417\))上进行多项式乘法。由于直接计算多项式乘法复杂度高(\(O(n^2)\)),Dilithium 使用数论变换(NTT) 将乘法复杂度优化至 \(O(n \log n)\)。本题要求详细解释 Dilithium 中的多项式运算规则及 NTT 的加速原理。
解题过程
步骤1:理解多项式环的结构
- 环定义:Dilithium 的多项式环为 \(R_q = \mathbb{Z}_q[X]/(X^n + 1)\),其中:
- \(n\) 是2的幂次(如256),确保 \(X^n + 1\) 是分圆多项式。
- \(q\) 是质数(如8380417),满足 \(q \equiv 1 \mod 2n\),以支持NTT。
- 运算规则:
- 多项式系数在 \(\mathbb{Z}_q\) 中运算(模 \(q\) 算术)。
- 多项式乘法结果需模 \(X^n + 1\):即用 \(X^n \equiv -1\) 化简高次项。
示例:
设 \(n=4, q=17\),多项式 \(a = 3X^3 + 2X + 1\), \(b = X^2 + 4\)。
计算 \(a \cdot b\):
- 直接乘法:\(3X^5 + 2X^3 + 12X^3 + X^2 + 8X + 4 = 3X^5 + 14X^3 + X^2 + 8X + 4\)。
- 模 \(X^4 + 1\):用 \(X^4 \equiv -1\) 替换高次项,得 \(3X^1 + 14X^3 + X^2 + 8X + 4\)(因 \(3X^5 = 3X \cdot X^4 \equiv -3X\))。
- 合并:\(14X^3 + X^2 + (3+8)X + 4 = 14X^3 + X^2 + 11X + 4\)。
步骤2:数论变换(NTT)的基本原理
- NTT的作用:将多项式从系数表示转换为点值表示,使乘法从逐点相乘完成,避免直接卷积计算。
- 根的选择:
- 需要 \(2n\) 次单位根 \(\omega\)(满足 \(\omega^{2n} \equiv 1 \mod q\))。
- 由于 \(q \equiv 1 \mod 2n\),存在本原根 \(\gamma\) 使得 \(\omega = \gamma^{(q-1)/(2n)}\)。
- 变换过程:
- 对多项式 \(a \in R_q\),其NTT结果 \(\hat{a}\) 是 \(a(\omega^{2i+1})\) 在 \(i=0,\dots,n-1\) 处的取值。
- 逆NTT(INTT)通过 \(\omega^{-1}\) 还原系数。
示例(简化):
设 \(n=2, q=17\),需 \(4\) 次单位根 \(\omega\)。验证 \(\omega=3\)(因 \(3^4=81 \equiv 13 \mod 17\)?错误!实际需重新计算:\(3^2=9, 3^4=81 \mod 17=13\),不满足1,故调整。正确根需满足 \(\omega^4 \equiv 1\),例如 \(\omega=4\)(\(4^2=16, 4^4=256 \mod 17=1\))。
多项式 \(a = 2X + 1\),求NTT:
- 在 \(\omega^1=4, \omega^3=4^3=64 \mod 17=13\) 处求值:
\(a(4)=2\cdot4+1=9\), \(a(13)=2\cdot13+1=27 \mod 17=10\)。 - 故 \(\hat{a} = (9, 10)\)。
步骤3:NTT加速多项式乘法的步骤
- 转换到NTT域:对输入多项式 \(a, b\) 计算 \(\hat{a} = \mathrm{NTT}(a)\), \(\hat{b} = \mathrm{NTT}(b)\)。
- 点乘:计算 \(\hat{c}[i] = \hat{a}[i] \cdot \hat{b}[i] \mod q\)(逐点相乘,复杂度 \(O(n)\))。
- 逆转换:通过 \(c = \mathrm{INTT}(\hat{c})\) 还原乘积多项式。
关键点:
- 直接乘法需 \(O(n^2)\) 次系数乘加,而NTT+点乘+INTT仅需 \(O(n \log n)\)。
- Dilithium 中所有多项式(如公钥矩阵、签名噪声)均以NTT形式存储,提升效率。
步骤4:Dilithium中的具体优化技巧
- 负缠绕卷积:因模 \(X^n+1\),NTT使用负根 \(\omega^{2i+1}\)(而非标准正根),避免额外化简步骤。
- 合并运算:在签名验证时,直接计算 \(\mathrm{NTT}(z) - c \cdot \mathrm{NTT}(t_1)\)(其中 \(z\) 为签名,\(t_1\) 为公钥,\(c\) 为挑战),在NTT域中完成线性组合。
- 拒绝采样:NTT不改变系数分布,故拒绝采样(确保小范数)可在系数域进行。
总结
Dilithium 通过NTT将多项式乘法优化至近线性复杂度,这是其实现高效后量子签名的核心。理解 \(R_q\) 的环结构、NTT的根选取及点乘规则,是掌握该算法的基础。实际实现还需考虑内存访问优化和抗侧信道攻击,但本文聚焦于算法层面的数学原理。