3分钟读懂“高大上”——深入浅出的讲解比特币钱包

对于一个新进入比特币世界的人来说,了解比特币的基本原理、甚至读懂中本聪的白皮书可能都算不上“难”,但要搞明白比特币钱包,那可就真难了。官方比特币钱包、轻钱包、手机钱包、在线钱包、纸钱包、脑钱包、硬件钱包、多重签名钱包、HD钱包……这一大堆乱七八糟的到底都是些什么?再加上这段时间被业内人士经常提及的ON-CHAIN钱包、OFF-CHAIN钱包,OMG,还能再复杂点儿不?

那么,到底什么是比特币钱包呢?顾名思义,比特币钱包就是存储和使用比特币的工具,定义本身清晰而简单,只不过是被大家搞复杂了而已。今天,我将通过这篇文章,尽可能的让“比特币钱包”回归简单。

 

三个基本概念:私钥、公钥和地址

继续本文之前,我们需要了解比特币的三个最为基本的概念:私钥、公钥和地址。关于这三个概念,已经有很多文章专业的从密码学等领域进行过剖析,在这里我就不再赘述了,我将尽可能的用通俗易懂的语言给大家说说。

私钥(private key)

听起来很高端,其实就是个随机数(概率空间为2^256,注:私钥的范围其实要小于这个数),我们一般会用计算机来生成这个随机数(生成过程被称为“密码学安全的伪随机数生成器PRNG”)。你可以想象着比特币世界里有2^256个抽屉,随便抽出一个抽屉来存放比特币,抽屉的编号就是私钥,因为只有你知道这个编号,所以也就只有你才能花费这个抽屉里的比特币,这很简单。

公钥(public key)

公钥与私钥一一对应,是由私钥推算出来的(通过椭圆曲线算法),我们花费比特币的过程其实就是“使用私钥来签名比特币交易,其他人则可以使用公钥来验证签名,验证通过,花费也就完成了”。私钥能推算出公钥,但公钥不能反推出私钥,该过程是不可逆的,这就是比特币的密码学根基。

地址(bitcoin address)

地址是由公钥转换而来(摘要+校验),地址被用于接收比特币(公钥其实也可以收币,只不过大部分人不这么做而已),一个地址上收到比特币后,只有使用该地址所对应的私钥才能花费这个地址上的钱。

好了,从上面的论述中,你就能看出,对于比特币来说,最重要的就是私钥,私钥决定了比特币的产权归属,公钥和地址均能通过私钥推算出来,因此通常意义上的比特币安全其实就是私钥的安全,一个比特币钱包是不是安全的也要看它能否安全的管理私钥。

比特币钱包的分类

现在,在了解了这些内容之后,我们终于可以开始对比特币钱包分类了(我们应该进行正确的分类,而不是本文最开始的那种含混不清的分类方式),分类的依据就是根据私钥的管理方式。

按私钥生成的方式分,我们可以将比特币钱包分为两类:

1、使用密码学安全的伪随机数生成器(PRNG)生成私钥的钱包:由于真随机数生成器需要采集环境中的熵,需要额外的“成本”,主要的比特币钱包都采用了密码学安全的伪随机数生成器来产生私钥,无论是电脑端的Bitcoin-core(之前被称为Bitcoin-qt)、MultiBit、Armory,手机端的Bitcoin-Wallet,还是诸如Blockchain.info这样的在线钱包,都要依赖于内核态或应用态的伪随机数生成器,这些随机数生成器被确认为密码学安全的,我们基本上可以放心使用。由于应用态随机数生成器通常要基于内核态的进行更高级别的封装,而这种封装往往有可能会引入新的问题,总体来讲,内核态的要更安全一些。历史上很多次随机数问题(比特币相关的、无关的)基本上都发生在应用态的随机数生成器上,因此,安全专家通常会建议开发者使用内核态的随机数生成器。(这部分内容可参阅我之前写过的一篇关于随机的文章 http://blog.sina.com.cn/s/blog_12ce70a430102uxhx.html )

2、使用真随机数生成器(TRNG)生成私钥的钱包:受“成本”和用户体验方面的限制,当前我只见过两种采用真随机数生成私钥的钱包解决方案,一种就是在电脑端采集用户鼠标和键盘操作的BitAddress网页程序(可离线运行生成私钥),另一种则是比太钱包的极随机(XRANDOM)解决方案。由于智能手机的感应设备非常多(如:相机、麦克风、重力感应、地磁感应、光线感应等),能够采集丰富的、高品质的环境噪声(熵),这使得廉价的、方便的真随机数解决方案成为可能,在这一点上,我们必须得感谢移动互联网的高速发展。

毫无疑问,以随机的角度来看比特币安全性,“真随机”优于“内核态伪随机”,更优于“应用态伪随机”。

按私钥的存储方式来划分,我们同样也可以将比特币钱包分为两类:

1、冷钱包:冷即离线、断网,也就是说私钥存储的位置不能被网络所访问(无论是否对私钥进行了加密),既有在“冷”电脑上存储私钥的钱包如Armory,也有在“冷”手机上存放私钥的钱包如比太冷钱包,还有将私钥打印或手抄在纸张上的纸钱包,以及设计专门硬件来单独存储私钥的硬件钱包(这里要特别说明一下,Trezor的私钥备份好像是存储在专门的网站上,如果真是这样,那它从严格意义上讲其实并不能算是冷钱包)。

冷钱包通常意味着私钥与交易的分离(因为交易是在比特币P2P网络上传播的,不分离则无法做到私钥和网络的隔离),如果需要监控和花费上面的比特币资产,则需要额外的辅助手段,无论这种手段是去中心化的、还是中心化的,都不影响“冷”这个本质。比如说,如果要花费Armory冷钱包上的比特币,需要通过U盘复制文件的方式来在冷热钱包间进行通讯;如果要花费比太冷钱包上的比特币,则需要在比太冷热钱包间通过扫描二维码来完成交易的签名和发布;对于纸钱包来说,可能需要将私钥导入到其它钱包中,再开始使用,不过在完成私钥导入之后,该私钥就可能不能再算是“冷”的了。

2、热钱包:热即联网,也就是私钥存储在能被网络访问的位置(无论是否对私钥进行了加密),比如在“热”电脑上存储私钥的Bitcoin-core、MultiBit等(私钥与交易在一起),在“热”手机上存储私钥的Bitcoin-Wallet(私钥与交易在一起)和比太热钱包,以及在网站上存储加密后私钥的Blockchain.info等在线钱包。虽然这些钱包从技术的实现方式有很大差别,比如Bitcoin-core是完整节点的钱包,需要同步全部的区块链数据;MultiBit、Bitcoin-Wallet和比太热钱包则是SPV轻钱包,只需缓存部分区块链的头,并且只存储与本钱包相关的交易;Blockchain.info则是中心化的在线钱包网站,由于钱包内的相关交易可直接从网站获得,无需进行区块链同步。虽然有着实现方式上的不同,而且会导致安全性和易用性上的差异,但从私钥的存储方式上来看,它们都属于热钱包的类别。

从安全的角度,冷优于热,但从易用的角度,热显然优于冷,到底该如何选择钱包,就需要用户自己在易用与安全之间寻找平衡,挑选满足自己需求的比特币钱包了。

通过上面的讨论,我们可以给挑选比特币钱包的用户提出如下建议(这些建议对于个人和企业均有效):

1、随机数很重要,甚至可以说,随机数是比特币密码学安全之本,短短几年的比特币历史中,有过多次因随机数问题导致的损失,切不可掉以轻心;

2、用于日常支付的小额比特币可以存储在热钱包地址上,热钱包的安全要依赖于其运行的环境,比如电脑钱包要依赖于电脑操作系统(Windows、Linux、MacOS等)的安全,手机钱包要依赖于移动操作系统(iOS、Android等)的安全,在线钱包除依赖于操作系统的安全外,还要依赖于浏览器的安全。保护热钱包,其实就是保护其运行环境,防止木马、病毒、黑客入侵和钓鱼邮件,用户可综合考虑选择满足自己需求的热钱包;

3、大额比特币应存储在冷钱包地址上,确保安全,并且应考虑适当的监控和验证方案;

4、私钥应该进行合理的备份,对于冷钱包来说,如果存储的币量大,甚至还应考虑异地灾备,以确保即便是在特殊情况发生时,比特币资产仍然安全(当看到有比特币矿工因火灾或其它灾难丢失大额比特币资产的新闻时,您就知道备份和灾备的意义了);

说完了比特币钱包的冷热分类,我再补充说一说近来“大热”的两个概念:多重签名(MultiSig)和确定性钱包(HD-Wallet)。这两个概念虽然经常被称为钱包,其实它们只是钱包软件需要考虑是否予以支持的两个功能而已。Bitcointalk论坛上经常会有国外的用户询问比太钱包何时支持这两个功能,其实它们从技术的角度上来讲并不复杂,但由于很难找到一种简单明了的方式让用户使用,而且过于复杂的逻辑反而容易导致用户的误操作甚至资产损失,因此过去我们一直未予以考虑。

ON-CHAIN和OFF-CHAIN

最后再说说ON-CHAIN和OFF-CHAIN,业内人士经常一开口就问“你这个钱包是ON-CHAIN的还是OFF-CHAIN的?”,或者还会有人说“大额比特币交易由ON-CHAIN来解决,小额支付由OFF-CHAIN来实现”,听起来就好像这世上有两种比特币交易,一种叫ON-CHAIN、另一种叫OFF-CHAIN,这毫无疑问也是很多新人一开始接触比特币是搞不懂的地方。

既然我们说的是比特币交易,那当然是ON-CHAIN的,对应的存储和管理比特币的钱包当然也必须是ON-CHAIN的。对于OFF-CHAIN的解决方案,我们可以称之为比特币银行或比特币托管平台,对应的OFF-CHAIN“交易”,也不应称为比特币交易,而可以称为银行内部账户间转账或平台内用户间转账,因为它的确不是比特币交易,它的产权不由比特币去中心化网络确定,它的产权转移也不由比特币网络负责。

总之,过于复杂和混淆的分类方式反而成了新用户开始接触比特币的最大门槛,我们应更努力让比特币更简单、更容易理解的同时更安全、更易用,而不是用那些更复杂的、更含混不清的概念来把新用户吓跑,这才是比特币未来的希望之所在。

比特币应该简单,比特币钱包也应该简单!

特别鸣谢比太钱包CEO 文浩先生先生的帮助。