智能合約是數(shù)字化強(qiáng)制執(zhí)行的協(xié)議,強(qiáng)制執(zhí)行不信任方之間的協(xié)議。通常在區(qū)塊鏈上強(qiáng)制執(zhí)行,它們通過(guò)強(qiáng)大的完整性保證來(lái)強(qiáng)制執(zhí)行信任:即使是智能合約的創(chuàng)建者也無(wú)法修改其代碼或破壞其執(zhí)行。已經(jīng)提出了智能合約來(lái)改善各行各業(yè)的應(yīng)用,包括金融,保險(xiǎn),身份管理和供應(yīng)鏈管理。
智能合約繼承了一些不受歡迎的區(qū)塊鏈屬性。為了在共識(shí)期間驗(yàn)證狀態(tài)轉(zhuǎn)換,區(qū)塊鏈數(shù)據(jù)是公開(kāi)的。結(jié)果,現(xiàn)有的智能合約系統(tǒng)缺乏機(jī)密性或隱私性:它們不能安全地存儲(chǔ)或計(jì)算敏感數(shù)據(jù)(例如,拍賣(mài)出價(jià),金融交易)。區(qū)塊鏈共識(shí)要求也妨礙了在計(jì)算能力,存儲(chǔ)容量和事務(wù)吞吐量方面表現(xiàn)不佳的智能合約。以太網(wǎng)是最受歡迎的分散式智能合約平臺(tái),目前幾乎專(zhuān)門(mén)用于技術(shù)簡(jiǎn)單的應(yīng)用程序(如令牌),并且可以比普通的云計(jì)算環(huán)境產(chǎn)生大量成本(8個(gè)數(shù)量級(jí))。簡(jiǎn)而言之,今天的智能合約的應(yīng)用程序復(fù)雜性非常有限。如果沒(méi)有關(guān)鍵績(jī)效和保密性改進(jìn),智能合約可能無(wú)法實(shí)現(xiàn)他們對(duì)變革的承諾。
研究人員已經(jīng)探索了加密解決方案來(lái)應(yīng)對(duì)這些挑戰(zhàn),例如各種零知識(shí)證明系統(tǒng)[44]和安全的多方計(jì)算[84]。但是,這些方法具有顯著的性能開(kāi)銷(xiāo),僅適用于計(jì)算相對(duì)簡(jiǎn)單的有限用例。更高的性能和一般選項(xiàng)是使用可信執(zhí)行環(huán)境(TEE)。
TEE提供了一個(gè)完全隔離的環(huán)境,可以防止其他軟件應(yīng)用程序,操作系統(tǒng)和主機(jī)所有者篡改甚至了解TEE中運(yùn)行的應(yīng)用程序的狀態(tài)。例如,Intel Software Guard eXtensions(SGX)提供了TEE的實(shí)現(xiàn)。 Keystone-emblave項(xiàng)目[7]旨在提供開(kāi)源TEE設(shè)計(jì)。
推動(dòng)我們系統(tǒng)設(shè)計(jì)的關(guān)鍵觀察是TEE和區(qū)塊鏈的互補(bǔ)性。一方面,區(qū)塊鏈保證了其狀態(tài)的強(qiáng)大可用性和持久性,而TEE無(wú)法保證可用性(因?yàn)橹鳈C(jī)可以自行決定終止TEE)并且無(wú)法可靠地訪問(wèn)網(wǎng)絡(luò)或持久存儲(chǔ)。另一方面,區(qū)塊鏈具有非常有限的計(jì)算能力,并且必須暴露其整個(gè)狀態(tài)以進(jìn)行通用認(rèn)證,而TEE與本機(jī)計(jì)算相比產(chǎn)生最小的開(kāi)銷(xiāo),并通過(guò)遠(yuǎn)程證明提供可驗(yàn)證的計(jì)算機(jī)密性。 。因此,構(gòu)建兼具兩者的混合協(xié)議似乎很有吸引力。
但是,協(xié)調(diào)TEE和區(qū)塊鏈?zhǔn)且豁?xiàng)挑戰(zhàn)。當(dāng)兩個(gè)人完全粘在一起時(shí)會(huì)發(fā)生微妙的陷阱。一個(gè)這樣的陷阱源于基本限制
TEE:惡意主機(jī)可以隨意操縱其調(diào)度和I / O.因此,TEE可能隨時(shí)終止,對(duì)丟失和/或沖突的國(guó)家構(gòu)成風(fēng)險(xiǎn)和挑戰(zhàn)。 TEE(特別是SGX)中所謂的可信定時(shí)器只能提供“不早于”時(shí)間概念,因?yàn)閻阂庵鳈C(jī)也可以延遲讀取時(shí)鐘,因此這個(gè)問(wèn)題更嚴(yán)重(通過(guò)總線傳輸?shù)南ⅲ?。因此,雖然很容易使用區(qū)塊鏈來(lái)檢查T(mén)EE的狀態(tài)(例如[43]),但缺乏可靠的計(jì)時(shí)器使得TEE難以確定區(qū)塊鏈的最新視圖。正如我們稍后將要展示的那樣,n??vestate-checkpointing協(xié)議打開(kāi)了倒帶攻擊(第III部分)。另一個(gè)有趣且危險(xiǎn)的后果是看似無(wú)關(guān)的攻擊向量起作用。例如,受區(qū)塊鏈的完整性攻擊可能會(huì)損害受TEE保護(hù)的內(nèi)容的機(jī)密性:例如,攻擊者可以通過(guò)提供偽造的區(qū)塊鏈來(lái)逃避其執(zhí)行并隨意向其發(fā)送許多查詢(xún)來(lái)逃避TEE強(qiáng)制執(zhí)行。隱私預(yù)算已實(shí)施。其他挑戰(zhàn)包括容忍受損的TEE,在TEE崩潰時(shí)支持強(qiáng)大且一致的故障轉(zhuǎn)移,以及飛地的密鑰管理。我們系統(tǒng)地識(shí)別并解決了本文中的每個(gè)陷阱。
遵循上述設(shè)計(jì)原則,我們提出了Ekiden,一種高性能和保密的智能合約系統(tǒng)。據(jù)我們所知,Ekiden是第一個(gè)可以每秒執(zhí)行數(shù)千筆交易的機(jī)密智能合約系統(tǒng)。這一成就的關(guān)鍵是區(qū)塊鏈和可信硬件的安全性和原則的結(jié)合。 Ekiden將任何必需的底層區(qū)塊鏈系統(tǒng)(允許或不允許)與基于TEE的執(zhí)行相結(jié)合。錨定在正式的安全模型中。
為了解決TEE的可用性和網(wǎng)絡(luò)安全限制,Ekiden支持合同狀態(tài)的鏈上檢查點(diǎn)和(可選)存儲(chǔ)。因此,Ekiden支持跨不同信任域的長(zhǎng)期智能合約之間的安全交互。為了解決潛在的TEE故障,例如側(cè)信道攻擊,我們建議采取緩解措施以保持完整性并限制數(shù)據(jù)泄漏(第III-A節(jié))。假設(shè)區(qū)塊鏈完整性,用戶不需要信任智能合約創(chuàng)建者,管理者,節(jié)點(diǎn)運(yùn)營(yíng)商或任何其他實(shí)體的活躍性,持久性,機(jī)密性或正確性。因此,Ekiden支持自我維持的服務(wù),可以比任何單個(gè)節(jié)點(diǎn),用戶或開(kāi)發(fā)工作更長(zhǎng)久
技術(shù)挑戰(zhàn)和貢獻(xiàn)。我們?cè)贓kiden的工作解決了幾個(gè)關(guān)鍵的技術(shù)挑戰(zhàn):
?正式的安全建模:雖然直觀清晰,但Ekiden所需的所需和可實(shí)現(xiàn)的安全屬性正式定義具有挑戰(zhàn)性。我們以理想的FEkiden功能表達(dá)了Ekiden的全方位安全要求。我們概述了Universal Composability(UC)框架中的安全證明,該框架顯示Ekiden協(xié)議在并發(fā)組合下匹配FEkiden。
?混合TEE-區(qū)塊鏈系統(tǒng)的原理方法:我們系統(tǒng)地列舉了融合區(qū)塊鏈和TEE所產(chǎn)生的基本缺陷,并提供了克服它們的一般技術(shù)。此外,我們表明,通過(guò)吸引加密理想功能,這些技術(shù)可以以原則性,可證明安全性和高性能的方式應(yīng)用,我們認(rèn)為可以推廣到廣泛的混合TEE-區(qū)塊鏈系統(tǒng)。
?性能:區(qū)塊鏈可能是TEE區(qū)塊鏈混合系統(tǒng)的性能瓶頸。我們提供優(yōu)化,最大限度地減少區(qū)塊鏈的使用而不降低安全性:我們表明他們實(shí)現(xiàn)了與未優(yōu)化協(xié)議相同的FEkiden功能。
評(píng)價(jià)。我們?cè)u(píng)估Ekiden在一系列應(yīng)用程序上的性能,這些應(yīng)用程序可以運(yùn)用全系列的系統(tǒng)資源,并演示Ekiden如何實(shí)現(xiàn)應(yīng)用程序部署,否則由于隱私和/或性能問(wèn)題而無(wú)法實(shí)現(xiàn)應(yīng)用程序部署。它們包括機(jī)器學(xué)習(xí)框架,我們?cè)谄渲袑?shí)施醫(yī)療診斷和信用評(píng)分應(yīng)用程序,智能建筑熱模型和撲克游戲。我們還將以太坊虛擬機(jī)實(shí)現(xiàn)移植到Ekiden,以便現(xiàn)有的合同(例如,用Solidity編寫(xiě)),例如Cryptokitties [1]和ERC20令牌,也可以在我們的框架中運(yùn)行。我們報(bào)告開(kāi)發(fā)工作,表明Ekiden中的編程模型有助于簡(jiǎn)單直觀的應(yīng)用程序開(kāi)發(fā)。在Ekiden流程交易中的合同比以太坊更快和更高的吞吐量2-3個(gè)數(shù)量級(jí)。我們的性能優(yōu)化還極大地壓縮了區(qū)塊鏈上存儲(chǔ)的數(shù)據(jù)量,比基線提高了2-4個(gè)數(shù)量級(jí)。 (對(duì)于具有大型州的合同,例如我們的令牌合同,讀寫(xiě)操作的優(yōu)勢(shì)更大。)
II。背景
a)智能合約和區(qū)塊鏈:基于區(qū)塊鏈的智能合約是由與計(jì)劃狀態(tài)達(dá)成一致的參與者網(wǎng)絡(luò)執(zhí)行的程序。現(xiàn)有的智能合約系統(tǒng)在系統(tǒng)中的所有節(jié)點(diǎn)上復(fù)制數(shù)據(jù)和計(jì)算。這樣單個(gè)節(jié)點(diǎn)就可以驗(yàn)證合同的正確執(zhí)行。提供所有節(jié)點(diǎn)上的完全復(fù)制
1我們的系統(tǒng)名稱(chēng)Ekiden指的是這個(gè)屬性。 “Ekiden”是日本長(zhǎng)距離接力跑比賽的術(shù)語(yǔ)。
高水平的容錯(cuò)能力和可用性。像以太坊[29]這樣的智能合約系統(tǒng)已經(jīng)證明了它們?cè)诟鞣N應(yīng)用中的實(shí)用性。
但是,一些關(guān)鍵的限制阻礙了當(dāng)前智能合約系統(tǒng)的更廣泛采用。首先,完全復(fù)制的智能合約的鏈?zhǔn)接?jì)算本質(zhì)上是昂貴的。例如,在2017年8月,在以太坊智能合約[29]中將兩個(gè)數(shù)字加在一起一百萬(wàn)次,花費(fèi)26.55美元,比AWS EC2高出約8個(gè)數(shù)量級(jí)[69]。此外,目前的系統(tǒng)不提供隱私保障。用戶通過(guò)假名識(shí)別。正如許多研究表明[67],[56],[59],[68],假名僅提供弱隱私保護(hù)。此外,合同狀態(tài)和用戶輸入必須是公開(kāi)的,以便礦工驗(yàn)證正確的計(jì)算。缺乏隱私從根本上限制了智能合約的應(yīng)用范圍。
b)具有證明的可信硬件:Ekiden的關(guān)鍵構(gòu)建塊是可信執(zhí)行環(huán)境(TEE),其保護(hù)計(jì)算的機(jī)密性和完整性,并且可以發(fā)布證明(稱(chēng)為證明)計(jì)算正確性的證明。 Ekiden采用英特爾SGX [9],[36],[55],一種特定的TEE技術(shù),但我們強(qiáng)調(diào)它可以使用任何具有證明能力的TEE,例如正在進(jìn)行的努力Keystone-emblave [7]旨在實(shí)現(xiàn)開(kāi)源安全硬件飛地。我們現(xiàn)在提供關(guān)于TEE的簡(jiǎn)要背景,重點(diǎn)是英特爾SGX。
英特爾SGX提供基于CPU的TEE實(shí)現(xiàn) - 在SGX中稱(chēng)為飛地 - 用于通用計(jì)算。主機(jī)可以實(shí)例化多個(gè)TEE,這些TEE不僅彼此隔離,而且還與主機(jī)隔離。在TEE內(nèi)運(yùn)行的代碼具有受保護(hù)的地址空間。當(dāng)來(lái)自TEE的數(shù)據(jù)從處理器移動(dòng)到存儲(chǔ)器時(shí),它使用僅供處理器使用的密鑰進(jìn)行透明加密。因此,操作系統(tǒng),管理程序和其他用戶無(wú)法訪問(wèn)飛地的內(nèi)存。 SGX內(nèi)存加密引擎還可以保證數(shù)據(jù)完整性并防止內(nèi)存重放攻擊[34]。英特爾SGX支持證明執(zhí)行,即,它能夠通過(guò)發(fā)出遠(yuǎn)程證明,數(shù)字簽名,使用只有硬件知道的私鑰,通過(guò)程序和執(zhí)行輸出來(lái)證明程序的正確執(zhí)行。遠(yuǎn)程證明還允許遠(yuǎn)程用戶為飛地建立加密和認(rèn)證的通道[9]。假設(shè)對(duì)硬件的信任以及驗(yàn)證證明密鑰的英特爾,除了SGX平臺(tái)之外的任何實(shí)體都不可能生成任何證明,即證明是存在性的不可偽造的。
但是,由可信硬件實(shí)現(xiàn)的證明執(zhí)行并不完美。例如,僅SGX無(wú)法保證可用性。惡意主機(jī)可以任意終止包圍區(qū)或丟棄消息。即使是誠(chéng)實(shí)的主人也可能在發(fā)生電力循環(huán)時(shí)意外失去飛地。新交所的弱勢(shì)可用性對(duì)Ekiden的設(shè)計(jì)提出了根本性的挑戰(zhàn)。此外,最近對(duì)英特爾SGX的攻擊表明,當(dāng)前的實(shí)施通常會(huì)通過(guò)旁道泄漏信息[80],[63]。 Ekiden與現(xiàn)有的防御相兼容[17],[61],[51],[78],[66]。我們討論方面
第III-A節(jié)中的通道電阻。
III。 TEE-BLOCKCHAIN的技術(shù)挑戰(zhàn)
混合系統(tǒng)
在深入研究Ekiden的具體細(xì)節(jié)之前,我們首先描述并解決在協(xié)調(diào)TEE和區(qū)塊鏈時(shí)出現(xiàn)的基本陷阱。這些解決方案是Ekiden協(xié)議的構(gòu)建模塊,我們相信從Ekiden獲得的見(jiàn)解將證明在混合TEE區(qū)塊鏈系統(tǒng)中具有廣泛的重要性。
A.容忍TEE失敗
雖然設(shè)計(jì)用于執(zhí)行通用程序,但可靠的硬件并不是萬(wàn)能的。在這里,我們分析TEE的限制及其對(duì)TEE-區(qū)塊鏈混合協(xié)議的影響。
a)可用性故障:通常,可信硬件無(wú)法確??捎眯?。在SGX的情況下,惡意主機(jī)可以終止飛地,即使是誠(chéng)實(shí)的主機(jī)也可能在電源循環(huán)中失去飛地。 TEE-區(qū)塊鏈系統(tǒng)必須能夠容忍此類(lèi)主機(jī)故障,確保崩潰的TEE最多可以延遲執(zhí)行。
我們的高級(jí)方法是將TEE視為可消耗且可互換的,依靠區(qū)塊鏈來(lái)解決由并發(fā)引起的任何沖突。為了確保任何特定的TEE易于替換,TEE是無(wú)狀態(tài)的,并且區(qū)塊鏈存儲(chǔ)任何持久狀態(tài)。我們稍后將討論TEE如何在調(diào)用中保持軟狀態(tài)作為性能優(yōu)化,但我們強(qiáng)調(diào)Ekiden中的技術(shù)確保在任何時(shí)候丟失此類(lèi)狀態(tài)都不會(huì)影響安全性。
b)側(cè)面渠道:盡管TEE旨在保護(hù)機(jī)密性,但最近的工作已經(jīng)通過(guò)旁道攻擊發(fā)現(xiàn)了數(shù)據(jù)泄漏?,F(xiàn)有防御通常是應(yīng)用程序和攻擊特定的(例如,加密庫(kù)避免某些依賴(lài)于數(shù)據(jù)的操作[17]);推廣這種保護(hù)仍然具有挑戰(zhàn)性。因此,Ekiden在很大程度上推遲了對(duì)應(yīng)用程序開(kāi)發(fā)人員的保護(hù)。
盡管對(duì)于所有側(cè)通道攻擊可能沒(méi)有明確和實(shí)用的靈丹妙藥,但仍然希望限制受損TEE的影響并在面臨小規(guī)模妥協(xié)時(shí)提供優(yōu)雅降級(jí)。我們的方法是在空間和時(shí)間上劃分區(qū)域。我們?cè)贓kiden中設(shè)計(jì)了關(guān)鍵組件,例如密鑰管理器,針對(duì)強(qiáng)大的對(duì)抗模型,允許攻擊者打破一小部分TEE的機(jī)密性,并限制從其他組件訪問(wèn)密鑰管理器。我們還采用主動(dòng)鍵旋轉(zhuǎn)[35]來(lái)限制泄漏密鑰的范圍。密鑰管理是TEE區(qū)塊鏈系統(tǒng)可用性的基礎(chǔ),如下所述。
c)定時(shí)器故障:TEE通常缺少可信時(shí)間源。在SGX的情況下,雖然可信的相對(duì)定時(shí)器可用,但是安全區(qū)和定時(shí)器之間的通信(由CPU外組件提供)可以被OS延遲[41],[40]。此外,服務(wù)器級(jí)Intel CPU在撰寫(xiě)本文時(shí)不支持SGX計(jì)時(shí)器。因此,TEE-區(qū)塊鏈混合協(xié)議必須最小化對(duì)TEE計(jì)時(shí)器的依賴(lài)。
我們的方法是設(shè)計(jì)不需要TEE來(lái)獲得區(qū)塊鏈的當(dāng)前視圖的協(xié)議。具體而言,我們的技術(shù)不依賴(lài)于TEE來(lái)區(qū)分陳舊狀態(tài)和當(dāng)前狀態(tài)(沒(méi)有同步時(shí)鐘,也沒(méi)有對(duì)網(wǎng)絡(luò)對(duì)手延遲來(lái)自區(qū)塊鏈的消息的明確對(duì)策),我們的技術(shù)依賴(lài)于區(qū)塊鏈來(lái)主動(dòng)拒絕任何基于a的更新。陳舊的輸入狀態(tài)(更新中包含其散列)。
丟失的計(jì)時(shí)器也使得TEE難以驗(yàn)證區(qū)塊鏈中是否存在項(xiàng)目,即建立“發(fā)布證明”,如[43]所述。然而,[43]沒(méi)有考慮TEE中缺乏可靠時(shí)間所造成的威脅 - 例如,注入舊的,虛假的,易于控制的塊 - 這在基于PoW的區(qū)塊鏈中是至關(guān)重要的。我們的一個(gè)貢獻(xiàn)是一個(gè)基于時(shí)間的通用發(fā)布證明協(xié)議,它可以防止網(wǎng)絡(luò)對(duì)手延遲時(shí)鐘讀取,正如我們現(xiàn)在簡(jiǎn)要解釋的那樣。
B. PoW區(qū)塊鏈的出版證明
為了利用區(qū)塊鏈作為持久存儲(chǔ),TEE必須能夠有效地驗(yàn)證項(xiàng)目是否已存儲(chǔ)在區(qū)塊鏈中。對(duì)于許可的區(qū)塊鏈,這種證明可以包含來(lái)自法定數(shù)量的共識(shí)節(jié)點(diǎn)的簽名。為了建立基于PoW的區(qū)塊鏈的發(fā)布證明,TEE必須能夠驗(yàn)證新的塊。如[23]所述,需要一個(gè)可靠的計(jì)時(shí)器來(lái)防御隔離飛地并呈現(xiàn)無(wú)效子鏈的對(duì)手。不幸的是,如上所述,通過(guò)安全信道(例如SGX定時(shí)器)的定時(shí)源不能保證有限的響應(yīng)時(shí)間。為了解決這個(gè)限制,我們利用TEE的機(jī)密性,以便攻擊者延遲計(jì)時(shí)器的響應(yīng)不能阻止飛地成功驗(yàn)證區(qū)塊鏈內(nèi)容。我們的解決方案甚至可以在沒(méi)有SGX定時(shí)器的情況下工作,例如,啟用TLS的NTP服務(wù)器。由于空間不足,我們將PoW區(qū)塊鏈的出版物證明協(xié)議下放到第XI節(jié)。
C. TEE中的密鑰管理
使用區(qū)塊鏈來(lái)保持TEE狀態(tài)的一個(gè)基本限制是缺乏機(jī)密性。我們之前通過(guò)在上傳到區(qū)塊鏈之前要求對(duì)狀態(tài)進(jìn)行加密來(lái)展示如何避免此問(wèn)題。然而,這會(huì)導(dǎo)致另一個(gè)問(wèn)題:如何持久加密密鑰?
通常,該方法是跨多個(gè)TEE復(fù)制密鑰。然而,另一方面是在面對(duì)機(jī)密性破壞時(shí)(例如通過(guò)旁道攻擊)最小化關(guān)鍵的泄漏風(fēng)險(xiǎn)的挑戰(zhàn)。暴露風(fēng)險(xiǎn)和可用性之間通常存在基本的緊張關(guān)系:更高的復(fù)制因子不僅意味著更好地恢復(fù)狀態(tài)損失,而且意味著更大的攻擊面。因此,權(quán)衡和可實(shí)現(xiàn)的屬性將取決于威脅模型。
由于可能沒(méi)有確定且實(shí)用的全系統(tǒng)側(cè)通道緩解,我們的方法是針對(duì)更強(qiáng)大的對(duì)抗模型設(shè)計(jì)密鑰管理器,允許攻擊者破壞一小部分TEE的機(jī)密性,并限制訪問(wèn)權(quán)限。其他組件。我們?cè)诘赩-C節(jié)中概述了密鑰管理協(xié)議。
D.執(zhí)行結(jié)果的原子交付
在區(qū)塊鏈系統(tǒng)中,確保執(zhí)行的原子性,即執(zhí)行e1,e2完成或不執(zhí)行任何執(zhí)行,都是一個(gè)基本問(wèn)題,例如原子交叉鏈互換[14]。在TEE-區(qū)塊鏈雜交中出現(xiàn)類(lèi)似但更復(fù)雜的問(wèn)題。
對(duì)于一般的有狀態(tài)TEE區(qū)塊鏈協(xié)議,TEE執(zhí)行產(chǎn)生兩條消息:m1,它將輸出傳遞給調(diào)用者; m2,它通過(guò)對(duì)抗通道將狀態(tài)更新傳遞給區(qū)塊鏈。我們強(qiáng)調(diào),強(qiáng)制執(zhí)行兩條消息的原子傳遞至關(guān)重要,即m1和m2都已傳送或系統(tǒng)永久不可用。當(dāng)呼叫者收到m1時(shí),將傳送m1。新區(qū)域m2一旦被區(qū)塊鏈接受即可交付。拒絕狀態(tài)更新不被視為已交付。
a)沒(méi)有原子傳遞的攻擊:要查看原子傳遞的必要性,考慮可能的攻擊,當(dāng)它被違反時(shí),即只傳遞兩個(gè)消息中的一個(gè)。
首先,如果只傳送輸出m1,則可以進(jìn)行倒帶攻擊。由于TEE無(wú)法判斷輸入狀態(tài)是否為新鮮,因此攻擊者可以提供陳舊狀態(tài)以從舊狀態(tài)恢復(fù)TEE的執(zhí)行。這可以對(duì)隨機(jī)TEE程序進(jìn)行磨削攻擊。攻擊者可能會(huì)反復(fù)回放,直到收到所需的輸出。另一個(gè)例子是倒帶可能會(huì)破壞基于預(yù)算的隱私保護(hù),例如差異隱私。
另一方面,如果僅傳遞狀態(tài)更新m2,則用戶可能會(huì)永久性地丟失輸出,因?yàn)榭赡軣o(wú)法以更新的狀態(tài)再現(xiàn)相同的輸出。
b)協(xié)議:假設(shè)TEE和呼叫客戶端P之間的安全通信信道(實(shí)際上可以用遠(yuǎn)程證明構(gòu)建),我們通過(guò)以下兩階段協(xié)議實(shí)現(xiàn)m1和m2(上面定義)的原子傳遞:為了啟動(dòng)原子傳遞,TEE從密鑰管理器獲得新的密鑰k,并通過(guò)安全信道向P發(fā)送證明的mc1 = Enc(k,m1)。一旦P確認(rèn)收到mc1,TEE就會(huì)向區(qū)塊鏈發(fā)送m2。最后,在看到m2的出版證明πm2后,TEE將k發(fā)送給P.
上述協(xié)議實(shí)現(xiàn)了原子傳遞。一方面,由于TEE可以通過(guò)驗(yàn)證πm2來(lái)確定m2的傳遞,因此僅在傳遞m2時(shí)才顯示k。另一方面,如果已經(jīng)交付m2,則最終將釋放k,因?yàn)橹辽儆幸粋€(gè)TEE可用且密鑰管理協(xié)議確保k的可用性。
IV。 EKIDEN概述
在本節(jié)中,我們概述了Ekiden的設(shè)計(jì)和安全屬性。

圖1:Ekiden架構(gòu)和工作流程概述??蛻舳讼虮C艿闹悄芎霞s發(fā)送輸入,這些合同在任何計(jì)算節(jié)點(diǎn)的TEE內(nèi)執(zhí)行。區(qū)塊鏈存儲(chǔ)加密的合同狀態(tài)。有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn)第IV-B節(jié)。
A.動(dòng)機(jī)
作為激勵(lì)我們工作的一個(gè)例子,考慮一個(gè)信用評(píng)分應(yīng)用程序 - 我們?cè)诘赩I-A節(jié)中實(shí)現(xiàn)和報(bào)告的一個(gè)例子。貸款人,保險(xiǎn)公司和其他人廣泛使用信用評(píng)分來(lái)評(píng)估消費(fèi)者的信譽(yù)[8]。盡管收入可觀(2017年為108億美元[38]),但美國(guó)的信用報(bào)告行業(yè)集中在少數(shù)信用局[38]。這種集中化造成了巨大的單點(diǎn)故障和其他問(wèn)題,最近的數(shù)據(jù)泄露事件突顯了影響近一半的美國(guó)人口[16]。
因此,基于區(qū)塊鏈的分散信用評(píng)分是一種有吸引力且受歡迎的替代方案。例如,Bloom [48]是一家在以太坊上提供信用評(píng)分系統(tǒng)的創(chuàng)業(yè)公司。然而,他們的方案僅支持靜態(tài)信用評(píng)分算法,該算法省略了重要的私人數(shù)據(jù),不能支持預(yù)測(cè)建模。這些應(yīng)用程序受到當(dāng)前智能合約系統(tǒng)的兩個(gè)關(guān)鍵限制的困擾:(1)缺乏保護(hù)敏感消費(fèi)者記錄所需的數(shù)據(jù)機(jī)密性(例如,信用評(píng)分的貸款服務(wù)歷史)以及從中獲取的專(zhuān)有預(yù)測(cè)模型和(2)無(wú)法實(shí)現(xiàn)處理全局工作負(fù)載所需的高性能。
為了支持信用評(píng)分等大規(guī)模,隱私敏感的應(yīng)用程序,必須滿足這兩個(gè)要求,同時(shí)保留區(qū)塊鏈提供的完整性和可用性 - 所有這些都不需要受信任的第三方。 Ekiden提供了一個(gè)機(jī)密,值得信賴(lài)且高性能的平臺(tái),可以實(shí)現(xiàn)智能合約執(zhí)行的精確目標(biāo)。
B. Ekiden概述
從概念上講,Ekiden為豐富的用戶定義的智能合約實(shí)現(xiàn)了安全的執(zhí)行環(huán)境。 Ekiden合同是一種確定性的有狀態(tài)計(jì)劃。在不失一般性的情況下,我們假設(shè)合同程序采用以下形式(outp,stnew):= Contract(stprev,inp),作為輸入攝取先前的狀態(tài)stprev和客戶端的輸入inp,并生成輸出outp和新?tīng)顟B(tài)stnew。
一旦部署在Ekiden上,智能合約就具有很強(qiáng)的機(jī)密性,完整性和可用性保證。 Ekiden通過(guò)結(jié)合可信硬件和區(qū)塊鏈的混合架構(gòu)實(shí)現(xiàn)了這些特性。
圖1描繪了Ekiden的架構(gòu)和Ekiden智能合約的工作流程。如圖所示,Ekiden中有三種類(lèi)型的實(shí)體:客戶端,計(jì)算節(jié)點(diǎn)和共識(shí)節(jié)點(diǎn)。
?客戶是智能合約的最終用戶。在Ekiden,一個(gè)客戶可以使用秘密輸入創(chuàng)建合同或執(zhí)行現(xiàn)有合同。在任何一種情況下,客戶端都將計(jì)算委托給計(jì)算節(jié)點(diǎn)(下面討論)。我們希望客戶端輕量級(jí),允許移動(dòng)和Web應(yīng)用程序與合同進(jìn)行交互。
?計(jì)算節(jié)點(diǎn)實(shí)例化多個(gè)TEE以運(yùn)行合同程序。他們還實(shí)例化了一項(xiàng)名為T(mén)EE中密鑰管理的服務(wù)。計(jì)算節(jié)點(diǎn)通過(guò)在合同TEE中運(yùn)行合同并生成證明狀態(tài)更新正確性的證明來(lái)處理來(lái)自客戶端的請(qǐng)求。具有支持TEE的平臺(tái)的任何人都可以作為計(jì)算節(jié)點(diǎn)參與,從而有助于系統(tǒng)的活躍性和可擴(kuò)展性。計(jì)算節(jié)點(diǎn)還對(duì)密鑰管理器中的合同執(zhí)行密鑰管理。根據(jù)合同TEE的要求,密鑰管理器TEE根據(jù)需要?jiǎng)?chuàng)建或檢索現(xiàn)有密鑰。我們將密鑰管理的細(xì)節(jié)推遲到第V-C節(jié)。密鑰管理器TEE通過(guò)區(qū)塊鏈同步其狀態(tài)。
?共識(shí)節(jié)點(diǎn)通過(guò)運(yùn)行共識(shí)協(xié)議來(lái)維護(hù)分布式僅附加分類(lèi)帳,即區(qū)塊鏈。合同狀態(tài)和證明持續(xù)存在于此區(qū)塊鏈中。共識(shí)節(jié)點(diǎn)負(fù)責(zé)使用TEE證明檢查狀態(tài)更新的有效性,如下所述。
a)工作流程:我們現(xiàn)在概述合同創(chuàng)建和請(qǐng)求執(zhí)行工作流程,提供有關(guān)圖1的更多詳細(xì)信息。詳細(xì)的正式協(xié)議在第V-B節(jié)中介紹。
為簡(jiǎn)單起見(jiàn),我們假設(shè)客戶端具有要使用的計(jì)算節(jié)點(diǎn)的優(yōu)先級(jí)列表。在第XIII節(jié)中,我們描述了一個(gè)促進(jìn)計(jì)算節(jié)點(diǎn)發(fā)現(xiàn)和負(fù)載平衡的協(xié)調(diào)器。我們將客戶端表示為P,將計(jì)算節(jié)點(diǎn)表示Comp。
b)合同創(chuàng)建:在創(chuàng)建合同時(shí),P發(fā)送一份合同代碼Contract給Comp。Comp壓縮負(fù)載合同進(jìn)入TEE(此后稱(chēng)為合同TEE),并開(kāi)始初始化。合同TEE創(chuàng)建一個(gè)新的合同id cid,從密鑰管理TEE中獲得新的(pkin_cid,skin_cid)對(duì)和kstate_cid并生成加密的初始狀態(tài)Enc(kstate_cid,0->)和證明σ_TEE,證明初始化的正確性,pkin_cid是合同cid的相應(yīng)公鑰。最后,Comp獲得了σ_TEE正確性的證明通過(guò)聯(lián)系證明服務(wù)(詳見(jiàn)下文);這個(gè)證明和σTEE捆綁在“認(rèn)證”證明π中。然后Comp將(Contract,pkin,Enc(kstate_cid,0->),π)發(fā)送給共識(shí)節(jié)點(diǎn)。合同創(chuàng)建的完整協(xié)議在Prot_Ekiden的“create”調(diào)用中指定(圖2)。共識(shí)節(jié)點(diǎn)在接受Contract之前驗(yàn)證π,加密的初始狀態(tài)和pkin_cid為有效并將其放置在區(qū)塊鏈上。
c)請(qǐng)求執(zhí)行:圖1所示的請(qǐng)求執(zhí)行步驟如下:
(1)要啟動(dòng)使用輸入inp執(zhí)行合同cid的過(guò)程,P首先從區(qū)塊鏈獲得與合同cid相關(guān)聯(lián)的pk^in_cid,計(jì)算inp_ct = Enc(pk^in_cid,inp)并向Comp發(fā)送消息(cid,inp_ct),如Prot_Ekiden的第8-11行。
(2)每個(gè)合同還與秘密狀態(tài)密鑰k^state_cid相關(guān)聯(lián)并只合同和密鑰管理知悉。當(dāng)執(zhí)行一個(gè)合同時(shí),Comp從區(qū)塊鏈中檢索合同代碼和st_ct:= Enc(k^state_cid,st_prev),加密的先前合同cid狀態(tài),并將st_ct和inp_ct加載到TEE中并開(kāi)始執(zhí)行,如第30行所述-33 of Prot_Ekiden。
(3-4)從密鑰管理TEE,合同TEE獲得kstate_cid和skin_cid,用于解密st_ct和inp并執(zhí)行,生成輸出outp,新的加密狀態(tài)st'_ct:= Enc(k^state_cid,st_new),以及簽名π,證明正確的計(jì)算,如第7-13行所述。 TEE Wrapper(圖9)。密鑰管理在第V-C節(jié)中討論。
(5a, 5b)最后,Comp和P進(jìn)行原子遞送協(xié)議,該協(xié)議將outp遞送到P和(st'ct,π)到共識(shí)節(jié)點(diǎn)。我們將原子傳遞的細(xì)節(jié)推遲到第III-D部分。簡(jiǎn)而言之,圖1中的步驟5a和步驟5b以原子方式執(zhí)行,即,當(dāng)且僅當(dāng)(st'_ct,π)被共識(shí)節(jié)點(diǎn)接受時(shí),outp才被顯示給P。共識(shí)節(jié)點(diǎn)在接受新?tīng)顟B(tài)為有效并將其置于區(qū)塊鏈之前驗(yàn)證π。
d)并發(fā):Ekiden計(jì)算節(jié)點(diǎn)同時(shí)接收輸入并生成狀態(tài)更新。因此,競(jìng)爭(zhēng)條件是可能的,但是由共識(shí)層處理。如果兩個(gè)計(jì)算節(jié)點(diǎn)同時(shí)更新相同的狀態(tài),則共識(shí)層只接受一個(gè)。被拒絕的計(jì)算節(jié)點(diǎn)將通知客戶端重試。
e)將共識(shí)與計(jì)算分離:與以太坊相反,其中合同執(zhí)行由區(qū)塊鏈中的所有節(jié)點(diǎn)復(fù)制以達(dá)成共識(shí),Ekiden將共識(shí)與合同執(zhí)行分離。對(duì)于每個(gè)客戶端請(qǐng)求,合約僅需要由K個(gè)計(jì)算節(jié)點(diǎn)針對(duì)一些小K(安全性參數(shù))執(zhí)行(例如,在圖1中,我們?cè)O(shè)置K = 1,這在實(shí)踐中可能是合理的選擇)。
對(duì)于合同執(zhí)行的細(xì)節(jié)不可知,共識(shí)節(jié)點(diǎn)只需要驗(yàn)證由TEE生成的π。在我們的實(shí)現(xiàn)中,Comp從英特爾證明服務(wù)(IAS)獲得π[39]。由于SGX證明是一個(gè)組簽名,因此作為組管理的IAS可以促進(jìn)其驗(yàn)證。為了驗(yàn)證證明σ_TEE的正確性,Comp首先將σ_TEE發(fā)送給IAS,IAS回復(fù)“認(rèn)證”證明π:=(b,σ_TEE,σ_IAS),其中b∈{0,1}表示σ_TEE和σ_IAS的有效性是IAS在b和σTEE上的簽名。由于π只是一個(gè)簽名,共識(shí)節(jié)點(diǎn)既不需要可信硬件也不需要聯(lián)系IAS來(lái)驗(yàn)證它。
C. Ekiden安全目標(biāo)
在這里,我們總結(jié)了Ekiden的安全目標(biāo)。簡(jiǎn)而言之,Ekiden旨在支持執(zhí)行通用合同,同時(shí)強(qiáng)制執(zhí)行以下安全屬性:
a)正確執(zhí)行:合同狀態(tài)轉(zhuǎn)換反映了在給定狀態(tài)和輸入上正確執(zhí)行合同代碼。
b)一致性:區(qū)塊鏈在任何時(shí)候都存儲(chǔ)與每個(gè)計(jì)算節(jié)點(diǎn)的視圖一致的單個(gè)狀態(tài)轉(zhuǎn)換序列。
c)保密:在沒(méi)有任何TEE違規(guī)的期間,Ekiden保證合同狀態(tài)和誠(chéng)實(shí)客戶的輸入對(duì)所有其他方保密。此外,Ekiden可以抵御一些被破壞的密鑰管理TEE。
d)優(yōu)雅的機(jī)密性降級(jí):如果在計(jì)算節(jié)點(diǎn)(與密鑰管理器節(jié)點(diǎn)相對(duì))中發(fā)生機(jī)密性破壞,Ekiden提供前向保密和與受影響的TEE的合理隔離。具體來(lái)說(shuō),假設(shè)在t處發(fā)生機(jī)密性泄露。攻擊者最多可以訪問(wèn)歷史直到t-Δ,其中Δ是系統(tǒng)參數(shù)。此外,受損的TEE只能影響合同的子集。
非目標(biāo):Ekiden不會(huì)阻止合同級(jí)泄漏(例如通過(guò)隱蔽通道,錯(cuò)誤或側(cè)通道)。因此,合同開(kāi)發(fā)商有責(zé)任確保通過(guò)公共產(chǎn)出不泄露任何秘密,并且合同沒(méi)有錯(cuò)誤和副渠道。我們將在第V-E節(jié)討論支持的緩解措施。
D.假設(shè)和威脅模型
a)TEE:最近的工作表明,SGX飛地的機(jī)密性可能會(huì)受到旁道攻擊的影響。鑒于這種威脅,我們假設(shè)對(duì)手可能會(huì)損害一小部分TEE的機(jī)密性。如上所述,影響取決于違規(guī)是否會(huì)影響密鑰管理器或計(jì)算節(jié)點(diǎn)。我們假設(shè)TEE硬件以其他方式正確實(shí)施和安全制造。
b)區(qū)塊鏈:Ekiden旨在與基礎(chǔ)共識(shí)協(xié)議無(wú)關(guān)。只要滿足下面指定的要求,它就可以部署在任何區(qū)塊鏈實(shí)現(xiàn)之上。
我們假設(shè)區(qū)塊鏈將正確執(zhí)行規(guī)定的計(jì)算并始終可用。特別是,Ekiden依靠共識(shí)節(jié)點(diǎn)來(lái)驗(yàn)證證明。我們進(jìn)一步假設(shè)區(qū)塊鏈提供了一種有效的方法來(lái)構(gòu)建區(qū)塊鏈上的項(xiàng)目包含證明,即公開(kāi)證明,如第III-B節(jié)所述。
c)威脅模型:系統(tǒng)中的所有各方都必須信任Ekiden和TEE。我們假設(shè)攻擊者可以控制除一個(gè)計(jì)算節(jié)點(diǎn)之外的所有操作系統(tǒng)和網(wǎng)絡(luò)堆棧。在受控節(jié)點(diǎn)上,攻擊者可以對(duì)消息進(jìn)行重新排序并任意調(diào)度進(jìn)程。我們假設(shè)攻擊者可能會(huì)損害一小部分(例如f%)TEE的機(jī)密性。攻擊者可以觀察全球網(wǎng)絡(luò)流量,并可以任意重新排序和延遲消息。
對(duì)手可能會(huì)破壞任意數(shù)量的客戶。客戶端不需要自己執(zhí)行合同,也不需要可信硬件。我們假設(shè)誠(chéng)實(shí)的客戶信任他們自己的代碼和平臺(tái),但不信任其他客戶。每份合同都有明確的政策,規(guī)定如何處理數(shù)據(jù)和處理請(qǐng)求。 Ekiden沒(méi)有(并且不能合理地)阻止合同通過(guò)軟件錯(cuò)誤有意或無(wú)意地泄露秘密。
V.協(xié)議細(xì)節(jié)和安全證明
在本節(jié)中,我們指定了Prot_Ekiden,即Ekiden的協(xié)議實(shí)現(xiàn)。它旨在實(shí)現(xiàn)通用可組合性(UC)[20]理想功能FEkiden,我們因缺乏空間而推遲到X部分,并鼓勵(lì)讀者進(jìn)行咨詢(xún)。在第十二節(jié)中,我們證明Prot_Ekiden UC實(shí)現(xiàn)了FEkiden。
A.符號(hào)和初步
a)證明執(zhí)行:為了在可信硬件上正式模擬證明的執(zhí)行,我們采用了[65]中定義的理想功能Gatt。非正式地,一方首先將程序prog加載到具有“安裝”消息的TEE中。在“恢復(fù)”調(diào)用中,程序在給定輸入上運(yùn)行,生成輸出outp以及證明σTEE=ΣTEE.Sig(skTEE,(prog,outp)),硬件密鑰skTEE下的簽名。公鑰pkTEE可以從Gatt.getpk()獲得。有關(guān)詳細(xì)信息,請(qǐng)參見(jiàn)[65]。
實(shí)際上,允許TEE輸出未包含在證明中的數(shù)據(jù)是有用的。我們稍微擴(kuò)展Gatt以允許這樣:如果TEE程序prog產(chǎn)生一對(duì)輸出(outp1,outp2),證明只簽署outp1,即σTEE=ΣTEE.Sig(skTEE,(prog,outp1))。常見(jiàn)的模式是在outp1中包含outp2的散列,以允許各方分別驗(yàn)證σTEE和outp2。在[81]中使用了類(lèi)似的技術(shù)。
按照[44],[78]中的表示法,我們使用契約包裝(在圖9中定義)抽象出常規(guī)功能,例如狀態(tài)加密,密鑰管理等。用包裝器增加的合約c表示為^c。
b)區(qū)塊鏈:Fblockchain [succ](在X節(jié)中給出)定義了一個(gè)由通用區(qū)塊鏈協(xié)議實(shí)現(xiàn)的通用附加分類(lèi)賬(在附錄中的圖8中正式定義)。參數(shù)succ是一個(gè)函數(shù),它指定要添加到存儲(chǔ)的新項(xiàng)的條件,對(duì)事務(wù)有效性的概念進(jìn)行建模。我們保留區(qū)塊鏈的僅附加屬性,但是抽象地在塊中包含狀態(tài)更新。我們假設(shè)將區(qū)塊鏈數(shù)據(jù)與id相關(guān)聯(lián)的重疊語(yǔ)義。除了讀取和寫(xiě)入接口之外,F(xiàn)blockchain還提供了一個(gè)方便的界面,客戶可以通過(guò)該界面確定區(qū)塊鏈中是否包含某個(gè)項(xiàng)目。實(shí)際上,該接口避免了下載整個(gè)區(qū)塊鏈的開(kāi)銷(xiāo)。
c)參數(shù)化Fblockchain:在Ekiden中,存儲(chǔ)的內(nèi)容被解析為狀態(tài)轉(zhuǎn)換的有序數(shù)組,定義為trans_i =(H(st_i-1),st_i,σ_i),前一狀態(tài)的散列的元組,新的狀態(tài),以及來(lái)自TEE的證明,證明了狀態(tài)轉(zhuǎn)型的正確性。 (請(qǐng)注意,作為一種性能優(yōu)化,大型用戶輸入 - 例如ML合同中的訓(xùn)練數(shù)據(jù) - 可能不會(huì)存儲(chǔ)在鏈上。)存儲(chǔ)可以被解釋為一個(gè)特殊的初始狀態(tài),后面跟著一系列狀態(tài)轉(zhuǎn)換:存儲(chǔ)=( (合約,st_0,σ_0),{trans_i}i≥1)。
要使?fàn)顟B(tài)轉(zhuǎn)換有效,它必須擴(kuò)展最新?tīng)顟B(tài),并且證明必須驗(yàn)證。形式上,這是通過(guò)使用后繼函數(shù)succ(·,·)參數(shù)化Fblockchain來(lái)實(shí)現(xiàn)的,這樣succ(存儲(chǔ),(h,st_new,σ_TEE))=真當(dāng)且僅當(dāng)h = H(st_prev)其中st_prev是存儲(chǔ)中的最近狀態(tài)和ΣTEE.Vf(pk_TEE,σ_TEE,(h,st_new))。這保證了在任何時(shí)候都存在與每一方的視圖一致的單個(gè)狀態(tài)轉(zhuǎn)換序列,即狀態(tài)轉(zhuǎn)換鏈?zhǔn)菬o(wú)分叉的。
B.議定書(shū)的正式規(guī)范
Ekiden協(xié)議在ProtEkiden中正式指定(圖2)。 ProtEkiden依賴(lài)于Gatt和Fblockchain,這是證明執(zhí)行和區(qū)塊鏈的理想功能。 ProtEkiden還使用數(shù)字簽名方案Σ(KGen,Sig,Vf),對(duì)稱(chēng)加密方案SE(KGen,Enc,Dec)和非對(duì)稱(chēng)加密方案AE(KGen,Enc,Dec)。
a)共享狀態(tài)密鑰:每個(gè)合同都與一組密鑰相關(guān)聯(lián)。如第V-C節(jié)所述,合同TEE將密鑰管理委托給密鑰管理器TEE。在ProtEkiden中,使用keyManager函數(shù)抽象出與密鑰管理器的通信。
b)合同創(chuàng)建:為了在Ekiden中創(chuàng)建合同,客戶端Pi使用輸入合同(一段合同代碼)調(diào)用計(jì)算節(jié)點(diǎn)Comp的create子程序。Comp
將Contract加載到TEE并開(kāi)始初始化,調(diào)用“create”函數(shù)。如圖9所示,合同TEE創(chuàng)造一個(gè)新的合同cid,獲得新的(pkin_cid,skin_cid)對(duì)和kstate_cid來(lái)自密鑰管理器并生成一個(gè)加密的初始狀態(tài)st_0和證明σ_TEE。證據(jù)證明了st被正確初始化并且pkin_cid是合同cid的相應(yīng)公鑰。計(jì)算節(jié)點(diǎn)Comp向F_blockchain發(fā)送(Contract,cid,st_0,pk^in_cid,σ_TEE)等待收據(jù)。 Comp將合同cid返回給Pi,后者將驗(yàn)證合同cid是否正確存儲(chǔ)在F_blockchain上。
c)請(qǐng)求執(zhí)行:執(zhí)行合約請(qǐng)求cid,客戶端Pi首先從F_blockchain獲得輸入加密密鑰pk^in_cid。然后Pi調(diào)用Comp的請(qǐng)求子程序
輸入(cid,inp_ct),其中inp_ct是Pi被pk^in_cid加密的輸入并能被spk_i認(rèn)證。 Comp獲取加密的前狀態(tài)st_ct來(lái)自Fblockchain并加載合約^TEE以及合約代碼和輸入(cid,inp_ct,st_ct)。
如圖9所示,如果σ_Pi驗(yàn)證,則合約TEE用從密鑰管理器獲得的密鑰解密st_ct和inp_ct,并執(zhí)行合約程序Contract以獲得(st_new,outp)。為確保新?tīng)顟B(tài)和輸出以原子方式傳遞,Comp和Pi進(jìn)行原子傳遞定義如同第III-D節(jié)中規(guī)定的協(xié)議:
?首先,合同TEE計(jì)算outp = Enc(k^out_cid,outp)和st'ct = Enc(kstate,stnew),并發(fā)送兩個(gè)和適當(dāng)?shù)淖C明經(jīng)由epki建立的安全通道給Pi。
?Pi通過(guò)調(diào)用Comp的聲明輸出子程序來(lái)確認(rèn)接收,觸發(fā)合同TEE將m1 =(st'_ct,outp_ct,σ)發(fā)送到Fblockchain。 σ保護(hù)m1的完整性,并以加密方式將新?tīng)顟B(tài)和輸出綁定到先前的狀態(tài)和輸入,因此惡意Comp不能篡改它。
?一旦F_blockchain接受了m1,合同TEE就會(huì)在安全通道中將outpct的解密發(fā)送給Pi。
C.密鑰管理
每個(gè)Ekiden合約都與一組密鑰相關(guān)聯(lián),包括用于狀態(tài)加密的對(duì)稱(chēng)密鑰和用于加密客戶端輸入的密鑰對(duì)。這里我們討論這些key的生成,分發(fā)和流轉(zhuǎn)。
1)對(duì)抗模型:我們認(rèn)為對(duì)手可以打破TEE的某些部分(例如f%)的機(jī)密性,例如通過(guò)旁道攻擊。 f的確切值取決于部署和注冊(cè)模型。如果注冊(cè)僅限于管理良好的節(jié)點(diǎn),例如由有能力且聲譽(yù)良好的組織托管的節(jié)點(diǎn),則f可以是非常低的值。但是當(dāng)部署在更開(kāi)放的環(huán)境中時(shí),f需要相當(dāng)高。我們假設(shè)參與的主機(jī)具有(至少部分)Sybil抗性身份。實(shí)現(xiàn)此目的的一種方法是要求安全存款加入?yún)f(xié)議。
此外,我們假設(shè)任何時(shí)候有足夠多(例如超過(guò)2f%)的參與者在線,以便保留密鑰的可用性。在實(shí)踐中,參與可以通過(guò)經(jīng)濟(jì)獎(jiǎng)勵(lì)和懲罰來(lái)激勵(lì)。我們將激勵(lì)設(shè)計(jì)留給未來(lái)的工作。
2)期望的屬性:由于解密密鑰最終顯示給合約TEE,因此TEE本身也回受到損害,主動(dòng)使用的密鑰(即熱鍵)必須是短期的,從較少暴露的長(zhǎng)期主密鑰中獲得。理想情況下,密鑰管理協(xié)議應(yīng)滿足以下屬性:
?機(jī)密性:對(duì)手(在我們的模型中)不能泄露長(zhǎng)期主密鑰。
?可用性:誠(chéng)實(shí)合約TEE始終可以訪問(wèn)解密密鑰。
?前向保密:如果短時(shí)密鑰在時(shí)間t受到損害,則對(duì)于某些系統(tǒng)參數(shù)Δ,它不能用于解密在t-Δ之前加密的消息。
3)構(gòu)建塊:下面我們概述了滿足上述要求的密鑰管理協(xié)議。我們首先簡(jiǎn)要回顧一下構(gòu)建模塊,包括分布式密鑰生成(DKG)協(xié)議和分布式偽隨機(jī)函數(shù)(PRF)。
a)分布式密鑰生成(DKG):DKG協(xié)議(例如[32])允許一組N方生成無(wú)偏的隨機(jī)密鑰。 DKG協(xié)議的運(yùn)行結(jié)果是一個(gè)秘密,但是使用秘密共享方案(通常是Shamir)的各方共享。
b)分布式PRF:非正式地,PRF是函數(shù)F = {f_s}s∈S的集合,使得對(duì)于隨機(jī)索引s←$ S,f_s(·)與隨機(jī)函數(shù)無(wú)法區(qū)分。Naor等人[60]引入分布式PRF,這樣,擁有s的份額的各方可以在不重建s的情況下評(píng)估fs(·)。具體來(lái)說(shuō),讓G為Schnorr組,g為生成元。設(shè)H:{0,1} →G為散列函數(shù),[60]表示fs(x)= H(x)s是PRF族。
假設(shè)使用(k,n)-secret在各方之間共享s分享模式。為了評(píng)估fs(x),i方簡(jiǎn)單地計(jì)算并輸出yi = H(x)^s_i,用其共享s_i計(jì)算。在收集至少k + 1的{yi}之后,可以通過(guò)指數(shù)中的多項(xiàng)式插值得出fs(x):
fs(x)= H(x)^S = H(x)^E_i∈A-S_iλ_i=yλii---TODO 公式
i∈A其中λi是拉格朗日系數(shù)λi=??-j。---TODO 公式
4)協(xié)議書(shū):
a)主要管理委員會(huì)和長(zhǎng)期關(guān)鍵:
假設(shè)Sybil抗性身份,我們可以從參與者中抽取N個(gè)節(jié)點(diǎn),形成一個(gè)密鑰管理委員會(huì)(KMC)。 N是系統(tǒng)參數(shù)。在初始化合同c時(shí),KMC運(yùn)行DKG協(xié)議以生成長(zhǎng)期密鑰kc,以便使用(?fN?,N) - 秘密共享方案在KMC成員之間秘密共享kc。先前關(guān)于主動(dòng)秘密共享的工作(例如[35],[71])可用于定期輪換委員會(huì)而不改變秘密。 [71]也允許委員會(huì)動(dòng)態(tài)擴(kuò)展。
b)生成短期密鑰:假設(shè)短期密鑰每個(gè)時(shí)代都到期。獲得合同的短期關(guān)鍵在時(shí)間t,計(jì)算節(jié)點(diǎn)Comp首先建立安全通道并與KMC中的成員進(jìn)行身份驗(yàn)證。一旦驗(yàn)證Comp確實(shí)正在執(zhí)行c,每個(gè)KMC成員i計(jì)算k_c,t,i = H(t)(ki_c)并將kc,t,i發(fā)送給Comp。后
收集來(lái)自A?KMC的f + 1結(jié)果,Comp 能用kc構(gòu)造周期t的短期密鑰,t =??kλii∈Ac,t,i(---TODO 公式)其中λi是拉格朗日系數(shù)。
c)違反隔離:我們主動(dòng)隔離機(jī)密通過(guò)為每個(gè)計(jì)算節(jié)點(diǎn)強(qiáng)制執(zhí)行隱私預(yù)算。為此,我們假設(shè)合同TEE具有不可偽造的主機(jī)標(biāo)識(shí)(例如,SGX中的可鏈接EPID公鑰提供了一個(gè))。密鑰管理器節(jié)點(diǎn)為每個(gè)計(jì)算節(jié)點(diǎn)Comp維護(hù)計(jì)數(shù)器K_Comp以記錄查詢(xún)的數(shù)量。計(jì)數(shù)器隨著周期的推進(jìn)而重置。僅當(dāng)某些系統(tǒng)參數(shù)κ的K_Comp<κ時(shí),密鑰管理器節(jié)點(diǎn)才滿足查詢(xún)。有了這個(gè),無(wú)論被破壞的計(jì)算節(jié)點(diǎn)產(chǎn)生多少TEE,它最多都可以獲得κ個(gè)密鑰。實(shí)際上,對(duì)耗盡的誠(chéng)實(shí)計(jì)算節(jié)點(diǎn)的請(qǐng)求可以重定向到其他節(jié)點(diǎn),從而僅產(chǎn)生適度的開(kāi)銷(xiāo)。
D. Prot_Ekiden的安全性
定理1描述了ProtEkiden的安全性。證明草圖在第XII節(jié)中給出。
定理1(ProtEkiden的安全性)。假設(shè)Gatt的證明方案ΣTEE和數(shù)字簽名Σ在選擇的消息攻擊(EU-CMA)下是存在不可偽造的,H是第二個(gè)前映像抗性,并且AE和SE是IND-CPA安全的。然后ProtEkiden在(Gatt,F(xiàn)blockchain) - 混合模型中安全地實(shí)現(xiàn)了FEkiden,用于靜態(tài)對(duì)手。
E.減輕應(yīng)用程序級(jí)別的泄漏
雖然Ekiden保護(hù)TEE內(nèi)部數(shù)據(jù),但它并非旨在保護(hù)合同接口處的數(shù)據(jù),即合同設(shè)計(jì)導(dǎo)致的數(shù)據(jù)泄漏。 (例如,可以通過(guò)客戶端查詢(xún)“提取”秘密預(yù)測(cè)模型[77]。)最小化此類(lèi)泄漏的常用方法,例如,基于請(qǐng)求者身份或差異隱私預(yù)算來(lái)限制請(qǐng)求[27],[42] ,需要持久性計(jì)數(shù)器。SGX的單調(diào)計(jì)數(shù)器是不值得信賴(lài)的[53]。
Ekiden通過(guò)啟用持久應(yīng)用狀態(tài)(例如計(jì)數(shù)器,總消耗的差異隱私預(yù)算等)來(lái)支持有狀態(tài)的方法來(lái)緩解應(yīng)用程序級(jí)別的隱私泄漏,從而在鏈上安全地維護(hù)。此外,上述原子傳遞保證確保僅在正確更新此狀態(tài)時(shí)才顯示輸出。
F.性能優(yōu)化
給定一個(gè)額外的撤銷(xiāo)機(jī)制,一個(gè)簡(jiǎn)單的修改就消除了對(duì)IAS的依賴(lài),而不是初始化。初始化時(shí),安全區(qū)會(huì)創(chuàng)建簽名密鑰(pk,sk),并輸出帶有證明的pk。隨后,證據(jù)被替換為sk下的簽名。由于pk綁定到TEE代碼(通過(guò)初始證明),sk下的簽名證明了輸出的完整性,就像證明一樣。與其他鍵一樣,(pk,sk)由密鑰管理器管理(參見(jiàn)章節(jié)V-C)。
在第XIII節(jié)中,我們討論了協(xié)議的擴(kuò)展版本以及其他幾個(gè)性能優(yōu)化。
X. 補(bǔ)充體系
A.理想的功能Fekiden
a)理想功能:我們?cè)趫D7中定義了理想功能Fekiden的安全目標(biāo),F(xiàn)ekiden允許各方創(chuàng)造合約并與他們交互。
每一方Pi被一個(gè)唯一的id定義,簡(jiǎn)單的以Pi表示。各方通過(guò)驗(yàn)證通道發(fā)送消息。從加密數(shù)據(jù)中捕捉泄露的允許信息,我們遵從【20】的約定并參數(shù)化Fekiden使用一個(gè)泄露函數(shù)l(·)。我們使用標(biāo)準(zhǔn)延遲輸出術(shù)語(yǔ)【20】來(lái)建模網(wǎng)絡(luò)對(duì)手的力量。特別是,當(dāng)Fekiden發(fā)送一個(gè)延遲輸出到P,這意味著輸出首先被發(fā)送到的對(duì)手方A并經(jīng)其確認(rèn)后轉(zhuǎn)發(fā)給P。如果消息是秘密的,只有容許的數(shù)量的泄露顯示給S。
一個(gè)合約時(shí)一個(gè)用戶提供的程序,比如智能合約。每一個(gè)合約都關(guān)聯(lián)一塊存在的存儲(chǔ)存放合約代碼和st。存儲(chǔ)是公開(kāi)的,F(xiàn)ekiden允許任何一方,包括A,讀取存儲(chǔ)內(nèi)容。信息泄露通過(guò)這種讀取方式仍然被泄露函數(shù)l定義。
用戶能發(fā)送請(qǐng)求到Fekiden來(lái)執(zhí)行合約代碼,使用用戶提供的數(shù)據(jù)。合約的執(zhí)行將得到秘密的輸出(outp)返回給調(diào)用者,同時(shí)一個(gè)秘密的轉(zhuǎn)變到一個(gè)新的合約狀態(tài)(st'),直觀地等同于一個(gè)黑盒合約執(zhí)行(模漏)。盡管任意一方可以發(fā)送消息到合約,合同代碼可以根據(jù)傳遞給合同的調(diào)用假名強(qiáng)制執(zhí)行訪問(wèn)控制。
b)會(huì)話ID(SID):在UC【20】中,每個(gè)功能實(shí)例和唯一的會(huì)話ID(SID)關(guān)聯(lián)。SID對(duì)于組合定理至關(guān)重要,因?yàn)樗_保并發(fā)的協(xié)議實(shí)例彼此分離。為了減少混亂,我們?cè)贔ekiden中忽略了SIDs的處理。
c)威脅模型:Fekiden采用標(biāo)準(zhǔn)的威脅模型【20】。A可以破壞任意數(shù)量的客戶端,最多只能破壞一個(gè)合同執(zhí)行者。當(dāng)A破壞一個(gè)TEE(或者類(lèi)似于一方),A發(fā)送消息(“corrput”,eid)到Fekiden。如果一個(gè)請(qǐng)求包含一個(gè)非法的TEEid,F(xiàn)ekiden拋出錯(cuò)誤如果它是A構(gòu)建的話。否則,這完美的功能忽略eids,后者被包含在Fekiden中僅作為一個(gè)技術(shù)需要用來(lái)確保接與Portekiden兼容,在下文中給出來(lái)。
d)正式安全和隱私保證:Fekiden封裝了如下安全和隱私屬性。首先,查詢(xún)執(zhí)行正確反映合約創(chuàng)建者提供的代碼,第二,輸出和新?tīng)顟B(tài)被原子分離的,舉例來(lái)說(shuō),輸出僅在新轉(zhuǎn)臺(tái)提交的時(shí)候才會(huì)被顯示出來(lái)。我們?cè)诘谌?jié)D中討論了這個(gè)屬性的實(shí)現(xiàn)。
Fekiden提供隱私性的意義在意無(wú)論其他方或者對(duì)手方學(xué)習(xí)誠(chéng)實(shí)方的秘密輸入會(huì)比允許泄露的l更多。一個(gè)客服端與合約互動(dòng),不會(huì)學(xué)習(xí)到超過(guò)它的輸入和輸出。合約狀態(tài)對(duì)于所有方都是保密的,A包括,除非故意通過(guò)輸出來(lái)顯示。然后,合約代碼是公開(kāi)顯示的,所以用戶可以檢查它在使用之前。我們將支持隱私合約代碼的工作留到未來(lái)(比如使用一個(gè)類(lèi)似的技術(shù)【72】)。
B.完美區(qū)塊鏈
在圖8中
C.合約TEE包裝
在圖9中
XI.出版證明
發(fā)表協(xié)議的證明(圖10)包含了一個(gè)驗(yàn)證者E,以合約TEE的形式,和一個(gè)非置信的證明者P。高級(jí)的想法是僅僅給予P一個(gè)有限時(shí)間去發(fā)布block中的消息在一個(gè)足夠難度的子鏈中,因此一個(gè)對(duì)手方不能可行的偽造它。
E存儲(chǔ)了一個(gè)近期的區(qū)塊鏈中的檢查點(diǎn)區(qū)塊CB,來(lái)自于某一個(gè)難度的δ(CB),比如,在區(qū)塊nonce中左邊的零,可以被計(jì)算。E將發(fā)出一個(gè)(可證明的)CB版本給任意請(qǐng)求的客戶端讓其去驗(yàn)證CB的新鮮。給予一個(gè)合法的近期CB,E能驗(yàn)證新區(qū)塊基于δ(CB),假設(shè)那個(gè)難度是相對(duì)固定的。(為了簡(jiǎn)化我們的分析,我們假設(shè)一直存在難度,但我們的分析可以在有限難度變化的假設(shè)下得到擴(kuò)展。)
去初始化m的出版,E調(diào)用定時(shí)器獲得一個(gè)時(shí)間戳t1。正如討論中的,E會(huì)在一哥延時(shí)之后收到t1。收到t1之后(可能比t1更晚),E產(chǎn)生了一個(gè)隨機(jī)nonce r并需要一個(gè)證明者去發(fā)布(m,r)。根據(jù)從P,E接收到的一個(gè)證明π(m,r)(一個(gè)自戀包含(m,r))再次調(diào)用計(jì)時(shí)器獲得t2。
設(shè)nc為(m,r)中的確認(rèn)次數(shù),τ是預(yù)期的塊間隔(區(qū)塊鏈的不變量),ε是乘法松弛因子,它考慮生成塊的時(shí)間的變化,這是一個(gè)隨機(jī)過(guò)程。例如,ε= 1.5意味著允許π(m,r)的產(chǎn)生比主鏈上的預(yù)期慢1.5倍。只有當(dāng)t2 -t1 <nc×τ×ε時(shí),E才接受π(m,r)。上述協(xié)議在圖10中規(guī)定。
將ε設(shè)置為高值會(huì)降低錯(cuò)誤拒絕的可能性(即,在主鏈增長(zhǎng)在某個(gè)時(shí)間范圍內(nèi)非常緩慢時(shí)拒絕來(lái)自誠(chéng)實(shí)P的證據(jù))。然而,高ε也增加了錯(cuò)誤接受的可能性,即接受偽造的子鏈。對(duì)于任何ε> 1,可能需要足夠大的nc,以便成功攻擊的概率可以忽略不計(jì)。然而,大的nc意味著誠(chéng)實(shí)的P需要等待很長(zhǎng)時(shí)間才能獲得輸出,這會(huì)影響Ekiden的用戶體驗(yàn)。
對(duì)于控制區(qū)塊鏈網(wǎng)絡(luò)總挖掘功率的p分?jǐn)?shù)的攻擊者,我們?cè)诒鞩中提供了nc和ε的示例性具體參數(shù)。例如,對(duì)于具有25%散列功率的強(qiáng)大攻擊者(大致是已知存在的最大挖掘池)在撰寫(xiě)本文時(shí),在比特幣和以太坊中),設(shè)置nc = 80和ε= 1.6意味著攻擊者需要預(yù)期的2112哈希來(lái)偽造出版證明^ 3,而誠(chéng)實(shí)的證據(jù)將以2-19的概率被拒絕。在最近提出的基于Tesseract TEE的加密貨幣交換[14]中使用了類(lèi)似的塊同步技術(shù)和分析。
很容易看出,延遲計(jì)時(shí)器的響應(yīng)不會(huì)給攻擊者提供比t2-t1更多的時(shí)間。延遲時(shí)間戳t1縮短了這個(gè)明顯的時(shí)間間隔,使攻擊者處于不利地位。通過(guò)發(fā)布空消息,可以使用相同的協(xié)議更新E的檢查點(diǎn)塊。請(qǐng)注意,一旦TEE成功發(fā)布消息,其他TEE可以通過(guò)證明建立的安全通道獲取證明,從而節(jié)省重復(fù)協(xié)議的成本。
XIII.主要原理的證明
這里我們給出原理1的證明,在V節(jié)中給出。
我們證明了Prot_Ekiden [λ,AE,SE,Σ,{Pi}i∈[N]] UC-實(shí)現(xiàn)了關(guān)于泄漏函數(shù)l(x)的理想函數(shù)FEkiden[λ,l,{Pi}]揭示x的長(zhǎng)度,即l(x)= 0 ^| x |。在協(xié)議中,l(·)是用IND-CPA加密方案實(shí)現(xiàn)的。
證明。讓Z成為一個(gè)環(huán)境而A是一個(gè)“虛擬對(duì)手”[20],他只是簡(jiǎn)單地在Z和各方之間傳遞信息。為了表明ProtEkiden UC-實(shí)現(xiàn)FEkiden,我們?cè)谙旅嬷付ㄒ粋€(gè)模擬器Sim,這樣沒(méi)有環(huán)境可以區(qū)分ProtEkiden和A之間的交互與FEkiden和Sim的交互,即Sim滿足
?Z,EXECProtEkiden,A,Z≈EXECFEkiden,Sim,Z。
a)Sim:Sim的構(gòu)建通常如下:如果一個(gè)誠(chéng)實(shí)的一方向FEkiden發(fā)送消息,則Sim使用從FEkiden獲得的信息模擬Z的適當(dāng)?shù)恼鎸?shí)世界“網(wǎng)絡(luò)流量”。如果被腐敗的一方向FEkiden發(fā)送消息,Sim將在FEkiden的幫助下提取輸入并與損壞的一方進(jìn)行交互。我們提供有關(guān)特定消息處理的更多詳細(xì)信息。
(1)合約創(chuàng)建:
如果Pi是誠(chéng)實(shí)的,Sim從Fekiden獲得(Pi,cid,Contract) 同時(shí)模仿一個(gè)執(zhí)行Port_Ekiden的“create”調(diào)用。
如果Pi是腐敗的,Sim從Z中提取合約。為了Pi,Sim發(fā)送(“create”,Contract)給Fekiden并通知Fekiden去交付輸出。
在這兩種情況下,Sim都代表對(duì)手或誠(chéng)實(shí)的各方模擬Blockchain和Gatt之間的互動(dòng)。
(2)查詢(xún)執(zhí)行:
case 1:當(dāng)一個(gè)誠(chéng)實(shí)方Pi被Z給予input("request", cid, inp, eid),Sim工作如下:
根據(jù)從Fekiden收到的(cid, Pi, l(inp)),Sim查詢(xún)Fekiden的“read”接口來(lái)獲取cid的虛擬狀態(tài)(i.e. 一個(gè)隨機(jī)字符串與真實(shí)狀態(tài)的長(zhǎng)度一致),表示為s。Sim計(jì)算c_inp = Enc(pk^in_cid,->0)使用長(zhǎng)度了l(inp),并代表Pi用輸入(“request”,cid,cinp,s)模擬Gatt的“resume”消息。
根據(jù)從Fekiden收到lst'和l(outp),Sim計(jì)算c=(kout_cid,0|outp|)并代表Pi向Gatt仿真一個(gè)消息((“atom-deliver”, H(c_inp ), H(s), lst′ , H(c), spk_i ), σTEE , c)。
Sim通過(guò)模擬Fblockchain和Gatt之間的交互以及從Gatt到Pi的消息(“output”, Enc(epk_i , 0^|outp| ), σTEE )來(lái)進(jìn)行。
最后,Sim通過(guò)發(fā)送“ok”消息指示FEkiden。
case 2:當(dāng)一個(gè)損壞的派對(duì)Pi被Z給出輸入(“request”,cid,inp,eid)時(shí),Sim在Sim工作時(shí)學(xué)習(xí)輸入如下:
?如果Pi向Fblockchain發(fā)送(“read”,cid),則Sim從FEkiden獲取最新?tīng)顟B(tài)(表示為s),并代表Fblockchain將s發(fā)送給Pi。
?如果Pi通過(guò)輸入(“request”,cid,inpct,s)向Gatt發(fā)送“resume”消息,則Sim模擬Gatt,如下所示:Sim查詢(xún)FEkiden檢查s是否不是最新?tīng)顟B(tài),Sim中止。 Sim計(jì)算inp'= Dec(skin,inp)。然后Sim'cidct代表Pi向FEkiden發(fā)送(“請(qǐng)求”,cid,inp,eid)。
?從FEkiden收到lst'ct和l(outp)后,Sim計(jì)算c = Enc(kout,0 | outp |)并發(fā)送cid((“atom-deliver”,H(inpct),H(s),lst' ct,H(c)),σTEE,c)從Gatt到Pi。Sim記錄c。
?如果Pi通過(guò)輸入(“聲明輸出”,cid,(st'ct,outpct,σ,epki))向Gatt發(fā)送“恢復(fù)”消息,則Sim模擬Gatt,如下所示:Sim首先檢查Gatt先前已發(fā)送輸出到Pi和那個(gè)(st'ct,σ)已由Fblockchain存儲(chǔ)。如果上述任何檢查失敗,則Sim將中止。 Sim從FEkiden獲得outp并將(“輸出”,Enc(epki,outp),σ)發(fā)送到Pi。
(3)公開(kāi)讀取:在Pi的任何調(diào)用(“read”,cid)上,Sim模擬向Fblockchain發(fā)送的“讀取”消息。如果Pi被破壞,Sim代表Pi向FEkiden發(fā)送“讀取”消息并將響應(yīng)轉(zhuǎn)發(fā)給A.
(4)腐敗的飛地:
當(dāng)Z腐蝕它們時(shí),Sim獲得損壞的飛地的eids。在現(xiàn)實(shí)世界中,Z可以在任何時(shí)候終止腐敗的飛地,或者可以策略性地丟棄一些消息,同時(shí)允許其他人通過(guò)。為了忠實(shí)地模仿Z的“傷害”,Sim將每個(gè)留下或進(jìn)入破壞的飛地的消息發(fā)送給Z,并且只有在Z允許的情況下才發(fā)送消息。如果模擬執(zhí)行過(guò)早地被Z終止,則Sim指示FEkiden中止。具體地,在從FEkiden接收(cid,l(st'),l(outp),eid)時(shí),只有當(dāng)Z允許來(lái)自Gatt的相應(yīng)“輸出”消息時(shí),Sim才回答“ok”。
b)Sim的有效性:我們表明,沒(méi)有環(huán)境可以通過(guò)混合參數(shù)區(qū)分與A和ProtEkiden的交互與Sim和FEkiden的交互??紤]一系列混合,從真正的協(xié)議執(zhí)行開(kāi)始。
Hybrid H1讓Sim模仿Gatt和Fblockchain。 H2過(guò)濾掉針對(duì)ΣTEE的偽造攻擊。 H3過(guò)濾掉針對(duì)哈希函數(shù)的第二次前映像攻擊。 H4讓Sim模擬創(chuàng)建階段。 H5用加密0替換輸入和輸出的加密,并用具有相同長(zhǎng)度的隨機(jī)字符串替換狀態(tài)加密。相鄰雜種之間的必要性如下所示。
除了Sim模擬Gatt和Fblockchain之外,Hybrid H1在現(xiàn)實(shí)世界協(xié)議中繼續(xù)進(jìn)行。特別是Sim為ΣTEE生成密鑰對(duì)(pkTEE,skTEE)并發(fā)布pkTEE。每當(dāng)A想要與Gatt通信時(shí),Sim會(huì)記錄A的消息并忠實(shí)地模仿G Sim通過(guò)在內(nèi)部存儲(chǔ)項(xiàng)目來(lái)模擬Fblockchain。
由于A中的A視圖在現(xiàn)實(shí)世界中被完美模擬,因此Z無(wú)法區(qū)分H1和實(shí)際執(zhí)行。
除了以下修改之外,混合H2在H1中繼續(xù)進(jìn)行。如果A使用正確的消息調(diào)用Gatt,則合同和σTEE是skTEE下的證明。設(shè)Ω表示所有這些元組的集合。每當(dāng)A向Fblockchain或一個(gè)誠(chéng)實(shí)的派對(duì)Pi發(fā)送一個(gè)證明輸出(outp,σTEE)?∈Ω時(shí),Sim就會(huì)中止。
H1和H2之間的不可區(qū)分性可以通過(guò)以下對(duì)Σ的EU-CMA屬性的減少來(lái)顯示:在H1中,如果A向Fblockchain或Pi發(fā)送偽造證明,F(xiàn)blockchain或誠(chéng)實(shí)方Pi的簽名驗(yàn)證將失敗,除了概率可以忽略不計(jì)。如果Z可以區(qū)分H2和H1,Z和A可以用來(lái)贏得簽名偽造的游戲。
除了以下修改之外,雜合H3與H2相同。如果A使用正確的“請(qǐng)求”消息調(diào)用Gatt,則Sim在輸出之前記錄執(zhí)行結(jié)果outpct。每當(dāng)A向Gatt發(fā)送“聲明輸出”消息時(shí),輸入輸出以前不是由Gatt生成的,Sim就會(huì)中止。
H3和H2之間的不可區(qū)分性可以通過(guò)降低散列函數(shù)的第二前映像電阻特性來(lái)顯示。在H2中,A通過(guò)“請(qǐng)求”調(diào)用從Gatt獲得H =??H(outpict)??和??i??iO = outpct i。如果A發(fā)送具有outpct?∈O的“聲明輸出”消息,則Gatt中止,除非H(outpct)∈H。如果Z可以將H3與H2區(qū)分開(kāi),則遵循A可以打破第二前映像抵抗性。
混合H4與H3相同,但Sim模仿合同創(chuàng)建,即誠(chéng)實(shí)的派對(duì)將向FEkiden發(fā)送“創(chuàng)建”。 Sim如上所述模擬來(lái)自Gatt和Fblockchain的消息。如果Pi被破壞,Sim將(“創(chuàng)建”,合同)作為Pi發(fā)送給FEkiden。
很明顯,A的視圖分布與H3完全一樣,因?yàn)镾im可以完美地模擬Gatt和Fblockchain。
混合H5與H4相同,只是誠(chéng)實(shí)的各方也向FEkiden發(fā)送“請(qǐng)求”消息。如果Pi被破壞,Sim將在FEkiden的幫助下模擬真實(shí)世界的消息,如上所述。
在A的觀點(diǎn)中,H5和H4之間的差異如下。
?任何消息(“atom-deliver”,hinp,hprev,s,houtp,c)從Gatt發(fā)送到Pi,其中s = SE .Enc(kstate,st')和c = SE .Enc(kout,outp))in H4被替換為(“原子傳遞”,hinp,hprev,lst'ct,H(c'),c'),其中c'= Enc(kout,0 | c |)?;叵胍幌耹'是一個(gè)長(zhǎng)度為| st'ct |的隨機(jī)字符串在產(chǎn)生狀態(tài)時(shí)由FEkiden選擇。
H5和H4之間的不區(qū)分可以是直接的
降低到AE和SE的IND-CPA屬性。在不知道密鑰的情況下,A無(wú)法區(qū)分->0的加密和其他消息的加密。請(qǐng)注意,我們不需要IND-CCA安全性,因?yàn)锳無(wú)法直接訪問(wèn)解密oracle。
仍然需要觀察H5與理想方案相同。在整個(gè)模擬過(guò)程中,我們保持以下不變量:FEkiden始終擁有最新?tīng)顟B(tài),無(wú)論誰(shuí)創(chuàng)建合同以及誰(shuí)查詢(xún)了合同。這種不變性確保H5精確地反映了FEkiden的理想執(zhí)行。
XIII. Ekiden性能擴(kuò)展
在本節(jié)中,我們將討論對(duì)簡(jiǎn)單協(xié)議的幾種性能優(yōu)化。這些優(yōu)化共同減少了區(qū)塊鏈所需的往返次數(shù)和存儲(chǔ)容量,并減少了計(jì)算節(jié)點(diǎn)的工作量。正如我們?cè)诘赩II節(jié)中所展示的那樣,影響是顯著的,對(duì)于寫(xiě)入繁重的工作負(fù)載來(lái)說(shuō),效果要高出200%。盡管性能有所提高,但所有優(yōu)化對(duì)安全接口都是透明的:我們對(duì)簡(jiǎn)單和擴(kuò)展協(xié)議使用相同的理想功能。我們提出了一個(gè)正式的協(xié)議塊,用于定義圖11中的增強(qiáng)協(xié)議Protfull.Ekiden目前,我們提供了對(duì)每個(gè)應(yīng)用程序所涉及的洞察力和挑戰(zhàn)的高級(jí)描述。
a)使用預(yù)寫(xiě)日志:在原始協(xié)議中,在每次查詢(xún)后將整個(gè)加密狀態(tài)stct寫(xiě)入?yún)^(qū)塊鏈。整個(gè)狀態(tài)需要重新加密,因?yàn)樾薷母弊饔貌粦?yīng)泄露給對(duì)手的信息。但是,當(dāng)每個(gè)st非常大但每個(gè)查詢(xún)只修改一小部分時(shí),這種方法效率很低。例如,在我們的令牌應(yīng)用程序中,我們?yōu)榫哂?00,000個(gè)不同用戶帳戶的令牌建模,即使每個(gè)事務(wù)僅扣除一個(gè)帳戶并相互抵消。
我們的第一個(gè)觀察是使用預(yù)寫(xiě)日志可以減少這筆費(fèi)用。我們修改協(xié)議,以便只將狀態(tài)的“差異”Δstct寫(xiě)入?yún)^(qū)塊鏈。為了確定當(dāng)前狀態(tài),包圍區(qū)必須從初始狀態(tài)開(kāi)始解析整個(gè)diff序列,并應(yīng)用每個(gè)補(bǔ)丁。在令牌應(yīng)用程序中,每個(gè)事務(wù)觸及恒定數(shù)量的記錄,因此,如果存在M個(gè)用戶,則與簡(jiǎn)單協(xié)議中的O(MT)相比,T事務(wù)需要O(M + T)存儲(chǔ)復(fù)雜度。
diffΔstct的加密可能泄漏有關(guān)調(diào)用哪個(gè)查詢(xún)的信息。令牌應(yīng)用程序具有常量時(shí)間查詢(xún),但在一般應(yīng)用程序中,可能需要綁定查詢(xún)的大小并填充密文。最后,我們注意到理想的功能FEkiden由泄漏函數(shù)l參數(shù)化,因此符號(hào)用于模擬由未填充查詢(xún)產(chǎn)生的效果泄漏。
b)在飛地中緩存中間狀態(tài):在簡(jiǎn)單協(xié)議中,每一輪開(kāi)始從區(qū)塊鏈中讀取狀態(tài)密文,然后從區(qū)塊鏈中寫(xiě)入下一個(gè)狀態(tài)密文。在我們的擴(kuò)展協(xié)議中,我們樂(lè)觀地使用Cache中的先前狀態(tài)(如果可用)。當(dāng)相同的包圍區(qū)域用于多個(gè)順序查詢(xún)時(shí),這導(dǎo)致性能提高。當(dāng)預(yù)寫(xiě)日志變大時(shí),這尤其有用。
每當(dāng)查詢(xún)被發(fā)送到新的飛地時(shí),似乎都需要從創(chuàng)世開(kāi)始引導(dǎo)(例如,因?yàn)橄惹笆褂玫娘w地主機(jī)已經(jīng)崩潰)。在實(shí)踐中,我們還通過(guò)在每個(gè)固定數(shù)量的間隔之后存儲(chǔ)整個(gè)狀態(tài)(不僅僅是差異)來(lái)為檢查點(diǎn)定義策略。我們將這種概括的正式介紹留給未來(lái)的工作。
c)離線批處理事務(wù):就像上面的緩存優(yōu)化消除了從每個(gè)查詢(xún)中的區(qū)塊鏈中讀取的需要一樣,我們也可以將多個(gè)順序查詢(xún)的寫(xiě)入合并到區(qū)塊鏈的單個(gè)消息中。這減少了網(wǎng)絡(luò)往返次數(shù)以及總通信成本。當(dāng)批處理中的多個(gè)查詢(xún)寫(xiě)入同一位置時(shí),只需要將最后一次寫(xiě)入存儲(chǔ)在區(qū)塊鏈中。
在我們的協(xié)議中,我們沒(méi)有為批量中必須進(jìn)行的事務(wù)定義策略。相反,我們正式將此選擇暴露給對(duì)手。批量策略的選擇對(duì)我們形式主義的安全保障沒(méi)有影響。每個(gè)查詢(xún)調(diào)用只是將輸入存儲(chǔ)在緩沖區(qū)中,并且攻擊者可以隨時(shí)調(diào)用commitBatch方法來(lái)提交整個(gè)緩沖區(qū)。
配料不是靈丹妙藥。為了保持安全性,除非更新?tīng)顟B(tài)Δstct在區(qū)塊鏈中提交,否則解密輸出不得離開(kāi)包圍區(qū)。因此,在提交整個(gè)批處理之前,用戶無(wú)法從查詢(xún)接收輸出,因此只有與輸入無(wú)關(guān)的查詢(xún)才能出現(xiàn)在同一批處理中。
d)協(xié)調(diào)計(jì)算節(jié)點(diǎn)的選擇:Eki-den協(xié)議將其留給客戶端來(lái)決定查詢(xún)哪個(gè)計(jì)算節(jié)點(diǎn)和包圍區(qū)。無(wú)論這種選擇如何,F(xiàn)Ekiden的所有安全保障都會(huì)成立。作為一種實(shí)用的解決方案,我們建議讓客戶遵循集中協(xié)調(diào)器,這些協(xié)調(diào)器根據(jù)聲譽(yù)和先前的經(jīng)驗(yàn)執(zhí)行負(fù)載平衡以及將計(jì)算節(jié)點(diǎn)隨機(jī)分配給任務(wù)。如果某個(gè)任務(wù)在一些超時(shí)后沒(méi)有完成,協(xié)調(diào)器可以通知客戶端在另一個(gè)飛地重復(fù)查詢(xún)。隨機(jī)化可以確保主機(jī)無(wú)法自適應(yīng)地選擇特定目標(biāo)任務(wù)來(lái)降低服務(wù)質(zhì)量。通過(guò)這種方式,Ekiden可以防止對(duì)手降低目標(biāo)應(yīng)用程序的服務(wù)質(zhì)量。