Skip to main content

MPC-TSS Overview ⚡️

详细内容见其他章节

MPC-TSS 方案的演变历史

info

MPC-TSS 方案演变历史

  1. Shamir's Secret Sharing (1979) 介绍 Shamir's Secret Sharing 方案及其在秘密共享中的基础地位。

  2. Verifiable Secret Sharing (VSS) (1985-1987) 讨论基于 VSS 的方案,确保秘密共享过程中的正确性和安全性。

多方计算与门限签名的结合

  1. Multiparty Computation (MPC) (1980s-1990s) 介绍 MPC 的基本概念和早期协议,如 Yao's Garbled Circuits、GMW 协议和 BGW 协议。

  2. Threshold Signatures (1991) 描述门限签名方案及其在分布式系统中的应用。

门限 ECDSA 的发展

  1. Gennaro-Jarecki-Krawczyk-Rabin (GJKR) Protocol (2000) 介绍 GJKR 协议及其在门限 ECDSA 中的应用。

  2. 分布式密钥生成(DKG) (1999) 讨论 DKG 协议的提出及其在分布式系统中的重要性。

  3. Lindell's Protocol (2017) 描述 Lindell 协议及其在高效门限 ECDSA 中的贡献。

  4. Gennaro-Goldfeder (GG) Protocols (2018-2020) 介绍 Gennaro 和 Goldfeder 提出的一系列协议及其在门限签名中的应用。

重要技术概念

  1. 同态证明(Homomorphic Proofs) 讨论同态加密和同态证明在 MPC-TSS 方案中的应用,包括:
  • Paillier 同态加密(1999):允许在密文上进行加法运算。
  • 全同态加密(FHE):Craig Gentry 提出的全同态加密方案,允许在密文上进行任意运算,并提供了相应的安全性证明。
  • 应用案例:同态加密在现代 MPC 协议中的应用,如安全多方计算和隐私保护数据分析。
  1. 零知识证明(Zero-Knowledge Proofs, ZKPs) 介绍零知识证明的基础概念和应用,包括:
  • 经典零知识证明(1980 年代):如 Goldwasser、Micali 和 Rackoff 提出的交互式零知识证明。
  • 非交互零知识证明(NIZK):Blum、Feldman 和 Micali 提出的非交互零知识证明。
  • zk-SNARKs 和 zk-STARKs:高效的零知识证明系统,广泛应用于区块链和隐私保护。
  • 应用案例:零知识证明在 MPC 和 TSS 中的应用,如验证计算正确性和保护隐私。

最新发展与优化

  1. FROST (Flexible Round-Optimized Schnorr Threshold) (2020) 讨论 FROST 协议及其在优化门限签名过程中的贡献。

  2. MuSig2 (2020) 介绍 MuSig2 协议及其在简化和提高多方签名过程中的作用。

最新研究方向

概述当前 MPC-TSS 领域的最新研究方向和技术趋势,如同态加密、零知识证明和区块链应用。

MPC-TSS 流程

MPC-TSS 流程 无分发验证

  1. 私钥分片分发
  2. 交易数据签名
  3. 密钥分片刷新(保证公钥不变) - 可以刷单个 P1、P2、P3 , 可以刷多个 P1,P2,P3
  4. 见:tss/ed25519/keygen

MPC-TSS 流程 分发验证

MPC-TSS 理论基础

  • 密码学: 是数学的一个分支,密码学证明是数学证明计算相等
  • 零知识证明:不暴露自己知道的秘密,向验证方证明自己知道(向验证方发送掩盖后的秘密----掩盖后的秘密很难被恢复)
  1. BIP32(Bitcoin Improvement Proposal 32)是比特币改进提案,密钥非硬化派生(派生出来的密钥可以继续派生)
  2. HASH Commitment Schemes,commit-open 用于  {2,2} {2,n} hash
  3. 椭圆曲线 ECDSA、ED25519 Elliptic Curve point addition (ℝ)
  4. 零知识证明  Schnorr ZK
  5. 非交互式零知识证明 Schnorr NIZK, Fiat-Shamir 变换
  6. 同态非交互式零知识证明 Paillier NIZK
  7. DKG 分布式密钥生成
  8. TSS {2,2} Lindell 17’
  9. TSS {2,n} Feldman's VSS
  10. TSS {2,n} Feldman's VSS 多项式-----拉格朗日插值
  11. Shamir's 与 Feldman's VSS 的区别

TSS {2,3} 猜测

分开生成

  1. 服务端生成 P1
  2. 客户端生成 P2(用户设备), P3(用户备份 refresh)

客户端分发

客户端生成 P1、P2、P3, 将 P1 发送到服务器存储,P2(用户设备), P3(用户备份 refresh)

alt text

DKG

DKG 中几个关系

  1. 私钥份额 si  = 发到 i 参与者的所有共享份额 shares 的累加
  2. 私钥 s = 所有参与者私钥份额 si 的累加
  3. verifiers 用于 HashCommitment 和零知识证明
  4. {2,n}私钥份额签名累加(同态 私钥签名)

两个重要公式推导

公共多项式系数计算

公共密钥份额计算公式

DKG 生成

在 Feldman 分布式密钥生成(DKG)方案中,每个参与方生成一个多项式。这个多项式用于生成密钥份额,并通过其系数生成验证者

  • 第一轮:每个参与者生成初始私钥份额  ui,并通过秘密共享方案生成共享份额  shares  和验证者  verifiers。这些值通过承诺广播(P2P)给其他参与者。

  • 第二轮:每个参与者生成其私钥份额的零知识证明,并将其与共享份额一起发送给其他参与者。

  • 第三轮:每个参与者验证收到的零知识证明和共享份额,然后将所有收到的共享份额相加,生成最终的私钥份额  xi。

    alt text

DKG 刷新

分布式密钥生成(DKG)刷新私钥,保证公钥不变

  1. 公钥(公钥份额总和)不变,私钥(私钥份额总和)也不变,因为 X = G xi, G 不变
  2. 刷新私钥份额,是将完整私钥重新分配的过程(完整的私钥是公共多项式的常数项之和)
  3. 门限3, 2 个参与者足够还原完整私钥,2 个参与者对应的新公共多项式就可以实现私钥份额的重新分配
  4. 私钥份额总和(是各个参与者常数项的总和),如果不知道 P2,知道 P1,P3,只需要 P2 多项式的常数项为 0,这样可以保证 P1,P2,P3 的新公共多项式的常数项之和不变,生成的新私钥份额总和不变

alt text

DKG 的刷新代码 vs DKG 生成代码

几乎一致,稍有区别

刷新时的代码,ui,chaincode 使用生成时的, 过滤掉 0G, 也就是 g(x) 上述 P2 的多项式常数项,g(0) = 0

// 过滤 0*G
if ujPoint.X.Cmp(big.NewInt(0)) == 0 || ujPoint.Y.Cmp(big.NewInt(0)) == 0 {
continue
}

DKG-Bip32 签名流程概述

  1. 分布式密钥生成(DKG):首先,生成初始的共享密钥和公钥。

  2. BIP-32 派生子私钥份额:从 DKG 生成的私钥份额派生出子私钥份额。

  3. 门限签名(TSS):使用派生出的子私钥份额进行门限签名。

    缺点:不可以进行 DKG 刷新,刷新后私钥份额变了,同样的派生路径,获取到公私钥对变了,最终 TSS 签名也和之前不一样了

签名片段收集

  1. 接口调用
  2. 扫码
  3. 硬件存储

门限签名

alt text

ECDSA 与 ed25519 不同,tss-ECDSA 需要 Paillier, 而 tss-ED25519 不需要

签名与验签

签名时候有个随机数,验签时候没有,这个随机会造成每次前面结果不一样,对验签没影响

alt text

推导

alt text

TSS ECDSA 需要 Paillier

上面的两张图已经证明了验签与随机数无关,之后 k,k1,k2 随机数关系表示为:k = k1+k2 alt text alt text alt text

TSS ED25519 不需要 Paillier

alt text

OKX APP

刷新私钥片段

alt text

导出完整私钥

alt text

导出完整私钥-实现

alt text

以 TSS {t,n} 为例:

选择参与者:选择至少  t 个参与者  P1.....Pt。 收集秘密份额:收集这些参与者的秘密份额 s1.....st。 使用拉格朗日插值法重建私钥:使用这些秘密份额通过拉格朗日插值法重建完整私钥  s。

alt text

Shamir's 与 Feldman's VSS 的区别

alt text

Other

TSS{t,n}

alt text

  1. https://eprint.iacr.org/2021/1621.pdf
  2. https://github.com/ZenGo-X/multi-party-ecdsa
  3. https://github.com/ZenGo-X/multi-party-ecdsa/blob/master/README.md

MPC-DKLS19

alt text

参考链接