转自:http://8btc.com/thread-819-1-1.html
随着比特币(BTC)的使用者越来越多;价格也很高(2013年,1比特币价格长期在100美元以上);同时比特币没有一个*机构,丢失私钥或忘记密码就相当于丢失比特币且找不回来;另外比特币体系运作基于P2P网络与PC客户端(正确的说是节点),对于普通使用者来说安全脆弱性相当于计算机的安全性。所以比特币的安全性问题显得格外重要,作为一个比特币的使用者,要有足够的安全意识,要懂得如何保护自己的比特币。
比特币是基于一些数学理论构成的一个体系,关于这些数学理论的健壮性(理论缺陷、有朝一日被破解或遭受算力攻击等)不属于本文要讨论的内容,既然使用比特币,就默认你信任它,在这个基础上来讨论做为一个使用者要如何保护自己的比特币财产。
比特币安全主要分为两方面内容:一是防丢失,二是防盗窃。
防丢失:
比特币是一组组的数据,能证明你拥有多少比特币、能让你使用你的比特币,唯一凭证就“私钥”,所以保护好私钥就是保护好比特币。一旦私钥丢失而又没备份,那就相当于把对应的比特币捐给全世界的BTC使用者了(其它的比特币会增值一点点)。所以启用你的比特币钱包(私钥)来收款之前一定要先做好妥善的备份。
以Bitcoin-Qt客户端(中本聪客户端)为例,第一次安装运行之后,会在本地自动生成一个钱包“wallet.dat”,这个钱包文件包含着100个私钥,可以理解为一个私钥对应着一个BTC地址,BTC地址是可以公开的,用来收款的;私钥是不能公开的,只能我们自己保存和使用。作为一般的使用者是不会直接接触到私钥的,也就不会无意中把私钥公开发出去,但做为一个BTC使用者有必要知道一些关于BTC私钥的知识。
备份“wallet.dat”这个文件也就相当于备份了比特币私钥。这个时候要多说一句,现在的BTC客户端都支持给钱包加密,就是你给“wallet.dat”设置一个“交易密码”,以后要用到钱包里私钥的时候都要输入正确的密码(发送比特币、签名等)。所以备份“wallet.dat”之前最好设置一下交易密码,万一钱包被盗,交易密码还能做最后一道屏障。设置交易密码之前要清楚地知道这件事:忘记交易密码就相当于丢失了这个BTC钱包里的所有比特币,只有慢慢回想起密码或暴破密码了,没有一个“比特币公司”之类网站或组织供你找回或重置密码。所以设置交易密码之前要确认输入的字母大小写和数字准备无误,设置完成后可以对钱包里任一个BTC地址进行一次签名操作,会用到交易密码,可以由此验证密码设置无误。
关于密码的选取和备忘在互联网上资料很多,可以参考链接文章中的相关部分,在这里就不展开了。 《保护好你的帐号密码【安全畅游比特币世界】》
设置密码之后,接着备份BTC钱包,Window系统的钱包路径在 %APPDATA%\Bitcoin(可以用“运行”直接到达目录) ,根据Window版本的差异具体路径略有不同,例如win7下的BTC钱包就在“C:\Users\用户名\AppData\Roaming\Bitcoin”下,Linux系统的默认在“~/.bitcoin/”目录下。这个时候有两种备份方法:
1. 关闭Bitcoin-Qt客户端后把“wallet.dat”复制出来,完成备份。
2. 在客户端点击“文件”-“备份钱包...”导出钱包完成备份。
个人推荐第二种方法,备份出来的钱包文件,建议不要放在本机上,因为这样根本没有达到防丢失备份的目的,一旦电脑硬盘损坏,钱包文件(私钥)就丢失了,所以备份出来的钱包文件应该进行离场备份(建议压缩成带密码WinRAR文件再进行离场备份),拷到一些靠谱的介质上长期保存,定期检查有没有损坏。
什么是靠谱的介质?这个不好说,反正每种介质都有它的脆弱性,U盘、SD卡、硬盘等根据你的需要做多个备份保存好,定期检查有没有损坏是一种保守的做法。
不推荐放在各种网盘上或邮箱上,这样相当于在把钱包放在网络上,网盘邮箱都有被攻破的风险。如果一定要放在网盘里,可以把钱包文件做一定的伪装,例如把钱包文件嵌入在带密码的Word文件里面,再起个特别又不起眼的名字跟一大堆Word文件放一起。或者修改扩展名,把文件伪装成一个不起眼的图片文件。反正这一步就尽情发挥你的想象力。
说完备份钱包文件之后,有一点需要特别说一下,Bitcoin-Qt客户端有着一个简直可以说BUG的坑爹设定,在一定的情况下会导致丢失比特币。当然你也不必急着惊慌,看完文章,明白怎么回事就能避免杯具。Bitcoin-Qt比特币客户端第一次运行会自动生成包含100个私钥的钱包文件“wallet.dat”,如果这个文件被删除,还可以再生成一个钱包文件,但是这前后两个钱包是不一样,被删除的钱包如果里面有比特币,而又没备份,那么钱包里的比特币就相当于捐出去了。所以我们要先备份钱包文件之后再启用BTC地址来收款,那……是不是备份了之后我的比特币就不会丢失呢?
——不是的。
这就是本段要说的Bitcoin-Qt客户端坑爹缺陷。这要从比特币的“找零机制”说起,为什么会有“找零机制”具体就不说了,自行搜索科普吧,简单来说,就是你每进行一次付款,BTC地址上多余的钱会被找回到另一个BTC地址上。这样说不好理解。详细来说就是钱包里有100个私钥,对应100个BTC地址,每次找零都会启用一个没用过的私钥,只是没有显示在客户端的界面上。举个例子,这钱包里面A地址有10个BTC,你消费了2BTC,剩余8BTC。这里面实际情况是A地址原有10BTC,经过这次消费之后,剩余0BTC,剩余的8BTC被转到钱包里另一个没启用过的B地址上,所以整个钱包余额还是8BTC。那么经过100次找零之后,钱包里的100个私钥用完了之后呢?客户端会在钱包里产生新的私钥,至于是一次产生1个新的私钥还是一次产生100个新的私钥,我不大清楚,但是这样问题就出来了:这些新产生的私钥并不在先前备份的那个钱包文件上。如果这个时候电脑损坏,导致文件损坏,那么没备份的那部分新私钥上的比特币就捐出去了。有人说每发送一次比特币就备份一次钱包……这种蛋疼的事情是正常人做得出来的吗?
所以说这个设定很坑爹,一般的用户哪会知道这种“彩蛋”?用到一定程度,再碰上文件损坏,就悲摧了。那么怎么对付这个问题呢?我们可以把钱包里的私钥数量加大,例如把钱包里的私钥数量加大到1000再备份起来(方法教程可以参考链接:《比特币钱包使用建议》),不管接收BTC多少次都不会触发找零机制而动用到新私钥,发送的时候才会,所以知道这种情况之后注意点就行了,希望在不久的未来新版本的客户端可以解决这个问题,比如复用钱包里的私钥而不产生新私钥之类。
另外也可以采用不自行产生新私钥进行找零的“Multibit”客户端,就可以避免这类问题。经过实际测试“Multibit”客户端的找零模式如下:
- 新生成的钱包里会有一个私钥(对应一个BTC地址),可以由使用者新建私钥,客户端不会自己产生新的私钥。
- 当钱包里有多个私钥时,多次发送BTC触发找零机制时,会把余额转到钱包里其中一个固定BTC地址上。
- 当钱包里只有一个私钥,触发找零机制时,会把余额打回原地址。
(以上测试次数有限,结论也许不够准确全面,有不对的地方欢迎指正。)
说完了找零机制之后就可以再说另一种另类的备份方式:把私钥打印到纸上。
方法如下:
在客户端的菜单栏“帮助”->“调试窗口”->“控制台”,然后在命令输入框输入
dumpprivkey <BTC地址> (中间是空格)
如果有设置交易密码的话,会显示“Error: Please enter the wallet passphrase with walletpassphrase first. (code -13)”,这就需要临时解锁电子钱包,输入命令 walletpassphrase <交易密码> <秒数>(中间有两个空格)并回车之后就可以临时解锁,然后再用dumpprivkey命令得到私钥。这是一个51或52位的字母和数字组合。问题是你知道地址的话一般就不属于“找零机制中未使用的私钥”,所以作为普通备份,这不是一种推荐的手段。而且导出上百个私钥,打印到纸上,万一要导回去……真的很另类。
在这里说点题外话,比特币体系本身在理论上是严谨且可实行的,但是官方的客户端(Bitcoin-Qt客户端)却很不友好,用一个词来形容就是“粗糙”,根本不是为一般的使用者准备的,臃肿且界面不友好,只能说实现了基本的功能,没有做比较好的用户体验优化。例如第一次运行就自动产生一个钱包,这让我很纠结这个钱包是怎么来的,是不是随客户端下载下来的别人的钱包;只能管理一个钱包;钱包及数据块只能放在一个默认的系统盘目录(当然有方法迁移,但不是一个简单的选项或设置);启动时要卡停很久;还有那个霸气侧漏的“找零陷阱”,林林总总一堆问题下来,感觉就是理工宅男做的私用工具,根本没考虑普通正常人的使用感受。
关于防丢失的话题就说到这里,接下来要谈一下防盗窃。
防盗窃:
本文在防盗窃只讲关于网络安全和计算机安全方面的防盗,至于如何防止家里保险柜被撬导致移动硬盘上私钥被盗走的情形不在本文的讨论范围内。
防盗窃最关键就是防止私钥被盗走,也是就保护好钱包文件。可以预见未来(可能已经有了)会出现专门盗取比特币和各种竞争币钱包的木马或恶意程序。
在防木马和恶意攻击方面,有些操作系统是有先天性优势的,就个人电脑而言,Windows系统的安全性比较低是公认的,其中Win7、Win8的安全性比WinXP好一点,但总的来说Windows系统的安全性还是比较让人不放心的。所以从安全的角度来说,最好舍弃Windows。下面推荐各种方案,各有优缺点,安全性和方便性总是相互矛盾的,可以根据需要做一个合适的取舍。
1.高富帅方案:
专买一台电脑来运行比特币客户端,不安装其它任何不必要的软件,只在需要的时候开机连接网络,用完关机。操作系统方面当然选取Mac OS或Linux系统。当然不管采用什么操作系统都需要有足够的安全意识,如果把linux的root用户密码设为“123456”,又允许远程登录,那还不如用Windows系统。
2.平民方案:
专买一台电脑来运行比特币客户端,对于大多数人来说是不现实的,那么退而求其次,可以采用虚拟机,在虚拟机里面运行Linux系统,专门用于比特币操作,这个方案对于大多数人来说并不增加成本,但是有一定的技术门槛。可以选取ubuntu这种linux版本来降低对使用者的技术要求。同时在建立虚拟机的硬盘文件时选择立刻分配所有空间,并把虚拟硬盘设置为20G或以上。万一本机中了木马,盗号者无法单独拿到钱包文件打算拷贝你的整个虚拟硬盘文件,未来N年之内,20G大小配合国内宽带的上传速率足以让盗号者崩溃。
3.备选方案:
如果你有退役的旧电脑,配置不高但还能用,那刚好可以装一个Linux系统来专门运行比特币客户端,这当然也需要一定的技术门槛。如果不想装Linux,那么安装Windows,做到用时开机,用完就断线,不插U盘,不做其它用途,那么安全性也算很高。
4.另类方案:
用树莓派(RaspberryPi)+Multibit客户端,树莓派是一个低配的小主机,可以运行专用的Linux操作系统,主机+SD卡淘宝购买费用在300元人民币左右,要求会操作linux。因为树莓派采用SD卡做主存储,所以不推荐采用QT这种有着10G以上数据块的客户端。根据实测,Multibit在树莓派上运行起来(签名,增加地址时)很慢,可能是Multibit运行于Java环境再加上CPU不给力造成的,但是相比QT客户端在普通机器上每次开机要同步半小时,貌似也各有千秋。
其它辅助策略:
除了武装到位之外,也可以采用其它策略进一步增加安全性。大额的BTC存在安全度高的方案之中,经常使用的小额BTC可以放在方便性高的方案中,打算长期持有的比特币就可以采用上面那种把私钥打印到纸上的存储方案,为了以后方便导回,可以把私钥同时打印成二维码。
一些补充:BTC的客户端有多种,各有优缺点,这个搜索一下相关科普文章阅读一下,然后根据自己的需要进行选择。本文的私钥备份主要是以Bitcoin-Qt客户端(中本聪客户端)为例,与其它客户端的方法略有差异,但原理是一样的,备份好私钥,保护好私钥就对了。
还有一点要注意,下载客户端一定要从官网或官网推荐的链接去下载,不要从第三方网站或网盘下载,除非你懂得如何验证MD5码。别因为一个客户端来历不明的问题,让你前面做了那么多安全措施,结果还没启用,私钥已经在人家黑客手里了。
如果觉得本文对你有帮忙,可以捐助BTC:1M1p8en8nh61rpcMbCEugv69ijFw5N5zzn ^_^