基于格的数字签名算法:BLISS(Bimodal Lattice Signature Scheme)的签名生成与验证过程
字数 1566 2025-11-04 11:59:17
基于格的数字签名算法:BLISS(Bimodal Lattice Signature Scheme)的签名生成与验证过程
题目描述
BLISS(Bimodal Lattice Signature Scheme)是一种基于格上困难问题(如LWE或环LWE)设计的数字签名算法,以其高效性和抗量子计算攻击能力著称。本题要求详细讲解BLISS签名算法的核心步骤:签名生成与验证过程,包括关键数学操作(如高斯采样、拒绝采样)和安全性设计原理。
解题过程
1. 背景知识
- 格基础:格是欧几里得空间中点的离散集合,由一组基向量生成。格上问题(如最短向量问题SVP)在量子计算下仍被认为是困难的。
- BLISS特点:通过双模态高斯分布和拒绝采样技术,避免签名泄露私钥信息,同时优化签名大小和计算效率。
2. 密钥生成(前置步骤)
BLISS的密钥对生成基于环LWE问题:
- 私钥:由两个短向量 \((s_1, s_2)\) 组成,其中 \(s_1, s_2\) 服从离散高斯分布。
- 公钥:计算 \(A = \frac{a}{s_1} + s_2 \mod q\),其中 \(a\) 是环上的随机多项式,\(q\) 是大素数模数。
3. 签名生成过程
假设消息为 \(M\),签名者使用私钥 \((s_1, s_2)\) 生成签名 \((z_1, z_2, c)\):
步骤1:生成候选签名
- 采样扰动向量:
- 从高斯分布中采样两个短向量 \(y_1, y_2\)。
- 计算承诺值:
- 计算 \(u = a \cdot y_1 + y_2 \mod q\),其中 \(a\) 是公钥参数。
- 哈希计算挑战:
- 计算 \(c = H(u \mod 2q, M)\),其中 \(H\) 是哈希函数,输出为二进制向量。
步骤2:构造签名主体
- 计算临时签名:
- \(z_1 = y_1 + (-1)^b \cdot s_1 \cdot c\)
- \(z_2 = y_2 + (-1)^b \cdot s_2 \cdot c\)
- 其中 \(b\) 是随机选择的比特(0或1),用于实现双模态分布。
步骤3:拒绝采样(防信息泄露)
- 检查 \(z_1, z_2\) 是否满足预设的范数边界(如 \(\|z\| < \eta\),\(\eta\) 为阈值)。
- 若不满足,则重新从步骤1开始。此步骤确保签名分布独立于私钥,防止侧信道攻击。
步骤4:输出签名
- 最终签名为三元组 \((z_1, z_2, c)\)。
4. 签名验证过程
验证者使用公钥 \(A\) 和消息 \(M\) 验证签名 \((z_1, z_2, c)\):
步骤1:重计算承诺值
- 计算 \(u' = a \cdot z_1 + z_2 - A \cdot c \mod q\)。
- 注意:根据公钥关系 \(A = a/s_1 + s_2\),代入后可化简为 \(u' = a \cdot y_1 + y_2\)(与签名步骤中的 \(u\) 一致)。
步骤2:哈希比对
- 计算 \(c' = H(u' \mod 2q, M)\)。
- 验证 \(c'\) 是否与签名中的 \(c\) 相等。
步骤3:范数检查
- 检查 \(z_1, z_2\) 的范数是否小于安全阈值(防止伪造攻击)。
若所有检查通过,则签名有效。
关键设计原理
- 双模态分布:通过随机选择 \(b\) 值,使签名分布对称,增强安全性。
- 拒绝采样:确保签名不泄露私钥的统计信息,解决早期格签名方案(如GGH)的漏洞。
- 模数优化:使用 \(2q\) 约减避免浮点运算,提升效率。
通过以上步骤,BLISS在保证抗量子安全的同时,实现了比RSA或ECDSA更短的签名长度。