Skip to main content

在移动端 CGGMP21 计算耗时久,DKG时候可达到7~9分钟

对,这个其实是很多“论文党”和“工程党”的分界点。

你这个观察非常真实:

CGGMP21 在论文里是 state-of-the-art,但在移动端实际体验可能非常差。

尤其:

  • iOS / Android
  • React Native
  • WASM
  • JS bridge
  • 低功耗 ARM CPU

场景下。


你这个观点其实面试里反而是加分项。

因为说明你:

不只是看 protocol round,而是真做过工程落地。


为什么 CGGMP21 在移动端会慢?

很多人误以为:

“1-round signing = 很快”

其实:

因为:

round ≠ computation

CGGMP21:

  • online round 少
  • 但单轮计算量巨大

真正耗时的地方

1. Safe Prime Generation

CGGMP21 最大性能黑洞:

  • Paillier modulus
  • safe prime generation

比如:

生成:

[ N = pq ]

其中:

  • p/q 是 safe primes

safe prime 条件:

[ p = 2p' + 1 ]

这比普通 RSA prime 难很多。


而移动端:

  • ARM CPU
  • 没 AVX2
  • 没大缓存
  • BigInt 很慢

所以:

生成 safe prime 可能:

  • 单 participant 几十秒
  • 多 participant 直接数分钟

这非常正常。 (Docs.rs)


2. 大量 ZK Proof

CGGMP21 不只是 MPC。

它还有:

  • range proof
  • modulus proof
  • Paillier proof
  • consistency proof

这些:

全是 Big Integer 运算

移动端最怕这个。


3. Rust/WASM 在移动端 BigInt 不友好

如果你:

  • React Native
  • Tauri
  • WASM
  • Hermes/JSC

会更惨。

因为:

wasm bigint 在 mobile js engine 很慢

尤其:

  • Hermes
  • JSC

和 desktop Chrome V8 差距巨大。


4. 网络 round 少 ≠ 总延迟低

CGGMP21 优化的是:

WAN latency

比如:

欧美跨洲 HSM 集群。

不是:

手机 CPU。


一个经典误区

很多人会说:

“CGGMP21 比 GG20 快”

这其实:

只对 server-to-server 成立

因为:

它减少:

  • RTT
  • round trip

但:

CPU computation 实际更多

尤其 preprocessing。


DKG 为什么最慢?

因为:

DKG 不只是:

  • secret sharing

它还要:

Auxiliary Info Generation

这个才是真正炸性能的。

包括:

  • safe prime
  • Paillier keygen
  • ZK proof

官方文档甚至直接写:

computationally heavy (Docs.rs)


所以你看到 7~9 分钟正常吗?

非常正常。

尤其:

条件是否容易爆炸
手机 ARM
WASM
JS bridge
Debug build
多 participant
threshold > 2
safe prime realtime generate

甚至:

有些安卓机会:

  • 10+ 分钟
  • 发热
  • 被系统降频
  • 被系统 kill

业界真实做法

真正商业 MPC Wallet:

不会在移动端完整跑 CGGMP21 DKG

而是:


方案1:服务端做 Auxiliary Info

最常见。

客户端:

  • 只参与部分 protocol

服务端:

  • 预生成 safe prime
  • 预生成 Paillier

方案2:预生成 PregeneratedPrimes

官方库已经暗示了:

PregeneratedPrimes::generate()

因为:

生成 prime 最贵。

所以:

会缓存/持久化

而不是每次生成。

(Docs.rs)


方案3:移动端只做 Signing

这是最多的。

移动端:

  • 不做 DKG
  • 不做 refresh

只做:

  • online signing

因为:

signing 已经快很多。


方案4:改用 Schnorr/FROST

这是行业趋势。

因为:

FROST:

  • 无 Paillier
  • 无 safe prime
  • 无 MtA
  • 无超大 ZK

性能直接吊打 threshold ECDSA。


所以现在行业出现分裂

Bitcoin/EVM

不得不用:

  • GG20
  • CGGMP21

因为:

  • secp256k1 ECDSA

新链

开始转:

  • Schnorr
  • EdDSA
  • FROST

因为:

MPC 太舒服了。


面试高级回答(非常加分)

你可以这样说:

虽然 CGGMP21 在协议层面实现了更低 online round 和更好的安全性,但在移动端实际落地时,性能问题非常明显。

特别是 DKG 阶段涉及 safe prime generation、Paillier keygen 和大量 ZK proof,这些 BigInt 运算在 ARM 设备和 WASM 环境下非常慢。

实际工程里,CGGMP21 更适合 server/HSM 场景,而移动端通常会:

  • 预生成 auxiliary info
  • 缓存 Paillier primes
  • 只在移动端做 signing
  • 或直接采用 FROST/Schnorr 体系

所以 protocol round 少,并不等于移动端实际耗时低。

这个回答已经是:

“真正做过 MPC Wallet 的人”

的回答了。