基于格的数字签名算法:Dilithium 的签名生成与验证过程
字数 1930 2025-11-08 20:56:05
基于格的数字签名算法:Dilithium 的签名生成与验证过程
题目描述
Dilithium 是一种基于格上困难问题(模块化短整数解问题,MLWE)的后量子数字签名算法,其设计目标是在量子计算环境下保持安全性。本题要求详细解释 Dilithium 的签名生成与验证过程,重点包括密钥生成、签名生成中的拒绝采样技术,以及验证时如何通过线性运算判断签名的有效性。
解题过程
1. 算法背景与核心思想
Dilithium 的安全性依赖于 MLWE 问题的困难性,即从随机矩阵 \(A\) 和噪声向量中恢复秘密向量是困难的。签名过程通过引入拒绝采样技术,确保最终输出的签名不泄露私钥信息。
关键参数:
- 模数 \(q\)(通常为 \(2^{23} - 2^{13} + 1\))
- 环 \(R_q = \mathbb{Z}_q[X]/(X^n + 1)\)(多项式环,\(n=256\))
- 噪声边界 \(\eta\),用于控制签名中的噪声大小。
2. 密钥生成过程
- 生成公钥 \((A, t_1)\) 和私钥 \((s_1, s_2, \rho)\):
- 随机种子 \(\rho\) 通过哈希函数生成矩阵 \(A \in R_q^{k \times l}\)(\(k, l\) 为维度参数)。
- 生成小范数私钥向量 \(s_1, s_2\)(元素范围在 \([-\eta, \eta]\))。
- 计算 \(t = A s_1 + s_2\),公钥为 \((A, t_1)\),其中 \(t_1\) 是 \(t\) 的高位压缩版本(通过量化减少存储)。
3. 签名生成过程
设待签名消息为 \(M\),私钥为 \((s_1, s_2, \rho)\)。
-
计算承诺(Commitment):
- 生成随机掩码 \(y\)(元素范围在 \([-\gamma_1, \gamma_1]\)),其中 \(\gamma_1\) 为预设边界。
- 计算 \(w = A y\),并哈希 \((w, M)\) 得到挑战值 \(c \in B_{\tau}\)(\(B_{\tau}\) 是稀疏二值向量集合,汉明权重为 \(\tau\))。
-
生成候选签名:
- 计算 \(z = y + c s_1\)。
- 检查 \(z\) 的范数是否在 \([-\gamma_1 + \beta, \gamma_1 - \beta]\) 内(\(\beta\) 为安全参数),若超出则重新生成 \(y\)(拒绝采样)。
-
计算辅助值 \(h\):
- 计算 \(w - c s_2\),并压缩得到 \(h\)(用于验证时恢复 \(w\) 的近似值)。
-
最终签名:
- 输出 \(\sigma = (z, h, c)\)。
拒绝采样的作用:
若直接输出 \(z = y + c s_1\),噪声分布可能泄露 \(s_1\)。通过重采样确保 \(z\) 的分布与随机向量无异。
4. 签名验证过程
输入:公钥 \((A, t_1)\)、消息 \(M\)、签名 \(\sigma = (z, h, c)\)。
- 恢复 \(w'\):
- 利用 \(h\) 和公钥计算 \(w' = A z - c t_1\)(注意 \(t_1\) 需先解压缩为 \(t\))。
- 由于 \(t = A s_1 + s_2\),代入得:
\[ w' = A (y + c s_1) - c (A s_1 + s_2) = A y - c s_2 \]
- 比较 \(w'\) 与哈希承诺是否一致。
-
检查范数条件:
- 验证 \(z\) 的范数是否满足 \(\|z\|_{\infty} < \gamma_1 - \beta\)。
- 验证 \(c\) 的汉明权重是否为 \(\tau\)。
-
验证哈希一致性:
- 计算 \(c' = H(w', M)\),若 \(c' = c\) 则签名有效。
关键点总结
- 拒绝采样:确保签名值 \(z\) 不泄露私钥分布。
- 压缩技术:减少公钥和签名大小(如 \(t_1\) 为 \(t\) 的高位压缩)。
- 线性验证:通过 \(A z - c t\) 恢复承诺值,避免直接使用私钥。
通过以上步骤,Dilithium 在保证安全性的同时实现了高效的签名与验证,适用于后量子密码学场景。