# 去中心化钱包技术方案浅谈

By [Alpha](https://paragraph.com/@alpha-li) · 2023-03-28

---

1\. 概述
------

### 1.1 去中心化钱包的定义

区块链去中心化钱包，私钥保存在用户自己的手里，资产存储在区块链上，用户是真正的数字货币的持有者，钱包只是帮助用户管理链上资产和读取数据的一个工具。

因此去中心化的钱包很难被黑客集中攻击，用户也不必担心钱包服务商的自我窃取或者跑路，因为只要创建钱包的时候自己把私钥保管好，你的资产依然在链上，换个钱包一样可以显示出来的。 另外，去中心化钱包有三个特征：

1.  去中心化钱包仅作为钱包地址生成工具并提供相应的服务，钱包提供方并不保存用户的私钥或者助记词等信息；
    
2.  钱包的每一笔数字资产存取、转账数据均可在区块链上查询得到；
    
3.  用户的数字资产储存在区块链上，而不是由钱包服务商统一管理。
    

**注意：去中心化钱包一旦丢失、被盗，在没有备份私钥或助记词的情况下是无法找回的！**

### 1.2 去中心化钱包的现状

在区块链数字资产刚刚盛行之初，去中心化钱包按照去中心化程度，可以分为全节点钱包和轻钱包。按照私钥存储方式，又可以分为冷钱包，温钱包，热钱包。以上概念的提出和落地产品都相对较早，不再赘述，也不在本文讨论范围之内。

随着多签技术的发展及应用，合约多签和MPC技术逐步开始被广泛应用到去中心化钱包的生态当中。开始有了传统去中心化钱包（又常被称为传统HD钱包）、智能合约钱包（又称为多签钱包）和MPC去中心化钱包（简称MPC钱包）的区别。相比较传统钱包，多签钱包和MPC钱包在安全性上有了极大的提升。如下图为几种钱包当前具有代表性的产品。

![图1](https://storage.googleapis.com/papyrus_images/77741b3a6f4368c8e17ca6b70ef991956354ee702f6fe3bb46f8393204712741.png)

图1

**1.2.1 传统（HD）钱包**

传统钱包使用助记词和分层确定性 (HD) 结构来派生私钥、对应的公钥和链上地址。这些钱包允许用户生成用于签署交易的私钥，并使用助记词恢复所有密钥。

到目前为止，传统（HD）钱包依然是目前使用的主流资产保管钱包。以MetaMask钱包为例，就存有数百万用户，但是传统（HD）钱包的私钥安全、单点故障、用户入门门槛等问题一直受到用户诟病。而想要降低资产安全风险的唯一路径，便是使用类似于Ledger、Trezor等硬件钱包，但带来的问题是用户体验下降。

**1.2.2 智能合约（多签）钱包**

以Ethereum为代表的EVM公链，其特有的账户类型：

*   外部拥有帐户 (Externally Owned Account，简称EOA)——由私钥控制
    
*   智能合约帐户（Contract Account，简称CA）——由代码控制
    

智能合约钱包是由智能合约账户（CA）代替外部拥有账户（EOA）管理数字资产。通过合约代码实现其管理的资产转移或者变更必须由M-of-N秘钥签名方可执行。所以智能合约钱包必须完成链上合约部署才可以真正使用。

智能合约钱包可以和传统（HD）钱包结合使用。例如使用Ledger硬件钱包作为智能合约钱包中多签Owner中的一员。

**智能合约钱包的优势**

*   无单点故障。执行交易需要多个签名。
    
*   可编程访问控制。用户可以定义不同的策略，设置时间锁、支出限制、自动化等。
    
*   可以实现交易批处理以节省成本。
    
*   可扩展。由于智能合约的可组合性，钱包开发人员可以创建一个模块生态系统，用户可以选择将这些模块添加到他们的钱包中，为 NFT 借贷框架、DAO 投票模块和非托管资产管理服务等新功能创建一个应用程序商店。
    
*   可编程恢复。钱包可以提供几种选择，将资金回收到智能合约本身。
    
*   链上问责制。链上签名授权策略和聚合可以明确使用哪些密钥对交易进行签名，从而使操作更加透明和直接，以便在出现错误的情况下审计谁参与了交易。
    
*   支持迁移到其他签名方案。智能合约钱包可以将其签名方案改为更简单、更省 gas 或抗量子的方案。他们还可以在 iOS 和 Android 设备上使用 ( 将手机变成硬件钱包 )，或启用 Ed25519，允许使用 iOS 生物识别和网络认证。
    
*   开源。任何人都可以审计智能钱包的实现和功能扩展，从而通过生态系统的方式解决漏洞和添加新功能。
    

**智能合约钱包的缺点**

*   更高的费用。智能钱包的费用比普通的单地址交易要高，因为需要验证多个签名。添加 / 删除所有者和更改阈值等操作也需要链上交易。
    
*   没有得到普遍支持。虽然智能钱包可以部署在相同地址的任何 EVM 链上，但它们需要在非 EVM 链上定制实现。
    
*   恢复成本更高。虽然恢复逻辑是可编程的，但需要支付链上费用来执行它。
    
*   与不可升级的合约不兼容。尽管 EIP -1271 允许应用程序代表合约钱包进行签名，但它仍然没有得到普遍支持，并且不能添加到不可升级的合约中。
    

**智能合约钱包未来的技术展望**

*   EIP-4337：将签名验证、gas 支付和重放保护从核心协议移出到 EVM 中，让用户能够使用包含任意验证逻辑的智能钱包，而不是将 EOA 作为他们的主要帐户，同时也无需任何共识层更改。这个 EIP 引入了一个 UserOperations 内存池，它与现有的内存池并行存在。捆绑器 ( 验证者、MEV 搜索者或应用程序本身 ) 从 UserOperations 池获取交易，将它们转发给区块链并支付费用。在这里，启动钱包本身不支付 gas 费用，但应用程序可以通过收费订阅模式为用户聚合。
    
*   EIP-3074：允许 EOA 将控制权委托给合约，让现有的 EOA 发送由第三方支付的操作。
    
*   EIP-5003：将现有的 EOA 升级为合约，并允许其从 ECDSA 迁移到更高效或抗量子签名方案。
    

**1.2.3 MPC钱包**

多方安全计算（MPC）最常见的实现方式为门限签名（TSS）。门限签名也是实现多签的一种方式，它是基于安全参数构造一种分布式秘钥生成协议DKG，协议运行输出一个共同的公钥pk和分属不同参与方各自所有的私钥ski，当聚集起满足阀值数量的私钥分片时即可构建出真正的私钥sk。当交易签名时，基于分布式通信网络，各参与方通过自己的私钥分片ski完成对消息m的分布式协作签署并输出可验证的签名Sig（sk, m），这个签名效果和单独使用sk私钥签名签出的效果是一样的，都是可以被验证的，故而MPC钱包生成的交易与传统的私钥钱包的交易没有区别。

**MPC钱包的优势**

*   无单点故障。一个完整的私钥在任何时候都不会集中在一台设备上。也没有助记词。
    
*   可调整的签名方案。批准固定人数可以随着个人和组织需求的变化而修改，同时保持相同的地址。组织可以动态调整签名方案，而不必每次都通知交易对手一个新地址。
    
*   粒度访问控制。机构用户可以为一个策略分配无限数量的交易审批者，并分配能够准确反映组织角色和安全措施 ( 时间锁、MFA、欺诈监控 ) 的权限。个人可以通过 MPC 钱包即服务 (wallet-as-a-service) 选择半托管路线，第三方持有其中一个关键共享部分。
    
*   更低的交易和回收成本。MPC 钱包在区块链上表示为单个地址，其 gas 费用与常规私钥地址相同。这对于每天进行数百个交易的用户 ( 例如在 B2C 用例中 ) 来说非常重要。丢失的密钥共享部分也可以进行链下回收。
    
*   区块链不可知论者。密钥生成和签名依赖于链下的纯密码学。将兼容性扩展到新的区块链很简单，因为钱包只需要能够使用该链识别的算法生成签名。
    

**MPC钱包的缺点**

*   链下问责制。签署授权政策和批准固定人数是在链下管理的，因此这些自定义规则仍然容易出现中心化问题。密钥共享仍然是加密秘密，应该像处理整个私钥一样处理。链下规则和签名阻碍了透明度，需要更严格的运营审计。
    
*   与许多用户采用的大多数传统钱包不兼容 ( 没有助记词，没有完整的私钥存储在单个设备上 )。MPC 算法也没有标准化，也没有得到机构级安全设备 ( 如 iPhone SEP 和 HSM) 的原生支持。
    
*   大多是孤立的定制产品。许多 MPC 库和解决方案都不是开源的，因此，如果出现问题，生态系统很难独立审计和集成它们。
    

**MPC钱包未来的发展展望**

相比较传统（HD）钱包和智能合约钱包来说，MPC钱包从概念和技术上更加先进，这样看起来无论是对于开发者还是用户而言会更具挑战和门槛。但是MPC钱包本身也是多签钱包的一种表现形式，而且它脱离的EOA钱包的范畴，所以在产品设计上可以更好的实现WEB2到WEB3的转换，提升用户的体验，降低用户使用门槛。例如Web3Auth和Bitizen就提出使用iCloud或者Google Drive作为用户私钥分片的备份产品方案，这让用户使用MPC钱包去除了助记词的繁琐，如同使用WEB2钱包一样便利。

对于MPC钱包开发者而言，TSS技术的实现，目前开源的算法已经有相对比较多的成熟方案，例如cmp、gg18、gg20等等。对于开发者而言，一定的入门门槛是必须的，这也是为用户资产安全提高入门门槛。

### 1.3去中心化钱包技术新关键词

*   无秘钥
    
    1.  在创建钱包的过程中，私钥不是随时随地创建和存储的。
        
    2.  在交易签署时，不涉及私钥，且私钥不会在任何时候被重建。
        
*   无种子
    
    不支持种子短语作为备份或者恢复私钥的方案。
    
*   无助记词
    
    不支持助记词作为备份或者恢复私钥的方案。
    
*   抗丢失
    
    当用户私钥分片丢失的情况下，可以通过其他私钥分片重新生成新的秘钥分片。
    
*   抗审查
    
    用户完全掌握钱包的控制权，无需依赖第三方服务。
    
*   云备份
    
    通过云端存储技术备份私钥分片，这是借鉴WEB2网络常使用的手段之一。
    

2\. 传统HD钱包技术方案
--------------

### 2.1 传统HD钱包总体框架

![图2](https://storage.googleapis.com/papyrus_images/611e8f9ee14e18c54ca2b6836ac1fbe1127850bbd1f8a7aef13ebb0b5b462f5a.png)

图2

**应用层**

去中心钱包常见的产品形态为移动端（iOS/Android）APP、PC桌面版应用程序（Windows/Mac/Linux）、浏览器插件、硬件设备等

**应用层本地服务**

*   钱包创建/导入：通过助记词库作为种子，根据HD钱包规则派生生成钱包地址。
    
*   离线签名服务：由于去中心化钱包私钥存储在客户端数据库中，故而需要在本地通过私钥对待签名数据进行离线签名，签名完成之后，将签名后的data数据发送到链上进行广播。
    
*   加解密服务：对客户端私钥及其他敏感信息进行加解密操作。
    
*   私钥存储数据库：存储私钥密文。
    
*   抗秘钥丢失服务：传统HD钱包由于其单点故障，一般无法提供抗秘钥丢失服务。抗秘钥丢失详情可以详见：3.2抗秘钥丢失
    

**网关层**

API网关负责客户端调用服务端请求的转发，并承担限流、熔断、降级、URL路由、权限认证等作用。

**业务层**

*   钱包系统
    
    钱包后端服务总称，包含钱包基础服务，秘钥管理，交易管理，风控规则等服务等
    
    *   用户账户：用户账户管理，包含用户基本信息，用户账户资产信息等。该模块实际的管理内容取决于去中心化钱包产品形态。
        
    *   配置中心：钱包配置相关内容。例如公链相关信息，节点网络信息，资产配置信息等等。
        
    *   查询服务：为数据库从库提供查询接口服务。
        
    *   充提服务：基础充提功能服务，包含流水管理等内容。
        
    *   规则引擎（风控）：钱包风控系统，识别风险交易，并提示用户进行风险甄别。
        
    *   秘钥管理：单私钥传统HD钱包无需进行地址私钥管理，但针对钱包其他敏感信息时，可作为加解密服务提供敏感信息保护处理。若涉及私钥分片时才会涉及地址私钥分片管理。
        
*   生态应用
    
    钱包系统只是为去中心化钱包提供基础功能服务，生态应用服务才是钱包的商业盈利模式。参考市面去中心化钱包生态，可能会涉及常见服务如下：
    
    *   Staking服务
        
    *   行情资讯
        
    *   NFT服务
        
    *   Defi服务
        
    *   GameFi
        
    *   Market
        
    *   Swap
        
    *   DEX
        
*   云端私钥干扰服务
    
    云端私钥干扰服务是配合客户端抗秘钥丢失服务共同完成抗丢失功能的。对于传统HD钱包，一般无法提供该服务。详情可以详见：[3.2抗秘钥丢失](https://www.notion.so/a348756dc2f74f88a9be2292ec5561e1)
    
*   公链平台
    
    所有公链服务中间件服务，公链平台集成了所有公链的对接方式，避免钱包系统需要进行繁杂的对接一条又一条不同的公链。
    
    *   公链Common API：将公链RPC根据业务功能抽象成公共API，当然由于公链类型繁杂且多样，Common API可以根据类型分类，定义有限的不同版本Common API。
        
    *   区块同步：扫描链上区块数据，将区块数据同步完成后写入本地数据库。
        
    *   交易解析：根据钱包业务类型，解析区块中的Tx数据结构，并写入本地数据库。
        
    *   交易上链：将签名完成之后的data数据发送提交到链上，并通过P2P网络广播到区块链网络，经过验证节点验证后打包。
        

**数据层**

*   缓存：Redis、Memcached
    
*   持久化存储：MySql、HSM（硬件加密）、iCloud（云备份存储）、Google-Driver（云备份存储）
    
*   节点网络（本地）：Ethereum本地网络节点、Bitcoin本地网络节点、BSC本地网络节点……
    

**基础设施**

*   TEE（Inter-SGX）：可信执行环境（Trusted Execution Environment，TEE），通过软硬件方法在中央处理器中构建一个安全区域，保证其内部加载的程序和数据在机密性和完整性上得到保护。可信的中央处理器一般是指可信执行控制单元已被预置集成的商用CPU计算芯片，无法后置，因此，只有新研发的部分芯片支持TEE。目前主流的TEE技术以X86指令集架构的Inter SGX和ARM指令集架构的TrustZone为代表。而云服务目前对TEE支持较好的云厂商为IBM和Azure。
    

3\. MPC钱包技术方案
-------------

### 3.1 MPC钱包总体框架

![图3](https://storage.googleapis.com/papyrus_images/0023e60da8551528c89774c119b2d80983072556a4ba1ac8f484be7b5fe222cd.png)

图3

**Client UI**

相比较传统HD钱包，目前较少看到有存在硬件形态的MPC钱包。

**Mobile/Web SDK**

*   generate keyshare：调用MPC算法生成秘钥分片。
    
*   sign transaction：交易签名，这里特指MPC-TSS签名。
    
*   send transaction：将签名完成后的数据发送。此处发送交易包含两种场景，一种是完成部分分片签名后提交至下一个Signer签名，另外一种是完成全部阀值签名后提交上链。
    
*   transaction serialize：交易构建及序列化，该SDK的实现方式可以是客户端直接实现，或者是调用Wallet Service实现。
    
*   rpc service：API接口服务SDK封装。
    

**Gateway（网关层）**

API网关负责客户端调用服务端请求的转发，并承担限流、熔断、降级、URL路由、权限认证等作用。

**Core Service**

*   Wallet Service
    
    钱包后端服务总称，包含钱包基础服务，交易管理，配置中心等服务等
    
    *   Account：用户账户管理，包含用户基本信息，用户账户资产信息等。该模块实际的管理内容取决于去中心化钱包产品形态。
        
    *   Configuration：钱包配置相关内容。例如公链相关信息，节点网络信息，资产配置信息等等。
        
    *   Transaction：基础充提功能服务，交易构建序列化能力，包含交易流水管理等内容。
        
    *   秘钥管理：单私钥传统HD钱包无需进行地址私钥管理，但针对钱包其他敏感信息时，可作为加解密服务提供敏感信息保护处理。若涉及私钥分片时才会涉及地址私钥分片管理。
        
*   Tap Service
    
    Transaction Authorization Policy Service，交易授权策略。
    
    *   Rule-Engine：规则引擎。
        
    *   Tap-Rules：Tap规则，包含系统默认规则及用户自定义规则，含交易审批流。
        
    *   TEE-based-Tap：部分基于目标地址白名单，交易金额等限制维度的Tap规则，需要在TEE内存包含机制中执行。
        
    *   AML：反洗钱能力，可以接入外部如Chainalysis、Elliptic等。
        
*   生态应用
    
    钱包系统只是为去中心化钱包提供基础功能服务，生态应用服务才是钱包的商业盈利模式。参考市面去中心化钱包生态，可能会涉及常见服务如下：
    
    *   Staking服务
        
    *   行情资讯
        
    *   NFT服务
        
    *   Defi服务
        
    *   GameFi
        
    *   Market
        
    *   Swap
        
    *   DEX
        
*   MPC
    
    *   MPC Algorithm：MPC底层算法，支持MPC-ECDSA、MPC-Ed25519、MPC-Schnoor、MPC-BLC、MPC-RSA等
        
    *   MPC Communication Middleware：提供MPC算法多方P2P通信能力。
        
    *   TEE-based MPC Node：云端基于TEE环境，MPC算法的签名节点。调用方只需要传入待签名数据，签名节点返回签名结果。
        
*   Blockchain Platform（公链平台）
    
    所有公链服务中间件服务，公链平台集成了所有公链的对接方式，避免钱包系统需要进行繁杂的对接一条又一条不同的公链。
    
    *   公链Common API：将公链RPC根据业务功能抽象成公共API，当然由于公链类型繁杂且多样，Common API可以根据类型分类，定义有限的不同版本Common API。
        
    *   区块同步：扫描链上区块数据，将区块数据同步完成后写入本地数据库。
        
    *   交易解析：根据钱包业务类型，解析区块中的Tx数据结构，并写入本地数据库。
        
    *   交易上链：将签名完成之后的data数据发送提交到链上，并通过P2P网络广播到区块链网络，经过验证节点验证后打包。
        

**Data（数据层）**

*   缓存：Redis、Memcached
    
*   持久化存储：MySql、HSM（硬件加密）、iCloud（云备份存储）、Google-Driver（云备份存储）
    
*   节点网络（本地）：Ethereum本地网络节点、Bitcoin本地网络节点、BSC本地网络节点……
    

**Base（基础设施）**

*   TEE（Inter-SGX）：可信执行环境（Trusted Execution Environment，TEE），通过软硬件方法在中央处理器中构建一个安全区域，保证其内部加载的程序和数据在机密性和完整性上得到保护。可信的中央处理器一般是指可信执行控制单元已被预置集成的商用CPU计算芯片，无法后置，因此，只有新研发的部分芯片支持TEE。目前主流的TEE技术以X86指令集架构的Inter SGX和ARM指令集架构的TrustZone为代表。而云服务目前对TEE支持较好的云厂商为IBM和Azure。
    

### 3.2 抗秘钥丢失

![图4](https://storage.googleapis.com/papyrus_images/704a7f99495728044e0056f6b3cf76f93a31fee00420bdd19f49d61badeb29ee.png)

图4

### 3.3 抗秘钥丢失认证 - 邮箱验证

![图5](https://storage.googleapis.com/papyrus_images/2175c1c6e4549256a18d8f141fe936eca8556a4145598517e00eed0df9c314f9.png)

图5

参考文档：

\[去中心化钱包-竞品调研\]

\[去中心化钱包-无助记词钱包调研\]

\[木姜子科技去中心化钱包解决方案\]：[https://www.wenwoha.com/blog\_detail-62.html](https://www.wenwoha.com/blog_detail-62.html)

\[Unipass Wallet\]：[https://docs.wallet.unipass.id/zh/docs/introduction/intro](https://docs.wallet.unipass.id/zh/docs/introduction/intro)

\[Bitizen Wallet\]：[https://docs.bitizen.org/zh-Hans/](https://docs.bitizen.org/zh-Hans/)

\[Seedless Self-Custody: On MPC and Smart Contract Wallets\]：[https://medium.com/1kxnetwork/wallets-91c7c3457578](https://medium.com/1kxnetwork/wallets-91c7c3457578)

---

*Originally published on [Alpha](https://paragraph.com/@alpha-li/vre1rID2yMcWg0fOfwWT)*
