區塊鏈的資安 — 共識(Consensus)協議

本文為大家介紹常用的區塊鏈共識演算法,以及它們的安全假設,還有基於共識協議會產生怎樣的資安攻擊.

區塊鏈共識與拜占庭將軍問題

拜占庭將軍問題是電腦科學中的一個議題,它處理當各方(一堆將軍之間)和通訊路徑都不可信時的多方之間達成協議的問題。

在拜占庭將軍問題中,一群圍攻城市的將軍正在試圖決定是要一起攻城還是一起撤退。如果只有一部分軍隊進攻,他們肯定會被擊敗。將軍們只能通過信使(可能被攔截)進行通訊,而且其中一些將軍還可能是叛徒

拜占庭將軍問題適用於區塊鏈,因為區塊鏈中的節點需要就正式版本的分佈式帳本中應該包含的訊息達成一致節點必須以有效的方式通過訊息傳遞自動的達成共識,並且必須處理一些惡意節點可能會破壞共識的可能性。但依據賽局理論,破壞這種共識會很可能破壞整個區塊鏈內的價值.

如果系統解決了拜占庭將軍問題,則該系統稱為拜占庭容錯。如果網路中至少三分之二的節點是誠實的,則拜占庭將軍問題則證明是可以解決的。區塊鏈共識演算法主要在讓網路就這一本內容是一模一樣的分佈式帳本的狀態達成一致,同時保持拜占庭容錯。

區塊鏈共識協議的安全性

在區塊鏈出現之前,也是存在解決拜占庭將軍問題的演算法,但效率非常低。區塊鏈技術的重大突破之一是建立了拜占庭將軍問題的概率方案。這種稱為PoW(Proof of Work)的演算法和另一種稱為PoS(Proof of Stake)的演算法是區塊鏈中使用的兩種主要共識演算法(當然也存在其他幾種演算法)。

在區塊鏈技術中,被選中在區塊鏈中建立下一個區塊通常會獲得獎勵。PoS(以及由此衍生的其他共識算法)使用稀有資產(例如以太幣)的所有權來管理用戶對區塊鏈的控制:我們可以控制的資產越多,我們對區塊鏈的權力就越大。這使用經濟激勵措施的方式讓控制區塊鏈變得非常困難。在這一節中,我們將討論PoW和PoS,它們如何實施這種基於稀缺性的拜占庭將軍問題方案,以及它們的安全性假設和相關資安攻擊。

PoW(Proof of Work)

這是一種是最初的區塊鏈共識演算法。 在PoW中,節點間互相競爭尋找只能使用隨機猜測解決的才能找到的一串數字。 這個過程(稱為挖掘)通常要求礦工找到非正式版本的區塊,這個版本在hash時會產生一定數量的leading zero。 leading zero的數量多寡被稱為難度(difficulty),它讓共識演算法在區塊鍊網路的整體運算能力發生變化的情況下保持一定的區塊率(block rate)和難度等級。 區塊鏈礦工有能力改變區塊header中的一個值,但由於hash function的特性,除了隨機猜測之外,我們是無法確定哪一個值會產生所需的output。

用PoW解決拜占庭將軍問題

PoW為拜占庭將軍問題提供了概率解決方案。 共識演算法的難度目標是設定好的,使得整個網路都需要對問題進行運算,以便以合理的概率及時找到答案。 雖然區塊鏈有可能幸運地找到答案而無需進行預期數量回合的猜測,變成在一段時間內有兩個不同版本的帳本,但這種概率隨著每個新區塊的增加而降低。 最終,這個概率變得非常之低,以至於最終某個版本的帳本會受大多數區塊鍊網路內節點的同意。

PoW的安全性

PoW的安全性圍繞其加密“謎題(puzzle)”的安全性。 如果尋找謎題可以通過隨機猜測以外的任何方式來解決,那麼演算法的安全性就會受到破壞。 由於謎題通常是用hash function實現的,這意味著hash functions是有著單向和非局部的特性

攻擊PoW

PoW不是完美的,它還是會受到攻擊。 一些幾種不同的攻擊可能會降低或破壞區塊鏈的安全性。

51% 攻擊

意指攻擊者控制區塊鏈中大部分運算能力。 如果是這種情況,攻擊者就有能力建立一個不同版本的區塊鏈,這個區塊鏈將積累比網路其餘少部分節點所認可的更多的PoW。 PoW的的節點在特性上是認可具有最多PoW的區塊鏈版本,這使攻擊者可以完全控制分佈式帳本。 這使得雙重花費(double-spend)攻擊成為可能,攻擊者在區塊鏈上發布自己的交易,等待其它節點信任,然後將另一個版本的區塊(可能是這一筆交易同時付給不同的兩個人)作為整個區塊鏈網路節點都會接受的版本。

自私挖礦(Selfish Mining)攻擊可讓攻擊者以不到 51% 的區塊鏈算力資源完成 51% 的攻擊。在理想情況下,使用者一旦找到PoW難題的答案,就會立即進行下一個區塊的運算。然而,“自私的礦工會暫時隱藏他們的答案,然後立即開始在他們挖到的區塊(也就是已經找到答案的區塊)之上挖掘下一個區塊”。由於其他礦工在找到答案之前無法開始挖下一個區塊,這讓攻擊者在為下一個區塊尋找PoW答案的比賽中搶占了先機。但這種攻擊的主要風險是,當自私礦工仍然隱藏他們的答案時,其他人也有可能先找到答案,因此這是在下一個區塊獲得的優勢和失去當前區塊獎勵的風險之間的權衡。

最後,可以使用物理攻擊來攻擊PoW區塊鏈。PoW演算法使用大量電力來進行電腦運算。如果攻擊者可以切斷電源或移除礦工對 Internet 的連結,他們就會增加執行 51% 攻擊的機會,尤其是當礦工佔網路計算能力的很大比例時,例如少數幾個礦池佔很大的運算能力.

PoS(Proof of Stake)

PoS採用不同的方法來解決拜占庭將軍問題,使用區塊鏈的加密貨幣作為資源而不是運算資源。在PoS中,使用者可以承諾不花掉或抵押他們的一些加密貨幣。以此作為交換,他們就有機會參與區塊鏈的下一個區塊建立者的權力。

在PoS中,節點被偽隨機地(pseudo-rnadomly)選擇是用誰的權益(stake)比較大作為下一個區塊的建立者,而偽隨機的演算法有Randomized Block Selection與Coin Age-based Selection。這個概率可以僅基於抵押加密貨幣的大小(有時以最大概率為上限)或考慮自上次選擇使用者以來的時間。偽隨機選擇過程是必要的,因為網路中的每個節點都必須能夠獨立計算正確的節點(區塊建立者)來建立下一個區塊(因為沒有一個中心化單位可以宣告這一點)但不能提前預測區塊建立者(否則他們可以操縱對他們有利的過程)。一般來說,前一個區塊的hash value會被用作演算法的input,以確保偽隨機性。過程如下圖:

用PoS解決拜占庭將軍問題

在PoS中,每個區塊的建立者都是隨機選的,這些建立者簽署了一個已加到現有區塊鏈末尾的區塊。 通過這樣的方式,區塊建立者宣告他們同意該區塊鏈所描述的分佈式帳本的狀態。

隨著時間的推移,每個在網路中擁有權益(stake)的節點都應該被隨機選來創建一個新區塊並認可分佈式帳本的狀態。 所有節點只能認可到那一個時間建立的區塊,但所有節點也認可當前的系統和選擇過程,這意味著節點之間同意未來區塊建立者的選擇方式。 只要適當的節點建立每個區塊,所有節點就同意它是分佈式帳本的有效部分。

PoS的安全性

PoS的安全性基於兩個假設:選擇區塊建立者的過程的安全性和數位簽章的安全性。 區塊建立過程必須是偽隨機的,並且基於one-way function,否則攻擊者可以建立帳號並質押加密貨幣來贏得建立鏈中每個區塊的權利。 數位簽章的安全性也很重要,因為數位簽章證明一個區塊是由正確的節點建立的。

攻擊PoS

與PoW共識演算法一樣,PoS容易受到幾種不同的攻擊。在PoW中,如果攻擊者控制了 51% 的網路運算資源,他們就可以控制整個區塊鏈。 在 PoS中,這個百分比不是被設定好的,但原理是一樣的。 如果攻擊者控制了足夠多的網路中質押的加密貨幣,他們更有可能被選是每個區塊的合法建立者。 如果這個百分比足夠高,理論上攻擊者可以控制區塊鏈。

遠程攻擊(long-range attack)是攻擊者建立一個新版本的區塊鏈直接回到第一個區塊(也稱為創世紀區塊)的攻擊。 攻擊者的目標是讓他們的區塊鏈版本看起來比正確的鏈得到更多帳號的認可。 這是通過減緩正確鏈的成長和盡可能快地成長錯誤的鏈來實現的(通過只在輪到他們在建立區塊時並質押他們的所有區塊的獎勵來增加他們下一次被選擇建立區塊的勝率)。 如果攻擊者的鏈比正確的鍊長,攻擊者可以公開這個錯誤的鍊,由於這符合整體區塊鍊的協議,網路的其他節點就會認可這一個錯誤的鍊是真的。

如果攻擊者在區塊鏈中擁有大部分質押的加密貨幣並且有耐心,他們可以使用PoS“定時炸彈(timebomb)”。 PoS中的區塊獎勵是根據質押加密貨幣獎勵的百分比給予的。 如果擁有最多加密貨幣的人將所有獎勵繼續質押下去,他們的股份比例將穩步增長,最終讓他們控制分佈式帳本。

其他的區塊鍊共識演算法

雖然PoW和PoS是主要的區塊鏈共識協議,雖然它們是主流演算法,但並不是全部的共識演算法,還是有其他的共識演算法被提出,包括:

  • Delegated Proof of Stake:節點使用他們的stake投票給建立區塊和維護區塊鏈的見證人和代表。
  • Proof of Activity:PoW和PoS的混合。 PoW的結果用於選擇簽署區塊的一群節點當代表。 如果整個群組不簽名,則重複該過程。
  • Proof of Burn:使用者銷毀加密貨幣是為了將來有權說他們至少銷毀了建立區塊並獲得獎勵所需的最低數量。用銷毀加密的貨幣當作未來的獎勵。
  • Proof of Sapce:使用者將一定數量的存儲空間分配給挑戰和回應的查找表。 如果用戶對挑戰有回應,他們就可以建立下一個區塊。基本上這是一個比誰硬碟空間大的方式。

--

--

運用"雲端服務"加速企業的數位轉型願景
運用"雲端服務"加速企業的數位轉型願景

Written by 運用"雲端服務"加速企業的數位轉型願景

我們協助您駕馭名為"雲端運算"的怪獸,馴服它為您所用。諮詢請來信jason.kao@suros.com.tw. https://facebook.com/jason.kao.for.cloud

No responses yet