Skip to main content

面试题:MPC GG20 与 GG18、 CGGMP21区别

这是一个非常经典的 MPC/TSS 面试题,尤其是做钱包、托管、AA Wallet、链上签名基础设施时经常会问。

你可以从:

  • 发展历史
  • 签名轮数(round)
  • 在线/离线阶段
  • identifiable abort
  • 安全性
  • 工程复杂度
  • 性能

几个维度回答。


一句话概括

  • GG18:第一个真正实用的 threshold ECDSA
  • GG20:GG18 的工程化优化版,引入 offline/online signing 和 identifiable abort
  • CGGMP21:目前业内最先进的一类 threshold ECDSA,进一步降低在线交互轮次,支持预处理和更强安全模型

先讲背景:为什么 ECDSA MPC 很难?

ECDSA 的核心问题:

[ s = k^-1(m + rx) ]

这里同时涉及:

  • 私钥 (x)
  • nonce (k)
  • inverse (k^-1)

而:

  • (k) 绝对不能泄露
  • 还需要做乘法:

[ rx ]

这导致:

  • threshold Schnorr 很简单(FROST)
  • threshold ECDSA 非常复杂

所以 GG18/GG20/CGGMP21 本质都是:

如何在不泄露 x/k 的情况下,多方安全完成 ECDSA 的乘法与逆元计算。


一、GG18

论文:

  • Gennaro & Goldfeder 2018

它是:

第一个真正支持 t-of-n 的 Threshold ECDSA。


GG18 特点

1. 基于 Paillier Homomorphic Encryption

核心:

  • 用 Paillier 做 MtA(Multiplicative to Additive)

即:

把:

[ ab ]

变成:

[ a_i + b_i ]

的 secret share。

这是 threshold ECDSA 的核心技巧。


2. 签名轮数高

GG18 最大问题:

  • signing 约 9 rounds

通信极重。

这是它最大缺点。 (Tübitak Bilgem)


3. 没有 identifiable abort

如果有人恶意:

  • 发错误 proof
  • 中途退出

你很难定位是谁。


4. 工程复杂

GG18 有大量:

  • ZK Proof
  • range proof
  • Paillier proof

实现难度极高。


GG18 面试总结

你可以一句话:

GG18 是第一个真正可用的 threshold ECDSA,但 round 太多、交互太重、缺少 identifiable abort,因此工程体验一般。


二、GG20

GG20 是 GG18 的升级版。

核心目标:

降低在线签名 latency。


GG20 最大创新:offline / online

GG20 把签名拆成:

  • offline preprocessing
  • online signing

Offline 阶段

提前做:

  • Paillier computation
  • MtA
  • nonce generation
  • proof

这些很重。


Online 阶段

真正签消息时:

只剩:

  • 少量 scalar multiplication
  • 极少交互

所以:

在线签名接近 1 round。 (Tübitak Bilgem)


GG20 的 identifiable abort

GG20 一个重要特性:

可识别恶意方

如果有人:

  • 发错 proof
  • 篡改消息
  • 中途退出

协议能:

明确定位恶意 participant。

这在托管系统极重要。


GG20 vs GG18

特性GG18GG20
签名轮数~9online 接近 1
identifiable abort
offline preprocess
latency
工程复杂度很高更高(笑)

GG20 的问题

虽然更快:

但:

1. 仍然依赖 Paillier

所以:

  • 大整数运算重
  • proof 非常复杂

2. Paillier 参数有安全坑

后来发现:

  • 一些实现对 Paillier modulus 验证不严格
  • 可导致 key leakage

典型:

Fireblocks 披露的 GG18/GG20 漏洞。 (Fireblocks)


三、CGGMP21

全名:

  • Canetti-Gennaro-Goldfeder-Makriyannis-Peled 2021

它本质:

在 GG20 基础上的现代化 redesign。


CGGMP21 的核心目标

1. 更少 online round

支持:

  • 1-round online signing(需 preprocessing)

这是目前业界非常重要的特性。 (docs.rs)


2. 更强安全性

CGGMP21 修复了:

  • GG18/GG20 一些 proof weakness
  • Paillier 参数问题
  • MtA proof 问题

安全模型更完整。 (certik.com)


3. 更现代的 protocol modularization

CGGMP21:

  • preprocessing 更独立
  • signing 更模块化
  • 更适合生产系统

4. 支持 key refresh

现代 MPC Wallet 很重要:

  • 不换公钥
  • 定期刷新 secret share

降低长期泄露风险。

CGGMP21 对 refresh 支持更好。 (docs.rs)


5. 工程界采用越来越多

现在很多:

  • Rust MPC SDK
  • 新 MPC Wallet
  • institutional custody

开始转向 CGGMP21。

例如 Rust crate:

cggmp21 crate


GG18 / GG20 / CGGMP21 总对比

维度GG18GG20CGGMP21
年代201820202021
核心目标首个实用 Threshold ECDSA降低 online latency现代化/更安全
在线轮数高(~9)极低1-round
Offline preprocess
identifiable abort
安全性初代更强更强
Paillier✅(但proof更完善)
Key refresh有限部分更完善
工程复杂度很高很高
当前行业趋势仍常见新趋势

面试官真正想听什么?

重点通常是:

1. 你知道 GG20 是 GG18 的优化

而不是全新体系。


2. 你知道 offline/online separation

这是 GG20 核心。


3. 你知道 identifiable abort

这是生产环境关键。


4. 你知道 CGGMP21 是目前 state-of-art

特别:

  • 1-round signing
  • preprocessing
  • 更强 proof

如果继续深问

面试官可能继续:

Q1:为什么 ECDSA MPC 比 Schnorr 难?

你答:

ECDSA 有:

[ k^-1(m+rx) ]

需要:

  • inverse
  • multiplication

而 Schnorr/FROST 只有线性加法。


Q2:为什么大家喜欢 FROST?

因为:

  • round 少
  • proof 简单
  • 不需要 Paillier
  • 更适合 MPC

但:

  • Bitcoin/Ethereum 用的是 ECDSA/secp256k1
  • 所以钱包不得不做 threshold ECDSA。

Q3:为什么 Paillier 很重要?

因为:

ECDSA MPC 需要安全做:

[ ab ]

Paillier 支持:

[ E(a)^b = E(ab) ]

从而实现 MtA。


最后给你一个“面试版标准答案”

可以直接背:

GG18 是第一个真正实用的 threshold ECDSA 协议,但 signing round 很高,通信复杂,没有 identifiable abort。

GG20 在 GG18 基础上引入了 offline/online separation,把大量计算放到 preprocessing 阶段,因此在线签名延迟非常低,并支持 identifiable abort,更适合生产环境。

CGGMP21 则是在 GG20 基础上的进一步现代化方案,支持 1-round signing、更强的安全证明、更完善的 preprocessing 与 key refresh,目前被认为是 state-of-the-art 的 threshold ECDSA 协议之一。

这几个协议本质都依赖 Paillier + MtA 来解决 ECDSA 中乘法与逆元的问题。 (Tübitak Bilgem)