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