如何解決智能合約區(qū)塊鏈的圍墻花園問題
“圍墻花園”并不是一個(gè)區(qū)塊鏈的專屬概念。Facebook、Twitter、微信、支付寶、甚至蘋果的iOS,當(dāng)今幾乎每一個(gè)互聯(lián)網(wǎng)科技巨頭都在建立自己的圍墻花園。通過外部分享限制、生態(tài)搜索限制與小程序限制,大量用戶被綁定在某一個(gè)生態(tài)里。AppStore內(nèi)的開發(fā)者被蘋果強(qiáng)迫抽成、百度里無法搜到微信10w+文章、在微信里分享一個(gè)淘寶鏈接也要使用非主流語言寫成的“淘口令”。除了為自己生態(tài)鎖住流量、保證用戶信息的安全與內(nèi)容的質(zhì)量,這些花園的建立也讓目前的互聯(lián)網(wǎng)環(huán)境高度中心化。
而在以去中心化為己任的區(qū)塊鏈?zhǔn)澜纾皣鷫▓@”問題也是所有基于智能合約的區(qū)塊鏈都持續(xù)面臨的一個(gè)難題。簡單而言,由于智能合約的作用范圍僅限于所在的區(qū)塊鏈,這使得智能合約無法與區(qū)塊鏈之外的其他實(shí)體進(jìn)行交互。
雖然這一問題在NEO3中可以通過引入運(yùn)行在共識節(jié)點(diǎn)上的Oracle預(yù)言機(jī)得到緩解,這允許NEO區(qū)塊鏈獲取外部數(shù)據(jù),但要想完全實(shí)現(xiàn)與外部數(shù)據(jù)交互仍然是不可能的。事實(shí)證明智能合約無法操作任何私有信息、保存私鑰或主動觸發(fā)鏈外的操作。
由于智能合約的運(yùn)行會受到這些嚴(yán)重的限制,那么需要這些功能的區(qū)塊鏈解決方案又該如何避開這個(gè)問題呢?
一種解決方案是使用預(yù)言機(jī),這是一種可信的服務(wù)器,可保存私有數(shù)據(jù)、密鑰或憑據(jù),并監(jiān)聽來自智能合約的事件,在觸發(fā)這些事件時(shí)執(zhí)行相應(yīng)的操作,從而可承擔(dān)智能合約的部分功能。當(dāng)然,這個(gè)解決方案需要信任這樣的服務(wù)器,這會失去在公鏈上構(gòu)建項(xiàng)目所具備的去信任的屬性。
康奈爾大學(xué)的研究所創(chuàng)新性地提出了一個(gè)更好的解決方案,即在可信執(zhí)行環(huán)境(TEEs)中運(yùn)行預(yù)言機(jī),TEEs是嵌入到CPU中的硬件系統(tǒng),在其中運(yùn)行的程序是完全相互隔離的,使得其他部分的CPU或計(jì)算機(jī)不可能改變其狀態(tài)或篡改內(nèi)部運(yùn)行的代碼,因?yàn)橐磺卸际艿接布墑e的隔離保護(hù)。
然而,對于預(yù)言機(jī)而言,TEEs最重要的特性是,在TEE中創(chuàng)建代碼實(shí)例時(shí),可以創(chuàng)建一個(gè)證明:用TEE的私鑰簽名的TEE狀態(tài)的哈希(包括TEE中的所有內(nèi)存和代碼)。然后,可以使用此證明向其他節(jié)點(diǎn)證明服務(wù)器正在運(yùn)行特定的代碼并處于特定的狀態(tài),因此它將始終遵循該代碼(如果您提供了一個(gè)密碼,并且代碼中沒有任何發(fā)送該密碼的指令,則可以確保密碼不會被泄露)。
此外,由于所有與Intel SGX兼容的CPUs(實(shí)現(xiàn)了TEE)都有一個(gè)來自Intel的唯一私鑰,因此可以使用該私鑰來對所創(chuàng)建的證明進(jìn)行簽名,以便向任意實(shí)體證明代碼實(shí)際上是在TEE內(nèi)運(yùn)行的,確保服務(wù)器處于已知的狀態(tài)并且不會被篡改,從而可以隨時(shí)了解服務(wù)器的運(yùn)行過程。
此外,如果不能直接信任Intel的私鑰(Intel可能被黑客攻擊),可以不考慮這個(gè)假設(shè),我們?nèi)钥梢园l(fā)現(xiàn)自己的系統(tǒng)比標(biāo)準(zhǔn)服務(wù)器需要更少的信任,因?yàn)橐坏┮粋€(gè)程序開始在TEE中運(yùn)行,它就不能被篡改,因此我們只需要信任在創(chuàng)建預(yù)言機(jī)時(shí)運(yùn)行著預(yù)言機(jī)的實(shí)體,而不必持續(xù)信任它。有人也許會說,這不能完全消除對Intel的信任,因?yàn)楫?dāng)我們假設(shè)Intel沒有在這些系統(tǒng)中留有任何硬件后門時(shí),就是一種隱式的對Intel的信任,但這種信任可以通過使用多個(gè)TEE提供商(如AM)來消除, 例如AMD,ARM…
最后,需要注意的是,這些系統(tǒng)都不能完全和絕對地消除對運(yùn)作服務(wù)器的人員或組織的信任,因?yàn)檫@些實(shí)體仍然可以關(guān)閉TEE,或者,如果有足夠的資源的話,發(fā)起一次TEMPES攻擊*來泄露私有數(shù)據(jù)。通過在由不同實(shí)體托管的一組服務(wù)器之間進(jìn)行責(zé)任分配并使用閾值加密算法來保證密碼也同樣被分發(fā),某種程度上可以減輕,但不能完全消除這些風(fēng)險(xiǎn)。