Honey Badger of BFT 協(xié)議詳解

簡介

加密數(shù)字貨幣的成功使得 BFT 共識協(xié)議不斷的被應用在那些重要的領(lǐng)域尤其是金融行業(yè)。傳統(tǒng)的 PBFT 是一種弱同步性質(zhì)的共識協(xié)議,因為它的可靠性對網(wǎng)絡(luò)中的時間處理延時依賴非常大。也就是說,網(wǎng)絡(luò)的活性 Liveness 很大程度上會受到網(wǎng)絡(luò)條件的影響。

HoneyBadgerBFT 作為一種異步的 BFT 共識協(xié)議,號稱不依賴網(wǎng)絡(luò)中的對時間條件的依賴。對比與傳統(tǒng)的 PBFT 共識協(xié)議,它的效率都有顯著提高。

應用場景

可以滿足下面兩個應用場景

1)由多個金融機構(gòu)組成的金融財團共同基于 Byzantine agreement protocol 協(xié)作運行的聯(lián)盟鏈,這樣,就能保證快速、穩(wěn)定的處理交易。
2)在無許可(permissionless)的公鏈中依然可以提供可以接受的(acceptable)的吞吐量和延遲。

網(wǎng)絡(luò)模型

HoneyBadgerBFT 系統(tǒng)假定每兩個節(jié)點之間都有可靠的通信管道連接,消息的最終投遞狀態(tài)完全取決于敵方(adversary),但是誠實節(jié)點之間的消息最終一定會被投遞。在整個網(wǎng)絡(luò)中的總節(jié)點數(shù)必須大于三分之一的敵方節(jié)點,也就是 N ≥ 3F+1。

網(wǎng)絡(luò)中的交易還依賴于一個全局順序。

一個成功的網(wǎng)絡(luò),最后狀態(tài)應該是這樣的:

  • 任何誠實的節(jié)點確認了一筆交易 TX,那么其他所有的誠實節(jié)點也會確認這筆交易
  • 任何誠實的節(jié)點確認了一筆交易 TX,其序號是 s1,而另一個誠實節(jié)點確認了另一筆交易 TX,其序號是 s2,那么要么 s1 發(fā)生在 s2 之前,要么之后。也就是說,其時間順序是確定的。
  • 如果一筆交易被發(fā)送到 N - F 個誠實節(jié)點了,那么最終每個誠實節(jié)點都會確認這筆交易。這就是可審查特性。

實現(xiàn)

HoneyBadgerBFT 使用了兩個方法來提升共識效率。

1、通過分割交易來緩解單節(jié)點帶寬瓶頸
2、通過在批量交易中選擇隨機交易塊,并配合門限加密來提升交易吞吐量。

下面就分別來詳細解釋這兩種方法的原理

1)交易分割傳輸
在網(wǎng)絡(luò)中,批量的交易(總數(shù)為 n)需要打包傳輸給其他節(jié)點,作為共識發(fā)起方,一個節(jié)點需要把打包的交易發(fā)送 N - 1 份給其它節(jié)點。 如下:


改進的方案是,把總數(shù)為 n 的交易分割成 N - 1 分,也就是說,每份包含 n / N - 1 條交易。 如圖,把交易分成三個小塊,每塊發(fā)給不同的節(jié)點。這樣原來一共需要發(fā) 3 * n 份交易數(shù)據(jù)就變成了只需要發(fā)送 n 分即可。

其他節(jié)點收到了分塊的交易之后,分別再從其他節(jié)點收取缺失的交易塊,這樣,節(jié)點 A、B、C 之間的帶寬就被充分利用了,而減少了 P 作為發(fā)起節(jié)點的瓶頸,整個系統(tǒng)的性能不會完全受限于 P 節(jié)點。

2)隨機塊的選擇以及門限加密

由于 HoneyBadge BFT 是一種異步共識協(xié)議,節(jié)點之間收到交易是非同步的,隨機的。也就是說,每個節(jié)點收到來自客戶端的交易可以是不同的,交易到達各個節(jié)點的時間順序也是不定的。

各節(jié)點收到交易信息之后,會把該交易放入它自身的 Input Buffer 中,后續(xù)收到的交易也依次按順序放入其 Input Buffer。HoneyBadger 網(wǎng)絡(luò)中是依靠 epochs 來作為時間間隔進行交易打包處理的,在一個 epoch 中,每個節(jié)點會從自身的 Input Buffer 中選一批交易,并廣播給其它所有節(jié)點。最終,每個節(jié)點都會有形成一個有相同交易集的交易池,它們是這些節(jié)點廣播出來的所有交易的并集,也就是 BatchA U BatchB U BatchC U ...。

顯然,這個交易池中可能存在重復的、無效的交易,需要剔除。

最終確認哪些交易還需要一個叫做 Binary Byzantine Agreement 的過程,簡單來說就是,在所有節(jié)點之間進行一輪共識,得到一個最終確認的二進制數(shù)值,由這個二進制的對應的位來決定哪個交易會被最終確認。

在進行 Binary Byzanting Agreement 完成之后,會得到一個確定的 Value,根據(jù)這個 Value 來確定交易集合。在剔除無效交易和重復交易之后,每個節(jié)點就可以立刻確認剩余的交易集(Asynchronous Common Subset )。

需要注意的是,各節(jié)點廣播時的交易都是按照順序從自己的 Input Buffer 中取出的,為了防止這種策略被 adversary 節(jié)點監(jiān)控到,從而對誠實節(jié)點進行網(wǎng)絡(luò)干擾阻礙交易的發(fā)布和共識,Honey Badger 采用了一種 Random Selective 的優(yōu)化方式隨機選取一批交易。

就是,每個節(jié)點從自己的 Input Buffer 中隨機選區(qū)一批交易,這樣的好處有兩個,一是可以防止 adversary 了解策略進行干擾或者攻擊,二是隨機選取一批交易可以很大程度上避免各節(jié)點提交的交易出現(xiàn)大量重復。原因是各節(jié)點雖然收到的交易順序不一定一致,但在網(wǎng)絡(luò)條件差不多的情況下,大部分交易順序可能是相同的,隨機選取而不是都按順序選取可以避免大量的重復。

門限加密 Threshold Encrytion

因為 Adversary 的存在可能干擾 Binary Byzantine Agreement 的結(jié)果。因此,Honey Badger 提出了門限加密的方式來避免最終的交易集受到攻擊。

門限加密的原理是允許任何節(jié)點使用一把主公鑰來加密一條信息,但是解密則需要網(wǎng)絡(luò)中所有節(jié)點來共同合作,只有當 f + 1 個誠實節(jié)點共同合作才能獲得解密秘鑰,從而得到消息原文。在這之前,任何攻擊者都無法解密獲得消息的原文。

具體過程如下:
由一個第三方的可信節(jié)點為每個節(jié)點生成公/私鑰,使用一把主公鑰(master public key)加密原交易信息得到一份 ciphertext,然后每個節(jié)點分別使用其私鑰 SKi 和這份 ciphertext 得到完整解碼秘鑰的一個部分σi。

當節(jié)點拿到 f + 1 份 σi 時,配合 PK 就可以解密 ciphertext。

性能測試

以下性能測試結(jié)果來源于其官方論文截圖(本人暫未測試)

官方論文:
https://eprint.iacr.org/2016/199.pdf

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容