04.19 價值1.5噸黃金的ETH不翼而飛?以太坊上演《黃金大劫案》

本文作者是知乎李明陽,大毛經過作者本人授權,全文轉載給大家,看故事的同時,也希望大家對區塊鏈的安全有更深刻的認識。


神秘消息

一個月前(北京時間2018年3月18日11點38分)以太坊區塊鏈上出現了一則消息,頗為耐人尋味。這則消息的背後,是以太坊上有史以來最大的一筆錢包盜竊案。

這則消息第一次出現在這筆交易中:

0x020fa89e0cbd8eeaf2cda762eb50d9ff88cc5b6c5e31e3c500fa57973c9054a2

交易的Input如下:

價值1.5噸黃金的ETH不翼而飛?以太坊上演《黃金大劫案》

乍一看,似乎沒有什麼特別的,解碼一下,居然是一封公開信:

價值1.5噸黃金的ETH不翼而飛?以太坊上演《黃金大劫案》

On December 15, 2015, 41,234 ether was stolen from address 0x1757a569de8525aa8f1990095aa5e4ec8cccdae1 and moved to address 0x5696ae5ad2c22a4afc03bbae5bf18ca9278ae5c5.

(2015年12月15日,41,234個以太幣從地址0x1757a569de8525aa8f

1990095aa5e4ec8cccdae1被偷走,並轉移至地址0x5696ae5ad2c

22a4afc03bbae5bf18ca9278ae5c5。)

These funds were from an Ethereum Foundation DEVGrant and were meant to fund a project to benefit the community.

(這些資金來自以太坊基金會下屬的開發者資助計劃DEVGrant,用來資助造福社區的項目。)

This is a message for whoever controls address 0x5696ae5ad2c

22a4afc03bbae5bf18ca9278ae5c5:

(這是給地址0x5696ae5ad2c22a4afc03bbae5bf18ca9278ae5c5控制者的公開信。)

From now until March 30 2018, we are making the following offer:

(從現在開始直到2018年3月30日,我們開出如下條件:)

If you return at least 50% of the funds to address 0x2ba90431E

faF7877AEE212a2330235FcfcA9CbeD, we will finalize your ownership of the remaining 50% of the stolen funds.

(如果你返還至少50%的被盜資金至地址0x2ba90431EfaF7877AEE21

2a2330235FcfcA9CbeD,我們將會承認你對其餘被盜資金的所有權。)

URL: https://medium.com/@taptrust/1b0a81f3ee88

Email: [email protected]

41,234個以太幣,在巔峰時期,價值超過1.5噸黃金,這可真是名副其實的“

黃金大劫案”了。

故事

泡杯茶,故事開始了。

維塔利克·布特林(以太坊創始人,俗稱V神)發佈以太坊白皮書後不久,詹姆斯·利維(James Levy)邀請V神來家中做客,這是他們的第一次見面。

價值1.5噸黃金的ETH不翼而飛?以太坊上演《黃金大劫案》

維塔利克·布特林

價值1.5噸黃金的ETH不翼而飛?以太坊上演《黃金大劫案》

詹姆斯·利維

詹姆斯·利維被以太坊的概念和潛力深深的迷住了,他傾盡全力地學習相關知識,融入社區。他希望可以做一些事兒,不僅僅為了自己,他也想為整個以太坊的生態系統作出貢獻。

不久後,詹姆斯·利維發起了一個叫Agreemint的項目,向普通開發者們傳授以太坊的相關知識。他使用一個叫Mintchalk的在線合約平臺,示範智能合約的開發,並錄製成視頻,供其他開發者學習、參考。

當時,以太坊尚在開發中,甚至未來以太坊上用來開發智能合約的語言都沒有最終確定。早期,詹姆斯·利維使用的是Mintchalk平臺上的Serpent語言來做智能合約的示範,直到2014年,以太坊才最終確定使用Solidity作為智能合約的開發語言。

時間一晃就到了2015年3月,此時的以太坊已經完成了眾籌。詹姆斯·利維收到了以太坊基金會的郵件,表示將會對他的Agreemint項目進行資助,具體金額超過4w以太幣。

由於以太坊錢包尚未正式上線,詹姆斯·利維使用了以太坊官方提供的一個臨時腳本pyethtool生成自己的錢包,並把地址發送給了以太坊基金會。

2015年8月,以太坊正式上線後不久,詹姆斯·利維又收到了以太坊基金會的郵件,表示之前承諾的資助金額已經準備就緒,將在不久後發送到他之前留下的地址。

接下來的幾個月,詹姆斯·利維時不時的會打開錢包軟件查看,檢查以太坊基金會的資助是否到賬,但是,他的賬號遲遲沒有收到任何交易。

2016年1月,詹姆斯·利維又一次查看時,發現了奇怪的事兒。他的賬戶餘額依然是0,但是卻有了兩條交易記錄:

  1. 2015年11月24日,以太坊基金會轉入的以太幣。

  2. 2015年12月16日,這些資助的資金又被轉到了另一個地址。

詹姆斯·利維簡直不敢相信自己的眼睛,他非常自信自己沒有洩露私鑰,錢包一直是處於冷錢包狀態。

然而,區塊鏈上的數據是不會騙人的,黑客是如何盜走數量如此龐大的以太幣的呢?

探尋

要想知道究竟發生了什麼,我們還要從詹姆斯·利維生成錢包的過程開始說起。

前面我們說過,他生成錢包地址時,以太坊尚在開發中,他使用的並不是我們現在使用的geth生成錢包,而是使用了一個臨時的腳本pyethtool。該腳本曾經是ethereum/pyethereum項目的一部分,現在已經被移除,不過你可以在github的提交歷史中找到它:pyethtool

讓我們來看看這個腳本是如何使用的:

首先,需要用戶提供一個短語,比如我們用hero這個詞來做示範:

pyethtool sha3 hero

得到輸出:

f2de8dfd543154155ebe73b77637eeea045e4e844a4b5c

1933eb2db1877bfcf9

這就是你的私鑰。

然後,用戶使用私鑰導出錢包地址:

pyethtool privtoaddr f2de8dfd543154155ebe73b77637eeea045e4e844a4b5c1933eb2db1877bfcf9

得到輸出:

0x9f94c9cdc0dc0a6f854babab1fe7c4ed4b8dc8d2

這就是你的錢包地址了。

實際上,這個工具是對輸入的短語進行哈希運算,得到的結果作為私鑰,進而使用私鑰導出地址。

詹姆斯·利維就是這樣生成接收款項的地址的。

發現問題了嗎?這種生成錢包的方式,其安全性完全取決於用於生成私鑰的短語。

pyethtool這個工具是公開的,只要猜到了用於生成私鑰的短語,再次使用pyethtool,就可以得到同樣的私鑰,進而偷走相應賬戶下的以太幣。

詹姆斯·利維使用了一個非常容易猜到的弱口令作為生成私鑰的短語,黑客無意中猜中了這個短語,於是,他獲得了私鑰,盜走了全部的以太幣。

給大家留個小思考題,如果我使用pyethtool生成了一個地址0xe46e596

67e4ad2c20523ecb7c5661a418f56de39,你能找到我的私鑰嗎?

協議

發現資金被盜後,詹姆斯·利維做了個工具,實時監控著區塊鏈上的變化,只要這個保存著被盜資金的地址有任何變化,他都會在幾秒內收到通知。

然而,這個地址再也沒有任何變化,哪怕是1 Wei以太幣的變動也沒有。

也許這個盜走資金的黑客只是為了炫耀一下,也許他已經丟失了保存被盜資金的錢包私鑰,也許他擔心暴露身份,也許,他已經不在人世。

為了嘗試取回被盜資金,詹姆斯·利維在以太坊中發佈了這封公開信。

他希望用這種方式,和盜走資金的黑客達成協議,取回部分資金,黑客也可以從此光明正大的擁有剩下的資金,可以說是雙贏的局面。

不過,一直到截止日期到來的那一刻,黑客沒有作出任何回應,4w多以太幣還是靜靜地躺在那個神秘的地址上。

共識

區塊鏈是建立在“共識”基礎上的,因為有“共識”,所以區塊鏈上的內容獲得大家的承認,區塊鏈系統得以運行下去。

我們常說“區塊鏈具有不可篡改的特點”,這並不是說區塊鏈上的內容是不能修改的。“篡改”與“修改”一字之差,意思卻相差千里,這二者之間最重要的區別便是,“修改”是得到大多數參與者認可的,而“篡改”不是。當對區塊鏈內容的修改是能夠形成新的“共識”的時候,這種修改便可以發生。

最著名的便是“The DAO”事件,黑客盜走了超過360w個以太幣。好在社區緊急行動起來,在大多數人的支持下,新的“共識”很快打成,以太坊進行了一次硬分叉,將被盜的以太幣通過修改代碼的方式強行奪回。

這次“修改”區塊鏈的行為,遭到了小部分人的抵制,他們認為無論是“修改”還是“篡改”,都不應該發生在區塊鏈上,鏈上的數據應該是亙古永恆的。於是,他們拒絕承認新的分叉,堅持不奪回被盜資金的“共識”版本,這就是今天的以太坊經典(ETC)。

在Github上,我們可以看到一個以太坊改進提議(EIP):EIP 867

這個提議的主要目的是:為通過分叉方式找回丟失的以太幣提供一個標準化的流程。

故事中的主角詹姆斯·利維便是這個提議的起草人之一。

價值1.5噸黃金的ETH不翼而飛?以太坊上演《黃金大劫案》

他計劃推動這個提議,使社區接受,作用按這個提議規定的流程,在以太坊社區中達成“共識”。通過硬分叉的方式,取回那4w個被盜的以太幣,看來他是不達目的誓不罷休了。

故事到這裡就講完了,對加密貨幣投資人來說,我們應該吸取到什麼教訓呢?

腦錢包這類從一個短語生成私鑰的方法一定要謹慎使用,因為一旦短語被別人猜到,資金就會遭受損失。正確的做法應該是,從有足夠熵的隨機源生成私鑰,並儘可能使私鑰處於冷錢包狀態。每次連網使用後,都要重新生成冷錢包,並把剩餘資金轉入冷錢包中。

如果你喜歡這篇文章,就請收藏或點贊吧。

歡迎關注我的知乎,聽李明陽用人話講區塊鏈。

未來還有更多實用有趣的知識帶給大家。


分享到:


相關文章: