Skip to main content

code ecdsa 签名算法特点结合Paillier

好的,我们可以通过详细推导来解释为什么 P1 和 P2 能够在不暴露各自私钥份额的情况下完成 ECDSA 签名。

ECDSA 签名算法回顾​

  1. 密钥生成:

    • 私钥 xx
    • 公钥 Q=xGQ = xG
  2. 签名生成(这里,与下文 Paillier 推论一致):

    • 选择随机数 kk
    • 计算 R=kGR = kG,其中 R=(Rx,Ry)R = (R_x, R_y)
    • 计算 r=Rxmod  qr = R_x \mod q
    • 计算消息哈希 h=H(m)h = H(m)
    • 计算 s=k−1(h+xr)mod  qs = k^{-1} (h + xr) \mod q
    • 签名为 (r,s)(r, s)

多方计算 ECDSA 签名推导​

私钥分割​

假设私钥 xx 被分割成两部分,分别由 P1 和 P2 持有:

  • P1 持有 x1x_1
  • P2 持有 x2x_2
  • 满足 x=x1+x2x = x_1 + x_2

随机数生成​

P1 和 P2 各自生成一个随机数:

  • P1 生成 k1k_1
  • P2 生成 k2k_2

计算相应的公钥点:

  • P1 计算 R1=k1GR_1 = k_1 G
  • P2 计算 R2=k2GR_2 = k_2 G

最终的 RR 为:

R=R1+R2=k1G+k2G=(k1+k2)GR = R_1 + R_2 = k_1 G + k_2 G = (k_1 + k_2) G

令 R=(Rx,Ry)R = (R_x, R_y),则 r=Rxmod  qr = R_x \mod q。

消息哈希和中间值计算​

P2 计算消息哈希 hh 和中间值 xrxr: h=H(m)h = H(m)

xr=xr=(x1+x2)r=x1r+x2rxr = x r = (x_1 + x_2) r = x_1 r + x_2 r

同态加密保护私钥份额​

P2 计算:

intermediate=h+x2r\text{intermediate} = h + x_2 r

然后计算:

k2−1intermediate=k2−1(h+x2r)k_2^{-1} \text{intermediate} = k_2^{-1} (h + x_2 r)

P2 使用 P1 的 Paillier 公钥加密这个值,得到 Ek2−1(h+x2r)E_{k_2^{-1} (h + x_2 r)}。

解密和签名计算​

P1 解密 Ek2−1(h+x2r)E_{k_2^{-1} (h + x_2 r)},得到:

k2−1(h+x2r)k_2^{-1} (h + x_2 r)

然后计算:

s=k1−1k2−1(h+x2r+x1r)mod  qs = k_1^{-1} k_2^{-1} (h + x_2 r + x_1 r) \mod q

由于 x=x1+x2x = x_1 + x_2,所以:

s=k1−1k2−1(h+xr)mod  qs = k_1^{-1} k_2^{-1} (h + x r) \mod q

签名验证​

签名 (r,s)(r, s) 可以通过以下方式验证:

s=k−1(h+xr)mod  qs = k^{-1} (h + xr) \mod q

其中 k=k1+k2k = k_1 + k_2,所以:

s=(k1+k2)−1(h+xr)mod  qs = (k_1 + k_2)^{-1} (h + x r) \mod q

详细推导步骤​

  1. P1 生成承诺:

    • P1 生成随机数 k1k_1,计算 R1=k1GR_1 = k_1 G,并发送给 P2。
  2. P2 生成 k2k_2 和 R2R_2:

    • P2 生成随机数 k2k_2,计算 R2=k2GR_2 = k_2 G,并发送给 P1。
  3. P1 和 P2 计算 RR:

    • R=R1+R2=k1G+k2GR = R_1 + R_2 = k_1 G + k_2 G
    • r=Rxmod  qr = R_x \mod q
  4. P2 计算中间值并加密:

    • h=H(m)h = H(m)
    • xr=x2rxr = x_2 r
    • intermediate=h+x2r\text{intermediate} = h + x_2 r
    • k2−1intermediate=k2−1(h+x2r)k_2^{-1} \text{intermediate} = k_2^{-1} (h + x_2 r)
    • 加密 Ek2−1(h+x2r)E_{k_2^{-1} (h + x_2 r)},并发送给 P1。
  5. P1 解密并计算签名:

    • 解密 Ek2−1(h+x2r)E_{k_2^{-1} (h + x_2 r)},得到 k2−1(h+x2r)k_2^{-1} (h + x_2 r)
    • 计算 s=k1−1k2−1(h+x2r+x1r)mod  qs = k_1^{-1} k_2^{-1} (h + x_2 r + x_1 r) \mod q
    • 简化为 s=(k1+k2)−1(h+xr)mod  qs = (k_1 + k_2)^{-1} (h + x r) \mod q
    • 其中 k=k1+k2k = k_1 + k_2,所以:
s=(k1+k2)−1(h+xr)mod  q=(k)−1(h+xr)mod  qs = (k_1 + k_2)^{-1} (h + x r) \mod q = (k)^{-1} (h + x r) \mod q

通过上述步骤,P1 和 P2 在不暴露各自私钥份额的情况下,安全地计算出有效的 ECDSA 签名。这种分布式计算方法确保了签名过程的安全性和隐私性。

与上文一致

alt text