火币区块链产业专题报告-钱包篇(二)

2018-11-05 11:56:00
admin
转贴:
iiMedia Research(艾媒咨询)
17
摘要:为帮助读者深入理解数字资产钱包,本报告从技术原理出发,详细阐述了钱包助记词、Keystore、私钥、公钥和地址产生的方法及其相互关系。此外,对于钱包安全也从用户安全教育和钱包安全设计两方面进行了深度剖析。

为帮助读者深入理解数字资产钱包,本报告从技术原理出发,详细阐述了钱包助记词、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钱包结构。具体可以前往https://github.com/bitcoin/bips学习。 

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钱包等漏洞事件时有发生。

 

支持币种少,功能单一

市面上的钱包虽种类繁多,功能却普遍单一,支持的数字资产种类也十分有限。用户在管理数字资产时,通常需要在多种钱包之间来回切换,不仅影响了用户体验,也带来了不少风险。

 

使用门槛较高,易用性不强

目前新进入数字资产市场的用户仍倾向于将资产放在交易所,一方面是由于交易便捷性的需要,另一方面也表明钱包对于普通用户来说仍然[SP1] 有较高的使用门槛,钱包仍需进一步优化业务流程,改进技术,提高使用便捷性,更需要加强用户教育,帮助用户正确、安全地使用钱包。

 

盈利模式仍在探索

目前大多数钱包的盈利模式仍在探索,变现能力不强,钱包项目的生存压力较大。相较于热钱包,卖设备的冷钱包有更强的变现能力,不过其设计研发的前提投入较大,库存积压的风险也较高,受市场整体行情影响较大。

 

5.2 数字资产钱包发展趋势

一方面,钱包是用户与区块链交互的界面,可视为现实世界通往区块链世界的一个重要入口;另一方面,钱包的本质是私钥管理工具,与区块链及数字资产息息相关,资产属性强烈。未来数字资产钱包的发展也将紧紧围绕着这两点特性不断丰富和扩展。随着行业的发展和演进,势必有些钱包将在某一领域进行技术和资源上的深耕形成行业高壁垒,有的则将朝着全面和综合性的方向进行业务优化和资源聚合。

 

区块链世界入口功能发展并强化

资产种类增加,一体化管理入口。 当数字资产种类越来越多,用户急需统一化的平台帮助用户管理众多类型的资产。而由于目前中心化数字资产交易存在的流动性分割现状,用户需要在不同的交易所注册登录不同的账户进行查询和交易,过程繁琐,而且未来也很难改善此类现状,因此钱包将成为资产聚合的首选方案。资产一体化管理可将用户在多个钱包和交易所的通证持有情况进行汇总并提供统一的汇总、查询、分析以及交易等服务。未来支持多平台跨链兑换等功能的发展,也将满足用户流动性多样化需求。

 

DAPP 应用入口。 互联网时代,如同各类App作为用户感受移动互联网的窗口。未来,区块链时代,各类Dapp也将成为用户直接参与区块链的主要方式。由于用户与Dapp的交互需要消耗数字资产,而钱包作为协助用户管理各类数字资产工具,其重要性不言而喻,可能会成为新时代应用商店,成为区块链3.0时代真正超级流量入口。

 

通证使用权、收益权等功能性入口。 未来随着区块链项目的落地,以及通证的功能属性越来越强,钱包作为区块链世界的入口将承载着非常关键的角色。用户只有自己直接掌管着私钥,才能行使通证所代表的各种功能和权力,例如EOS投票权、获得POS挖矿收益等。未来通证经济模式下还将诞生更多的通证实际使用场景,例如各类行为挖矿、分红,权力凭证等。钱包提供的直接便捷渠道,将会释放出通证除交易以外的功能潜力,更好的促进通证经济发展。

 

金融属性强化,服务和产品不断丰富

交易属性日渐增强。 钱包用户天然拥有交易需求,如果币不用提出钱包就可以实现交易,不但减少了用户提币转币的操作步骤,减少了犯错的概率,也增强了用户黏性,为钱包项目的后续转型提供了很好的发展方向和资金沉淀。另外,去中心化交易所的发展也会促进去中心化钱包的发展,这对Onchain钱包有天然优势。

 

理财服务不断完善。 作为资产沉淀的平台,数字资产钱包不仅仅是工具、是流量入口更是资金入口和金融服务平台。围绕资产开展一系列理财服务将是未来钱包发展重点。目前已有一些数字资产钱包开始布局各类理财和资金托管服务,但是该领域还在非常早期阶段,和传统的资管服务很不一样,风控、盈利模式、资金安全等很多问题还需一一解决,产品设计也需结合区块链资产特点进行重新规划和考虑。

发表评论
评论通过审核后显示。
  • QQ客服
  • 微信客服
    • 客服
  • 扫一扫加微信