不同的是,在银行系统中,“银行账户”和“账户密码”是相对独立的。即使我告诉你某一个账户的密码,你还是得都把我所有的银行账户都试一遍才能将两者匹配。但是在区块链系统中,公钥是可以由私钥计算出来的,也就是说只要我知道了对方的私钥,分分钟就可以算出他的公钥并取走对方的钱。
那么在区块链系统中,我们如何保证私钥的安全性呢?如此重要的私钥肯定不会像银行密码一样是一组6位数字啦,它实质上是一组256位的二进制数“01100110.....”
任何人都可以使用任何一组这样的二进制数作为私钥,然后通过某种方式计算出公钥,有了公钥和私钥,用户就可以汇入、汇出加密货币,并进行各种交易了。而且与中心化系统不同的是,这个过程完全不需要经过任何组织或机构的认证(匿名性)。通常我们见到的公钥、私钥都是改写成十六进制并加了校验位的base58形式。
现在我们知道,私钥就是我们钱包的钥匙,对于我们的资产安全非常重要,那如何才能保证它的私密性呢?存在联网的电脑中可能被木马病毒盗取,就连写在纸上都有可能被人偷走,于是有人提出最保险的做法是把私钥存储在脑袋里,对,就是这么简单,把私钥记在脑子里就是所谓脑钱包,总有人喜欢搞些新名词。
但是各位随意感受一下,一组256位的二进制数“01100110.....”或者转化后的base58格式1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD
万一记错了,钱包里的钱就永远都拿不回来了。因为这世上,除了你聪明的脑袋,没有别的地方有记录,虽然没有人能偷走,但是也没有人能帮你找回。
所以智慧的人类就想到了通过某种办法把一些容易记住的人类语言“转换”成这样的私钥!早在2012年4月就出现了一个名为“Brainwallet.org”的网站,它能够把用户输入的内容(称为口令,passphrase)经过SHA256算法生成比特币的公钥和私钥,所以只要输入任何不被其他人知道的秘密信息就可以生成自己的钱包了。现在用户需要记住的就不再是私钥本身,而是更加友好的口令了。这种脑钱包的实现看起来很美好,但事实上存在着巨大的安全漏洞!
在使用脑钱包时,为了减少记忆量,用户倾向于使用一些有实际意义的信息作为输入,比如生日、喜欢的人或物、诗句等等。而这,正好为“暴力破解”提供了方便之门。有一点值得注意的是,虽然黑客只需要从0穷举到最后一个数字就可以“暴力破解”原本的256位二进制数,但是数学概率能够保证我们钱包的安全。简单计算就可以知道,假设地球上60亿人,每人10个钱包,黑客想用穷举的方法找到其中一个的概率是6*10^10/2^256。通常的计算机的CPU频率为3GHz,假设一次计算就能完成猜测(当然这是不可能的),猜中一个大概要花的时间是2*10^49年!
但对于脑钱包来说,总会有人使用简单的诸如“password1”的短语生成私钥和公钥,黑客只需要从有限的字典中穷举就可以破解了。同时,短语简单并不是安全隐患的全部,所有人类可能想到的有含义的信息组合黑客也能想到,他甚至可以用类似“正则表达式”的方式更新它的字典。而且所有在互联网上出现过的东西,比如Google搜索历史,都能进入黑客的字典!
比如,一个名叫Ryan的安全研究员曾经通过程序“暴力破解”了超过730个比特币,其中一个由“how much wood could a woodchuck chuck if a woodchuck could chuck wood”生成的脑钱包包含250个比特币。
说了这么多,我想大家应该也能明白了,脑钱包这个概念本身是安全的(这不废话么),隐患来自于使用它的人。现在也已经有了很多避免用户输入信息过于简单(专业的说法是,信息熵太小)的方法,比如要求用户添加独一无二的相关信息,或是随机生成10~15个单词等,使得脑钱包的安全性有了较大提高。
好了,小编希望这篇文章能让大家对脑钱包有个基本的认识,也能知道安全性的隐患在哪,并有意地防范。