千万别用脑钱包!你很可能失去你的比特币!
时间:2014-07-25 来源:好币网 作者:玩币族
译者前言 好吧,这个有些标题党了。不过作者原意就是如此。不同意这观点的话,可以先把文章看完再来反驳:) 本文翻译自 Gavin Andresen 几个月前的一篇笔记(玩比特币只听说过中本聪却不知道 Nakamoto Satoshi 和 Gavin Andresen 的话,说明还得加强学习一下比特币知识:P)。比特币脑钱包因其使用方便成为不少初学者的选择,不过在设置脑钱包口令(passphrases)时经常出现过于简单以至被人将币转走的情况。因此,虽然已是旧文,不过现在看来,这篇文章依旧具有不少教育意义。如果觉得这篇文章对您有帮助的话,欢迎往文章末尾的地址打赏;) 脑钱包的脑风暴 脑钱包的风险 人类其实并不擅长原创,更不善于选择与众不同。而且我们在理解数量级这一方面非常的糟糕。 所以,如果你让一个人创建一个安全的口令,他们很可能会选出一个会被拥有强大计算能力的“死嗑攻击者”破解的密码。 如果你要保护的东西是像你的非死不可(Facebook,原谅我这样翻译吧:P)帐户之类的玩意的话,这并不是什么大问题,因为一个典型的非死不可帐户大概也就只值得这么几毛钱(当然,如果你是明星的话那么你的账号会更值钱一些,你也应该在它的安全性上操心多一点)。而攻击者必须首先以某种方式获取你的非死不可密码的数据库,然后才能开始试图猜测你的密码。 但使用比特币脑钱包的麻烦是,他们是有(不菲)价值的,而攻击者已经拥有了破解专用的“密码数据库”。 脑钱包的破解步骤 要想破解一个脑钱包口令,攻击者会: 找出所有金额不为零的比特币地址并创建一个列表保存下来。 通过重复猜测可能的脑钱包口令来生成地址,并看是否能与以上列表中所得到的地址对上号。 第一步非常简单,而且攻击者正在对第二步操作越来越熟练。他们可能有每秒能猜上亿次的硬件,而且也有用来处理设置密码时常用的例如「I <3 butterflies and rainbows」这类模式的软件。 我们在理解庞大的数字时真的非常糟糕,我们低估了密码被破解的可能性,并不了解攻击者在能以每秒尝试数亿次猜测的情况下,它可以多么轻而易举地就猜到我们的密码。 而在使用了脑钱包之后,我们就像是成了明星一样,即使你只有半个比特币放在你的脑钱包里面,如果你用的是一个弱口令,攻击者将会得到它(里面的比特币),因为他们的口令猜测算法会对每个人的脑钱包进行检查。 所以,人们有可能创造一个安全的脑钱包吗 密码/口令其实是没有用的,因为我们分享了这么多(例如流行文化,语言,教育)的内容,即使当别人说“我想到的东西没有其它人会想到”时,很可能他们想的东西与其他很多人所选的类似。 一个可行的脑钱包模式 以下是一个我认为可能安全的脑钱包设计模式提案。 将以下的几项组合起来建一个安全的脑钱包: 你的全名 口令1 口令2 所以,我的口令可能是这个样子: “Gavin Anthony Andresen I have eleven hovercraft full of eels! Okey dokey: patches welcome.”。 这个模式的安全性取决于它究竟有多难猜。如果可以花钱让别人来告诉我们是不是选择了一个差的口令,而又不必告诉他们真实的口令是什么就好了。 好吧,其实这是可以实现的! 首先用上面的口令创建仅由口令生成的两个“哨兵” 脑钱包,并用上面的组合生成一个安全的脑钱包,然后将大部分的比特币存放到安全的脑钱包上,并将一些零钱存到“哨兵” 脑钱包里面。 如果某天我发现在“哨兵”钱包里的比特币被转走了,我就知道在某个地方有黑客成功地猜出我的口令,这时我就应该选择一个新的口令,创建新的“哨兵”和安全脑钱包并将我的比特币转移过去。 以上模式的破解难度 有没有可能攻击者对我一点也不了解,但他知道我的口令生成模式(全名/口令1/口令2)并能破解我的安全钱包 我们可以算算这大约有多少组合的可能: 名字:攻击者试图在1000万个最常见的名字中尝试。 口令:假设攻击者需要尝试10亿次后才碰巧猜对你的口令。 我们假设攻击者在提高算力上投资了不少,可以尝试每秒 十亿次组合(一块高端的显卡可以做到这样的事情) 。 算了一下,它平均需要超过1000万年才能破解,听起来绝对足够安全了! 但是,如果攻击者知道你有1000个比特币安静地待在脑钱包里,并且决定只是针对你进行攻击的时候,这将变得容易了1000万倍(译者注:因为名字已经确定,不再需要盲目地猜测),所以要得到你的1000枚比特币平均需要一年多的时间。这其实并不值得,因为这样的话他们需要在破解的硬件上花费更多,并且还要花上一年的时间,仅仅只是为了破解你的钱包而已。(译者注:要知道这文章可是写在九个月前,按现在的价格来看,这1000枚比特币可是要比硬件投入值钱得多:P) 解决方案 支持创建脑钱包的软件应该花一些时间尝试让你的口令稍有差异,并且在blockchain检查一下,看看他们目前是否正在被用来存储着比特币(或在过去任何时间里曾被用来存储过比特币)。如果有的话,就应该提醒你去选择另一个口令。 如果某个口令生成的地址里有未使用比特币,你也应该立即发送这些比特币至你的钱包里。这是你让其他人知道他们选择了一个糟糕的口令的方式以至给你的奖励,(哈哈,大牛居然也支持转账!)同时让他们知道他们需要将比特币放到他们的主要的脑钱包里。 随着使用脑钱包(或其它类似的)的人越多,我们就越应该注意选择一个安全的口令。 致技术人员们:我刚才掩饰一个极大的秘密信息。设置哨兵钱包其实应该是超级简单快捷的,如下: private key = SHA256(passphrase) //(作者这是在向SHA256致敬吧:P) 译者总结 本文首发于巴比特,转载请保持原文信息完整。 脑钱包的破解难度取决于口令的复杂程度,在设置时个性化很有必要(降低被猜中的概率),即使如此,由于人们在选择时词汇量时会受文化限制集中于某个固定的范围里,所以不要对其强度过于自信。 如果黑客采取针对性的暴力穷举的方式的话,破解所需时间远比预想的要短(例如文中的10万年到一年的差距)。 采取“哨兵”模式来监测自己口令是否被猜出来了(这是我从这文章学到的方法,以及将其翻译出来的原因@_@),使得在主钱包沦陷前有机会转移至新的安全地址上。(呵呵,如果主钱包直接沦陷,说明你在设置脑钱包前没有加口令用SHA256加密XD) 文中所引用图片版权归原作者所有。如果这篇文章对您有帮助,请捐献若干比特币,谢谢。 捐助比特币地址:1MzziGBa7tNNzMwVJMPEjAfM1wRcvSGZu5 与君共勉。 原文地址:https://gist.github.com/gavinandresen/3840286 PS:如果读者有兴趣的话,或许我还可以总结一下因弱口令造成的脑钱包沦陷的趣事,例如因“bitcoin is awesome”而损失的那 500 枚:P |