Skip to main content

Core MPC TSS

MPC-TSS 理论基础

  1. 椭圆曲线 ECDSA、ED25519
  2. 零知识证明  Schnorr ZK
  3. 非交互式零知识证明 Schnorr NIZK
  4. 同态非交互式零知识证明 Paillier NIZK
  5. TSS  {2,2} Lindell 17’
  6. TSS  {2,n} Feldman's VSS
  7. TSS  {2,n} Feldman's VSS 多项式-----拉格朗日插值
  8. HASH Commitment Schemes commit-open 用于  {2,2} {2,n} hash

MPC-TSS 流程:

1. 密钥生成

在密钥生成阶段,参与者生成密钥份额,以确保私钥不会集中在单一方手中。流程如下:

  1. 选择参数:选择一个大素数 pp 和一个生成元 gg
  2. 生成密钥份额
    • 每个参与者生成一个随机私钥份额 xix_i
    • 使用 Feldman's 可验证秘密共享(VSS)协议生成密钥份额。
    • 计算公钥份额 Xi=xiGX_i = x_i \cdot G,其中 GG 是生成元。
  3. 分发密钥份额
    • 每个参与者将密钥份额 (i,si)(i, s_i) 和承诺值 CiC_i 分发给其他参与者。
    • 每个参与者验证收到的密钥份额和承诺值的有效性。
  4. 计算公钥
    • 所有参与者共同计算公钥 X=XiX = \sum X_i

2. 签名

在签名阶段,两个参与者共同生成签名,以确保签名过程的安全性和效率。流程如下:

  1. 消息准备:准备要签名的消息 mm
  2. 生成随机数
    • Alice 和 Bob 分别生成随机数 k1k_1k2k_2
    • 计算 R1=k1GR_1 = k_1 \cdot GR2=k2GR_2 = k_2 \cdot G
    • 共同计算 R=R1+R2R = R_1 + R_2
  3. 计算 rr
    • 给定 R=(rx,ry)R = (r_x, r_y),计算 r=rxmodqr = r_x \mod q
  4. 部分签名计算
    • Bob 计算部分签名 s2=m+rx2k2modqs_2 = \frac{m + r \cdot x_2}{k_2} \mod q
    • 将部分签名发送给 Alice。
  5. 完整签名计算
    • Alice 使用 Paillier 私钥解密部分签名 s2s_2
    • 计算完整签名 s=m+r(x1+x2)k1k2modqs = \frac{m + r \cdot (x_1 + x_2)}{k_1 \cdot k_2} \mod q
  6. 签名验证
    • Alice 使用公钥验证签名 (r,s)(r, s) 的有效性。
    • 如果签名有效,输出签名;否则,签名失败。

3. 密钥份额刷新

如果密钥份额丢失或泄露,或者有新参与者加入,可以生成一组新的密钥份额。流程如下:

  1. 生成新份额
    • 每个参与者生成新的随机私钥份额 xix_i
    • 使用 Feldman's VSS 协议生成新的密钥份额。
  2. 分发新份额
    • 每个参与者将新的密钥份额 (i,si)(i, s_i) 和承诺值 CiC_i 分发给其他参与者。
    • 每个参与者验证收到的新密钥份额和承诺值的有效性。
  3. 计算新公钥
    • 所有参与者共同计算新的公钥 X=XiX = \sum X_i

4. 密钥派生

密钥派生允许从主密钥生成子密钥,以便更好地管理和保护加密货币资金。流程如下:

  1. 选择路径:选择密钥派生路径,例如 m/44/0/0/0m/44'/0'/0'/0
  2. 派生子密钥份额
    • 每个参与者根据路径派生子密钥份额 x_ix'\_i
    • 计算子公钥份额 X_i=x_iGX'\_i = x'\_i \cdot G
  3. 计算子公钥
    • 所有参与者共同计算子公钥 X=X_iX' = \sum X'\_i

总结

MPC-TSS 方案通过多方合作生成和使用密钥,提高了安全性和效率。其核心步骤包括密钥生成、签名、密钥份额刷新和密钥派生。通过使用 Feldman's VSS、Paillier 加密和零知识证明等加密技术,确保了整个过程的安全性和可靠性。