MPC无私钥钱包原理

最近项目需求要做无私钥钱包,简单了解了一下

OKX无私钥钱包

OKX服务器生成 私钥碎片1,用户生成私钥碎片2 和 私钥碎片3,其中私钥碎片 2 加密保存在用户设备上,私钥碎片 3 加密备份到 iCloud 或 Google Drive。交易签名时使用私钥碎片 1 + 私钥碎片 2,私钥碎片 3 用作备份。

如果存在你设备上的私钥碎片泄漏了,可以使用云恢复,连接上 iCloud 或 Google Drive 获取私钥碎片 3 到本地,恢复钱包。钱包成功恢复后,3 片私钥碎片会全部重置。此重置过程不会改变用户的钱包地址(TSS私钥轮换),资产也不会受到影响。

参考: OKX-什么是无私钥钱包?

OKX 无私钥钱包就是基于 MPC 技术

助记词钱包和MPC 钱包的区别

助记词钱包是由助记词生成种子,再由种子根据路径生成公私钥,公钥经过算法转换成地址

MPC钱包是没有助记词的,MPC钱包是由多个私钥碎片联合计算推导出公钥,再推导出地址

关于MPC生成不同链私钥,猜测还是使用BIP44

MPC 多方计算

  1. 密钥分片
    在MPC钱包中,密钥并不是存储在单一地点,而是被分成多个密钥片段,每个参与方(例如用户设备、服务器等)都持有一个密钥片段。密钥片段的分配通常通过一种叫做秘密分享(Secret Sharing)的技术来实现,如Shamir’s Secret Sharing。

  2. 分布式签名
    当需要对一笔交易进行签名时,各参与方使用各自的密钥片段,通过MPC协议进行分布式计算。这个过程确保即使密钥片段之间彼此独立,它们也能共同完成签名,而不会泄露任何单一片段。

  3. 交互式协议
    参与方之间进行多轮交互,交换部分计算结果,以逐步完成整个签名过程。这种交互通常通过安全的通信渠道进行,确保各片段的数据传输安全。

  4. 最终签名生成
    在完成所有交互计算后,各参与方联合生成完整的交易签名,并将签名附加到交易上。由于签名是通过分布式计算生成的,因此没有任何单一参与方能够独立计算出完整的私钥。

门限签名 TSS

门限签名方案是一种特殊的多重签名形式,它允许任意数量的密钥(超过某个门限值)对交易进行签名。例如,如果设置门限为2/3,那么三把密钥中的任何两把都可以签署交易。这种方法提高了安全性和灵活性。

举个例子

假设有一个私钥K,需要分成5个片段,门限值为3:
即只使用3个碎片即可完成签名

密钥分片:

生成私钥K。
使用Shamir’s Secret Sharing,将K分成5个片段K1, K2, K3, K4, K5。
分发给5个参与方A, B, C, D, E。
签名请求:

需要对消息M进行签名,发起签名请求。
部分签名生成:

A, B, C(至少3个)各自使用其片段生成部分签名S_A, S_B, S_C。
A的部分签名:S_A = f(M, K1)
B的部分签名:S_B = f(M, K2)
C的部分签名:S_C = f(M, K3)
签名组合:

收集到部分签名S_A, S_B, S_C后,使用Lagrange插值法组合成完整签名S。
验证签名:

使用公钥验证S,确认其对消息M的有效性。

OKX开源的门限签名算法 Go实现

私钥轮换

私钥碎片:MPC钱包的私钥是通过门限签名方案(Threshold Signature Scheme, TSS)分割成多个碎片,由多个参与方分别持有。
公钥:各私钥碎片组合生成的公钥,用于生成钱包地址。公钥保持不变,这样钱包地址也不变

只是私钥碎片的改变,新的私钥碎片还是组成原本的私钥