即使是比特币以太坊等加密货币的初级用户,也会碰到钱包这个概念。但是如果不理解钱包的定义,分类以及底层原理,其实就很难想清楚如何使用钱包才最安全。

定义和分类

我们先来给出钱包的精确定义,然后再看看钱包的分类。这里有两个概念是人们经常混淆的,一个是钱包,另外一个是钱包软件。

关于钱包的精确定义,我觉得维基百科上给出的说法最精确,

钱包就是用来存放地址和私钥的。

但是本文里面我们遵循网上的另外一个非常流行的说法。

钱包就是地址加上私钥。

总之,我们这里的精确的钱包定义,只是地址和私钥,不包含任何其他的功能或者内容。

但是,人们日常中所说的钱包,却往往不是我们上面的精确定义,而是指钱包软件。那么什么是钱包软件呢?按照地址和私钥的存储介质,钱包可以分为三类。第一类是纸钱包,也就是到 bitaddress.org 这样的网站上,生成地址和私钥,然后把二者打印到一张纸上,那这张纸就是纸钱包了。第二类是硬件钱包,硬件钱包看着就像一个 U盘,但是通常是带一个小显示屏的,除了存储地址和私钥之外,还会附带一些软件功能。最后一类,就是钱包软件了,可以是一个网站,也可以是安装到手机或者电脑上的软件,提供非常丰富的功能。

人们日常提到钱包,90%的情况都是对钱包软件的简称。但是,咱们本文中为了论述清晰,严格的区分钱包和钱包软件两个词。

钱包软件工作原理

纸钱包和硬件钱包都是为了方便离线保存,突出的是安全性,功能方面比较简单,我们就不展开了。这里咱们专门说说钱包软件的工作原理。

首先我们要理解的是加密货币的存在形式。要把握的一点是,加密货币本身可以说是不以任何形式存在的,甚至没有任何一个数字是对应一枚加密货币的。我如果说自己拥有一个比特币,那其实是在比特币区块链上记录了我有一个比特币,比特币区块链相当于一个大账本。所以基于这一点,钱包软件中也不保存加密货币,而是保存了加密货币地址和私钥。

稍微说几句地址和私钥的知识。加密货币基于密码学,而公钥加密技术是密码学的核心技术之一。公钥加密技术就涉及到公钥和私钥的概念。如果我用私钥签名了一段数据,那么所有持有公钥的人都可以去验证这段数据的确是由我签名过的,或者说授权过的。这些都是早在加密货币出现之前就有的密码学技术了。说回到我们的钱包,钱包私钥其实对应密码学的私钥,钱包地址就对应密码学的公钥。所以每次我用自己的钱包地址给你转账,底层原理就是我用钱包私钥签署了一个转账交易,交易广播到全网之后,大账本上,我的地址中的余额会减少,你的增加。

这样,我们就理解的钱包软件的核心工作原理了。首先钱包软件要能获取到我们的地址和私钥,要么是长期保存,要么是在转账的时候临时输入。其次,钱包背后要有对应的区块链,例如比特币钱包软件要能够把转账交易广播到比特币网络,一些多币种钱包背后可能会对应多条区块链。最后,也是最重要的一点,钱包要能够帮我们完成私钥签名。

使用

好,原理说完了,最后一部分给出实用策略,这里关键就是要理解什么才是安全。

首先第一步是生成钱包。这里的关键词是要离线生成。可以选择一个可以信赖的钱包软件去生成,生成的时候要把网络断开。一般认为,只要钱包私钥暴露到了互联网上,这个钱包就应该弃了。会存储数额巨大的加密币的机构,往往有更苛刻的安全措施:钱包软件一般都是开源的,机构会请专家审核钱包软件的所有代码,保证代码本身是无后门的。然后找一台破旧的电脑,安装好钱包软件之后,生成钱包。钱包到手后,直接把电脑销毁。

你可能也会听说钱包有冷和热之分。冷的意思就是钱包的私钥从来没有暴露在联网设备上过,例如纸钱包。而软件钱包一般就属于热钱包了,因为不联网就没有办法进行转账。

说一个我自己觉得实操性比较强的策略。我们没有那么好的经济实力去审核代码和销毁电脑,但是可以做到的是要用不同的钱包软件,去生成多个钱包。然后把币分散存储,保证每个钱包中都不会数额太大。注意,钱包的地址相当于公钥,公钥暴露给任何人都不会影响安全的,所以转入资金这一步可以放心操作。然后,这些钱包都采用冷存储的形式。如果需要转出资金,就找一个自己经常用的钱包软件,输入私钥进行转账。一旦转账过一次,那么这个钱包就弃用了。

这里需要补充一点,目前大部分的钱包软件都做了安全增强,私钥不是直接保存的,而是加密后保存到 keystore 文件中。每次转账,需要用密码去解密 keystore 文件才能获得私钥。同时不管是私钥还是 keystore 文件,钱包软件通常都不会上传到自己公司的服务器上,而只是会在我们自己的手机上保留。这样的措施增加了钱包软件的安全性,但是同时也意味着,如果我们的手机坏了,那么钱包软件公司通常是不能帮我们找回私钥的,这也意味着我们的币也就永久丢失了。

所以,总的安全策略是,每个钱包中存币不要太多,同时要离线生成然后冷存储。

总结

关于钱包,我们就聊这么多了。核心目的是让大家理解钱包工作的机制,从而对如何达成安全形成清晰的认识。日常我们所说的钱包其实是指钱包软件,但是更为精确的定义是钱包就是私钥加地址。这样就能理解为何纸钱包,硬件钱包,和钱包软件都可以被称为钱包了,因为底层这三者都保存了私钥和地址这两个字符串。钱包软件的核心功能是进行私钥签名,并把交易广播到全网。而保障安全的核心原则是要保证私钥不要暴露在互联网上。