CRYSTALS-Dilithium 后量子数字签名算法
字数 1853 2025-10-30 08:32:20
CRYSTALS-Dilithium 后量子数字签名算法
题目描述
CRYSTALS-Dilithium 是一种基于格上困难问题(模块化格上的短整数解问题,MLWE 和 MSIS)设计的后量子数字签名算法。其核心目标是在量子计算威胁下实现高效且安全的数字签名。题目要求解释 Dilithium 的密钥生成、签名生成和签名验证过程,重点说明其如何利用多项式环运算和拒绝采样来保证安全性。
解题过程
1. 算法背景与数学基础
Dilithium 工作在环 \(R_q = \mathbb{Z}_q[X]/(X^n + 1)\),其中 \(n=256\),\(q=2^{23}-2^{13}+1\)(一个素数)。密钥和签名由该环上的多项式向量或矩阵表示。安全性依赖于两个问题:
- MLWE:区分随机多项式向量与带有小噪声的线性函数。
- MSIS:在模 \(q\) 的线性关系中寻找短解。
2. 密钥生成过程
- 生成随机种子:选择随机种子 \(\rho\) 用于生成矩阵 \(A \in R_q^{k \times l}\)(通常 \(k=l=4\) 或 \(6\))。
- 生成私钥:采样短向量 \((s_1, s_2)\),其中 \(s_1 \in R_q^l\)、\(s_2 \in R_q^k\),每个系数取自均匀分布 \(\{-\eta, \dots, \eta\}\)(例如 \(\eta=2\))。
- 计算公钥:计算 \(t = A s_1 + s_2\)。公钥为 \((A, t)\),私钥为 \((s_1, s_2)\) 和 \(\rho\)。
关键点:\(s_1, s_2\) 的系数很小,确保 \(t\) 看似随机但隐藏了私钥结构。
3. 签名生成过程(含拒绝采样)
目标:对消息 \(M\) 生成签名,避免泄露私钥。
- 生成掩码:采样短随机向量 \(y \in R_q^l\),其系数范围远大于 \(\eta\)(例如 \(\gamma_1=2^{17}\))。
- 计算承诺:计算 \(w = A y\),并将其压缩为低精度向量 \(w_1\)(通过取模 \(2\gamma_2\) 实现,例如 \(\gamma_2=2^{13}\))。
- 生成挑战:哈希 \((w_1, M)\) 得到挑战多项式 \(c \in R_q\),其仅有少量非零系数(例如 Hamming 权重 \(\tau=60\))。
- 计算响应:计算 \(z = y + c s_1\)。若 \(z\) 的系数超出安全范围 \([-\gamma_1+\beta, \gamma_1-\beta]\)(\(\beta\) 为容差),则返回步骤 1(拒绝采样)。
- 计算提示:计算 \(h = c s_2\),并生成提示 \(h\) 的低位信息,用于辅助验证。
- 输出签名:签名为 \((z, h, c)\)。
关键点:拒绝采样确保 \(z\) 的分布独立于私钥,防止信息泄露。
4. 签名验证过程
- 恢复承诺:计算 \(w'_1 = A z - c t\),并利用提示 \(h\) 校正舍入误差。
- 重新哈希:哈希 \((w'_1, M)\) 得到 \(c'\)。
- 验证条件:
- 检查 \(c' = c\)。
- 检查 \(z\) 的系数是否在 \([-\gamma_1+\beta, \gamma_1-\beta]\) 内。
- 结果:若均通过,则签名有效。
关键点:验证时通过 \(A z - c t = A(y + c s_1) - c (A s_1 + s_2) = A y - c s_2\),再利用提示还原 \(w_1\)。
5. 安全性分析
- 抗量子攻击:破解签名需解决格上的 MLWE/MSIS 问题,目前无已知量子算法有效破解。
- 拒绝采样作用:若不使用拒绝采样,响应 \(z\) 的分布会携带 \(s_1\) 的信息,通过侧信道攻击可能恢复私钥。
总结
Dilithium 通过多项式环上的线性运算和拒绝采样,实现了在量子计算威胁下的安全签名,其效率与签名大小均优于许多后量子方案,已被 NIST 选为标准化算法。