Skip to main content

Feldman's VSS proof {2,n}

在门限签名方案中,对消息的签名是通过多个参与者的部分签名组合而成的。具体来说,签名生成和验证过程如下:

签名生成过程

假设我们有一个消息 mm,我们希望生成对该消息的签名 σ\sigma。以下是生成签名的步骤:

  1. 选择参与者:选择 tt 个参与者(在 (2,n)(2, n) 门限签名方案中,选择 2 个参与者)。
  2. 生成随机数:每个参与者生成一个随机数 kk
  3. 计算临时值:计算临时值 RR R=gkmodpR = g^k \mod p
  4. 计算哈希值:计算消息和临时值的哈希值 ee e=H(mR)e = H(m \| R)
  5. 生成部分签名:每个参与者 PiP_i 使用其秘密份额 sis_i 生成部分签名 sis_i' si=k+esimodps_i' = k + e \cdot s_i \mod p
  6. 合并部分签名:将所有参与者的部分签名合并,生成最终签名 ss s=isimodps = \sum_{i} s_i' \mod p

签名验证过程

验证签名 σ=(R,s)\sigma = (R, s) 的步骤如下:

  1. 计算哈希值:计算消息和临时值的哈希值 ee e=H(mR)e = H(m \| R)
  2. 验证签名:使用公钥 PK\text{PK} 验证签名 (R,s)(R, s),检查以下等式是否成立: gsRPKemodpg^s \equiv R \cdot \text{PK}^e \mod p 如果等式成立,则签名 σ\sigma 是有效的;否则,签名无效。

签名示例

假设我们有一个消息 mm,两个参与者 P1P_1P2P_2,他们的秘密份额分别为 s1s_1s2s_2。生成和验证签名的具体步骤如下:

生成签名

  1. 参与者 P1P_1P2P_2 生成随机数 k1k_1k2k_2
  2. 计算临时值 RR R=gk1gk2modpR = g^{k_1} \cdot g^{k_2} \mod p
  3. 计算哈希值 ee e=H(mR)e = H(m \| R)
  4. 参与者 P1P_1P2P_2 生成部分签名: s1=k1+es1modps_1' = k_1 + e \cdot s_1 \mod p s2=k2+es2modps_2' = k_2 + e \cdot s_2 \mod p
  5. 合并部分签名生成最终签名 ss s=s1+s2modps = s_1' + s_2' \mod p

最终签名为 σ=(R,s)\sigma = (R, s)

验证签名

  1. 计算哈希值 ee e=H(mR)e = H(m \| R)
  2. 验证签名: gsRPKemodpg^s \equiv R \cdot \text{PK}^e \mod p

如果等式成立,则签名 σ\sigma 是有效的。

总结

在门限签名方案中,对消息的签名是通过多个参与者的部分签名组合而成的。最终的签名 σ=(R,s)\sigma = (R, s) 包含临时值 RR 和合并后的签名 ss。签名验证通过检查等式 gsRPKemodpg^s \equiv R \cdot \text{PK}^e \mod p 是否成立来确定签名的有效性。