Skip to main content

Feldman's VSS proof {2,n}

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

签名生成过程​

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

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

签名验证过程​

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

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

签名示例​

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

生成签名​

  1. 参与者 P1P_1 和 P2P_2 生成随机数 k1k_1 和 k2k_2。
  2. 计算临时值 RR: R=gk1⋅gk2mod  pR = g^{k_1} \cdot g^{k_2} \mod p
  3. 计算哈希值 ee: e=H(m∥R)e = H(m \| R)
  4. 参与者 P1P_1 和 P2P_2 生成部分签名: s1′=k1+e⋅s1mod  ps_1' = k_1 + e \cdot s_1 \mod p s2′=k2+e⋅s2mod  ps_2' = k_2 + e \cdot s_2 \mod p
  5. 合并部分签名生成最终签名 ss: s=s1′+s2′mod  ps = s_1' + s_2' \mod p

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

验证签名​

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

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

总结​

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