摘要:本文介紹了一種新型的基于可信任硬件的區塊鏈挖掘框架:節約型挖掘(REM)。以下是譯文。
論文原文:REM:對區塊鏈的節約型挖掘,作者:Zhang等人,發布于USENIX Security 2017
大多數區塊鏈中所使用的工作量證明(proof-of-work, PoW)很容易就會被認為是能源浪費證明。除了選擇鏈中的下一個區塊之外,所有的散列并沒有任何用處。綜合的能源浪費實際上相當驚人:
大家一致認為,PoW毫無用處,只會產生巨大的金錢和環境成本。今天,比特幣網絡使用的電力比核反應堆生產的還要多,預計到2020年,它的電力消耗將趕上整個丹麥所消耗的。
因此,專家們研究了其他的共識方案,包括基于BFT的和權益證明( Proof of Stake),但這些“要么限制了共識分享,要么有明顯的安全限制”。在這篇文章中,作者提供了另外一種方法。我們將不再使用“工作量證明”,而使用“有用工作量證明”(PoUW)。
在PoUW系統中,CPU在承擔原來的工作之外,還可以同時承擔區塊鏈的工作。
在PoUW方案下工作的CPU開銷是原來運行開銷的5-15%左右。
REM(Resource-Efficient Mining,節約型挖掘)的核心依賴于英特爾的SGX(Software Guard Extensions,軟件防護擴展指令)技術,但正如我們將看到的,需要多個組件協作工作才能使整體方案發揮作用。下面我們先看一下基本的執行模型,然后深入了解安全模型。
這里有一張大圖:
圖中有區塊鏈代理(Agent)、REM*礦工(Miner),以及一個或多個有用的工作客戶端(Useful Work client)*。代理用于收集事務并生成區塊模板,該模板是在缺少PoUW的情況下的候選區塊。礦工以PoUW任務的形式獲取區塊模板,并從一個有用的工作客戶端中獲取有用的工作負載。
PoUW任務基于PoUW SGX enclave(譯者注:Intel利用SGX技術在處理器中搭建了一個安全的圍圈以保護重要數據,該圍圈中間的區域就是SGX enclave,即內存中受保護的執行區域)及其輸入。對于任何一個兼容SGX的程序來說(類似于SCONE這樣的可以在SGX中運行容器的程序),通過運行REM工具鏈可以很容易地將其變成PoUW保護區域中的程序。該程序為單線程運行(安全需要),并添加了一些代碼來檢測是否產生了有效的區塊。為了實現這一點,工具鏈還會對程序進行設置,以便能夠準確地跟蹤已執行指令的數量。
當PoUW任務完成的時候,SGX保護區域必須判斷該任務是否產生了有效的區塊。
PoUW保護區域會把每一條指令看成是伯努利試驗來隨機檢測作業是否產生了一個區塊。因此,采礦次數的分布與PoW大致相同。例如,對于比特幣來說,需要度量已執行的散列,而對于REM來說,則是已執行的有用工作指令的數量。
要確定指令是否為“贏家”,PoUW保護區域使用SGX隨機數生成器(SRNG)生成一個隨機數,并尋找一個小于當前難度等級約定的值。在每個指令之后執行這一過程所付出的代價會比較大,因此,所有的指令會被分成多個批次,形成一些子任務,然后運行一次隨機數生成器,尋找小于按照計數指令數加權的目標批次。使用指令計數,是因為它們在保護區域之外不容易受控制。
指令計數的安全性依賴于一個假設,即一旦被檢測到,代碼就不能改變它的行為。為了在SGX實現這一假設,需要兩個“不變”。首先,代碼頁必須是不可寫的;第二,有用的工作程序必須是單線程的。
REM檢查保護區域代碼(usefulwork.so)中的代碼頁是否有權限 - 這可以直接在ELF程序的頭部進行驗證。確保單線程訪問是為了防止多個線程通過共享狀態保存區域(SSA)篡改指令計數寄存器的值。為了實現這一目的,在保護區域的接入點上使用了一個只允許個線程通過的自旋鎖。 REM還需要軟件故障隔離(SFI)的一個子集:間接控制傳輸對齊。這可以防止跳轉到指令中間來偽造指令計數。
我們的實現不包括SFI,因為諸如Google的Native Client之類的現成的解決方案可以與PoUW工具鏈和運行時進行集成。
如果保護區域確定了區塊已被成功開采,那么它會根據SGX生成的證明產生一個PoUW:一個用于確認保護區域符合REM,另一個則用于確認被開采的區塊的難度參數。
區塊鏈代理將PoUW與區塊模板關聯起來,并將其發布到網絡上。下一節將描述其他代理驗證區塊的過程。
認證模型已被集成在英特爾認證服務(IAS)中:簽名密鑰只能分配給有效的CPU,而有效節點在查詢IAS時不應將其認證視為無效。
REM使用認證作為新區塊的證明,所以礦工需要訪問IAS來認證區塊。IAS目前的工作方式使得礦工在每次驗證時都要訪問IAS,這樣,在區塊驗證時間中增加了與英特爾服務器之間的往返時間。這種開銷并不是固有的,只是由英特爾的特定設計所決定的。
有一個簡單的修改方法,將正在驗證的請求作為在響應中生成報告的一部分納入到IAS請求中(目前不存在)。這樣,每個新的區塊只需訪問IAS一次即可,并且其他驗證器可以很容易地檢查生成的簽名報告。
對于驗證器來說,如何知道在保護區域中運行的程序是否被正確檢測仍然是一個問題。將程序放在區塊中會導致高昂的開銷。而如果讓某個權威機構來驗證程序的合法性,則由于權力過于集中也是不可接受的。
為了解決這個難題,我們使用了所謂的雙層認證機制。我們將單個程序的指紋硬編碼到區塊鏈中,這是一個稱為合法檢查器的靜態分析工具。合法檢查器在受信任的環境中運行,并將用戶提供的程序作為輸入…… 它計算程序的指紋并輸出包括該指紋的認證信息。
PoUW包括兩個部分:挖掘成功時候的有用工作程序認證,以及合法檢查員的認證。
這兩者都必須由同一個CPU進行簽名,否則攻擊者可能會為無效的任務創建虛假的認證。
…… 即使我們認為SGX芯片是以安全的方式制造出來的,但個別實例還是有可能會被敵手所破壞。單個受損節點可能對基于SGX的加密數字貨幣來說是災難性的,這使得敵手可以隨意創建區塊并對區塊鏈進行攻擊。
嗯,我們不希望發生這樣的事情!
為了防止芯片受損,REM中包含了區塊接納策略
,它是針對指令計數增加的額外測試。
是基于統計測試。根據對快誠實礦工的速度估計,可以找出有效的PoUW,
對區塊進行統計上的測試,以確定礦工是否采得太快并可能受到了損害。當然,對于知道
的敵手來說,他們可以以快的速度發布區塊,并使之被接受。
當= 0.4時,浪費級別則為0.6%,敵手優勢的上限為100.6%。
有一點很重要,REM是一個共識框架,是生成區塊的一種方法。 REM可以集成到一種加密數字貨幣中去,例如集成到比特幣共識層中。
REM使用四種樣本有用的工作負載進行評估:蛋白質折疊、SVM分類器、zlib壓縮(迭代)和SHA3-256散列(迭代)。運行次數的比較如下所示(分別是本地代碼執行、基于SGX的執行、基于SGX在PoUW enclave中的執行):
結果顯示,將有用的工作轉換為REM PoUW enclave的開銷約為5-15%。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。