关于BrainWallet的安全性

因为国外不少VPS都可以使用Bitpay,虽然Paypal也是可以支付的,但比特币肯定要更方便更安全,也免去了输网银密码。所以近日在交易平台上将两年前挖的一些LTC换成了BTC,又顺便软妹币换了一些。

然而这次回归却发现,脑钱包关站了!看了下相关新闻,说是某黑客大会上某黑客做了个程序用字典扫出来700多个币,宣称脑钱包“很不安全”,然后作者就删代码关站了。

先回忆一下脑钱包的原理:用户指定一段字符串进行SHA256作为私钥。就这么简单,没了。无需任何客户端或在线钱包,仅使用脑钱包的离线HTML+JS就能完成比特币地址的生成和交易(离线签名,然后通过blockchain.info提供的API发出去),永远不用担心重装系统忘了备份C盘的钱包文件而丢币。简洁就是美,我喜欢。

完全随机生成的密钥将具有256bit的安全性。256bit是什么概念呢?我们知道普朗克时间是1e-43秒数量级,宇宙年龄150亿年也就是1e17数量级,加起来也就是10的60次方的数量级,换成二进制差不多200bit。也就是说一台计算机从宇宙大爆炸开始以宇宙最小时间间隔的速度穷举密码,至今也只能枚举出200bit的密码,你需要1亿亿台计算机才能枚举完256bit。。。(当然,如果你假设宇宙中所有粒子都是计算机的话当我没说,这个是1e1079数量级)

用户指定的密码不足256bit则安全性会降低,所以密码是越长越好。然而黑客说有人用30多字符的密码还是被他拿下了。其实这是个误读,因为脑钱包当时提供了默认字符串,是用几个英文单词组合起来的。实际上常用单词并不多,假设使用3000个常用单词,使用5个英语单词实际上只有10^17种可能(假设随机选取),其信息熵为57bit。事实上人们更倾向于使用更简单的单词,所以这个值会更少。据黑客说他的软件可以在单机上一秒猜130000个密码,那么考虑有人用30000台电脑的僵尸网络去计算,算全57bit种可能性只需要一年。如果黑客拿下了超算中心就更开心了。

所以关键还是在于有人不会用,或者低估了数量级,比如有小白直接用了空字符串的hash。正确使用脑钱包只需要记住一点——尽可能使你的密钥的信息熵更大,这样脑钱包才不至于秒变脑残包。具体实施考虑以下几点:1、要长,个人建议30位字符以上。2、尽量不要使用英语单词。3、不要使用别人用烂的密码模式。4、尽量不要使用社工能得到的信息。5、增加组合算法难度。

两年前,我用了“喜欢的人的照片”的sha256直接派生私钥,在此要说明,使用硬盘上某个特定文件作为密钥文件取hash是可行的,但是这个文件最好是只有你自己持有。另外,最好你的电脑上没有装各家的全家桶,因为全家桶们的云查杀就是个hash库。当然,用密钥文件的hash再加上你自己想出的字符当salt效果应该不错,不过最好去cmd5网站看一下,不要用那里面已经有的常用salt算法。

参考文献:导致brainwallet关站的那个一秒猜130000的黑客在大会上的演讲稿,讲得非常清楚,建议阅读。https://rya.nc/cracking_cryptocurrency_brainwallets.pdf

另外建议阅读此文:一些可行脑钱包的尝试。作者的文笔比po主要好,解释和建议都通俗易懂,而且还给真正理解这篇文章的粉丝送币。

Leave a Reply

Your email address will not be published. Required fields are marked *