MPC无私钥钱包原理
最近项目需求要做无私钥钱包,简单了解了一下。
OKX 无私钥钱包
OKX 服务器生成私钥碎片 1,用户生成私钥碎片 2 和私钥碎片 3。其中私钥碎片 2 加密保存在用户设备上,私钥碎片 3 加密备份到 iCloud 或 Google Drive。交易签名时使用私钥碎片 1 + 私钥碎片 2,私钥碎片 3 用作备份。
如果存在设备上的私钥碎片泄漏了,可以使用云恢复,连接 iCloud 或 Google Drive 获取私钥碎片 3 到本地,再恢复钱包。钱包成功恢复后,3 片私钥碎片会全部重置。此重置过程不会改变用户的钱包地址(TSS 私钥轮换),资产也不会受到影响。
OKX 无私钥钱包就是基于 MPC 技术。
助记词钱包和 MPC 钱包的区别
助记词钱包是由助记词生成种子,再由种子根据路径生成公私钥,公钥经过算法转换成地址。
MPC 钱包是没有助记词的,MPC 钱包是由多个私钥碎片联合计算推导出公钥,再推导出地址。
关于 MPC 生成不同链私钥,猜测还是使用 BIP44。
MPC 多方计算
密钥分片
在 MPC 钱包中,密钥并不是存储在单一地点,而是被分成多个密钥片段。每个参与方(例如用户设备、服务器等)都持有一个密钥片段。密钥片段的分配通常通过一种叫做秘密分享(Secret Sharing)的技术来实现,比如 Shamir’s Secret Sharing。分布式签名
当需要对一笔交易进行签名时,各参与方使用各自的密钥片段,通过 MPC 协议进行分布式计算。这个过程能保证密钥片段彼此独立,同时又能共同完成签名,不会泄露任何单一片段。交互式协议
参与方之间进行多轮交互,交换部分计算结果,以逐步完成整个签名过程。这种交互通常通过安全的通信渠道进行,确保各片段的数据传输安全。最终签名生成
完成所有交互计算后,各参与方联合生成完整的交易签名,并将签名附加到交易上。由于签名是通过分布式计算生成的,因此没有任何单一参与方能够独立计算出完整私钥。
门限签名 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 的有效性。
私钥轮换
私钥碎片:MPC 钱包的私钥是通过门限签名方案(Threshold Signature Scheme, TSS)分割成多个碎片,由多个参与方分别持有。
公钥:各私钥碎片组合生成的公钥,用于生成钱包地址。公钥保持不变,这样钱包地址也不变。
私钥轮换只是改变私钥碎片,新的私钥碎片仍然对应原本的钱包公钥,所以地址不会变。