比特币钱包的安全使用和完美备份

by 江枫晚霞

一、选择安全性最高的脑钱包

1、脑钱包简介

在比特币的世界里,比特币地址(格式类似这样:1JwSSubhmg6iPtRjtyqhUYYH7bZg3Lfy1T)相当于银行帐号,比特币私钥(格式类似这样:5KJvsngHeMpm884wtkJNzQGaCErckhHJBGFsvd3VyK5qMZXj3hS)相当于开启这个帐号的密码,一个地址(帐号)对应一个私钥(密码)。只知道比特币地址是不能得知比特币私钥的,也是无法动用里面的比特币的,这和你知道别人的银行帐号但不知道别人的帐号密码不能取款和转账一样。但是和银行不一样的是,知道了比特币私钥却可以得知其比特币地址,并且能对该地址下的比特币进行转账,也就是说获得比特币私钥就拥有了该私钥和地址下的比特币的完全控制权——私钥就是一切!所以如果1:你弄丢了你的比特币私钥;或2:你的比特币私钥给别人知道了,你该地址下的比特币也就完蛋了:要么永远动用不了地址上的比特币,要么被知道你的私钥的人转走。

等等,这些好像和你一直在用的比特币客户端比如Bitcoin-QT不一样,你可能都不用涉及到私钥的概念。那是因为私钥都包含在钱包文件wallet.dat里面了,平时我们所指的备份钱包就是备份这个存有私钥的文件。如果你想进阶到一个更高的使用比特币的水平,私钥的概念是必须了解并掌握的,其带来的优势也是很明显的,比如你可以不再依赖钱包文件,不局限于某个客户端,可以用各种不同的客户端(最好是比特币官网上有推荐的)导入私钥使用里面的比特币,并可用完即删除以防止比特币被盗。现在我假设通过上面的解释,你已经清楚比特币的地址和私钥的概念,接下来我们来了解脑钱包。

我们都知道,比特币的地址(帐号)和私钥(密码)都是很长的一串字符,光靠脑子记忆是行不通的。比特币地址倒没关系,你可以写下来发给要转账给你的人,让他转账给你。但你不能泄露或丢失你的比特币私钥,否则该地址下的比特币你会被转走或没永远用不了。为了保证不泄露或丢失比特币私钥你可能会把密钥打印出来(这就是纸钱包了)并保存在一个高度安全的地方,比如存进银行保险箱、藏在你家床底下、或在你家院子里(如果有的话)挖个洞埋起来……但是,这也太麻烦了,幸好我们还有另一种选择:脑钱包。

现在想象一下,有这样的一个工具:你可以用一句话做为暗号在该工具上生成一个比特币地址和对应的一个私钥(这就是脑钱包了),你可以用这个生成的地址来接收比特币,用这个生成的私钥来转账,你不必记住私钥也不必把私钥打印下来,每次需要用比特币的时候就用这句暗号去这个工具上把私钥再生成一遍,使用完了再在客户端上把私钥删除。你所需要做的只是:确保记住这句暗号(李笑来老师提醒脑钱包有风险:一个不小心摔成脑震荡。。。这个等一下我们有办法解决)。这是很酷的一件事情!

2、选择脑钱包暗号的原则

  • 原则1:字符足够多以防止被爆力破解;
  • 原则2:对别人来说特别不容易猜出来;
  • 原则3:对你自己来说特别容易记起来;

这就是我们选择脑钱包暗号的原则。基于这3个原则我即兴选择一句暗号:
2010年我读了一本书,书名叫《把时间当作朋友》,我特别认同181页的内容。
这样字符够多了;同时这句话里面包含了很多个人独特的经历,对我自己来说也很容易记得;对别人来说却不容易猜:他要猜到2010年还要猜到是读一本书,而且还要猜到书名,还要猜到我认同181页——Mission: Impossible. 基于这个3个原则,选择自己的暗号吧,接下来我们要看看具体如何生成脑钱包了。

3、生成脑钱包的工具

其实生成脑钱包的工具就是一个有JavaScript的网页。用chrome 或 firefox登录www.bitaddress.org,然后如果你像我这样强迫症,非要让自己的私钥从生成到使用都不接触网络,以最大限度的避免被盗的话,在网页上点击右键,把这个网页另存为下来(这其实很必要,你以后可以离线用这个工具了)。具体见图1.1:

image001

图1.1

4、生成脑钱包

现在假设你已经保存好这个网页,并且复制到离线的电脑上用chrome 打开。以下是生成脑钱包的具体操作:

  • 第一步:点击网页菜单上的 Brain Wallet,并选中 Enter Passphrase 输入框后面的 Show;
  • 第二步:输入暗号,这里我用刚刚即兴选择的那一句;
  • 第三步:点击 Show 下面 View 按钮生成私钥和地址;

就可以看到生成的私钥和地址啦!!!
地址:1Fd8zmErZRccNUmG3pjcys887Uqt5QMA1v
私钥:5JueocrCHvCpqsV45DiFiUXKG6nB61MpYTd35PH2phhkVTWnK6Z
细节见图1.2:

image003

图1.2

5、如何生成无法被暴力破解的最高安全性的脑钱包

我们的主题是“使用无法被暴力破解的最高安全性的脑钱包”,按道理说如果你是一个正常人,这种暗号这样的安全性也就够了,很少概率会被猜到或破解了。不过如果你是像我这么严重强迫症的家伙,下面的内容你一定要知道并应用。
无法被爆力破解的最高安全性的脑钱包其实就是用两句暗号分别生成两对私钥和地址,再用这两对私钥相乘(地址不用),生成一对新的私钥和地址。
例如我用刚刚的那句暗号(我们叫它暗号1):
“2010年我读了一本书,书名叫《把时间当作朋友》,我特别认同181页的内容。”生成了私钥1:5JueocrCHvCpqsV45DiFiUXKG6nB61MpYTd35PH2phhkVTWnK6Z
现在我在选多一句暗号(暗号2)“我12岁那年和黄小明打了一架,我左手脱臼他头破血流,但是我们现在是朋友。”
按刚刚的方法生成了另一对私钥(私钥2)和地址:
地址:1D4JjK3dM46mFqDFfxB8KJWCk4xHNFaJ4Y
私钥:5JznMx1b3YKQMSGGnz7QpMZ2zvvk9ckGHHhjt96HoCbkX4PWkqH

接着我们把
私钥1:5JueocrCHvCpqsV45DiFiUXKG6nB61MpYTd35PH2phhkVTWnK6Z

私钥2:5JznMx1b3YKQMSGGnz7QpMZ2zvvk9ckGHHhjt96HoCbkX4PWkqH
生成一对新的
私钥和地址:
地址:1GyvtsBgXti8FhqmNv7HjT38V8msKxWoxf
私钥:5JSbvC1GNb74jDjdijY5XnhNcfbngaTAaHavchkn3JdHnnzQ4Kh

具体操作步骤是:

  • 第一步:点击网页菜单上的 Vanity Wallet ;
  • 第二步:分别复制私钥1和私钥2(地址不用)到网页上的那两个输入框上;
  • 第三步:点击选上 Multiply ;
  • 第四步:点击生成按钮 Calculate Vanity Wallet.

细节见图1.3:

image005

图1.3

为什么说这样生成的私钥是无法被破解而安全性最高的?因为这是两句暗号生成两个私钥相乘出来的,根本无法用任何单一的暗号生成,在我们保证不泄露任何一句并且保证电脑不被病毒木马入侵的前提下,黑客既无法穷举破解出来也无法通过木马偷走。唯一获得该私钥的方法是两句暗号对在一起,可世界上有那么多字符可以作为暗号,黑客又如何知道你第一句用的是那一句用了多少字符?还要对上另外一句?用任何数量的字符对任何数量的字符?禽兽!快放开那个黑客!

如果说刚刚一句暗号生成的脑钱包的破解是Mission: Impossible,那现在就是Mission: Impossible II和III了,呵呵。

6、如何在客户端上导入脑钱包私钥

生成脑钱包之后,你可以直接转比特币到该地址,通过www.blockchain.info 搜索该地址就可以看到转账记录,不用任何客户端也可以使用。但是一旦你要使用该地址中的比特币你就必须用到其私钥了,具体来说就是把私钥导入到比特币客户端中,就可以自由支配地址上的比特币了。这里重点介Armory客户端——号称目前功能最强大的比特币客户端,因为下一主题要介绍的就是这个客户端的冷藏和离线交易功能。
在“私钥从生成到使用都不接触网络”的原则下,假设(也建议)你仍然在离线的电脑上操作Armory,导入私钥到 Armory的具体操作如下:

  • 第一步:用在线电脑登录bitcoinarmory.com,下载好并复制到离线电脑中安装好Armory。
  • 第二步:新建一个Armory钱包,要注意我们的目的不是使用这个钱包的地址和私钥,是用来导入我们脑钱包的私钥和地址的;

具体操作见图1.4-1.6:

image007

图1.4

image009

图1.5

image011

图1.6

  • 第三步:导入脑钱包私钥到Armory钱包中使用。具体操作如图1.7-1.8:

image013

图1.7

注意:核对私钥与地址符合之后点Yes 之后还要输入Armory 的钱包密码,才能完成导入。

image015

图1.8

7、比特币的找零机制——脑钱包

(使用者必知,否则后悔莫及)
开始用脑钱包时,我是想这样用它的:每次收款就在blockchain.info上查看到帐情况,需要给别人付款转账的时候再把私钥导入到Armory,使用完了就删除掉整个Armory的钱包文件,绝对不让脑钱包私钥在网络上多逗留一刻。这很合理,长期把脑钱包私钥放在钱包文件那就不叫脑钱包了。
那是我第一次把脑钱包私钥导入到 Armory, 我完成了一笔1BTC的转账,正想把存着我的脑钱包私钥的Armory钱包删除,但不知道怎么的我觉得应该点开查看我的脑钱包地址下的余额是否正确。这一查看吓死我了:我发现我导入的脑钱包的地址上的BTC余额为零!钱包地址本那里多了一个标有Change字样的地址,其余额正是我脑钱包地址应该有的。瞬间我就石化了:我只是转了1BTC出去,它怎么没经我同意就把我脑钱包上剩下的BTC转到Armory钱包的一个新的地址上?如果我刚刚把Armory钱包文件都删除了,岂不是我的BTC都丢失了?好险!

后来我通过查资料,知道这是比特币的找零机制:为了保证隐私(匿名性)客户端默认设置(不只Armory默认是这样,另一个轻客户端Electrum也是)为每转出一笔钱就把剩下的自动转移到钱包里面新的一个地址名下。这个目的是好的,但是和我用脑钱包的初衷完全背离:我用脑钱包的目的就是想让我的BTC永远的和我的那句暗号绑在一起,现在它给我转到别的地址去了!这太扯了!于是我决定找找看Armory上是否有不找零的设置选项,还真的找到了,终于解决了问题。具体设置如图1.9-1.10:

  • 第一步:通过菜单File点击settings进入设置,把用户模式user mode设置为expert,见图1.9:

image017

图1.9

  • 第二步,转账时选中Use an existing address for change(找零到一个已存在的地址,如果你不选中这个,就会把脑钱包上的余额转移到一个新的地址上),再选中Remember for future transactions(记住为以后转账默认设置,选中这个以后就不用在重复设置了。)见图1.10:

image019

图1.10

通过上面的设置,我们就可以避免脑钱包上的比特币糊里糊涂地被找零到新地址上了。

二、利用Armory的冷储存和离线交易功能

1、私钥冷储存和离线交易的概念

正如我们在第一节讨论过的,转账要用到私钥,有私钥就能转账,私钥就是一切,所以毫不夸张的说我们要像保护自己的生命一样保护自己的私钥!但是很多人对自己的私钥保护严重不足,很多人在windows系统下加密了钱包,简单的备份一下钱包文件,以为这样就挺安全了,其实这是很危险的。因为所有的客户端其实都是把私钥和地址存放在钱包文件(钱包文件存放在系统的AppData文件夹里面),我们都知道比特币转账需要要联网,这样也就为黑客打开了一扇盗取我们的比特币的方便之门了,技术厉害的黑客完全可以通过在你的电脑上植入木马获得钱包文件并在你转账输入钱包密码时记录键盘获得钱包密码,这样你的比特币就和你永别了。每个人都希望这样的事情不要发生在自己身上,但是光有希望肯定是不够的,得有实际行动才行!利用Armory的私钥冷储存和离线交易功能正是这样切实的保护方法。

简单来说,Armory的私钥冷储存就在一台永不上线的电脑上安装好Armory客户端并管理我们的私钥(可以是Armory自己生成的也可以是导入的)让我们的私钥不接触网络。但是转账的时候需要网络啊:Armory离线交易功能可以让我们的私钥在完全不接触网络的前提下完成转账,这就很牛逼了!只要我们的私钥不接触网络,就不可能被黑客盗取。除非那不是黑客是黑社会破门入。

2、工具准备

准备一个U盘、两部电脑,其中一部连接网络,另一部不要连接网络,两部电脑分别安装不同的操作系统(防止病毒和木马通过U盘在同系统不同电脑上传播),并分别安装好Armory客户端(下载地址:https://bitcoinarmory.com/get-armory/ ),要注意,在线的Armory客户端需要在安装有Bitcoin QT客户端的系统上才能正常运行,如果你的在线电脑没有Bitcoin QT客户端,就需要先安装一个。离线电脑的Armory客户端不需要以Bitcoin QT客户端为基础,可以独立运行。

这里有个操作系统选择的建议,如果你日常主要用的系统是Windows,那就在离线电脑上安装LINUX。我自己的组合就是Windows7 + Linux mint(基于UBUNTU的一个Linux版本),如果实在没有两台电脑,也可以在同一台电脑上安装不同的系统来实现,只是这样平时转账的时候要重启电脑进入不同操作系统,会有点不方便。

3、私钥冷储存和离线交易的具体操作

一共有六个步骤,其中第一至第三步是完成私钥冷储存创建的过程;第三到第六步是平时转账是进行离线交易的操作过程。六个步骤分别为:

  • 第一步:用离线电脑的Armory客户端创建冷藏钱包
  • 第二步:制作不包含私钥的只能观看的钱包备份
  • 第三步:把不包含私钥的只能只能观看的钱包备份导入到在线电脑的Armory客户端上
  • 第四步:用在线电脑的Armory客户端创建未签名交易。
  • 第五步:把未签名交易拿到离线电脑的Armory客户端上签名
  • 第六步:把已签名的交易拿到在线电脑的Armory客户端上广播完成转账

下面我们一步一步展开:

  • 第一步:用离线电脑的Armory客户端创建冷藏钱包。这一步的操作和上一节在Armory上创建钱包或导入脑钱包私钥一样,这里不在赘述。
  • 第二步:制作不包含私钥的只能观看的钱包备份(Watching-Only),并保存到U盘上,细节见图2.1:

 

image021

图2.1

  • 第三步:把不包含私钥的只能只能观看的钱包备份导入到在线电脑的Armory客户端上。

细节见图2.2-2.3:

image023

图2.2

image025

图2.3
注意:完成这一步之后,Armory会停止响应一会儿,然后提示导入已经成功并重新同步数据,整个过程需要时间大概3-10分钟,视电脑速度而定。图2.4是成功导入只能观看的钱包备份并同步好数据之后:

image027

图2.4

到这一步为止我们已经完成了私钥的冷储存,接下来的步骤是日常转账交易中的离线交易操作。

  • 第四步:用在线电脑的Armory客户端创建未签名交易

顾名思义,未签名交易就是还没有通过私钥签名的交易,我们平时要转账给别人的时候,可以按需要先创建这样未签名的交易,具体操作见图2.5-2.7:

image029

图2.5

image031

图2.6

image033

图2.7

image035

图2.8

image037

图2.9

image039

图2.10

到这里为止,我们已经完成了一笔离线交易中创建未签名交易的操作并保存为文件到U盘,接下来的步骤就是我们把这笔未签名交易复制到离线电脑上,用Armory客户端进行签名。

  • 第五步:把未签名交易拿到离线电脑的Armory客户端上签名。

通过上一步,我们把未签名交易一文件的形式保存早U盘,现在把U盘插入到离线电脑上,并打开Armory客户端,因为离线电脑的Armory客户端的钱包包含私钥,所以能对这笔未签名交易进行签名,具体操作见图2.11-2.17:

image041

图2.11

image043

图2.12

image043

图2.13

image045

图2.14

image047

图2.15

image049

图2.16

image051

图2.17

到这里为止,我们已经为未签名的离线交易签名完毕并自动保存在U盘中,接下来的步骤就是拿去在线电脑的Armory客户端上进行广播。

  • 第六步:把已签名的交易拿到在线电脑的Armory客户端上广播完成转账

这是最后一步了,通过把以签名的离线交易拿到在线电脑的Armory客户端上广播,整个转账过程将全部完成。具体操作见图2.18-2.23:

image053

图2.18

image055

图2.19

image057

图2.20

image059

图2.21
以上完整介绍“私钥冷储存和离线交易”的概念和相关的操作,建议感兴趣和有条件的朋友可以配合脑钱包的那一节,开始用小额的比特币进行实际操作以熟练掌握。

三、终极钱包安全备份法

1、三种可能丢币的情况

为什么要备份钱包?答案是防止丢币。可能大部分人都会这么回答。这是没错的,但不够具体,比较模糊,最终也会影响效果。如果我们能更进一步把丢币这个问题分解一下,其实可以得到三种可能丢币的情况,这将有助于我们针对各种可能的情况设计更好的措施,得到最佳的效果。

三种可能的丢币情况分别是:

  • 第一种可能丢币的情况:被黑客通过各种入侵手段盗取钱包或私钥。这种可能的情况是大家共同意识到并考虑得最多的,但预防措施却不一定做足,比如有人因为怕麻烦竟然连起码的钱包加密都没能做到;有人会对钱包进行简单加密,但这些对于防止黑客入侵盗取比特币是很不足够的,特别是在windows系统环境下。
  • 第二种可能丢币的情况:因为各种原因自己弄丢了钱包、钱包密码或私钥。这种可能的情况也是大部分人(除了新手,新手可能会因为没备份钱包文件在重装系统后丢失钱包文件)能考虑到的,并且会做各种备份,比如用脑钱包、纸钱包、钱包文件备份到U盘和云端。但一样做的不是很好,有时候反而方便了第一中丢币可能:黑客盗取。比如有人竟然将客户端的原形钱包文件格式(QT钱包格式:wallet.dat、Armory钱包格式:XXX.wallet、electrum格式:electrum.dat)不做任何伪装就备份到云端上了,而且钱包密码还居然跟云端帐号密码一样(在现实中我就见过有人是这样),总之颇为顾此失彼。最后还有一种属于自己弄丢钱包(私钥)和密码的可能性:出现人身意外。
  • 第三种可能的丢币情况:被身边的人有意或无意中得到钱包(和密码)或私钥。这种可能的情况相对比较少被考虑到,可能也是所做的相关防护最不足的。想象一下这种情景:身边走的比较近的人(但是不一定特别可靠的),知道你有在搞比特币。突然有一天你没在家(你家有人)的时候他去你家了,然后不管出于什么原因,他借用你的电脑结果“不小心”打开你的钱包(或私钥)或在某个抽屉里发现了你的纸钱包备份……这些都是有可能发生的。

以上的讨论涵盖了所有可能丢币的情况,和相关的防护(备份)措施。从中我们可以看到由于模糊性,使我们没有考虑周全并针对各种可能设计安全备份,导致防护不足。可能你要说这也太夸张了,那都是多小概率的事件啊,果然是严重的强迫症。但我要说的是,小概率事件一旦发生了就是毁灭性的,是你承受不了(呵呵,我自己因为忘记900个LTC的钱包密码都难受的要命,不敢想象要是我的比特币都丢了。),如果比特币值得我们认真对待,那我们就尽量在相关的各方面认真一点吧。
有没有一种备份方法能兼顾防止这三种可能丢币的情况呢?答案是有的,但不是单一的备份方法,是各种方法的组合,相信配合上一节介绍的冷储存和离线交易,能实现最大程度上的比特币使用安全。

2、防止三种丢币可能的终极备份方法

以下的备份方法是各种单个方法的综合,建议全部运用起来,这样效果也是最好的,也可以根据需要只使用其中几种,但一定要记住三种可能的丢币情况,并针对性的去设计备份方法。

  • A )使用双倍安全性的脑钱包,并把脑钱包私钥导入到离线电脑的Armory客户端加密钱包中冷储存。这样做的目的是万一你忘记了脑钱包暗号了,你可以从这个冷储存中找到私钥,而且平时离线交易转账也比较方便,不必每次都重新导入私钥。但是一定要注意,除了钱包加密,电脑的操作系统也一定要设密码,并贴一个“此电脑不能上网,待维修”的提醒,以防止被身边的人“借用电脑”。
  • B )经常复习脑钱包暗号以防止时间长了忘记。你可以把复习脑钱包暗号这件事安排为按时间重复的(如2个月复习一次)日程事件,时间到了手机或电脑提醒复习。复习不能是回忆几遍就行了,是要到离线电脑上打开那个生成脑钱包的离线网页,重新生成一遍,看看私钥(和地址)是否正确。
  • B )用改编变异的方式把脑钱包暗号写下来,存放在安全的地方。

这个方法需要详细说明一下:

  • 第一:有四种改编和变异的方法任选一种即可:变换暗号的关键字眼、删减暗号的关键字眼、变换暗号文字的排列顺序、增加无关的文字。下面以我们用过的暗号来举例说明:

原来的暗号是:2010年我读了一本书,书名叫《把时间当作朋友》,我特别认同181页的内容。
变换关键字眼:2011年我读了一本书,书名叫《心理学改变生活》,我特别认同292页的内容。
删减关键字眼:我读了一本书,书名叫《把时间当作朋友》,我特别认同。
增加无关文字:就在2010年我读了一本书,书名叫做《把时间当作朋友》,我真的特别认同其中181页的内容。
这个暗号不太好改变顺序,就不举例了。

  • 第二:接着还要考虑写在哪里,写完要存放在哪里:

以写日记或文章的方式把变异的暗号以行文所需的两句话写进日记本中(除了你自己,别人不可能知道其中的秘密的)使其看起来不那么刻意、唐突,然后藏在家里隐私的地方(有条件可以存银行保险柜)。通过这样的方式记录暗号,相当于具备纸钱包的功能,但是比纸钱包更隐蔽(纸钱包格式太过引人注目),别人看到了也不可能注意得到。这也是我固执地认为脑钱包要胜过纸钱包的原因之一。

C )把隐藏有变异的脑钱包暗号的文章制作一份电子版备份,并同步到云端。本来直接制作一个doc格式就可以了,因为很普通的一篇文章,不引人注目,即使黑客入侵你的云端帐号也不会注意到里面有什么秘密,但是要注意我们的标题是“严重强迫症者”,我们要把任何可能造成私钥泄露的漏洞哪怕再小也要堵上!所以我们可以把电子版的备份更改后缀名为jpg图片格式,使其看起来就像一个坏掉的打不开的图片,或者更甚,我们可以把这打不开的假图片压缩为zip格式并伪装为一个真正的图片,需要的时候再还原出来。“把压缩文件伪装成图片”的具体方法可以在网上搜索一下关键字“把压缩文件伪装成图片”

只要做足上面ABC三种备份方法,你要同时发生以下4种情况,才能弄丢你的私钥:1、忘记脑钱包暗号,2、冷储存的电脑硬盘彻底坏掉,3、记录有变异暗号的日记本丢了,4,电子版的暗号备份在本地计算机和云端同时删除了。如果这4种情况真的同时发生了,那你的人品就是真的是差到前无古人后无来者的程度了,我只能深表同情。

D)把最少两种或以上的备份告诉一个完全信任的人。即使我们做到以上的所有步骤,仍然有一点是防止不了的,那就是如果我们自己出现人身意外……所以就很有必要把两种或以上的备份和还原的方法告诉自己最亲最值得信任的人了。这个各人情况不同,我无法真正有效地建议,大家视自己的情况安排就是了。

作者捐赠地址:181WPui9Ps6oinGdqTK3p2rVGnLatB5rEM