北京时间5月3日凌晨,TronBank合约中的2673万TRX(价值427万元)被人盗走,在业内引起一片哗然。区块链是离钱最近的行业,安全问题尤其值得重视。除了司空见惯的EOS智能合约漏洞问题、交易平台遭黑客攻击,最近WIRED还报道了一件奇闻:有人靠猜测以太坊私钥,盗走了5000万美元的ETH
在以太坊上,猜测私钥就像猜测彩票中奖号码一样,从统计学上来说并不现实。但就有一些用户耍小聪明,将自己的以太坊私钥设置成容易记忆的字符,方便了自己的同时,也给区块链大盗留下了可乘之机。
最近《连线(Wired)》杂志曝出了一个区块链大盗的事迹,他仅靠猜测以太坊私钥盗就走了5000万美元的ETH,然而币价暴跌,他的不义之财缩水了85%。
那么,他是怎么偷窃ETH的呢?靠猜测就能破解别人的私钥,这是什么神操作?他又是怎么被揪出来的呢?今天,让我们一起走进这名区块链大盗的悲喜人生。
01
通过猜测私钥,累计盗走4.5万ETH
Adrian Bednarek是一名安全顾问,他的客户饱受加密货币失窃的困扰,于是Bednarek开始站在对手的角度上思考问题。
从去年夏天开始,如何窃取ETH这个问题一直困扰着Bednarek。当然了,他并不是真的想要成为一个“区块链大盗”。
不过有这么多种加密货币,为什么Bednarek要选择以太币呢?这是因为以太坊出了名的复杂性,同时以太坊各个复杂的组件都可能会带来潜在的安全漏洞,这使得以太币很容易被攻击。
不过,以太坊用户为了方便记忆也可以任意设置私钥,就比如说设置为1,但这种简单的私钥很容易被猜出来,因而安全性很差,往往不被人们所采用,人们通常都会使用钱包软件生成有随机性的私钥。
然而,出人意料的是,通过检索区块链上存储的以太币交易数据,Bednarek发现还真的有人使用这种极其简单的私钥进行交易。
不过,这个账户中的以太币已经被转走了,几乎可以肯定这笔钱是被区块链大盗偷走的,他赶在Bednarek之前偷走了这笔钱。与比特币等其他加密货币相同,如果有人知道了你的以太坊私钥,他就能从私钥中计算得出你的公钥以及账户地址。
所以,区块链大盗可以使用这个私钥转走你账户中的以太币余额,而区块链上验证交易的矿工不会也不能核实发起交易的是不是账户真正的主人。
这个发现激起了Bednarek的好奇心。所以他连续尝试了几个简单的私钥:2、3、4,然后又试了10、20、30这样复杂一点的私钥,不过所有这些私钥对应的账户余额都被清空了。这么看来,靠猜测私钥盗窃以太币并非个案。
为了捕捉更多区块链大盗的信息,Bednarek和他在安全咨询公司Independent Security Evaluators的同事们编写了一些代码,在云服务器上自动化地检查了上百万个简单的私钥。
Bednarek的团队将这次实验的结果写成了一篇论文,并在周二发表了出来。论文中讲到,Bednarek的团队发现在过去的几年中,不断有用户将自己珍贵的加密货币存储在几百个私钥非常容易被猜出来的账户之中。
同时,他们还揪出了一个“区块链大盗”。这个大盗已经使用这种猜测私钥的盗窃方法偷走了近4.5万枚以太币,按照当时的币价来算,这笔不义之财价值5000万美元。
“这个区块链大盗做了和我们一样的事情,只不过他捷足先登了。”Bednarek说, “我们不知道这个区块链大盗背后是一个人还是一个团伙,但可以肯定的是,他花费了大量的时间和算力来监视每一笔以太币交易,检测每一个以太币钱包,尝试着去偷走以太币。”
02
猜对以太坊私钥等于沙里淘金
为了更好地解释区块链大盗是如何偷钱的,首先我们需要说明猜对一个随机生成的以太坊私钥的概率。
以太坊的私钥是一个256位的二进制数,因此猜对它的概率是2的256次方分之一,数值上大约是10的77次方分之一,也就是说分母是1后面77个0。
如何来理解这个量级呢?Bednarek做了一个绝妙的比喻,猜对一个随机生成的以太坊私钥的概率无异于在沙滩上找到别人藏好的一粒沙子。
我们常说,不怕神一样的对手,就怕猪一样的队友。虽然以太坊本身的私钥机制足够安全,但这架不住有用户为了省事选择那些易于猜测的、安全性极低的私钥。
Bednarek发现了很多这样的现象,当然了,除了用户自身的责任以外,钱包软件也有责任。有些钱包软件由于编码错误导致其并没有按照给定的长度生成密钥,而有些钱包软件高估了用户群体对区块链的理解程度,以至于让一些没有经验的用户直接选择了自己好记的私钥。
最坏的情况是,钱包软件的开发人员故意破坏了私钥随机生成的过程,以便后期猜出用户的私钥并盗走用户的以太币。
为了找到那些私钥安全性较差的地址,Bednarek的团队最终扫描了340亿个以太坊地址。他们将这个过程称为“以太币搜索(ethercombing)”,就像在沙滩上寻找一粒沙子一样,只不过在以太币搜索中,私钥的排列更加无序,要找的目标也更多。
最终他们找到(准确地说是猜出来)了732个曾经存有过以太币但最后余额被清空了的账户。虽然其中一些账户余额清空无疑是账户主人所为,但Bednarek指出,自2015年以太币正式面世以来,以太坊上发生过很多起因私钥安全性较差导致的以太币失窃事件,他找到的这732个账户可能只是冰山一角。
不过,这里的容易被攻击是相对而言的,以太坊也并不是不堪一击。所以,Bednarek选择最简单的攻击方式:私钥。
我们都知道,以太坊的私钥是其账户所有权的证明,它可以用来管理以太币。按照以太坊的规定,私钥应该是一串很难被猜出的长达256位的数。
网友评论