幣圈用語進階版:看懂白皮書常用的技術詞彙(上篇) 幣坊財經
幣圈用語進階版:看懂白皮書常用的技術詞彙(上篇)
ICO 項目不斷推陳出新,剛開始研究白皮書的讀者,會發現許多晦澀難懂的專業詞語。此篇文章意在解釋常見的技術詞彙,讓讀者邁出踏入「鏈圈」的第一步

一、 雜湊函數
雜湊函數(Hash Function)是區塊鏈使用的加密技術之一,針對輸入值輸出相對應,但無法回推的值,稱為雜湊值( Hash Value )。

雜湊函數特徵如下:
1. 相同輸入值一定會產生相同輸出值
2. 無法從從雜湊值反推原始的輸入值
3. 不論輸入值的長度為何,輸出值都固定是該雜湊函數的長度
4. 只要輸入值有些許變化,就會產生完全不同的輸出值。「原則上」不會有不同輸入值產生相投輸出值的情況

雖然雜湊函數原則上只要輸入值有所差異,即不會產生相同輸出值。不過在2017年時,來自荷蘭 CWI 研究機構的馬克·史蒂文 (Marc Stevens) 自行研發效率遠勝於暴力破解的 Shattered 破解法,在 Google 雲端平臺提供的大規模計算技術協助下,成功執行雜湊碰撞( Hash Collision ,即兩個不同輸入值產生相同輸出值,也稱為雜湊衝突)。

在各式白皮書中常見的常見的雜湊函數有: SHA-256 、 RIPEMD-160 以及 HASH-160 等等。

二、 拜占庭容錯
多數意圖打造底層鏈的項目,白皮書都會提到拜占庭容錯這個詞。首先要介紹拜占庭將軍問題(Byzantine Generals Problem),是由萊斯利·蘭波特(Leslie Lamport)在其同名論文中提出的,處理分散式對等網路通訊容錯問題。

在該論文中,拜占庭將軍們共同圍困一座城市,由於部分軍隊進攻、部分軍隊撤離可能會造成災難性後果,所有將軍必須通過投票來達成一致策略。每位將軍都將自己的投票資訊,利用信件通知其他所有將軍,就可以知道共同的投票結果,而決定行動。系統的問題在於,將軍中可能出現叛徒,選擇性地傳送投票資訊。假設有9位將軍投票,其中1名叛徒,8名忠誠的將軍中出現了4人投進攻,4人投撤離的情況。這時候叛徒可能故意給4名投進攻的將領送信表示投票進攻,而給4名投撤離的將領送信表示投撤離,這樣一來在4名投進攻的將領看來,投票結果是5人投進攻,從而發起進攻;而在4名投撤離的將軍看來則是5人投撤離,各支軍隊的一致協同就遭到了破壞。

論文中指出,假如節點總數為 N ,失效節點數為 F ,則當 N >= 3F+1 時,問題才能有解,稱為拜占庭容錯( Byzantine Fault Tolerant )。

以下圖例解釋:
1. 在失效節點達三分之一的情況下,無法產生共識。

2. 若失效節點的數量,小於總節點數量的三分之一,則其餘節點依然可以達成一致的共識。

3. 在失效節點的數量,小於總節點數量的三分之一的前提下,就算訊息是由失效結點發出,也會因為相互驗證時無法達成共識,避免執行錯誤的指令。

三、 51%攻擊
底層鏈的項目,通常也要在白皮書中說明這個鏈如何防範「 51% 攻擊」。但是很多人誤以為 51% 攻擊,是指過半的礦工說好一起做壞事,就好像考試集體作弊一樣,可以竄改交易紀錄,甚至控制整個區塊鏈。

事實上 51% 攻擊無法透過串通其他礦工的方式執行,就算真的搶到了 51% 算力,能做的事情也非常有限,不僅無法把別人帳戶裡的錢轉到自己帳戶,更別說控制區塊鏈。最常見的做法,是讓自己持有的同一筆貨幣重複消費兩次,也就是所謂的雙重支付攻擊(Double Spend Attack),也稱為雙花攻擊。

當有人用自己的私鑰,簽署一筆比特幣的轉帳交易,這筆交易就會進到比特幣區塊鏈的「待確認交易區」,等待礦工們寫到區塊鏈上,區塊鏈隨時都有數百到數千筆的交易等待確認。礦工要把區塊寫到區塊鏈上,就得解出一道剛剛提過的 SHA-256 不等式。硬體的運算能力越強,礦工就能越早算出解答。最早找到解答的那個礦工,就會在網路上廣播,告訴其他礦工自己已經找到解答。其他礦工會驗證該區塊內的交易,確認沒有和過去既有的交易紀錄相衝突。這個找到解答、廣播給其他礦工,再由其他礦工驗證交易紀錄的過程,稱為「達成共識」( Consensus )。

區塊鏈的基本規則就是哪條區塊鏈最長,該區塊鏈上的紀錄就是正確的。偶而會發生兩個礦工同時成功挖出區塊,這時候會以先到先得的方式來決定。較慢的礦工挖到的區塊,叫做孤兒區塊(Orphan Block )。

所有記載在孤兒區塊的交易都不算數,跟沒發生過一樣。當某位壞礦工刻意忽略自己的交易,或是重複使用同一筆貨幣購買東西,並且比其他礦工都要早挖出新的區塊,再廣播到網路,證明自己是最長的鏈,就會讓正確紀錄這筆交易的區塊變成孤兒,這就是惡名昭彰的雙重支付攻擊。

而 51% 攻擊正確的解釋,假設全世界的礦工每秒可以算出 100 次 SHA-256 的解,其中 10 次是壞礦工算出來的,那麼壞礦工就佔 10% hash rate ,好礦工佔 90% 。如果壞礦工的運算力是 10% ,而使用者等待 6 次 Confirmation 才確認的話(等待 Confirmation 的次數越高就越安全,目前公認是 6 次 Confirmation 為最佳),壞礦工發動 雙重支付攻擊的成功機會是 0.05% 。

但如果壞礦工的運算力提升至 40% ,而使用者仍然等待 6 次 Confirmation 才確認的話,壞礦工發動雙重支付攻擊的成功機會,則提升至接近 50% 。

下圖是壞礦工算力比率,使用者等待確認次數,與 Double Spend Attack 成功率的關係:

如果壞礦工的運算力提升至整個網路的 51% ,雙重支付攻擊就一定會成功,這就是 51% 攻擊。

不過從駭客的角度來看,發動 51% 攻擊的難度非常高,持有 51% 的算力成本也很貴。即便一切都順利的情況下,也頂多只能重複消費一次比特幣,之後要面臨比特幣不再被信任,價值歸零,持有 51% 算力所付出的成本也不再有價值的狀況,代價太大以致沒有人是嬴家,因此51%攻擊不容易發生在比特幣身上。

其他名詞如「零知識證明」、「私鑰」以及「礦工費」等名詞解釋,則待下篇文章與讀者分曉。