MPC 钱包:私钥从未完整存在过

传统钱包的问题

用过普通钱包(MetaMask、Trust Wallet)的人都知道,创建钱包时会生成一组助记词:

witch collapse practice feed shame open despair creek road again ice least

这 12 个单词本质上就是你的私钥。它的问题很简单:

  • 抄错一个字 → 永久丢失资产
  • 被人拍到 → 资产全部被盗
  • 手机丢了没备份 → 再见

私钥是单点故障。整个安全体系建立在"这串数字只有你知道"的假设上,一旦泄露,没有任何补救手段。


MPC 是什么

MPC = Multi-Party Computation(多方安全计算)

核心思想:私钥从头到尾都不以完整形式存在,而是被拆成多份"分片",分别由不同的参与方持有,签名时各方协作计算,最终得出签名结果。

传统签名:
  完整私钥 → 签名

MPC 签名:
  分片 A(你的设备)
  分片 B(服务器 / 另一台设备)
  → 协议计算 → 签名
  
  私钥从未在任何地方完整出现过

完整流程

第一步:密钥生成(Keygen)

你的设备                    服务器
    │                          │
    │  ←── 多轮交互协议 ──→    │
    │                          │
  分片 A                     分片 B
  存本地                     存服务器

没有任何一方知道完整私钥
但双方可以算出同一个公钥(也就是你的钱包地址)

第二步:签名(Sign)

发起一笔交易时:

你的设备(分片 A)              服务器(分片 B)
      │                              │
      │  ←── 多轮 MPC 签名协议 ──→  │
      │                              │
      └──────── 合并 ───────────────┘
                    ↓
               完整签名
               (但私钥从未出现)

第三步:恢复(Recovery)

手机丢了?

服务器持有分片 B
+ 身份验证(邮箱 / 社交账号 / 其他设备)
→ 重新生成新的分片 A
→ 钱包恢复 ✅

不需要助记词

技术细节

目前主流的 MPC 签名算法是 GG18 / GG20 / DKLs23

  • 都是基于 secp256k1 曲线(以太坊和比特币用的曲线)
  • DKLs23 是最新一代,通信轮次更少,速度更快
  • 签名结果和普通私钥签名完全一样,链上无法区分
链上看到的:
  标准 secp256k1 签名(r, s, v)

链上不知道的:
  这个签名是 MPC 多方协作算出来的

MPC vs 普通私钥 vs 多签

普通私钥多签(Multisig)MPC
私钥存在形式完整,存设备完整,多人各持一份分片,从不完整
链上痕迹普通地址合约地址,费用高普通地址,无痕迹
单设备丢失资产丢失取决于阈值可恢复
Gas 费用普通额外合约调用费普通
恢复方式助记词其余持有方身份验证重新分片

优势与局限

优势:

  • 私钥永远不完整暴露,消灭单点故障
  • 链上地址和普通钱包一样,无额外 gas
  • 丢失设备可以恢复,不依赖助记词
  • 可以实现"1/2 阈值":你的设备 + 服务器,任一方单独都无法签名

局限:

  • 签名需要多方在线通信,有网络延迟
  • 目前主流实现只支持 secp256k1(以太坊/比特币),Solana 的 ed25519 暂不支持
  • 依赖服务器参与,服务器宕机会影响签名(需要备份机制)

适合谁

  • 不想管助记词的普通用户
  • 企业资金管理:内控要求多人参与的签名
  • 需要高安全性但又想要普通钱包地址体验的用户

小结

MPC 钱包的核心价值是一句话:

私钥从未完整存在过,所以它不可能被完整盗走。

它不改变区块链本身的规则,链上看到的还是标准签名。改变的是私钥在设备和服务器之间的存储和使用方式,把"保管好一串数字"变成了"多方协作才能动用资产"。