從美劇 Silicon Valley 學習區塊鏈 – 51%攻擊

/ 0 評 / 0

我一直追看一套有關創業題材的美劇 Silicon Valley,故事中講述主角和他的團隊在創業路上發生各種形形式式的問題,到處跌跌撞撞,笑中有淚的一套喜劇、創業劇(同在創業路上才看得懂為何會笑中有淚)......

可能跑題了,先回到主題,為何從這套劇集中可以學習到區塊鏈?故事中主角團隊的初創公司 Pied Piper 想使用"基於所有智能設備的點對點網絡創造一個分散式、全新的互聯網",聽起來有點熟悉的感覺?像什麼?沒錯,就是區塊鏈 Blockchain!

同學們,接下來省略了前面大量劇情,直接進入今天的主題 Season 5, Episode 8(第五季第八集)

前面的故事大致講述主角公司Pied Piper 為了擺脫投資人的擺佈,決定不接受投資人開出 Series B(B輪)融資,而決定接受夥伴Gilfoyle的建議自行發行 ICO(首次代幣發行)並命名為...

Pied Piper Coin(PPC) 終於誕生,正當眾人期望如其他加密貨幣一樣爆升,但現實卻迎來殘酷的情況:

  1. 區塊鏈系統用戶數量太少;
  2. PPC的價值為0;

兩個月後,令原來熱鬧的Pied Piper只走剩下數個核心成員,主角頹廢之際,收到突發消息說,用戶在一個小時內猛增了12,000人。

  

大家都沒有感到什麼不妥之處,主角和團隊成員們隨之歡呼,開派對慶祝。

但此刻有場陰謀正在蘊釀,另一邊廂,原來之前的投資者聯同手機生產商正在將PiperNet 預裝在大量手機上

主角們越想越不對勁,終於,他們發現問題所在:這些"用戶"並不是幫助他們,而是在進行51%攻擊!

 

51%攻擊

就是掌握了該區塊鏈中全網的51%算力(假設是使用PoW- Proof of Work共識機制,即如BitCoin一樣)後,用這些算力來重新計算之前已確認過的區塊(篡改記錄,偽造更長的區塊鏈),從而使區塊鏈產生分叉並且獲利。

  

那攻擊的目的,除了獲利之外,還可以摧毀整個區塊鏈網絡。就像一間公司,如果擁有百分之五十一的股權的股東們都決定把公司結業,公司也只好結業一樣。

而劇集中的PiperNet 由於初始用戶、算力太少,所以初期攻擊者只需使用大量的用戶(設備)加入網絡,便有很大機會成功攻擊整個網絡。

同時,實際上如果以獲利為前題的51%攻擊需要另一個必要條件:需要具有該區塊鏈中大量的幣,這才能令51%攻擊後獲得更大的利益。

以下是一個模擬的攻擊過程:

  1. 賣掉手上的幣,並提取至銀行帳戶中;
  2. 開始攻擊:開始從剛才這筆交易前一個區塊開始計算,並且忽略所有你錢包地址的交易,重新構造後面所有區塊,由於已擁有超過51%的算力優勢,所以很快就可以產生多個區塊,而當這些區塊比區塊鏈網絡中正常的區塊長度更長時,根據"最長鏈規則",區塊鏈系統就會捨棄掉原本正常的區塊,將這條偽造的區塊鏈視作正常的鏈;
  3. 攻擊完成:如此偷天換日,偽造最長鏈,就成功把步驟1中的幣據為所有,而該區塊中卻沒有這次賣幣提現的記錄;

事實上,要針對運行已有一段時間的加密貨幣(比特幣、以太幣等)進行51%攻擊的一件非常困難的事,因為要獲得這些區塊鏈中的51%算力異常困難,除非世上最大的幾個礦池聯手攻擊(困難不代表不可能)。但另一方面來看,對新推出的區塊鏈進行51%攻擊則是相對上容易的事。

而回到劇中,主角的團隊為抗衡攻擊力量,爭取在達至51%前修改共識機制和智能合約,而不得不找過去的敵人 Gavin Belson 幫助,讓他把伺服器一併加入到PiperNet中,共同抗衡。

當然,天下沒有免費的午餐,各人亦有各自的算盤,Gavin Belson之所以答應的原因也是希望能夠以這個為籌碼,與另一邊廂的攻擊力量為自己進行談判,亦一度成功達到51%,離摧毀PiperNet只有一步之遙。

但幸好最後主角的夥伴們找到了一個擁有80,000用戶的遊戲創始人並答允將遊戲放到PiperNet上,也就意味著,主角們的勢力又瞬間得到進一步增強。

由於這個舉動,將整個PiperNet成功由死亡邊緣拉回來,並且將兩方不懷好意的力量逐出區塊鏈。

這場大戰的開始、過程和結束,都令我覺得這是一本活生生的區塊鏈童話故事書(加上童話二字是因為,要是在現實,主角早就 Bye Bye了),同一時間,亦能形象地交代何謂區塊鏈中的51%攻擊。

這套美劇 Silicon Valley 實在相當有趣,劇中有不少細節和技術都與現實同步,甚至劇組專門為這套劇開設網站,個人覺得這個"官方"Pied Piper網站比起國內現在那些大量"空氣幣"、"詐騙ICO"做得更細緻和專業。

對IT、創業或區塊鏈有興趣的朋友可以看一看這套美劇,也許你看到某些位置會會心一笑!

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *