时间:2021-03-18 | 标签: | 作者:Q8 | 来源:网络
小提示:您能找到这篇{火币区块链研究院:数字资产钱包知多少(下篇}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的火币区块链研究院:数字资产钱包知多少(下篇内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
作者:袁煜明、李慧、刘洋、类成叁、胡智威 来源:火币区块链(ID:blockfin) 本报告基于火币研究院调研的 31 个钱包项目。对钱包从连网与否、数据存储、私钥存储、主链关系以及私钥签名这五方面进行了分类阐述,分析了其在安全性、易用性和功能性等策略上的不同。 本篇将从技术原理出发,详细阐述钱包助记词、Keystore、私钥、公钥和地址产生的方法及其相互关系。此外,从用户安全教育和钱包安全设计两方面,对钱包的安全性进行深度剖析。 第三章 数字资产钱包技术实现原理 3.1 技术总览 数字资产钱包技术实现主要包含三个部分:1.钱包自身设计,如何生成助记词,keystore 和密码等;2.私钥、公钥和地址产生的方法;3.钱包提供商远程调用各公链 RPC 接口设计;如下图所示,可总体概括数字资产钱包实现的技术流程: 众所周知,私钥为一串无规律字符串,非常不便于记忆,使用更是不方便,所以从钱包设计的角度,为简化操作同时又不失安全性,就出现了助记词的方法。一般情况下,助记词由一些单词组成,只要记住这些单词,按照顺序在钱包中输入,就能打开钱包,下文将详细阐述其中的原理和方法。 根据密钥之间是否有关联可把钱包分为两类: 非确定性钱包(nondeterministic wallet):每个密钥都是从随机数独立生成,密钥彼此之间无关联,这种钱包也被称为“Just a Bunch Of Keys(一堆密钥)”,简称 JBOK 钱包。 确定性钱包(deterministic wallet):所有密钥都是从一个主密钥派生出来,这个密钥即为种子(Seed)。该类型钱包中所有密钥都相互关联,通过原始种子可以找到所有密钥。确定性钱包中使用了很多不同的密钥推导方法,最常用的是使用树状结构,称为分级确定性钱包或者 HD (hierarchical deterministic) 钱包。 比特币钱包 (Bitcoin Core) 生成密钥对之间没有直接关联,属于 nondeterministic wallet,这种类型的钱包如果想备份导入是比较麻烦的,用户必须逐个操作钱包中的私钥和对应地址,如下图包含的为松散结构的随机密钥集合的非确定性钱包: Deterministic wallet 基于 BIP32 (Bitcoin Improvement Proposal32) /BIP39/BIP44 标准实现,通过一个共同的种子维护 n 多私钥,种子推导私钥采用不可逆哈希算法,在需要备份钱包私钥时,只备份这个种子即可(大多数情况下的种子是通过 BIP44 生成了助记词,方便抄写),在支持 BIP32,BIP39,BIP44 标准的钱包只需导入助记词即可导入全部的私钥,如下图种子派生密钥的确定性钱包: 上面提到了 BIP32,BIP39,BIP44 标准,概括来说 BIP32 标准定义了种子使用 HMAC-SHA512 生成根私钥,并导出子私钥,这是 HD 钱包的主要标准;BIP39 标准定义了钱包助记词和种子生成规则; BIP44 标准定义了节点布局,用于多币种和多账户钱包;除此之外,还有 BIP43 标准用于定义多用途 HD 钱包结构。具体可以前往 学习。 3.2 钱包设计框架 3.2.1生成助记词(BIP39 标准) 助记词库有 2048 个词,用 11 位可全部定位词库中所有的词(2^11=2048),作为词的索引,故一个词用 11 位表示,助记词的个数可为(熵+校验和)/11,值为 12,15,18,21,24。规定熵的位数必须是 32 的整数倍,所以熵的长度取值为 128 到 256 之间取 32 的整数倍值,分别为 128,160,192,224,256;校验和的长度为熵的长度/32 位,所以校验和长度可为 4,5,6,7,8 位。 生成助记词的具体步骤如图 3.4 所示: 1)生成长度为 128〜256 位 (bits) 的随机序列(熵),以 128 位为例; 2)取熵 SHA256 哈希后的前 n 位作为校验和 (n= 熵长度/32),图为 128/32=4; 3)随机序列(熵) + 校验和拼合为一个字符串,图为 128+4=132; 4)把步骤 3 得到的结果每 11 位切割,图为 132/11 =12 个字符串; 5)步骤 4 得到的每个字符串匹配预先定义的 2048 个词库里的单词; 6)步骤 5 得到的结果就是助记词串,这是一个有顺序的单词组,也就是我们一直说的助记词。 3.2.2通过助记词生成种子(BIP39 标准) 助记词由长度为 128 到 256 位的随机序列(熵)匹配词库而来,随后采用 PBKDF2(Password-Based Key Derivation Function 2) 推导出更长的种子 (seed)。生成的种子被用来生成构建 deterministic Wallet 和推导钱包密钥。 在密码学中,Key stretching 技术被用来增强弱密钥的安全性,增加了暴力破解 (Brute-force attack)对每个可能密钥尝试攻破的时间,增强了攻击难度。各种编程语言原生库都提供了 key stretching 的实现。PBKDF2 是常用的 key stretching 算法中的一种。基本原理是通过一个为随机函数(例如 HMAC 函数),把明文和盐值作为输入参数,然后重复进行运算最终产生密钥。 如图 3.5 所示: 1)PBKDF2 有两个参数:助记词和盐。盐的目的是提升进行暴力攻击时的困难度,可以参见 BIP-39 标准。盐由字符串常数“助记词”与可选的用户提供的密码字符串连接组成; 2)PBKDF2 使用 HMAC-SHA512 作为随机算法+2048 次哈希重复计算,最终得到 BIP32 种子,512 位(64字节)是期望得到的种子长度。即 DK = PBKDF2 (PRF, Password, Salt, c, dkLen),其中,PRF 是一个伪随机函数,例如 HASH_HMAC 函数,它会输出长度为 hLen 的结果;Password 是用来生成密钥的原文密码;Salt 是一个加密用的盐值;c 是进行重复计算的次数;dkLen 是期望得到的密钥的长度;DK 是最后产生的密钥。 3.2.3从种子中创造 HD 钱包(BIP32 标准) HD 钱包从单个根种子(root seed)中创建,为 128 到 256 位的随机数,任何兼容 HD 钱包的根种子也可重新创造整个 HD 钱包,所以拥有 HD 钱包的根种子就等于拥有了所有密钥,方便存储、导入及导出。 具体主密钥以及 HD 钱包的主链码生成过程如图 3.6 所示,根种子通过不可逆 HMAC-SHA512 算法推算出 512 位的哈希串,左 256 位是主私钥 Master Private Key (m),右 256 位是主链码 Master Chain Code;链码 chain code 作为推导下级密钥的熵。 以上过程再结合 BIP43,BIP44,对 HD 钱包还能实现诸如多币种、多账户、多用途等功能。 3.2.4 keystore 和密码基本功能 回归到用户体验,助记词的方式仍然很复杂的,现有的密码操作方式才是用户最为熟悉的方式。因此钱包还提供了 keystore 让用户导出密钥文件进行保存,Keystore 会存储在使用的设备里,这样每次登录只用输入相应密码即可。Keystore 是私钥经过加密过后的一个文件,需要用户设置的密码才能打开文件。即使 keystore 文件被盗,只要用户设置的密码够长够随机,短时间内私钥也不会泄露,有充足的时间转移地址里的数字资产到其他地址。 3.3 私钥、公钥和地址产生的方式 从私钥推导出公钥、再从公钥推导出公钥哈希都是单向的,采用不可逆算法,也就是常听到的椭圆曲线算法:如图 3.7 所示。 整体的公钥和地址生成过程如图 3.8 所示: 1)通过随机数生成私钥; 2)私钥经过 SECP256K1 算法处理生成了公钥; 3)同 SHA256 一样,RIPEMD160 也是一种 Hash 算法,经过一次 SHA256 + 一次 RIPEMD160 哈希运算,由公钥计算得到公钥哈希; 4)将一个字节的地址版本号连接到公钥哈希头部,进行两次 SHA256 运算,将结果的前 4 字节作为公钥哈希的校验值,连接在其尾部; 5)将第 4 步结果使用 BASE58 进行编码,即得到钱包地址。 从字节层面拆开来看,公钥的详细生成流程如图 3.9 所示: 1)私钥是 32 字节(256 位)的随机数; 2)在私钥头部加上版本号; 3)在私钥尾部加上压缩标志; 4)将私钥进行两次 SHA256 哈希运算,取两次哈希结果的前 4 字节作为校验码,添加到压缩标志之后; 5)将 2,3,4 步得到的随机数用 BASE58 进行编码,就可以得到 WIF(Wallet import Format)私钥(用于钱包之间导入导出私钥,是用户较为常见的密钥格式)。 6)私钥经过椭圆曲线乘法运算,可以得到公钥。公钥是椭圆曲线上的点,并具有 x 和 y 坐标。 从字节层面拆开来看,钱包地址的详细生成流程如图3.10所示: 1)将公钥通过 SHA256 哈希算法处理得到 32 字节的哈希值; 2)后对得到的哈希值通过 RIPEMD-160 算法来得到 20 字节的公钥哈希 Hash160; 3)把版本号+公钥哈希 Hash160 组成的 21 字节数组进行双次 SHA256 哈希运算; 4)将哈希值的前 4 个字节作为校验和,放在 21 字节数组末尾; 5)对组成 25 位数组进行 Base58 编码,最后得到钱包地址。 3.4 恢复钱包的 N 种方式 了解了钱包的基本技术原理以及助记词、Keystore、私钥、公钥和地址的关系后,遇到私钥丢失等情况我们就可以有条不紊地进行钱包找回工作了,如图 3.11 所示,只要不是私钥、密码、助记词同时全部丢失,你还有 N 种方法可以恢复钱包。 第四章 数字资产钱包安全分析 对区块链行业来说,安全将是永恒的话题,钱包涉及到用户资产的核心,其安全性更是不容忽视。近两年来,数字资产钱包安全事件不断,parity 钱包的两个安全事件则直接导致约 24 万个以太坊的损失, 2018 多款冷热钱包也都爆出安全问题,如图 4.1 所示。 数字资产钱包的安全性不仅要从底层设计上就进行全面考虑,对于大部分去中心化钱包来说,对用户的安全教育也是非常重要的内容,如图 4.2 所示。 4.1 用户习惯安全引导 对于去中心化钱包,私钥交由用户保存,如何帮助用户正确地理解和使用密钥、助记词等成为钱包项目方重点关注的内容。目前主流钱包采用图文教程、答题考试、视频讲解等方式来帮助用户理解钱包的各种基本概念、提醒用户正确地保管助记词、私钥和本机密码等。建议通过相对原始的方法来手动记录,远离截图、复制等一切电脑操作,养成良好的上网习惯,将风险降到最低。 4.2 钱包安全设计 4.2.1网络传输安全 ❖ MITM 中间人攻击防御,即双向校验 中间人攻击 MITM(Man-in-the-middle attack):指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。 虽然大部分数字钱包应用都会使用 HTTPS 协议和服务端进行通讯,但是中间人攻击方法上是可以通过在用户终端中安装一个数字证书的方式拿到 HTTPS 协议里面的内容。 安全的数字钱包需要能够对终端里面全部的数字证书的合法性进行扫描、对网络传输过程中的代理设置进行检查并能够保障基础的网络通讯环境的安全性。在数字钱包的开发中,在网络传输层面是否使用双向校验的方式进行通讯验证是衡量一个数字钱包应用安全性的重要评判标准。 ❖ RPC 接口调用权限安全 钱包本身只是区块链世界的接口软件,正如前文介绍的很多都是使用 RPC 调用相应接口,这样调用过程对数据传输的权限控制是数据通讯时的安全之本,对代码和各种场景的设计要非常仔细。 远程过程调用 (RemoteProcedureCall,RPC) 时安全策略:如在钱包节点 Geth 上启用远程过程调用访问时,千万不要允许带有解锁账户功能的远程过程调用的外部访问等。 4.2.2客户端文件管理安全 文件安全主要考虑的是安装在用户端的文件是加密并不可被破解的,以及对用户的一些禁止性操作或者增加对某些风险操作的不便利性来降低用户造成的风险。 ❖ 安装包安全性 确保软件安装包的安全和不可被反编译、破解来植入非法操作等。 ❖ 抵御终端不良程序对关键文件的访问 加密数字资产钱包最核心的文件—私钥/助记词是存储在终端设备上的,无论是PC端还是移动端,终端设备如果出现不安全的现象,对于私钥/助记词来说是有非常高的安全风险的。 一个安全的数字钱包,在设计之初就避免因为运行环境而导致的私钥/助记词存在被盗可能,比如增加用户操作要访问到核心文件时必须进行人脸识别或者短信确认的功能等。 ❖ 终端关键文件加密方式 对终端关键文件采用高安全的加密方式,防止普通程序访问,或者即使关键文件被复制出去,第三方也不能轻易破解的功能。如 Wallet.dat 加密问题。 ❖ 终端关键文件备份过程显示方式 用户难免对关键文件有备份的需求,在设计钱包时需考虑实际安全操作性采取限制直接导出关键文件的操作,或者允许导出关键文件,但是解密方法以不能进行任何操作的显示方式,供用户手动记录。 ❖ 助记词等关键信息生成和管理 对于钱包的核心关键信息,如助记词、私钥、Keystore 的生成和管理需充分考虑安全性。这三者的设计原则和思路基本相同,以助记词为例:为确保客户端生成助记词,不能经过任何云端或者服务器,这是去中心化钱包的核心,任何访问助记词的过程都需要用户主动确认,如上面提到的人脸识别或者短信确认的功能等。 对助记词的显示采用不能进行任何操作的显示方式,供用户手动记录。 ❖ 导入其他钱包生成的私钥和助记词安全 导入其他钱包生成的私钥和助记词安全的思路可以从重新创建新的核心文件的方式来降低非法程序入侵的风险;也可以同时用人脸识别或者短信确认的功能等。 4.2.3开发扩展安全 考虑到钱包作为区块链的接口端,对应用扩展需求很重要,所以设计上需严格控制开放端口的权限,确保通讯只是公钥签名。同时对应用程序要严格审查是否具备抗篡改能力的核心技术能力,以及应用运行过程中的内存安全、反调试能力等。 除此之外,考虑到用户密码忘记的风险,可以考虑采用多签方式增加各种应用场景,如密码找回功能等。 第五章 存在的问题及产业发展趋势 5.1 现有产品存在的问题 ❖ 安全问题时有发生 由于业务场景的快速迭代以及推广需求,无论热钱包还是冷钱包都会有一些安全隐患会被忽视。安全性和使用便捷性之间的冲突短时间无法解决。市面上的数字资产钱包良莠不齐,部分开发团队在以业务优先的原则下,暂时对自身钱包产品的安全性并未做到足够的防护,导致黑客有机可乘,类似 Parity 钱包、Ledger 钱包等漏洞事件时有发生。 ❖ 支持币种少,功能单一 市面上的钱包虽种类繁多,功能却普遍单一,支持的数字资产种类也十分有限。用户在管理数字资产时,通常需要在多种钱包之间来回切换,不仅影响了用户体验,也带来了不少风险。 ❖ 使用门槛较高,易用性不强 目前新进入数字资产市场的用户仍倾向于将资产放在交易所,一方面是由于交易便捷性的需要,另一方面也表明钱包对于普通用户来说仍然有较高的使用门槛,钱包仍需进一步优化业务流程,改进技术,提高使用便捷性,更需要加强用户教育,帮助用户正确、安全地使用钱包。 ❖ 盈利模式仍在探索 目前大多数钱包的盈利模式仍在探索,变现能力不强,钱包项目的生存压力较大。相较于热钱包,卖设备的冷钱包有更强的变现能力,不过其设计研发的前提投入较大,库存积压的风险也较高,受舆情监控系统公司市场整体行情影响较大。 5.2 数字资产钱包发展趋势 一方面,钱包是用户与区块链交互的界面,可视为现实世界通往区块链世界的一个重要入口;另一方面,钱包的本质是私钥管理工具,与区块链及数字资产息息相关,资产属性强烈。未来数字资产钱包的发展也将紧紧围绕着这两点特性不断丰富和扩展。随着行业的发展和演进,势必有些钱包将在某一领域进行技术和资源上的深耕形成行业高壁垒,有的则将朝着全面和综合性的方向进行业务优化和资源聚合。 ❖ 区块链世界入口功能发展并强化 资产种类增加,一体化管理入口。当数字资产种类越来越多星巴克公关危机管理存在的,用户急需统一化的平台帮助用户管理众多类型的资产。而由于目前中心化数字资产交易存在的流动性分割现状,用户需要在不同的交易所注册登录不同的账户进行查询和交易,过程繁琐,而且未来也很难改善此类现状,因此钱包将成为资产聚合的首选方案。资产一体化管理可将用户在多个钱包和交易所的通证持有情况进行汇总并提供统一的汇总、查询、分析以及交易等服务。未来支持多平台跨链兑换等功能的发展,也将满足用户流动性多样化需求。 DAPP 应用入口。互联网时代,如同各类 App 作为用户感受移动互联网的窗口。未来,区块链时代,各类 Dapp 也将成为用户直接参与区块链的主要方式。由于用户与 Dapp 的交互需要消耗数字资产,而钱包作为协助用户管理各类数字资产工具,其重要性不言而喻,可能会成为新时代应用商店,成为区块链 3.0 时代真正超级流量入口。 通证使用权、收益权等功能性入口。未来随着区块链项目的落地,以及通证的功能属性越来越强,钱包作为区块链世界的入口将承载着非常关键的角色。用户只有自己直接掌管着私钥,才能行使通证所代表的各种功能和权力,例如 EOS 投票权、获得 POS 挖矿收益等。未来通证经济模式下还将诞生更多的通证实际使用场景,例如各类行为挖矿、分红,权力凭证等。钱包提供的直接便捷渠道,将会释放出通证除交易以外的功能潜力,更好的促进通证经济发展。 ❖ 金融属性强化,服务和产品不断丰富 交易属性日渐增强。钱包用户天然拥有交易需求,如果币不用提出钱包就可以实现交易,不但减少了用户提币转币的操作步骤,减少了犯错的概率,也增强了用户黏性,为钱包项目的后续转型提供了很好的发展方向和资金沉淀。另外,去中心化交易所的发展也会促进去中心化钱包的发展,这对 Onchain 钱包有天然优势。 理财服务不断完善。作为资产沉淀的平台,数字资产钱包不仅仅是工具、是流量入口更是资金入口和金融服务平台。围绕资产开展一系列理财服务将是未来钱包发展重点。目前已有一些数字资产钱包开始布局各类理财和资金托管服务,但是该领域还在非常早期阶段,和传统的资管服务很不一样,风控、盈利模式、资金安全等很多问题还需一一解决,产品设计也需结合区块链资产特点进行重新规划和考虑。 附录1:常见名词 1. 密钥:是指某个用来完成加密、解密、完整性验证等密码学应用的秘密信息。在对称密码中,加密和解密用的密钥是同一个。而在非对称密码中,加密和解密用的钥匙不同,根据是否公开可分为公钥和私钥。 2. 私钥:在非对称密码中,加密和解密用的钥匙不同。根据是否公开,可分为公钥和私钥。公钥和私钥成对生成和使用。其中由用户自己保管、不对外公开的,称为私钥。 3. 公钥:在非对称密码中,可对外公开并传递的密钥称为公钥。 4. 地址:通常由公钥产生。公钥经过多种加密算法、哈希算法等生成用户钱包地址,类似传统金融中的银行卡号。 5. 数字签名:类似写在纸上的普通的物理签名,转移资产的时候需要用户签名才能启动。多重签名,则是地址允许多个用户用一个公钥单独发送部分地址,共同管理资产。 6. 助记词:将难以记忆的私钥通过加密算法转换成一组常见单词。私钥与助记词之间可以互相转换。 7. Keystore:通过加密算法加密过后的私钥,通常以文件格式储存。 8. 冷钱包:离线钱包,在没有连网环境下使用的,统称冷钱包。 9. 脑钱包:脑钱包的主要原理是用可预测的算法把口令转换成一对公私钥,用户通过输入自行编写的一串字符串,即可与一个笃定的密钥生成一一对应的映射,是一种密钥生成方式。 10. 硬件钱包:用专业的硬件存储数字资产,将数字资产私钥单独储存在一个芯片中,与互联网隔离,即插即用。 11. 纸钱包:将私钥或助记词以字符串、二维码等形式记录在纸张上来进行保存和使用的方法。 12. 热钱包:即连网又称在线钱包,处于连接互联网状态,私钥存储能被网络直接访问的钱包。 13. 重钱包:全节点钱包,保存私钥的同时,需同步所有区块链数。 14. 轻钱包:不保存所有区块的数据,只保存跟自己相关的数据的钱包。 15. 去中心化钱包:用区块链网络上其他全节点,不用保存所有区块数据,需保存和同步与自己相关的数据,无需第三方管理存储你的私钥,私钥由本人控制。 16. 中心化钱包:用户无私钥,数据均完全依赖运行提供钱包产品的中心化的第三方。 附录2:31 个调研项目清单 回顾:对加密货币资产钱包从连网与否、数据存储、私钥存储、主链关系以及私钥签名这五方面进行了分类阐述,分析了其在安全性、易用性和功能性等策略上的不同。 |
上一篇:Apple Pay、 Facebook谁的支付更安全?海外电子支付
下一篇:未来五年内,泰国在线零售或将占该国零售市场
小提示:您应该对本页介绍的“火币区块链研究院:数字资产钱包知多少(下篇”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通火币区块链研究院:数字资产钱包知多少(下篇的相关事宜。
关键词: