使用 AWS Nitro Enclaves 构建安全的多方计算 (MPC) 钱包 数据库博客
- 16
使用 AWS Nitro Enclaves 构建安全的多方计算 (MPC) 钱包
作者:DavidPaul Dornseifer 和 Ben Liderman,发表于 2024 年 7 月 11 日
高级 (300) 区块链 技术如何做永久链接 评论
关键要点
区块链应用程序和用户对私钥管理解决方案有不同的需求,主要分为托管型和非托管型钱包。非托管型钱包赋予用户对私钥和资金的完全控制,适合加密货币用户。教育用户采用多方计算MPC钱包,提供安全的多方授权系统。AWS Nitro Enclaves 在安全性和数据保护方面发挥重要作用。不同类型的区块链应用及其用户对私钥管理解决方案有不同的需求,这些解决方案通常被称为钱包。托管型钱包由第三方管理,如集中式加密交易所,而非托管型钱包则让用户完全控制自己的私钥和资金。
具备数字资产管理经验的加密货币用户倾向于选择非托管型单钥钱包,这类钱包可以是硬件钱包,如 Ledger 提供的设备,或者是软件钱包,如 MetaMask 提供的应用程序。然而,机构或 去中心化自治组织DAO更偏爱更先进的钱包技术,这些技术提供更高的安全性和健全的多方授权系统,例如非托管型多方计算 (MPC) 或多签名钱包。
多签名钱包,如 Safe 提供的钱包,基于智能合约,要求预定义的最少用户数量批准交易才能执行。而MPC钱包则利用加密机制将私钥分割成多个钥匙片,分散在不同的参与者之间,使他们能够共同签署交易,而无需在单一地点重建完整的私钥。
相较于通常需要链上和区块链协议特定的多签名钱包,MPC钱包部署在链外,并且与协议无关,生成单一签名,避免了额外的交易成本。有关两个钱包类型之间差异的更多信息,请参考 MPC与多签名。

在本文中,我们将重点讨论MPC钱包。我们将介绍MPC钱包的核心概念,包括它们所提供的安全特性,使得MPC钱包非常适合机构客户。我们还将详细说明在AWS上实施分布式、具有高度安全性的MPC钱包的关键方面,包括使用 AWS Nitro Enclaves 保护最敏感的信息:密钥片的设计。
在 Nitro Enclaves 中实施 Fireblocks 客户 MPC 共同签名者
在区块链技术中,交易的真实性通过公钥加密进行验证:私钥签署交易,相应的公钥使其他人能够验证签名。这确定了区块链钱包最基本的规则:谁控制私钥,谁就控制关联的资金。
MPC 算法允许多个参与方在不透露其贡献的私有数据的情况下,协作计算某个函数。
河马加速器免费一小时一般来说,MPC 算法 被用于分布式生成私钥片 DKG,这样完整和整的私钥不会存在于任意单一位置。密钥片存储在 Fireblocks 服务器称为共同签名者和客户的移动设备或客户的共同签名者服务器上,这些服务器可以在本地或公共云环境中运行。
MPC算法允许基于不同可用密钥片以无信任的方式协作生成有效签名,而单一方无需访问完整私钥。
一组三个密钥片两个存储在Fireblocks共同签名者上,一个由客户持有允许像通过单一私钥一样签署交易,无论委托的三个密钥片集是什么假设在预先正确的DKG设置密钥片。这允许在客户的一方中,不同的设备或用户能够签署不同的交易,所有交易都对应相同的私钥,从而对应同一个钱包。
为了提高安全性,涉及这些钥匙片的所有操作均在AWS客户共同签名者服务器中于 Nitro Enclaves 内进行,确保敏感数据不会暴露或被篡改。您可以在这里找到有关 Fireblocks 对 AWS Nitro Enclaves 支持的公告的更多信息。
Nitro Enclaves 是被孤立、加固且高度约束的虚拟机,通过加密证明提供身份验证,其中 Nitro Hypervisor 生成包含独特 enclaves 测量和 AWS Nitro 公共密钥基础设施PKI签署的证书的签名证明文档。验证证明文档允许外部服务验证 enclaves 的特性,例如 enclave 的身份 PCR0 或 enclave 作者的身份 PCR8,从而得出只有被授权的代码正在 enclaves 内运行的结论。
enclave 身份通过映像文件的哈希值表示,还可以与 AWS 密钥管理服务 (AWS KMS) 密钥紧密结合,仅授予来自 enclave 内的请求的解密权限。
下图展示了新的客户共同签名者新移动设备或被指定持有新密钥片的共同签名者服务器的入驻过程。
新的客户共同签名者参与包含其自身和三个现有共同签名者之间信息交换的MPC协议包括客户方的一个现有共同签名者。在该协议结束时,将创建一组新的橙色三密钥片,使得新的客户共同签名者能够与 Fireblocks 共同签名者协作生成的签名,与之前存在的蓝色密钥片生成的签名无法区分。
如前图所示,基于MPC算法的系统提供了显著的灵活性。例如,如果客户需要授权新员工签署交易,他们可以通过在员工的移动设备或服务器上启动新密钥片的创建来实现这一点。
这通过使用拥有钥匙片的现有设备进行授权并生成新密钥片集来完成。因此,将形成一组三个新密钥片,对应于相同的私钥,顺利集成新的员工到交易签署过程中。
Fireblocks 客户 MPC 共同签名者架构概述
如以下架构图所示,分布式和高度可用的MPC钱包解决方案由多个MPC共同签名者组成,每个参与者在不同的AWS账户、多种AWS区域和多个可用区中部署。
每个MPC共同签名者连接到其他MPC共同签名者以创建有效的区块链签名,例如ECDSA或EdDSA。基于网络的信息交换可以通过点对点p2p进行,例如使用 libp2p这样的库,或者使用集中式消息代理,如 亚马逊简单队列服务 Amazon SQS或 亚马逊托管的Apache Kafka流服务 Amazon MSK实例。
基于 Nitro Enclave 的 MPC 共同签名者设计
如以下架构图所示,签名者实现由两个模块构成。
共同签名者 Pod 部署在 亚马逊弹性Kubernetes服务 Amazon EKS上。它管理本地 Nitro enclave 的生命周期,该 enclave 运行共同签署密钥片处理组件。它还提供所有必要的 vsock 代理功能,以便于 enclave 的入站和出站通信。
MPC共同签名者的第二个模块位于 enclave 内。共同签名者 enclave 负责安全处理创建、加密、解密和应用密钥片。Nitro Enclaves 的隔离属性和证明功能使其特别适合用于关键的密钥管理任务的运行时环境。
通过该设计,我们可以确保在 DK 成长过程创建的密钥片在写入到持久存储如 亚马逊简单存储服务 Amazon S3之前都在 enclave 内进行加密。
为了确保密钥片只能在所选的 enclave 内解密,该架构利用 Nitro Enclaves 的加密证明能力和 AWS KMS。这是通过使用 定制的 KMS 密钥资源策略 来完成的。
所有共同签名者之间运行的 MPC 签名协议具备零信任和零知识收益原则。所有通讯都是经过身份验证的,并且没有任何共同签名者可以在互动中了解到彼此的敏感信息。
构建安全 MPC 钱包的指导原则
在这一部分,我们将分享构建安全 MPC 钱包的一些指南和最佳实践。
确保正确使用加密技术
虽然本帖不涉及,但 Fireblocks 使用的 MPCCMP 算法的开源实现可以在 GitHub 上找到。
关注共同签名者的设计和实现
在讨论 Nitro Enclaves 内的 MPC 钱包时,主要关心的是交易签名能力。这些钱包旨在通过集中于运行加密操作来最小化攻击面。余额查看或交易监控等功能可以委托给产品生态系统中的其他服务。因此,重点应放在共同签名者组件的安全设计和实现上,包括安全软件开发生命周期、安全依赖管理、威胁建模和代码审计等方面。
建立安全的通信渠道
在零信任架构中,签名者不会认为消息代理和其他参与的共同签名者是诚实的。代理可能会修改、遗漏或重放从共同签名者发送或接收的任何消息。
下面的图示展示了一个示例架构。
由共同签名者创建的MPC消息使用公钥加密进行保护,并使用相关公钥验证每个签名。这样可以降低潜在中介风险。
每个 MPC 消息还包含一份证明文档。该证明文档由 Nitro Hypervisor 签名,使每一方能够使用相关 PCR 值验证共同签名者正在运行的映像。此外,外部方可以通过验证公共证书链来确认共同签名者在AWS提供的受信环境中运行。
可定制的用户数据字段包含一个哈希值,以将MPC消息与证明相关联。这防止攻击者使用旧的证明文档配合恶意消息,重放攻击也通过使用随机数跟踪历史交易得以缓解。
集成数据持久层
数据持久性需要存储在分布式密钥生成过程中创建的密钥片以及MPC签名生命周期内的瞬态数据例如生成的加密承诺。
验证签名的瞬态数据或密钥片的可用性至关重要,以避免共同签名者故障,例如,在重新启动或其他不可预见事件的情况下。
Nitro Enclaves 通常缺乏持久存储。如以下架构图所示,一个安全的解决方案是在易失性内存中使用加密的 SQLite 数据库,定期与外部存储如 Amazon S3进行同步。数据加密可以通过使用对称密钥以及 SQLite 加密扩展 来实现。
为了保证数据的机密性,加密和解密密钥应该使用支持 Nitro Enclave 证明的 AWS KMS APIs 进行派生,以允许只有源 enclave 能解密数据。您可以使用 AWS KMS 的 GenerateRandom 或 GenerateDataKey API 安全地派生所需的对称密钥。
例如,在共同签名者的新版本推出后,签名者从Amazon S3中检索加密的数据库文件以及相关的对称密钥,通过AWS KMS解密密钥,并使用明文对称密钥随后解密数据库。SQLite数据库随后被挂载到tmpfs中。
您也可以使用 Amazon DynamoDB 作为替代方案;然而,每次与数据库服务的交互都会引入额外的往返延迟和加重额外的加密及解密CPU 时间负担。
结论
在本文中,我们介绍了基于MPC的加密钱包的基本知识。我们解释了与MPC解决方案相关的重要方面和权衡,并详细说明了如何部署这些解决方案以及如何使用Nitro Enclaves进行安全的密钥片处理。
立即注册 Fireblocks 开发者沙盒,亲自体验基于 Nitro Enclaves 的 Fireblocks MPC 钱包!
关于作者
DavidPaul Dornseifer 是 AWS 的区块链开发架构师,专注于帮助客户设计、开发和扩展端到端的区块链解决方案。他的主要关注点是数字资产保管和密钥管理解决方案。
Ben Liderman 领导着 Fireblocks 的机密计算基础设施和共同签署者开发。
加载评论