REM:對區塊鏈的節約型挖掘

原文Resource-efficient mining for blockchains
作者:Adrian Colyer
翻譯:雁驚寒

摘要:本文介紹了一種新型的基於可信任硬件的區塊鏈挖掘框架:節約型挖掘(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,軟件防護擴展指令)技術,但正如我們將看到的,需要多個組件協作工作才能使整體方案發揮作用。下面我們先看一下基本的執行模型,然後深入瞭解安全模型。

有用工作量證明(PoUW)

這裏有一張大圖:

1.jpeg

圖中有區塊鏈代理(Agent)、REM*礦工(Miner),以及一個或多個有用的工作客戶端(Useful Work client)*。代理用於收集事務並生成區塊模板,該模板是在缺少PoUW的情況下的候選區塊。礦工以PoUW任務的形式獲取區塊模板,並從一個有用的工作客戶端中獲取有用的工作負載。

PoUW任務基於PoUW SGX enclave(譯者注:Intel利用SGX技術在處理器中搭建了一個安全的圍圈以保護重要數據,該圍圈中間的區域就是SGX enclave,即內存中受保護的執行區域)及其輸入。對於任何一個兼容SGX的程序來說(類似於SCONE這樣的可以在SGX中運行容器的程序),通過運行REM工具鏈可以很容易地將其變成PoUW保護區域中的程序。該程序爲單線程運行(安全需要),並添加了一些代碼來檢測是否產生了有效的區塊。爲了實現這一點,工具鏈還會對程序進行設置,以便能夠準確地跟蹤已執行指令的數量。

2.jpeg

當PoUW任務完成的時候,SGX保護區域必須判斷該任務是否產生了有效的區塊。

PoUW保護區域會把每一條指令看成是伯努利試驗來隨機檢測作業是否產生了一個區塊。因此,採礦次數的分佈與PoW大致相同。例如,對於比特幣來說,需要度量已執行的散列,而對於REM來說,則是已執行的有用工作指令的數量。

要確定指令是否爲“贏家”,PoUW保護區域使用SGX隨機數生成器(SRNG)生成一個隨機數,並尋找一個小於當前難度等級約定的值。在每個指令之後執行這一過程所付出的代價會比較大,因此,所有的指令會被分成多個批次,形成一些子任務,然後運行一次隨機數生成器,尋找小於按照計數指令數加權的目標批次。使用指令計數,是因爲它們在保護區域之外不容易受控制。

指令計數的安全性依賴於一個假設,即一旦被檢測到,代碼就不能改變它的行爲。爲了在SGX實現這一假設,需要兩個“不變”。首先,代碼頁必須是不可寫的;第二,有用的工作程序必須是單線程的。

REM檢查保護區域代碼(usefulwork.so)中的代碼頁是否有W\oplus X權限 - 這可以直接在ELF程序的頭部進行驗證。確保單線程訪問是爲了防止多個線程通過共享狀態保存區域(SSA)篡改指令計數寄存器的值。爲了實現這一目的,在保護區域的接入點上使用了一個只允許第一個線程通過的自旋鎖。 REM還需要軟件故障隔離(SFI)的一個子集:間接控制傳輸對齊。這可以防止跳轉到指令中間來僞造指令計數。

我們的實現不包括SFI,因爲諸如Google的Native Client之類的現成的解決方案可以與PoUW工具鏈和運行時進行集成。

如果保護區域確定了區塊已被成功開採,那麼它會根據SGX生成的證明產生一個PoUW:一個用於確認保護區域符合REM,另一個則用於確認被開採的區塊的難度參數

區塊鏈代理將PoUW與區塊模板關聯起來,並將其發佈到網絡上。下一節將描述其他代理驗證區塊的過程。

安全模式

認證模型已被集成在英特爾認證服務(IAS)中:簽名密鑰只能分配給有效的CPU,而有效節點在查詢IAS時不應將其認證視爲無效。

REM使用認證作爲新區塊的證明,所以礦工需要訪問IAS來認證區塊。IAS目前的工作方式使得礦工在每次驗證時都要訪問IAS,這樣,在區塊驗證時間中增加了與英特爾服務器之間的往返時間。這種開銷並不是固有的,只是由英特爾的特定設計所決定的。

有一個簡單的修改方法,將正在驗證的請求作爲在響應中生成報告的一部分納入到IAS請求中(目前不存在)。這樣,每個新的區塊只需訪問IAS一次即可,並且其他驗證器可以很容易地檢查生成的簽名報告。

對於驗證器來說,如何知道在保護區域中運行的程序是否被正確檢測仍然是一個問題。將程序放在區塊中會導致高昂的開銷。而如果讓某個權威機構來驗證程序的合法性,則由於權力過於集中也是不可接受的。

爲了解決這個難題,我們使用了所謂的雙層認證機制。我們將單個程序的指紋硬編碼到區塊鏈中,這是一個稱爲合法檢查器的靜態分析工具。合法檢查器在受信任的環境中運行,並將用戶提供的程序作爲輸入…… 它計算程序的指紋並輸出包括該指紋的認證信息。

PoUW包括兩個部分:挖掘成功時候的有用工作程序認證,以及合法檢查員的認證。

3.jpeg

這兩者都必須由同一個CPU進行簽名,否則攻擊者可能會爲無效的任務創建虛假的認證。

受損的SGX節點

…… 即使我們認爲SGX芯片是以安全的方式製造出來的,但個別實例還是有可能會被敵手所破壞。單個受損節點可能對基於SGX的加密數字貨幣來說是災難性的,這使得敵手可以隨意創建區塊並對區塊鏈進行攻擊。

嗯,我們不希望發生這樣的事情!

爲了防止芯片受損,REM中包含了區塊接納策略p-stat.png,它是針對指令計數增加的額外測試。 p-stat.png是基於統計測試。根據對最快誠實礦工的速度估計,可以找出有效的PoUW,p-stat.png對區塊進行統計上的測試,以確定礦工是否採得太快並可能受到了損害。當然,對於知道p-stat.png的敵手來說,他們可以以最快的速度發佈區塊,並使之被接受。

4.jpeg

\alpha= 0.4時,浪費級別則爲0.6%,敵手優勢的上限爲100.6%。

將REM集成到比特幣共識層中

有一點很重要,REM是一個共識框架,是生成區塊的一種方法。 REM可以集成到一種加密數字貨幣中去,例如集成到比特幣共識層中。

REM使用四種樣本有用的工作負載進行評估:蛋白質摺疊、SVM分類器、zlib壓縮(迭代)和SHA3-256散列(迭代)。運行次數的比較如下所示(分別是本地代碼執行、基於SGX的執行、基於SGX在PoUW enclave中的執行):

5.jpeg

結果顯示,將有用的工作轉換爲REM PoUW enclave的開銷約爲5-15%。


圖片描述
2017年10月14日,SDCC 2017之大數據技術實戰線上峯會即將召開,邀請圈內頂尖的佈道師、技術專家和技術引領者,共話大數據平臺構建、優化提升大數據平臺的各項性能、Spark部署實踐、企業流平臺實踐、以及實現應用大數據支持業務創新發展等核心話題,七位大牛與你相聚狂歡,詳情查看所有嘉賓和議題,以及註冊參會,分享還可優惠30元。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章