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=xi⋅GX_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_1 和 k2k_2。
    • 计算 R1=k1⋅GR_1 = k_1 \cdot G 和 R2=k2⋅GR_2 = k_2 \cdot G。
    • 共同计算 R=R1+R2R = R_1 + R_2。
  3. 计算 rr 值:
    • 给定 R=(rx,ry)R = (r_x, r_y),计算 r=rxmod  qr = r_x \mod q。
  4. 部分签名计算:
    • Bob 计算部分签名 s2=m+r⋅x2k2mod  qs_2 = \frac{m + r \cdot x_2}{k_2} \mod q。
    • 将部分签名发送给 Alice。
  5. 完整签名计算:
    • Alice 使用 Paillier 私钥解密部分签名 s2s_2。
    • 计算完整签名 s=m+r⋅(x1+x2)k1⋅k2mod  qs = \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′_i⋅GX'\_i = x'\_i \cdot G。
  3. 计算子公钥:
    • 所有参与者共同计算子公钥 X′=∑X′_iX' = \sum X'\_i。

总结​

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