“區(qū)塊鏈大盜”破解私鑰已盜取數(shù)百萬(wàn)資產(chǎn),他們是怎么做到的?
譯文【51CTO.com快譯】去年夏天,艾德里安·貝德納雷克(ADRIAN Bednarek)思考怎么防止黑客竊取以太坊加密貨幣。他是一名安全顧問(wèn),當(dāng)時(shí)正在給一個(gè)從事挖掘加密貨幣行業(yè)的客戶(hù)工作。Bednarek被以太坊吸引,尤其是它難以想象的復(fù)雜性,以及移動(dòng)端可能潛在的安全漏洞。他從考慮最簡(jiǎn)單的問(wèn)題開(kāi)始:如果以太坊所有者用私鑰存儲(chǔ)他們的數(shù)字貨幣——私鑰是一串不可預(yù)測(cè)的78位數(shù)字串,用于保護(hù)存放在某個(gè)地址的貨幣——私鑰是1結(jié)果如何呢?
令Bednarek驚訝的是,根據(jù)區(qū)塊鏈以太坊所有的交易記錄,即使極其簡(jiǎn)單的密鑰也存有貨幣,而且錢(qián)已從所在的以太坊錢(qián)包里拿出來(lái)了——早在Bednarek之前,誰(shuí)能猜到私鑰是1呢。畢竟,就像比特幣和其他加密貨幣一樣,如果有人知道Ethereum私鑰,他們可以使用密鑰解鎖相關(guān)的公共地址。然后,私鑰允許向那個(gè)地址轉(zhuǎn)賬,就像他們是合法的所有者一樣。
最初的發(fā)現(xiàn)激起了貝納萊克的好奇心,所以他又試了幾個(gè)連續(xù)的鍵:2、3、4等等幾十個(gè)鍵,所有的鍵都被清空了。然后,他和安全咨詢(xún)公司的同事編寫(xiě)了一些代碼,啟動(dòng)了一些云服務(wù)器,并嘗試了數(shù)十億次。
在這個(gè)過(guò)程中(正如發(fā)表的一篇論文所詳細(xì)描述的),他們不僅發(fā)現(xiàn),在過(guò)去幾年里,數(shù)百個(gè)用戶(hù)只用了很容易猜測(cè)的私鑰存儲(chǔ)了他們的數(shù)字貨幣,而且還發(fā)現(xiàn)了他們所謂的“區(qū)塊鏈強(qiáng)盜”。 一個(gè)以太賬戶(hù)一下就吸走了4.5萬(wàn)以太的財(cái)富——價(jià)值超過(guò)5000萬(wàn)美元——使用的是同樣的猜鍵技巧。
“他做著和我們一樣的事情,但他超越了我們,”Bednarek說(shuō),” 不管這些人是誰(shuí),他們都花了大量的計(jì)算時(shí)間來(lái)尋找新的錢(qián)包,觀察每筆交易,看看他們是否有鑰匙。”
猶如“海灘淘金”
為了解釋區(qū)塊鏈強(qiáng)盜是如何工作的,首先了解一下猜測(cè)隨機(jī)生成的Ethereum私鑰的概率是1 / 115 quattuorvigintillion(或者用分?jǐn)?shù)表示: 1/2256),這個(gè)分母大約是宇宙中原子的數(shù)目。Bednarek把以太坊鑰匙的任務(wù)比作是在海灘上隨機(jī)選擇一粒沙子的概率,在“十億粒”海灘中找到相同的沙子!
但是當(dāng)Bednarek觀察以太區(qū)塊鏈時(shí),看到一些人將Ethereum儲(chǔ)存在更簡(jiǎn)單、更容易猜測(cè)的鑰匙上。他認(rèn)為,這很可能是Ethereum錢(qián)包的錯(cuò)誤結(jié)果,由于編碼錯(cuò)誤,錢(qián)包剪掉了鑰匙長(zhǎng)度的一小部分,或者讓沒(méi)有經(jīng)驗(yàn)的用戶(hù)自己選擇鑰匙,甚至包括惡意代碼,破壞了隨機(jī)化過(guò)程,讓“小偷”很容易猜到密鑰。
Bednarek和他的ISE同事最終掃描了340億個(gè)區(qū)塊鏈地址來(lái)尋找這些弱鍵密碼。他們稱(chēng)這個(gè)過(guò)程為“以太淘金”,就像“海灘淘金”一樣,在以太的巨大熵中尋找更多可能。他們最終找到了732把可能的鑰匙,這些鑰匙曾一度被使用但后來(lái)被清空了。不過(guò)據(jù)Bednarek猜測(cè),自以太坊在2015年推出以來(lái),被竊取的弱密鑰總數(shù)中,732只是一小部分。
與此同時(shí),在這些空無(wú)一人的地址中,Bednarek很好奇地發(fā)現(xiàn),似乎有12個(gè)地址被同一名“強(qiáng)盜”洗劫一空。他們被轉(zhuǎn)移到一個(gè)帳戶(hù)——目前擁有45000以太幣。以今天的匯率計(jì)算,這相當(dāng)于770萬(wàn)美元。
Ether Comb, Ether Go以太狗
Bednarek嘗試把一美元的以太幣放入“小偷”之前清空的一個(gè)弱鍵地址中。幾秒鐘之內(nèi),就轉(zhuǎn)移到了其他賬戶(hù)上。然后,Bednarek嘗試將一美元放入一個(gè)新的、以前從未使用過(guò)的弱鍵地址中,它也在幾秒鐘內(nèi)被清空了,這次被轉(zhuǎn)移到一個(gè)只有幾千美元的以太賬戶(hù)里。但是Bednarek可以從Ethereum區(qū)塊鏈的待處理事務(wù)中看出,有個(gè)以太“強(qiáng)盜”也曾試圖抓住它,卻在幾毫秒內(nèi)被他人打敗了。“強(qiáng)盜”似乎有一大堆預(yù)先生成的鑰匙,并以非人的速度自動(dòng)掃描著它們。
事實(shí)上,當(dāng)研究人員查看“區(qū)塊鏈強(qiáng)盜”以太賬戶(hù)的歷史時(shí),他們發(fā)現(xiàn),在過(guò)去的三年里,這個(gè)賬戶(hù)從數(shù)千個(gè)地址中提取以太幣,卻從未有任何資金流出的動(dòng)作。在以太坊2018年1月的匯率高峰時(shí)期,這個(gè)強(qiáng)盜的賬戶(hù)持有38,000以太幣,當(dāng)時(shí)價(jià)值5400多萬(wàn)美元。在那之后的一年里,以太坊的價(jià)值直線(xiàn)下降,使其價(jià)值下降了85%。
“你不為他感到難過(guò)嗎?”Bednarek笑著問(wèn)。“你遇到個(gè)小偷,他積累了這么多財(cái)富,然后在市場(chǎng)崩盤(pán)時(shí)把它們?nèi)假r光了。”
盡管跟蹤了這些記錄,但Bednarek并不知道誰(shuí)是區(qū)塊鏈強(qiáng)盜。
弱鍵
Bednarek也不能識(shí)別出產(chǎn)生弱鍵的錯(cuò)誤或惡意錢(qián)包。相反,他只能看到弱鍵創(chuàng)建的原因和由此導(dǎo)致的盜竊后果。他說(shuō):“我們可以看到有人被搶劫,但我們不能確定誰(shuí)是罪魁禍?zhǔn)住?rdquo; 特別是對(duì)區(qū)塊鏈強(qiáng)盜來(lái)說(shuō),目前還不清楚簡(jiǎn)單的弱鍵是否是盜竊的主要方式。強(qiáng)盜本可以使用其他技巧,比如猜測(cè)“腦錢(qián)包”的密碼短語(yǔ),這些密碼是用可記憶的單詞保護(hù)的,這些單詞比完全隨機(jī)的密鑰更容易被侵入。
一個(gè)安全研究團(tuán)隊(duì)在2017年發(fā)現(xiàn)了2846個(gè)比特幣被盜的證據(jù),這些比特幣都是用腦錢(qián)包被盜的,按當(dāng)前匯率計(jì)算價(jià)值超過(guò)1700萬(wàn)美元。2015年末,一宗以太腦錢(qián)包盜竊案就帶走了4萬(wàn)個(gè)以太幣,幾乎和區(qū)塊鏈強(qiáng)盜一樣多。
ISE還沒(méi)有在比特幣區(qū)塊鏈上做實(shí)驗(yàn),但Bednarek已經(jīng)對(duì)100多個(gè)弱比特幣密鑰進(jìn)行了抽查,發(fā)現(xiàn)相應(yīng)錢(qián)包里的東西也都被偷了,不過(guò)沒(méi)有一個(gè)錢(qián)包被以太坊強(qiáng)盜之類(lèi)的大魚(yú)偷走——與以太坊相比,比特幣竊賊之間的競(jìng)爭(zhēng)可能更激烈、更分散。
Bednarek認(rèn)為ISE的經(jīng)驗(yàn)教訓(xùn)是,對(duì)于開(kāi)發(fā)者來(lái)說(shuō),要仔細(xì)審計(jì)他們的代碼,以發(fā)現(xiàn)任何可能截?cái)嗝荑€并使其容易受到威脅bug。用戶(hù)應(yīng)該注意選擇密鑰。你不能打電話(huà)給服務(wù)臺(tái),讓他們撤銷(xiāo)交易。當(dāng)錢(qián)包消失時(shí),它就永遠(yuǎn)消失了。人們應(yīng)該使用可信錢(qián)包,并從可信來(lái)源下載。拋開(kāi)匯率的波動(dòng)不談,區(qū)塊鏈大盜不需要更多的捐款了。
原文標(biāo)題:A 'BLOCKCHAIN BANDIT' IS GUESSING PRIVATE KEYS AND SCORING MILLIONS,作者:ELENA LACEY
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】