02 钱包
钱包
1.概述
钱包怎么分类?本质是私钥的管理方式的不同来区分的
2. 钱包分类
- 中心化钱包:钱包私钥一般管理在中心化服务器上,代表项目为交易所钱包;例如 Binance 交易所钱包,okx 交易所钱包和 bybit 交易所钱包等1。
- 去中心化钱包(确定性分层钱包):钱包私钥一般管理在用户的设备上,代表项目为 TP, ImToken, MetaMask 等;
- 硬件钱包:钱包私钥管理在离线的硬件设备上,代表项目 ledger, onekey 等。
- 交易所 Web3 钱包:一般的交易所 Web3 钱包集成了,中心化钱包,去中心化钱包(确定性分层钱包)和硬件钱包的功能。
- 托管钱包:托管在第三方服务的钱包,一般为 MPC 算法,每个节点有一个密钥片,网络中没有完整的私钥出现过, N-M 的签名方式,总节点为 N 个,M 个节点签名交易即有效。隐私保护、分布式计算、安全性2
MPC(Secure Multiparty Computation)算法是一种加密和隐私保护技术,用于在多个参与方之间进行计算,同时保持各方输入的隐私性。MPC 允许多个参与方在不公开彼此输入信息的情况下执行计算,并获得计算结果。
- 多签钱包:EVM 链一般使用 gnosis safe 多签,其他使用传统密码学方式多签
多签钱包(Multisignature Wallet),也被称为多重签名钱包,是一种加强安全性的加密货币钱包。与传统的单签名钱包不同,多签钱包要求多个密钥持有人共同参与批准交易,以便进行资金的转移或操作。
多个密钥持有人:多签钱包涉及多个密钥,通常是由不同的个体、组织或设备控制。这些密钥持有人被称为共同签名者(cosigners),并且需要达成共识才能执行交易.
签名阈值:多签钱包通过设置签名阈值(Signature Threshold)来确定需要多少个共同签名者批准交易。例如,一个2-of-3的多签钱包需要至少两个共同签名者的批准才能执行交易。
- MPC钱包:采用秘密共享技术来管理和生成加密货币私钥的钱包。
- 社交恢复钱包: 密钥分片备份恢复,守护者恢复,
- EVM 链 AA 钱包:ERC4337 协议独有特性,提供账户抽象功能,实现智能合约级别的钱包服务。
区别在于私钥放在哪里?
交易所钱包私钥是在交易所手上,去中心化钱包私钥是在自己的手上
助记词:对应一个rootkey,一个rootkey可以导出一个一个的childkey,childkey就会对应一个pubkey,pubkey会对应生成一个地址BTP44协议
3.中心化钱包
主要功能是批量地址生成、充值、提现、归集、转冷、冷转热、回滚、钱包风控、钱包对账器
3.1. 中心化钱包架构图
交易所私钥管理方式:一般管理在一下4种方式
Tee 环境,Tee是一个安全可执行环境,Tee 环境虽然是一个安全的执行环境,但是私钥也是加密之后存储在这个环境的数据库或者文件里面,每次签名也要在这个环境中解密私钥进行签名,私钥暴露的风险也很大,团队成员想拿到私钥也很容易,只需要签名前传人私钥是打一个日志就行。
cloud HSM:一种云端管理方式,最安全和最专业的做法是使用 cloadHSM 或者多节点备份的小型签名机,私钥不会离开设备,需要签名的时候,传入待签名的报文,cloadHSM 或者小型签名机签名结束之后返回签名报文,然后整理签名交易报文发送到区块链网络。
KMS:很少用了
小型机:
不管是使用数据库、数据文件、 KMS、TEE,还是 CloadHSM,安全级别也是相对的,有一句话说得好: “外贼易挡,家贼难防“,这句话用在钱包管理上真的是太正确了。不管用什么方案,即使是 CloadHSM 或者小型机方案,”家贼也是很难防”,家贼完全可以模拟一笔合法的交易让 CloadHSM 或小型机方案签名,然后把钱盗走。为了防止家贼,正常的交易所钱包都要做链路风控体系。
从上面的架构图中,我们可以看到,对于交易所钱包来说,通常有这些业务流程
- 批量地址生成
- 充值
- 提现
- 归集
- 热转冷
- 冷转热
- 链路风控
很多公司钱包开发,一般就是一个人负责整条链钱包的调研(离线地址生成,离线交易签名和扫块出入金),开发(含充值,提现,归集,热转冷等功能开发,甚至含链路风控的一部分代码)和测试。当然,也有的公司分为三到四团队,调研和离线签是一个团队,扫链出入金,归集和转冷等功能是一个团队,链路风控是一个团队,测试是一个团队。不管怎么分,运维和开发是隔离的,这样做才能做大限度做到人为风控。
总结一下:
- 私钥存储:中心化钱包的私钥通常存储在中心服务器上,由服务提供者管理。用户不直接控制私钥,而是通过账户和密码来访问自己的资产。
- 加密技术:为了保护私钥,中心化钱包服务提供者会采用各种加密技术,如DES加密、AES加密等,将私钥加密后存储。
- 签名机制:当用户发起交易时,钱包服务会解密私钥,使用私钥对交易进行签名,然后将签名后的交易发送到区块链网络。
3.2. 中心化钱包业务细节流程
- 批量地址生成:交易所钱包为了性能和快速响应用户,所有交易所钱包都会有一个地址池,地址池里面每次生成成千上万的地址,当用户注册到交易所的时直接给用户分配地址,而不是去生成;当地址池里面的地址少于一定数量时就会去新生成一批。批量地址生成:交易所一次会生成10W个地址,地址对应的私钥会存到交易所的中心化的数据库里面去,当有用户在交易所注册时,会去给用户分配一个地址。地址生成:生成privkey—-pubkey—address,
- 充值:钱包有个程序,一直在扫链(scan block ),parse to(解析交易),然后发现to地址如果是交易所系统中地址(交易所地址分用户地址和系统地址)如果发现是用户地址,就认定这是一笔充值,那交易所就会给用户上账(入金),上账之后把通知给到交易所对端(交易所业务层),充值:扫链服务扫区块链,解析区块里面的交易数据,当交易数据里面的 to 地址是系统里的用户地址时,就说明有用户充值;充值这个过程除了钱包充值扫块之外,还会和风控一起联合,只有风控系统和钱包都认可这笔交易,才会通知业务层;解析的时候需要注意有人构造恶意交易,有的链是可以构造交易攻击的。
- 提现: 当业务层发起一笔提交交易,业务层的交易会进入到业务层数据库,业务层扫库之后提一笔交易到钱包–>钱包对这个交易进行签名,去请求对应的Cloud HSM或者TEE环境的私钥或者小型机里面的私钥进行签名->签名回来了之后再组织了之后把交易发送到区块链网络上。这笔交易的from地址出来的地址不一定是你的地址,而是交易所的归集地址,这个时候你的syne block扫块的机制还会不停地扫块,扫块解析Tx,解析Tx出来之后发现我们的from地址和我们的系统地址是一样的,我们就认定为这笔交易是一笔提现交易,然后提现成功,再通知交易层成功了,然后告诉用户你提现成功了。
- 客户端用户输入要提现的地址,金额,链;这些数据将进入交易所业务层,业务层提交数据给钱包,并建立签名参数风控;钱包拿到交易数据之后先验证是否能过风控,没有问题的去链上获取签名参数,组织交易之后生成待签名的交易报文,将交易报文递给签名机,签名机签名之后返回签名的交易报文,钱包服务组织交易之后发送到区块链网络。交易发送完成之后,扫链服务扫到这笔交易之后,验证风控,通过之后通知业务层提现成功,上报交易 Hash 等信息。
归集:归集功能是把用户地址里面的资金全部归集到一个规整地址里面去,归集是一个批量转账的过程,和提现的逻辑比较类似,就是业务类别不一样,这里就不再画流程图了,归集的是在热钱包地址(联网地址),
热转冷:将归集地址里面的资金转到一个冷钱包,归集是一个单笔转账的过程,和提现的逻辑比较类似,就是业务类别不一样,这里就不再画流程图了。
冷转热:从冷钱包将资金转到热钱包,手动操作的过程
钱包风控:
- 业务层,不管用户充值还是提现,都是业务层,业务层作恶怎么办?
- 业务在扫链,不是说自己扫链成功了之后就充值成功了,风控层也在扫链,风控扫到钱包没钱也不行,只有这两个层的数据对到了才会充值成功。
- 钱包层:钱包层作恶:比如你的私钥在公司高管里面,他乱转钱,业务层认不认? 也不认的,也要风控层扫链+业务层扫链,双重认证之后,才能重置,和业务层同样的道理。
- 钱包层一般掌握在钱包核心Leder手上,这个角色一般都是老板核心人员担任,因为风控可能出问题停了一会儿,或者手动停掉这个风控,在这个一瞬间,钱包层作恶,Leder把钱转出去了。
- 业务层,不管用户充值还是提现,都是业务层,业务层作恶怎么办?
交易回滚:交易回滚是指区块链网络的区块回滚或者重组,需要将钱包系统中的交易处理掉的过程,比方说:现在有一条链区块一下从 1000 个块回滚到 500 个块,那么钱包系统里面存储的 500-1000 个块的交易就是无效交易了,需要处理在这个块范围的所用用户的交易。
- 对账系统: 钱包系统与业务层对账,钱包系统实时资产负债表等。原则上每半天或一天都要对一次账、
概括总结:
- 批量地址生成:为了提高性能和响应速度,中心化钱包会预先生成大量的地址,存放在地址池中,用户注册时直接分配地址。
- 充值:用户向钱包地址发送加密货币,钱包服务通过扫描区块链来确认交易,并更新用户的账户余额。
- 提现:用户提交提现请求,钱包服务验证请求后,使用私钥签名交易,并将加密货币发送到用户指定的地址。
- 归集:将分散在多个地址中的资金归集到一个或几个地址中,以便于管理和使用。
- 热转冷:将热钱包中的资金转移到冷钱包中,以提高安全性。
- 冷转热:从冷钱包中转移资金到热钱包,以便用户进行交易。
- 链路风控:实施风险控制措施,确保交易的安全性,防止欺诈和非法活动。
3.3 安全性
- 内部风险:由于私钥由中心化服务管理,存在内部人员滥用权限的风险。
- 外部攻击:中心化钱包可能成为黑客攻击的目标,一旦被攻破,用户资产将面临巨大风险。
- 合规性:中心化钱包通常需要遵守严格的监管要求,包括KYC(了解你的客户)和AML(反洗钱)政策。
3.4 用户体验
- 便捷性:用户不需要管理私钥,只需记住账户和密码,使用起来相对简单。
- 服务依赖:用户的资产安全和服务可用性高度依赖于中心化钱包的运营状况。
3.5 优势与劣势
- 优势:操作简便,适合新手用户;交易速度快,服务响应及时。
- 劣势:用户对资产的控制权较低;存在中心化服务的风险,如内部欺诈、黑客攻击等。
4. 去中心化钱包(HD 钱包)
4.1. 去中心化钱包架构图
去中心化钱包的私钥是管理在用户设备中的,除了用户本人和牛逼的黑客,没有人接触得到。一般的去中心化钱包都是确定性分层钱包;先生成助记词,助记词导出主私钥,主私钥扩展子私钥和公钥的方式,公钥再导出地址。
去中心化钱包的私钥一般是加密之后存储在本地设备 sqlite 或者数据文件里面,当要签名交易的时候,需要用户输入密码解密私钥之后再签名。
去中心化钱包比较出名的有 Tp,ImToken,MetaMask 等,我们项目实战中将会带大家用 RN 开发一款类似 TP 的钱包。
4.2.去中心化钱包细节业务流程
离线地址生成
- 助记词会编码加钱包密码,一般用sqlitle或者wallet.data文件
- 地址生成过程:chilldkey会有pubkey和prikey,pubkey会生成address,这个是离线的
收款:查询本地设备数据库把地址展示到界面上。
查询余额:
BTC是UTXO模型,链上没有rpc可以获得余额,需要electumX获取
ETH:eth get balances eth具备账户模型
- 转账
- 第一步:检测余额是否足够
- 第二步:请求签名参数:
- ETH:获取三个:Nonce(Number once的缩写)、gasprice、 gaslimite
- BTC:Version、Input、Output、Locktime、Sequence、Hash Type这些
- Atom :Account Number(唯一账户编号) Sequence(顺序)fess(手续费)
- 第三步:组装交易,组装完之后生成一个32位的代签名的MsgHash
- 第四步:签名,用前面的Msghash和本地的privkey做一次sign签名,签名完成之后就会得到已经完成签名的报文,这个报文和pubkey组织完整的交易。
- 第五步:广播出去:上面的完整的交易调链上的接口广播出去,叫法不同:SendRawTransaction、PushTx、SendTx 、Broadcast
转账记录:根据地址查询交易记录和根据 Hash 查询交易详情,这笔转账是谁转给谁的
闪兑:钱包里面的闪兑一般对接 1inch 或者其他的 aggrator 实现兑换功能
Dapp 浏览器:Dapp 浏览器是指 Dapp 可以在里面运行,能够正常的和钱包进行交互,有以下几种主流的实现方式 Web View 中包裹 Dapp, 通过 Js 注入 Windows 对象的方式通信,一般钱包开发直接使用这种方式 Websocket 进行 Dapp 和钱包之间的通信
也称为非托管钱包,它允许用户完全控制自己的私钥和资金,而不需要依赖于第三方服务
4.3 核心总结点
- 私钥控制:用户完全控制自己的私钥,这是访问和转移加密货币的关键。
- 非托管:没有中心化的实体持有用户的资产或私钥,用户对自己的资产有完全的控制权。
- 确定性分层钱包(HD Wallet):支持分层确定性钱包结构,可以从一个主种子(通常是助记词)生成多个地址。
4.4 架构和工作原理
- 本地存储:私钥通常存储在用户的设备上,如电脑、手机或专用硬件设备。
- 加密保护:私钥在本地以加密形式存储,需要用户设置的密码或PIN码来解锁。
- 签名交易:用户发起交易时,交易会在本地设备上使用私钥签名,然后广播到区块链网络。
4.5 类型
- 软件钱包:安装在用户设备上的应用程序,如MetaMask、Keplr等。
- 硬件钱包:专门的硬件设备,如Ledger和Trezor,它们在设备内部安全地存储私钥。
- 纸钱包:将私钥和地址打印在纸上,是一种冷存储方式,但易受物理损害。
4.6 安全性
- 私钥安全:私钥的安全性完全取决于用户,需要妥善保管。
- 加密保护:私钥在本地加密存储,增加了安全性。
- 多签名:支持多签名钱包,需要多个私钥共同签名才能进行交易,提高了安全性。
4.7 用户体验
- 控制权:用户对自己的资产有完全的控制权。
- 隐私性:交易和余额信息不需要与任何中心化实体共享。
- 技术门槛:相对于中心化钱包,去中心化钱包可能需要用户具备一定的技术知识。
4.8优势与劣势
- 优势:用户完全控制自己的资产;提高了安全性和隐私性;支持多种区块链资产。
- 劣势:用户需要自己管理私钥,增加了责任;可能需要更高的技术知识;交易速度可能较慢。
5. 硬件钱包
5.1. 硬件钱包架构图
硬件钱包主要是把私钥管理在离线的硬件设备中(可以是一个类似U遁的,也可以是一部手机或一台电脑),在硬件设备中集成钱包签名算法,一般使用蓝牙,NFC 或者串口通信进行通信。
硬件钱包一般有以下几个业务流程:
- 地址生成:硬件中集成 BIP,生成助记词和密钥对,使用公钥导出钱包地址;
- 离线签名:组织交易生成 32 位的 Msg Hash, 将签名消息摘要传给硬件,硬件签名之后返回,组织交易发送到区块链网络。
5.2. 硬件钱包细节业务流程
硬件钱包和去中心化钱包相比,最不相同是私有的管理方式,硬件钱包私钥和助记词管理在硬件中,下面离线地址生成和离线签名为例说明:
- 离线地址生成:发不地址生成的指令给硬件,硬件会生成助记词和私钥等信息,并将私钥和助记词编码加密之后存储在硬件中,吐出公钥匙,钱包界面端用公钥匙生成地址。
- 离线签名:用户端组织编码交易报文,发送给硬件签名,签名回来的交易报文再次组织,然后发送到区块链网络。
秘钥管理方式
你有一个硬件,硬件里面有签名芯片,还有存储、通信
通信主要是NFC、蓝牙、串口通信、来进行交易的报文传输去通信
比如你现在要签名一笔ETH的交易,你是要把ETH的整个交易组织了之后再生成一个32位的哈希消息传给你的硬件,你的硬件进行签名,签完名回来了之后你再组织报文去组织成完整的额交易,然后再发布到对应的ETH的网络上
签名:交易的签名,目前集成的签名算法有几种:ED2559、Secp256k1 r1 bls Schnorr
签名也分成几个步骤,一个是keying生成秘钥,把秘钥生成之后,私钥是在加密芯片里面,然后回吐出公钥来-》公钥推导出地址,然后你的地址就可以接受交易了,你要签名的时候,你整个交易报文组织好了,通信丢给签名芯片,通信完了之后再给你吐出出去,
提供高安全性的加密货币存储解决方案专门设计的物理设备,用于生成、存储和管理私钥
5.3 核心特点
- 离线存储:硬件钱包将私钥存储在设备的内部,与互联网隔离,减少了在线网络黑客的攻击风险
- 冷存储:硬件钱包通常不连接到网络,只有在需要时与是被交互。冷也可以理解为运行的时候再变化,
- 私钥生成:私钥在设备的内部生成,确保了私钥的随机性和安全性。
- 用户控制:用户完全控制以硬件钱包中的私钥,没有第三方介入。
5.4 硬件钱包架构和工作原理
- 嵌入式系统:硬件钱包通常基于嵌入式系统,有限的硬件资源,专注于安全功能
- 安全元件:实用专门的安全原件(如安全处理器或加密协同处理器)来保护私钥。
- 用户界面:可能会配有小屏幕或按钮来供用户使用(将军令、网银U盾)
- 通信接口:通过USB、蓝牙、NFC等接口与用户设备通信
5.5 主要功能
- 地址生成:硬件钱包可以生成多个地址,通常遵循BIP32、BIP39等标准。
- 交易签名:硬件钱包在设备内部对交易进行前面,确保私钥不会暴露给用户设备。
- 备份与恢复:支持助记词或者种子短语备份,运行用户恢复钱包
- 多签名支持:一些硬件钱包支持多签名交易,增加交易的安全性
BIP32和BIP39是两个与加密货币钱包相关的行业标准。
- BIP32(Hierarchical Deterministic Wallets)是一种标准,规定了从一个主私钥(Master Private Key)生成一系列相关的子私钥和对应的公钥的方法。它使用确定性的方式生成地址,这意味着可以从一个主私钥派生出一系列的子私钥和对应的地址,而不必为每个地址单独创建和备份私钥。这种层次结构的钱包可以更方便地管理和备份多个地址。
- BIP39(Mnemonic Code for Generating Deterministic Keys)是另一个标准,定义了一种助记词或种子短语的生成方法。助记词是一组易于记忆和书写的单词,通常由12、15、18、21或24个单词组成。通过从一个固定的词汇表中选择这些单词,可以生成一个种子,该种子可以用于生成钱包的私钥和公钥。助记词提供了一种更方便和易于备份的方式来管理和恢复钱包,而不需要直接处理和备份私钥。
这些标准的使用可以提高加密货币钱包的安全性和便利性。BIP32允许从一个主私钥生成多个地址,简化了钱包管理过程,并减少了私钥的暴露。BIP39的助记词提供了一种用户友好的备份和恢复机制,使用户能够通过记住一组单词来恢复整个钱包。
5.6 操作流程
- 初始化:用户设置硬件钱包,生成新的种子短语,并妥善保存。
- 接收资金:用户通过硬件钱包提供的公钥地址接收资金。
- 发送交易:
- 用户在计算机或者手机上创建交易请求
- 将交易详情传输到硬件钱包。
- 硬件钱包显示交易信息,用户确认无误后,通过按钮确认签名。
- 硬件钱包对交易进行签名,并将签名后的交易返回给用户设备。
- 用户将签名后的交易广播到区块链网络。
- 备份与恢复:在需要时,用户可以使用种子短语恢复钱包。
5.7 安全性
- 抵御网络攻击:由于私钥不接触网络,硬件钱包可以有效的抵御网络攻击
- 物理安全:硬件钱包的物理安全性取决于其构建质量和用户如何保管设备
- 抗胁迫功能:一些硬件钱包提供虚假的PIN码或助记词,以防止在胁迫情况下泄露真实信息。
5.8 用户体验
- 高安全性:未用户提供银行级别的资产保护
- 易用性: 尽管设置了安全措施,但大多数硬件钱包的设计都是友好用户的
- 使用成本:硬件钱包需要找对应厂家购买,存在成本,据说贵的好几万U
5.9优势与劣势
- 优势:极高的安全性;私钥不触网;支持多种加密货币;易于使用。
- 劣势:需要购买硬件设备;交易时需要物理设备;可能存在设备损坏或丢失的风险。
6.交易所Web3钱包
6.1 核心特点
- 集成性:作为交易所平台的一部分,用户可以直接在交易所内进行资产的存储、转账和交易。
- 多功能:除了基本的钱包功能,还可能提供去中心化应用(DApp)的交互、代币交换、借贷等高级功能。
- 用户界面:提供用户友好的界面,便于用户管理和使用其加密资产。
6.2架构和工作原理
- 中心化管理:用户的私钥由交易所管理,这与中心化钱包相似,便于交易所进行快速的交易处理。
- 去中心化交互:支持与区块链上的智能合约和DApp的交互,允许用户进行去中心化的交易和操作。
- 热钱包与冷钱包:结合热钱包(在线钱包)和冷钱包(离线钱包)的使用,以提供安全性和便捷性的平衡。
6.3 主要功能
- 资产管理:用户可以在钱包中查看和管理自己的加密货币资产。
- 交易执行:用户可以直接在钱包界面上执行买卖订单。
- 智能合约交互:支持与智能合约的交互,使用户能够参与到去中心化金融(DeFi)项目中。
- 代币收发:用户可以发送和接收各种加密货币代币。
- 多签支持:可能支持多签名钱包功能,增加交易的安全性。
6.4 操作流程
- 账户创建:用户在交易所注册账户,并创建Web3钱包。
- 私钥管理:私钥由交易所安全地管理,用户通过账户验证来访问钱包功能。
- 资金存入:用户可以通过转账将加密货币存入交易所钱包。
- 交易和投资:用户利用钱包内的资金进行市场交易或参与DeFi项目。
- 资金提取:用户可以将资金从钱包提取到个人地址或其他钱包。
6.5 安全性
- 中心化风险:由于私钥由交易所管理,用户需要信任交易所的安全性和信誉。
- 多重签名:一些交易所可能提供多重签名保护,增加交易的安全性。
- 冷存储:交易所通常会将大部分资产存储在冷钱包中,以抵御网络攻击。
6.6 用户体验
- 便捷性:用户可以在一个平台上完成交易和资产管理,无需在多个钱包间转移资金。
- 功能丰富:提供多种金融功能,满足用户的不同需求。
- 安全性:虽然不如硬件钱包安全,但通过多重签名和冷存储等措施提高了安全性。
6.7 优势与劣势
- 优势:操作便捷,功能集成;用户界面友好;快速交易执行。
- 劣势:中心化管理可能带来安全风险;用户对资产的控制权较低。
7. 托管钱包
7.1托管钱包架构图
7.2. 托管钱包业务流程
托管钱包和其中心化钱包相比,不相同的地方也是密钥的管理方式,在托管系统中,一般使用 MPC 网络,一共有 M 个节点,其中 N 节点签名交易就有效。每个节点掌握一个密钥片,在整个网络中没有出现过完整的密钥;下面也地址生成和交易签名为例说明
- 地址生成:业务端发出 Keygen 指令,MPC 网络经过多轮共识之后各自产生密钥片,并吐出聚合公钥,业务端使用公钥导出地址。
- 离线签名:业务端发出 Sign 指令, 并携带待签名的交易报文到 MPC 网络,MPC 网络经过多轮签名成公共,返回签名串给业务端,业务端将交易发送到区块链网络。
- 把钥匙分布在各个节点上,集齐七龙珠就可以召唤神龙
7.3 核心特点
- 第三方管理:私钥由第三方机构管理,而不是用户直接控制。
- 安全性高:通过专业的安全措施和协议来保护私钥,适用于存储大量资产。
- 合规性:托管钱包服务的提供商通常要遵守当地的严格监管要求,包括KYC(了解你的用户)和AML(反洗钱)政策
7.4 工作原理
- 多签名技术:托管钱包通常采用多签名技术,即需要多个签名者中的一定数量同意后才能授权交易。
- 分层确定性钱包结构:支持分层确定性钱包(HD Wallet ),可以从一个种子短语生成多个地址。
- 冷存储:私钥存储在离线环境中,如硬件安全模块(HSM)或冷库,以提高安全性
7.5 主要功能
- 资产保管:为用户提供加密货币资产的保管服务。
- 交易执行:用户可以发起交易请求,由托管服务执行实际的交易
- 审计和报告:提供资产审计和交易报告服务,有助于合规性和透明度。
- 风险管理:通过专业的风控措施,帮助用户管理资产风险。
7.6 操作流程
- 注册和验证:用户在托管服务提供商处注册账户,并完成必要的身份验证。
- 资产存入:用户将加密货币发送到托管钱包提供的地址。
- 交易请求:用户通过托管服务的用户界面或API发起交易请求。
- 交易执行:托管服务在验证用户请求后,执行交易并将结果通知用户。
- 资产提取:用户可以请求将资产从托管钱包提取到指定地址。
7.7 安全性
- 专业安全措施:托管服务提供商采用高级的安全技术和协议,如SSL加密、多因素认证等。
- 保险:一些托管服务为存储的资产提供保险,以覆盖潜在的安全事件造成的损失。
- 合规性:遵循监管要求,定期进行安全审计和合规检查。
7.8 用户体验
- 高安全性:为用户提供银行级别的资产保护。
- 专业服务:提供专业的资产管理和交易执行服务。
- 监管合规:帮助用户满足监管要求,降低合规风险。
7.9 优势与劣势
- 优势:提供高安全性的资产保管;专业的管理和服务;帮助用户满足监管要求。
- 劣势:用户需要支付服务费用;对资产的控制权较低;需要信任第三方机构的信誉和安全性。
8. 多签钱包
多签钱包有点像 MPC 钱包的工作机制,但又完全不一样。 多签钱包的工作机制涉及多个密钥和 M-of-N 签名的概念。在 M-of-N 设置中,只有 N 个密钥中的 M 个对交易进行了签名,才能授权该交易。例如,在 2-of-3 多签钱包中,存在三个私钥,至少需要两个私钥才能授权交易。
关于 gnosis safe 多签钱包,在钱包章节我们不深入讲解,将会在后面的合约课程中深入讲解。
区别是 多签是多个私钥
mpc 是一个私钥多个分片
8.1 核心特点
- 多重签名:交易需要多个私钥中的至少M个签名才能被授权。
- 提高安全性:减少了单点故障的风险,即使部分私钥泄露,资产仍然安全。
- 灵活性:用户可以根据需要设置M和N的值,以及哪些私钥参与签名。
8.2 架构和工作原理
- 私钥生成:每个参与方生成自己的私钥,并保留好。
- 公钥组合:所有参与方的公钥被组合在一起,用于生成钱包地址。
- 交易签署:当需要发起交易时,必须收集到足够的签名(至少M个)才能进行。
- 智能合约支持:多签钱包通常基于智能合约实现,特别是在以太坊等支持智能合约的上。
8.3 主要功能
- 资产共享管理:多个用户可以共同管理钱包中的资产。
- 交易授权:交易需要多个签名,增加了交易的安全性。
- 权限分配:可以根据需要分配不同的权限给不同的私钥持有者。
- 审计和追踪:所有交易都需要多个签名,易于审计和追踪。
8.4 操作流程
- 创建钱包:创建多签钱包时,需要确定M和N的值,以及参与方的公钥。
- 生成私钥:每个参与方生成自己的私钥,并妥善保管。
- 发起交易:一个参与方发起交易请求,但交易尚未最终授权。
- 收集签名:交易请求被发送给其他参与方,他们用自己的私钥签署交易。
- 交易执行:收集到足够的签名后,交易被广播到区块链网络并执行。
8.5 安全性
- 抗胁迫:即使一个私钥持有者受到胁迫,也无法单独授权交易。
- 抗攻击:需要多个签名才能交易,增加了攻击者盗取资产的难度。
- 私钥分散:私钥分散在多个参与方手中,减少了私钥集中泄露的风险。
8.6 用户体验
- 安全性高:适合需要高安全级别的用户和组织。
- 操作复杂性:相比于单签名钱包,多签钱包的操作更为复杂。
- 协作需求:需要参与方之间的协作来签署和执行交易。
8.7 优势与劣势
- 优势:提高了安全性和抗风险能力;适合共同管理资产;易于审计和追踪。
- 劣势:操作过程可能较为繁琐;需要多个参与方的协作;可能存在协调困难。
9.MPC钱包
(MPC,Multi-Party Computation),一个完整的私钥被分割多个部分,每个部分由不同的参与方持有。
9.1 核心特点
- 去中心化控制:私钥以分割的形式存在,没有单一实体能够单独控制私钥。
- 增强安全性:私钥的每个部分单独不具有价值,只有组合一定数量的部分才能恢复私钥。
- 多方授权:需要多个参与者的份额共同协作才能授权和签署交易。
9.2 架构和工作原理
- 秘密分割:私钥通过秘密共享算法被分割成多个份额,每个份额包含私钥的一部分信息。
- 份额分布:这些份额被分发给不同的参与者,可以是不同的个人、服务器或地理位置。
- 阈值设置:设置一个阈值(通常是N个中的M个),只有收集到M个份额时才能恢复私钥。
- 交易签署:当需要签署交易时,所有参与者必须协作,提供他们的份额以生成签名。
9.3 主要功能
- 资产保护:即使部分份额丢失或被盗,只要没有达到阈值,资产仍然安全。
- 抗胁迫:单个参与者无法被胁迫透露私钥信息,因为他们不拥有完整的私钥。
- 容错性:即使一些份额丢失或损坏,只要有足够的份额,私钥仍然可以被恢复。
- 审计和合规:所有交易都需要多个签名,便于审计和满足合规要求。
9.4 操作流程
- 初始化钱包:创建MPC钱包时,私钥被分割成多个份额,并分配给不同的参与者。
- 份额存储:每个参与者安全地存储他们的份额,可能使用硬件**安全模块(**HSM)或其他安全措施。
- 交易请求:用户发起交易请求,需要多个份额来授权。
- 份额收集:协调者或智能合约收集足够的份额以重构私钥。
- 签名交易:使用重构的私钥对交易进行签名。
- 执行交易:将签名后的交易广播到区块链网络。
9.5 安全性
- 抗盗取:没有单一实体拥有完整的私钥,增加了盗取资产的难度。
- 抗内部欺诈:需要多个参与者的协作才能进行交易,减少了内部欺诈的风险。
- 抗胁迫:单个参与者即使在胁迫下也无法泄露完整私钥。
9.6 用户体验
- 高安全性:用户可以放心地保管资产,因为私钥的安全性得到了显著提升。
- 操作复杂性:相比于传统钱包,MPC钱包的操作可能更加复杂,需要协调多个参与者。
- 信任和协作:需要在参与者之间建立信任和协作机制。
9.7 优势与劣势
- 优势:提供了极高的安全性;适合需要严格合规的场合;增强了对资产的保护。
- 劣势:操作过程可能较为复杂;需要多个参与者的协作;可能涉及较高的协调成本。
10. 社交恢复钱包(2种恢复方式)
社交恢复钱包现在是属于不流行阶段,其使用门槛稍微高了一些,而且现有的社交恢复的技术解决方案不够完美,这也是社交恢复钱包直到今天为止做得不太好的原因。
10-1 守护者恢复
守护者恢复是使用合约的方式来实现的,用户的钱包是一个合约钱包,由一个 EOA 地址控制;用户可以给这个钱包设置 N 个守护者,当用户的私钥丢失时,可以让这些守护者联合签名一个交易替换这个合约钱包的 owner。
在守护者恢复机制中,用户可以指定一组信任的联系人(守护者),他们可以在用户丢失私钥时帮助恢复钱包。这个过程通常涉及以下步骤:
- 设置守护者:用户在钱包中设置一组信任的联系人(守护者),通常需要他们的公钥或钱包地址。
- 私钥丢失:当用户丢失了对钱包的访问权限,例如忘记了密码或丢失了硬件钱包。
- 请求恢复:用户向守护者发出帮助恢复的请求。
- 多签名交易:守护者们需要按照预设的规则(例如,需要一定数量的守护者同意)签署一个特殊的多签名交易,以证明他们的身份和同意恢复操作。
- 恢复钱包:一旦收集到足够数量的签名,就可以通过智能合约或其他机制来恢复钱包的访问权限。
10-2. 密钥分片恢复
密钥分片社交恢复钱包是使用门限秘密共享的密码学技术方案对钱包的助记词或私钥进行切片备份管理,当用户的助记词或私钥丢失,可以发起社交恢复的方式进行助记词和私钥的恢复,在密钥分片社交恢复钱包中,可以将助记词和私钥屏蔽,不在需要用户自己去备份助记词和私钥,而是通过社交的方式进行助记词和私钥的备份。
门限秘密(Threshold Secret)是一种密码学技术,用于将秘密信息分割成多个部分,并指定一个门限值。只有达到或超过门限值的部分才能合并,从而重新构建原始的秘密信息。前面的MPC和多签都算是门限秘密
在密钥分片钱包中,我们整个社交恢复的流程如下:
- 用户的私钥或者助记词和一个大随机数做一次异或算法(异或算法是一种逻辑运算,两个比对,如果相同就返回0,否则返回1),得到一个新的秘密值,我们把大随机数叫做 head, 秘密值叫做 body,head 加密之后上传到 savour wallet 云端(平台)。
- 将 body 做门限共享秘密算法(前面说的共享),拆分成 N 份 shadow(翻译过来是’影’的意思), 设置 K 份可以恢复 body
- shadow-1 加密之后存储在本地,使用 AES 加密,密码Hash之后做为加密 Key,
- shadow-2 加密之后存储到savour wallet 云端,使用 AES 加密,密码和设备 ID 做为加密 Key
- shadow-3 … n 加密之后存储到密钥柜和社交圈的好友,反正就是各种存储
- 助记词或者私钥丢失发起恢复,获取密钥柜里面或者好友处的 k - 2 份私钥,再获取云端的 shadow-2 和 header。
- 逆门限共享秘密算法通过 K 份 shadow 恢复出 body
- body 和 head 做逆异或算法得到助记词和私钥。 关于密钥柜: 密码柜是一个密钥托管服务,用户可以自行运行密钥柜服务存储自己的密钥 shadow,也可以将密钥 shadow 加密之后保存到我们官方密钥柜,密钥柜对接的是各大区块链存储平台,我们将把密钥进行深层次加密之后把密钥上传到各大区块链存储平台,即使有一天密钥柜不运行了,用户也可以从各大区块链存储平台获取到自己加密的密钥分片,根据加密规则进行解密就可以得到明文的密钥 shadow,同时根据上面的设计图用户还可以通过隐私社交的方式备份自己的密钥 shadow
私钥分片恢复机制则是一种基于秘密共享算法的方法,它将私钥分割成多个部分(分片),并将这些分片分散存储在不同的地点或人那里。以下是私钥分片恢复的一般步骤:
- 私钥分片:用户的私钥被分割成多个分片,每个分片都通过某种加密方法进行保护。
- 分片存储:这些分片可以存储在用户的多个设备上、云端服务、或者交给信任的朋友保管。
- 分片恢复:当用户需要恢复私钥时,他们需要收集一定数量的分片(根据设定的阈值,例如5个分片中的3个)。
- 重组私钥:收集到足够的分片后,用户可以通过一个解密过程重组原始的私钥。
- 访问钱包:一旦私钥被重组,用户就可以重新访问他们的钱包。
11. EVM 链 AA 钱包
EIP4337 账户抽象钱包不仅仅是普通的钱包,它们本身就是智能合约, 主要有安全性高,gas 代付等特点,目前很多公司和项目方都已经或者正在集成账户抽象钱包,但是 AA 钱包目前不是一个很好的赛道,实际应用的公司并不多。—–EVM链AA钱包可以理解为就是只能合约钱包
11.1 核心特点
- 智能合约钱包:AA钱包本身就是部署在区块链上的智能合约。
- 内置安全性:通过智能合约的代码可以实施复杂的安全策略。
- Gas代付:允许用户在执行交易时由第三方代付Gas费用。
11.2 架构和工作原理
- 账户抽象:与传统钱包不同,AA钱包将账户和交易的发送者抽象化,允许更灵活的交易发起和签名方式。
- 交易构造:交易的构造可以在链上完成,用户或第三方可以代表AA钱包构造交易。
- 签名机制:AA钱包可以使用多种签名机制,包括但不限于传统的ECDSA签名。
11.3 主要功能
- 代付交易:支持Gas代付功能,允许第三方支付交易费用。
- 自定义交易:用户可以自定义交易属性,如nonce、gas限制等。
- 多签交易:可以集成多签名机制,提高交易的安全性。
- 智能合约交互:作为智能合约,AA钱包可以与其他智能合约进行交互。
11.4 操作流程
- 部署钱包:在以太坊链上部署AA钱包智能合约。
- 资金存入:用户将资金存入AA钱包合约地址。
- 交易构造:用户或第三方构造交易,包括确定接收者、金额和数据。
- 交易签名:根据AA钱包的配置,可能需要用户或其他参与方的签名。
- 交易执行:将构造好的交易发送到区块链网络,由网络中的节点验证和执行。
11.5 安全性
- 智能合约安全:安全性依赖于智能合约代码的健壮性,需要经过严格的安全审计。
- 多签支持:如果集成多签名机制,可以增加交易的安全性。
- 自定义安全策略:可以通过智能合约实现自定义的安全策略和检查。
11.6 用户体验
- 灵活性:提供了高度灵活的交易构造和签名方式。
- 降低成本:通过Gas代付功能,可以降低用户的交易成本。
- 复杂性:相比于传统钱包,AA钱包的设置和使用可能更复杂。
11.7 优势与劣势
- 优势:提供更高的安全性;支持Gas代付;允许灵活的交易构造和签名方式。
- 劣势:需要用户理解智能合约的概念;可能存在智能合约安全风险。
AA 钱包和 gnosis safe 多签钱包一样,很多都是智能合约,故而我也在智能合约章节中仔细讲解它, 这里不在做过多的赘述。
如果有兴趣,更多详情可以参阅:
https://eips.ethereum.org/EIPS/eip-4337
12总结
对于钱包来说,大家需要更好的掌握交易所钱包,去中心化钱包,硬件钱包和 MPC 托管钱包,目前这四种钱包应用最广泛
,工作岗位最多
。关于 gnosis safe 多签钱包, AA 钱包等,了解即可以,需要使用的时候再学习就行了。话虽然这样说,但是关于 gnosis safe 多签钱包和 AA 钱包,我们在智能合约阶段的课程中也会给大家详细讲解。
值得一说的是,整个钱包课程使用总-分-总的形势铺开,先整体理解钱包的类别,架构以及各模块的实现逻辑,然后再深入讲解钱包的知识细节,最后通过项目实战的形势收回到这篇文章。当然,整个钱包课程也是根据这篇文章展开的,这篇文章的内容也是我们钱包课程第一节课的内容,希望大家有时间好好阅读,深入体会。
13 拓展【与web3无关】
原则上业务层就是交易所与用户相关的业务,
钱包层和业务层之间有通知业务,有统一的通知API,通讯用gRPC
RestAPI、gRPC、RPC、webSocketAPI、GraphQL该怎么选用?
RestAPI:就是微服务比较常用那一套
为什么内部系统用gRPC通讯?–> 快且安全
当涉及到不同的通信协议和API,以下是对每种通信方式的简要介绍:
- REST API(Representational State Transfer API):
- 这个比较多了,微服务的哪套就是,请求响应之类的
- REST API 是一种基于 HTTP 协议的通信方式,用于在客户端和服务器之间传输数据。
- 客户端通过发送不同的 HTTP 方法(如 GET、POST、PUT、DELETE)请求来操作和获取资源。
- REST API 使用统一的资源标识符(URL)来表示不同的资源,并使用 HTTP 状态码来表示操作结果。
- gRPC:
- gRPC 是一种高性能的远程过程调用(RPC)框架,使用 Protocol Buffers(protobuf)作为接口定义语言(IDL)和数据序列化机制。
- gRPC 支持多种编程语言,并使用基于 HTTP/2 的传输协议,提供了双向流式通信、流式传输和高效的序列化。
- 它可以用于构建分布式系统,以便不同的服务之间进行跨网络的通信和调用。
- RPC(Remote Procedure Call):
- RPC 是一种通信协议,用于实现不同计算机节点之间的远程过程调用。
- 客户端通过调用远程的过程(函数)来请求执行特定的操作,然后从远程服务端获取结果。
- RPC 提供了一种透明的远程调用机制,使得开发者可以像调用本地函数一样调用远程函数。
- WebSocket API:
- 建立连接之后,会一直通讯,比如说K线图,就一直在接收数据
- WebSocket 是一种在单个 TCP 连接上实现全双工通信的协议。
- WebSocket API 允许客户端和服务器之间建立持久性的连接,实现实时数据传输和双向通信。
- 客户端和服务器可以通过 WebSocket 连接进行实时的消息传递,不需要每次请求都建立新的连接。
- GraphQL:
- GraphQL 是一种用于构建 API 的查询语言和运行时。
- 客户端可以通过定义自己所需的查询结构来精确获取数据,避免了过度获取或多次请求的问题。
- GraphQL 提供了强类型的数据验证和客户端驱动的数据获取方式,使得客户端可以更灵活地获取数据。
这些通信方式在不同的应用场景中有各自的优势和适用性。选择合适的通信方式取决于系统需求、性能要求、数据传输方式等因素。
有状态(Stateful)和无状态(Stateless)是与计算机系统或应用程序的状态管理相关的概念。
有状态(Stateful)指的是系统或应用程序在处理请求或交互时,会记录和保存相关的状态信息。这意味着系统在不同的请求之间会保留并使用之前的状态数据。有状态系统会维护一个会话状态,以便跟踪用户的操作和数据。例如,传统的 Web 应用程序通常使用会话来跟踪用户登录状态和购物车内容。webSocket就是有状态的通讯
无状态(Stateless)指的是系统或应用程序在处理请求或交互时,不会存储任何相关的状态信息。每个请求都是独立的,服务器不会保持客户端的状态信息。服务器仅根据每个请求的数据进行处理,并返回相应的结果。无状态系统更加简单和可伸缩,因为它们不需要维护和同步状态信息。例如,REST API 是一种无状态的通信方式,每个请求都包含足够的信息来进行处理,服务器不需要保持客户端的状态。gRPC和REST API就是无状态的通讯
1 |
|