平台动态

Safeheron 正式开源全球首个基于 C++ 的 MPC 门限签名协议库

By Safeheron Team - 2023-04-25

Safeheron 是一家透明、开源的数字资产自托管平台,创始初心即为加密世界贡献透明、开源、可验证的安全自托管基础设施。本着这个原则,Safeheron 坚持密码学研究并积极推进 MPC 技术应用,核心算法相继开源,今日正式开源多个MPC-ECDSA 协议,包括著名的 MPC-CMP 协议

Safeheron 此次开源 GG18 、GG20、MPC-CMP 三种被头部钱包托管技术商广泛采用的 MPC-ECDSA 协议 ,同时对密码学原语库也做了扩充。

本次开源填补两项市场空白:

  1. 这是全球首个 C++ 语言版本的开源 MPC 门限协议库,便于低成本移植到多个平台。
  2. 这是全球首个亚洲安全技术团队自主设计、开源的 MPC 门限协议库,有助于更好地为亚洲企业和开发者提供安全技术研究,提高亚洲技术在全球数字资产市场的竞争力。

为推进行业开源生态建设,Safeheron 已邀请 SlowMist、Amber Group 安全团队和 PlatON 科研团队,参与验证开源代码的正确性和安全性,一起推动开源库以及开源社区的建设,在此向他们致谢。

MPC 介绍

安全多方计算(Secure Multi-Party Computation),记为 SMPC/ MPC,它是指在无可信第三方的情况下,多个参与方协同计算一个约定的函数。MPC 起源于姚期智先生于 1982 年提出的百万富翁问题及其密码学解法,后来不断发展和完善,已成为当前密码学的一个重要分支。

Safeheron Lab 一直以来深耕 MPC 研究,与姚期智院士创建的图灵研究院共建联合实验室,深度参与可信计算与区块链融合的研究,Safeheron Lab 已将部分 MPC 研究课题开源。

从 2018 年开始,MPC 技术被应用在区块链数字资产领域的私钥安全设计中。据不完全统计,4 年时间内,超过 3 万亿美元的数字资产转移通过 MPC 私钥方案签署完成,这一方案被纽约梅隆等上千家银行和顶级机构采用。2010 年后,MPC 开始越来越频繁地进入实用阶段。

目前 MPC 协议可以分成两大类:通用 MPC 协议和专用 MPC 协议。

通用 MPC 协议,顾名思义,具有通用性,理论上可支持任何计算任务。它一般基于混淆电路(Garbled Circuit)实现。具体实现步骤是将计算逻辑编译成电路,然后混淆执行。然而,随着问题的复杂化(大部分常见问题就很复杂),电路的规模也会迅速扩大,导致计算效率大大降低。

专用 MPC 协议则是指为解决特定问题所构造出的特殊 MPC 协议。由于是针对性构造并进行优化,专用算法的效率会比基于混淆电路的通用框架高很多。常见 MPC 专用算法包含,四则运算、比较运算、矩阵运算、隐私集合求交集、隐私数据查询、私钥门限签名等。

在实际应用场景中,人们常常会寻求快速高效的专用 MPC 协议。

区块链领域的 MPC 研究

为了更好地保护区块链上的数字资产,MPC 被引入到多签场景中来。在任何时间,任何地点,公钥对应的私钥都未存在过,取而代之的是多个私钥分片,即,通过密码学技术,彻底去除私钥单点风险。也就是说,要求单私钥不出现,而是通过多个私钥分片,不同参与方在签名时通过 MPC 协议计算出最终签名,且此签名能通过对应的单个公钥的验签。这一类技术称为 MPC 多签。

随着研究的推进,一些重要的 MPC 多签协议相继被发表。在 MPC-ECDSA 研究方向,典型的有,Lin17 提出的关于 ECDSA 的两方签名算法和 GG18 提出的多方参与的门限签名协议。此后,算法协议层出不穷,比如 DKLS18DKLS19GG20MPC-CMPDMZ-21 等等。这些算法研究的重心在于:

  • 减少通信次数
  • 降低计算工作量
  • 安全性分析与安全增强
  • 增强对恶意敌手的识别
  • 降低生成私钥的算力要求

更快、更高效、更安全始终是 MPC 研究的目标。

开源 MPC-ECDSA 协议

Safeheron 此次一共开源 3 种具有代表性的 MPC-ECDSA 协议:

其中,GG18 是 Rosario Gennaro 和 Steven Goldfeder 提出来的,第一个有影响力的、进入实用阶段的 MPC-ECDSA 门限多签协议。大部分后续提出的 MPC-ECDSA 门限多签协议,都可以看作是 GG18 不同角度的优化版本。需要注意的是,GG18 早期版本存在一些安全隐患,在安全分析报告的基础上,此次开源的算法对其进行了针对性的修正。

GG20 是对 GG18 的优化,除了将通信轮数从 9 轮降低到 6 轮,还增强对恶意敌手的识别能力,并支持 Offline-Sign 模式。

MPC-CMP 由 Fireblocks 提出,是对 GG18 的进一步优化,主要是将通信轮数(包含 pre-sign 阶段)降低到 4 轮。为了使描述更加简洁,MPC-CMP 论文采用 n-n 签名的方式描述整个算法,并提到可以适应 t-n 门限签名,但尚未展开详细说明。我们对如何将 MPC-CMP 修改为 t-n 门限签名算法进行细节描述补充,参考文档为《Modify MPC-CMP as a Threshold Signature Scheme》。

值得一提的是,上述的开源协议库不仅仅支持 Secp256k1,还支持多种椭圆曲线,全部如下:

  • Secp256k1
  • P-256 (Secp256r1)
  • STARK 曲线

去年 Safeheron 已经开源TSS-RSA 协议,感兴趣的朋友可以点击链接查看。

支持 STARK 曲线

近期,Safeheron 已披露某些 dApp 的授权设计在特定的场景下存在潜在风险的信息,即,基于签名派生密钥风险(Signature-derived Key Risk)。dApp 在授权连接时可以绕过硬件钱包(冷钱包)对私钥的安全防护,亦或者, MPC 自托管钱包提供商可未经用户授权,掌握用户 dApp 中资金的控制权限。

放dydx漏洞文章链接卡片

此次开源的 MPC-ECDSA 协议库支持 STARK 曲线,即,针对 StarkEx 所使用的 ECDSA 算法设计 MPC 协议,在私钥管理层面实现多人共管。MPC 钱包用户能在 StarkEx 场景下更安全地保护私钥,高效进行多方资产管理,无需担心内外部作恶。另外,社区也可以基于此开源协议定制不同的解决方案。

丰富的基础密码学原语

在开源 MPC 应用层协议的同时,Safeheron 也开源丰富的密码学原语库:

算法库 功能
crypto-bn-cpp 大整数计算
crypto-curve-cpp 统一的椭圆曲线库计算
crypto-commitment-cpp Commit Scheme
crypto-hash-cpp 杂凑函数计算
crypto-encode-cpp Base64、base58 和 hex 编解码运算
crypto-paillier-cpp Paillier 快速加解密算法
crypto-sss-cpp 可验证的密钥分享算法
crypto-zkp-cpp 一系列零知识证明协议
crypto-bip32-cpp 实现 Bip32 中的核心功能
crypto-bip39-cpp 实现 Bip39 中的核心功能
crypto-ecies-cpp 实现 IEEE 1362a 中定义的 椭圆曲线公钥加密算法和认证加密算法

所有这些密码学原语,可以通过 safeheron-crypto-suites-cpp

多平台支持

设计之初我们就考虑到跨平台的需求,结合性能方面的综合考量后,Safeheron 的 MPC 协议和基础密码学原语最终都采用 C++ 语言来开发。因为良好的设计,可以便捷高效地将所有算法移植到大部分平台,包括 Windows、Mac、Linux、Sgx in Linux、SGX in Windows、Android、iOS、WASM 等等。

关于审计

Safeheron 的内部算法库 https://github.com/safeheron/mpc-dsa-lib 早在 2020 年 12 月就通过瑞士顶尖安全审计方 Kudelski Security 的审计。此算法库涵盖 GG18 实现和大量基础密码学原语。后续,为保证开源透明和高效维护,Safeheron 会将不同类型的密码学原语从内部库独立出来,作为项目库单独开发。
GG18 在 2020 年 12 月也已通过 Kudelski Security 的审计,今后我们会继续对其他 MPC 协议开展审计。

未来开源计划

Safeheron 深耕安全行业多年,始终秉持知行合一的理念,致力于贯彻安全与去中心化的统一。为积极推进行业开源生态建设,Safeheron 正在联合 SlowMist、Amber Group 安全团队和 PlatON 科研团队一起推动开源库以及开源社区的建设,并邀请其参与验证开源代码的正确性和安全性,同时,社区可以基于此开源协议定制不同的解决方案,真正享受开源的福利。

开源是一个持续化的过程,除此次开源的 MPC-ECDSA 协议之外,Safeheron 今年的开源计划还有:
2023 年 12 月:

  • 开源 MPC-EdDSA 协议
  • 开源 MPC-BLS 协议

在未来,我们还会适时开源:

  • MPC-ECDSA 中的其它协议,比如 DKLS19 等
  • MPC-HMAC 协议
  • SGX 库

参考文献

【1】[Lin17] Fast Secure Two-Party ECDSA Signing
【2】[GG18] Fast Multiparty Threshold ECDSA with Fast Trustless Setup
【3】[DKLS18] Secure Two-party Threshold ECDSA from ECDSA Assumptions
【4】[DKLS19] Threshold ECDSA from ECDSA Assumptions: The Multiparty Case
【5】[GG20] One Round Threshold ECDSA with Identifiable Abort
【6】[MPC-CMP] UC Non-Interactive, Proactive, Threshold ECDSA
【7】[DMZ-21] Promise Σ-protocol: How to Construct Efficient Threshold ECDSA from Encryptions Based on Class Groups
【8】Enhancing Security on MPC Wallet-dYdX Connections
【9】EverPay Collaborates With Safeheron To Increase Security Performance By 47 Times