比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > 非小號 > Info

技術指南 | 軟硬協同的共識算法設計——以FastBFT為例_BFT

Author:

Time:1900/1/1 0:00:00

導讀

我們知道,相比公有鏈,聯盟鏈中使用的拜占庭容錯(BFT)算法能夠有效地提升區塊鏈的交易處理能力。但是,傳統的BFT算法,例如PBFT算法,為了容忍f個拜占庭錯誤節點,需要保證系統中的節點總數至少是3f+1。與之相比,RAFT等能容忍f個停機錯誤(CFT)的共識算法僅需要2f+1個節點就能正常運作。那么我們不禁會去想,能不能通過某種方法使得一個拜占庭系統也只需要總共2f+1個節點就能夠抵御拜占庭攻擊呢?

幸運的是,這樣的方法是存在的。我們可以借助可信硬件,消除拜占庭節點的二義性,從而僅需要2f+1個節點,就能有效地防止拜占庭攻擊。

本文以FastBFT為例,介紹FastBFT是如何借助可信硬件,取得比傳統BFT算法更好的性能的。

可信硬件

FastBFT算法使用的可信硬件是IntelSGX(SoftwareGuardExtensions),Intel第六代CPU之后的一組擴展指令集。目前,很多個人電腦和服務器都可以支持SGX相關的功能。在SGX的編程模型中,一個程序分為可信代碼(enclave)和不可信代碼。SGX保證了在enclave中運行的代碼和數據不能被其他程序訪問和篡改。并且,通過enclave寫入到磁盤的數據會被加密,只有該enclave能夠讀取。不可信代碼只能調用enclave提供的有限的可信函數接口來改變enclave的內部狀態,獲取enclave的內部信息。

因此,FastBFT的代碼也分為了兩部分,如下圖所示:

其中,FastBFT不可信代碼負責處理共識消息的收發,以及共識狀態的轉換。而FastBFTenclave代碼則負責處理密鑰生成,加解密,安全信道的建立以及共識狀態變量的維護。

分析:技術指標顯示ETH或出現回調:盡管以太坊最近幾天的價格走勢讓許多人相信牛市正在醞釀之中,但這一趨勢可能會暫時消失。一位名為“Joseph”的交易員指出,他自己使用的一個用于追蹤趨勢持續的專用指標正在形成三月暴跌前曾出現的跡象。此外,還有其他預期和指標顯示,ETH價格有可能出現回調。(Bitcoinist)[2020/7/26]

節點類型

與PBFT算法類似,FastBFT算法也有主節點和從節點之分。不同之處在于,FastBFT算法將從節點進一步劃分為f個活躍(active)節點和f個被動(passive)節點。在常規流程中,FastBFT算法只需要f+1個活躍節點參與共識的消息收發。被動節點僅需要處理來自主節點的Reply消息,更新自身的狀態。只有在發生錯誤時,這f個被動節點才需要參與到共識流程中來。

可信變量與函數接口

在FastBFT中,每個節點的enclave都有自己的公私鑰對,并記錄了其他節點的公鑰。除此以外,每個節點還需要維護并持久化以下變量:計數器值c,view值v,活躍節點列表及會話密鑰{Si,ki}。其中c和v是共識相關的狀態變量,v值只有在viewchange的時候才會增加,當系統平穩運行時,c會不斷增加。

FastBFTenclave對外提供了以下幾個可信函數接口:be_primary,update_view,preprocessing,request_counter,verify_counter,update_counter和reset_counter。

▲?be_primary、update_view函數

be_primary是某個節點成為主節點之后,需要調用的enclave方法。它的作用是重置c,更新活躍節點列表,重新生成與活躍節點的會話密鑰。

58學院TIM:不要過分依賴技術指標:今晚,在58學院第二期《合約市場中的叢林法則(上)》的直播中,58學院研究員兼58COIN礦池高級產品經理TIM談及技術指標時表示:技術指標雖然有一定作用,但其更容易成為交易者做決定的絆腳石。任何指標都是具有滯后性的,當你過分依賴使用各種指標,便容易忽視圖表或價格如何在關鍵水平附近的走勢形態。所以在判斷走勢時切記不要過分依賴技術指標,真正的能具有前瞻性往往就是基于裸K價格圖表中的價格行為。[2020/6/4]

update_view是從節點收到主節點當選的消息后,更新自身enclave狀態的方法。該方法接受的參數包括主節點的c、v以及加密后的會話密鑰。在證實主節點當選的消息是真實可信之后,從節點調用enclave的update_view方法,重置enclave的c和v,獲取與主節點通信的會話密鑰。

這兩個函數都是FastBFTviewchange流程中需要調用的方法,本文限于篇幅限制不予討論。

▲?preprocessing、request_counter與verify_counter函數

preprocessing是FastBFT算法為了實現高效的消息聚合,實現節點enclave之間密鑰分享(secretsharing),主節點需要調用的方法。enclave首先通過哈希函數,將c,v與一個隨機生成的原始密鑰S進行綁定,這個commitment記作h。然后,通過基于XOR的密鑰分享方案,將原始密鑰隨機拆分成f+1個子密鑰Si,S可以通過將這f+1個子密鑰進行異或操作還原出來。最后返回給主節點h,c和v,以及經過加密的,只能被對應從節點的enclave解密的。并且,為了避免每次消息聚合之前都進行密鑰分享,調用這個方法后會批量生成從c+1一直到c+m這m組消息。之后的m條共識消息都不再需要調用該方法。

浩云科技回復深交所:兆物信連在區塊鏈核心技術指標上有領先優勢:3月17日消息,日前,深交所向浩云科技下發問詢函,要求浩云科技說明認為兆物信連是“國際領先的區塊鏈底層技術服務商”的原因及相關依據,信息披露是否審慎合理,是否誤導投資者。對此,浩云科技在3月17日披露的問詢函回復公告中表示,兆物信連全資子公司湖南宸瀚信息科技有限責任公司成立于2015年,為中國高科技產業化研究會區塊鏈產業聯盟常務理事單位等。兆物信連區塊鏈底層平臺MT在10分片純性能測試情況下,其TPS(注:每秒系統處理的交易數量)約為240萬次。對比國際上知名的Hyperledge Fabric以及國內的頭部企業,兆物信連在區塊鏈核心技術指標上有領先優勢。浩云科技認為,公司信息披露審慎合理,不存在誤導投資者的情形。不過,其也指出,目前,國內聯盟鏈主要廠商為螞蟻金服、騰訊、京東、百度等企業,隨著更多企業加入,市場競爭日趨激烈。(新京報)[2020/3/17]

request_counter是主節點要發起提案消息前,需要調用的方法。該方法接受一個傳入參數x。enclave首先把c+1,然后對進行簽名,返回該簽名。通過這個簽名,可以起到綁定與x的效果。

verify_counter是活躍節點收到來自主節點的PREPARE消息和COMMIT消息后,需要調用的方法。該方法傳入的參數包括主節點enclave簽名后的,以及主節點enclave的preprocessing方法生成的。從節點的enclave需要確保簽名中的c,v與解密獲取的c,v一致,并且c比本地的c大1。驗證通過后,enclave本地的c+1,返回Si,h。通過這個方法,活躍節點的c與主節點的c進行了同步。返回的Si使得之后主節點能夠恢復出原始密鑰S,h則能夠讓活躍節點確認原始密鑰S的真實性。

動態 | Libra技術指導委員會將于2020年第一季度發布技術治理框架:Facebook 領導的穩定幣項目 Libra 發布最新公告宣布,其技術指導委員會 TSC 將在 2020 年第一季度發布技術治理框架及其相關文件,包括開源社區針對網絡的技術升級如何進行提案的流程,以及評估這些提案的一系列透明流程。Libra 技術指導委員會 TSC 于 2019 年 12 月 16 日由 Libra 協會理事會投票決定成立,包括五名成員,分別是加密貨幣托管服務 Anchorage 聯合創始人兼總裁 Diogo Monica、Calibra 核心產品負責人 George Cabrera III、Bison Trails 首席執行官兼創始人 Joe Lallouz、聯合廣場風投合伙人 Nick Grossman 和慈善組織 Mercy Corps 新興技術總監 Ric Shreves。[2020/1/17]

以上這三個函數是FastBFT常規流程中需要調用的函數,對于讀者理解FastBFT算法尤其重要。

▲?update_counter與reset_counter函數

update_counter是被動節點收到來自主節點的Reply消息后調用的方法。它作用是更新被動節點enclave的c值。

reset_counter是節點宕機重啟后,在重新加入共識網絡前,需要調用的方法。它的作用是接收f+1個來自不同節點enclave的一致的c,v,狀態消息,同步本地enclave的c和v。

FastBFT算法的常規流程

FastBFT算法的常規流程分為:Preprocessing,Request,Prepare,Commit及Reply這五個階段。整個流程如下圖所示:

行情 | 救贖說幣:ONT目前不能買,要等技術指標出現才能買入:據救贖分析,本體就行情走勢趨勢來說,是不容樂觀的。我們看技術指標macd從箭頭處跌下0軸之后,大部分時間都在0軸之下,代表的是持續的空軍優勢。持續的空軍優勢,是不存在買入的理由的,是不管基本面如何利好都不能入場的。但是我們都知道,本體的基本面是很強的,所以我們就等一個買入點就好了。我們再看234處的下跌幅度不是很大,但是跌之后沒有多大漲幅就接著跌,所以這個可以分析出ONT的買盤真的不強烈。所以要想買入這個幣種,要等一個大跌就可以買了。[2018/7/16]

在Proprocessing階段,主節點通過調用enclave的preprocessing方法,獲取密鑰分享消息。然后將這些密鑰分享消息發送給各個活躍節點。

當主節點收到來自客戶端的請求REQUEST后,就會進入Request階段。這時,主節點需要調用enclave的request_counter方法獲取enclave對REQUEST,c+1,以及v的簽名。然后,將REQUEST及enclave簽名一起作為PREPARE消息的內容,發送給活躍節點。

當活躍節點收到來自主節點的PREPARE消息后,就進入了Commit階段。此時,活躍節點會將主節點enclave的簽名以及從Proprocessing階段獲取的對應的密鑰分享消息通過verify_counter方法通知enclave。enclave驗證通過后,告知活躍節點子密鑰Si和h。然后,活躍節點將Si發送回主節點。主節點收齊f+1個來自活躍節點的子密鑰Si之后,就可以重建出原始密鑰S。之后,主節點就可以執行REQUEST請求,再次調用enclave的request_counter方法,獲取enclave對REQUEST執行的結果res,c+1,以及v的簽名。然后,將一起作為COMMIT消息的內容,發送給活躍節點。

當活躍節點收到來自主節點的COMMIT消息后,就進入了Reply階段。此時,活躍節點通過對比的哈希值與之前enclave返回的哈希值h,判斷主節點是否成功地恢復出了原始密鑰。然后,活躍節點也執行REQUEST請求,判斷執行結果是否與主節點執行結果一致。之后,再調用verify_counter方法,獲取c+1對應的子密鑰Si’以及原始密鑰的綁定h’,并將Si’發送回主節點。主節點收齊f+1個來自活躍節點的子密鑰Si’之后,就可以重建出原始密鑰S’。然后將REQUEST,res,S,S’連同密鑰分享信息及之前兩個來自enclave的簽名都作為REPLY消息的內容,發送給客戶端及被動節點。被動節點收到REPLY消息后,首先驗證消息的真實性。驗證通過后,調用兩次enclave的update_counter方法更新enclave內部的c和v值。

FastBFT快在哪里

從上述的流程,我們可以總結出,FastBFT算法的“快”主要體現在以下幾個方面:通過可信硬件,減少系統的節點總數;通過輕量級的密鑰分享方案實現高效的消息聚合;通過劃分活躍節點與被動節點來減少與被動節點的通信。

首先,我們看到,在FastBFT算法中,一共只需要2f+1個節點。更少的節點數量意味著更快的響應時間。在常規流程中,主節點只需要發送f+1條消息,接收f+1條消息就可以進入到下一個階段。而在PBFT等算法中,節點需要廣播3f+1條消息,接收至少2f+1條消息才能進入到下一個階段。

其次,在PBFT等經典算法中,從節點在收到主節點的PrePrepare等消息后需要向所有節點廣播Prepare消息,消息總量為O(n^2)。而FastBFT的常規流程中,所有從節點僅需要發送子密鑰給主節點,消息總量為O(n)。這極大地減輕了網絡的壓力。

并且,在HotStuff等共識算法中,消息聚合是通過基于橢圓曲線的聚合簽名來完成的。而基于橢圓曲線的聚合簽名速度較慢,影響共識的效率。而FastBFT則使用了基于XOR的密鑰分享方案,僅需要進行f次異或操作就完成了消息聚合,極大地提升了共識的效率。值得注意的是,FastBFT能使用如此簡單的方法完成消息聚合的原因還是因為可信硬件的支持。由于密鑰拆分在enclave內部進行,拜占庭節點無法獲知原始密鑰和子密鑰,也無法進行篡改。這樣才能保證消息聚合的安全性。

最后,將節點劃分為活躍節點與被動節點之后,被動節點僅需要接收Reply消息更新自身的共識狀態,而不需要發送任何消息。這進一步地降低了網絡帶寬的消耗,降低了系統的運行成本。

總結

FastBFT作為一種基于軟硬協同設計的共識算法,很好地向大家展示了如何使用可信硬件突破傳統共識算法理論的限制。我們可以看到,基于可信硬件,FastBFT極大地降低系統的部署成本,顯著地提升共識的效率。

大家如果對于本文或者區塊鏈算法感興趣,歡迎加入交流群,添加小助手桔子微信:18458407117。

進階加餐

▲?FastBFT的正確性

由于完整的FastBFT算法還涉及異常流程viewchange,已經超出本文的介紹范圍,在此僅對FastBFT的安全性做一個簡單的論證加餐,以便讀者了解大貌。

首先,我們可以發現,每對僅能綁定一條信息。這是因為,每次主節點調用enclave的request_counter方法后,enclave中記錄的c就會加1。并且,一旦viewchange,enclave會將v加1。這樣就保證了同一對不會被重用。于是就有效地防止了拜占庭節點向不同節點發送不同的提案消息,消除了拜占庭節點的二義性。

其次,在常規流程中,c每次都會增加1,并且enclave的verify_counter方法也會判斷c是否比之前的c大1。這對共識消息的順序做了進一步的限制。

再次,我們可以看到,在FastBFT中,一個提案達成共識需要經過類似PBFT的兩輪廣播。與PBFT的區別在于FastBFT的Quorum是f+1而PBFT是2f+1。由于共識消息都有enclave的參與,拜占庭節點無法隨意構造虛假的信息,FastBFT的viewchange流程可以保證即使只有f+1個viewchange消息,也能夠恢復出達成共識的提案請求,確保該請求一定會被執行。

于是,所有正確節點都將以相同順序執行同樣的提案請求。

▲?FastBFT的其他優化

除了前面提到的優化外,FastBFT還引入了廣播樹來緩解主節點的通信壓力。如下圖所示:

當1號節點作為主節點要廣播PREPARE等消息時,只需把消息發送給2,3號節點。2,3號節點會將消息進一步轉發給4,5,6,7號節點。通過這種方法,主節點的發送消息的數量就從O(n)降低到了O(1)。

當然,此時密鑰分享、消息聚合等步驟也會有所變化,本文就不在此贅述了,感興趣的同學可以參考原論文了解相關實現。

作者簡介

汪曉可,來自趣鏈科技基礎平臺部,區塊鏈軟硬件協同設計研究小組

參考文獻

?PracticalByzantineFaultTolerance

?InSearchofanUnderstandableConsensusAlgorithm

?Onthe(Limited)PowerofNon-Equivocation

?ScalableByzantineConsensusviaHardware-assistedSecretSharing

?IntelSGXExplained.

?HotStuff:BFTConsensuswithLinearityandResponsiveness

Tags:ENCNCLcLABFTwrightcurrencyUncle Dolanclam幣怎么交易BBFT價格

非小號
北京市豐臺區委書記徐賤云、區長初軍威到央行數字貨幣研究所走訪調研_數字人

1月14日,北京市豐臺區委書記徐賤云、區長初軍威到央行數字貨幣研究所走訪調研,與數字貨幣研究所所長穆長春、副所長狄剛就數字貨幣系統建設工作進展情況進行座談交流.

1900/1/1 0:00:00
全國首張“區塊鏈技術軟件開發師”中級證書在南京開考_數字人

12月20日,“區塊鏈技術軟件開發師”職業認證培訓班結業考試在南京開考,通過者將拿到由全國職業人才認證管理中心頒發的全國首張“區塊鏈技術軟件開發師”中級證書.

1900/1/1 0:00:00
比特幣首破4萬美元,續創歷史新高_加密貨幣

北京時間1月8日凌晨2點左右,比特幣價格一度突破了4萬美元關口,再度刷新歷史紀錄,而根據NVT比率等數據分析顯示,這輪牛市尚未結束.

1900/1/1 0:00:00
濟南市發布區塊鏈發展行動計劃 望加快賦能實體經濟_元宇宙

本文來源:證券日報,作者:邢萌據濟南市人民政府官網,日前,濟南市人民政府辦公廳正式印發《濟南市區塊鏈產業創新發展行動計劃》.

1900/1/1 0:00:00
陳曉華:數字要素重構經濟形態和治理模式_數字金融

本文來源:中國金融信息網,原題《數字經濟學家陳曉華:數字要素重構經濟形態和治理模式》作者:陳曉華.

1900/1/1 0:00:00
比特幣突破38000美元/枚,各路資金跑步進場_INM

本文來源:金十數據 周四晚20:02,比特幣站上38000美元/枚,續創紀錄新高。 Coingecko行情顯示,比特幣總市值突破7000億美元,約為7065.24億美元,占加密貨幣總市值的67.

1900/1/1 0:00:00
ads