發表於 2019-02-15 14:06:42
在Kadena我們經常談論區塊鏈設計決策。我最近遇到的一個特別深刻的設計決策是關於圖靈完備的,它在我們的一個開發人員最近的一篇文章中引發了爭論。作為團隊的非技術成員,我想了解圖靈完備的真正含義,為什麼區塊鏈社區在這個問題上存在分歧,為什麼我們的工程師在努力教育其他人安全智能合約編程的缺點。
以下是我為揭開和理解智能合約安全這一核心屬性而進行探索的簡要總結。所以,如果你像我一樣,被區塊鏈系統的開發所吸引,尤其是被智能合約語言所吸引,那麼希望這個故事能夠提高你對圖靈完備如何影響智能合約安全的理解。
圖靈機促進圖靈完備
20世紀30年代,艾倫·圖靈提出了通用圖靈機的概念。請注意,圖靈機不同於二戰期間用來解決Enigma代碼的設備。這就是炸彈機。圖靈機實際上是一種理論設備,一種數學計算模型,描述了我們今天所知道的最強大的機械計算機。
這可以歸結為「圖靈完備」,它是一個屬性,用於描述可以用來模擬圖靈機器的程式語言。事實上,現存的絕大多數程式語言都是圖靈完備的。圖靈完備智能合約機最著名的例子是Ethereum虛擬機(EVM)。
「一種圖靈完備的程式語言,理論上能夠表達計算機完成的所有任務;如果忽略有限內存的限制,幾乎所有的程式語言都是圖靈完備的。
這在實踐中意味著什麼呢?程式語言能夠表達每一個可計算的算法是好是壞?
起初,這聽起來像是一個強大的特性。智能合約語言對於構建任何類型的應用程式都是普遍適用和靈活的,這當然是有好處的。讓我們考慮一下其影響。
圖靈完備應用於區塊鏈智能合約
不幸的是,我並不是智能合約設計領域的思想領袖,所以我求助於網際網路。初步的研究從StackOverflow或者像這樣的圖靈機上的深入論文中得到了完全沒有幫助的答案。這兩種方法都沒有通過編程智能合約的上下文來檢查所討論的屬性。
幸運的是,我有幸請到了一位非常有資格並且在這個主題上領先的的人物Emily Pillmore,她是Kadena的高級程式設計師。我問她:「在區塊鏈的中,圖靈完備和圖靈不完備有什麼區別?」」她的反應:圖靈不完備與區塊鏈並沒有太多直接關係。在計算機科學中,抽象重寫系統的一個特性是確保系統中的所有表達式都可以用正態形式表示(即可以被簡化)……圖靈不完備表現為在一種不可簡化的語言中的表達式。「這只是全部答案的一小部分!」對於像我這樣的人來說,其餘的回答同樣令人費解。我問了一下「這個東西是如何工作的」問題,得到了一個全面而技術性的答案。很好。所以我想我會從不同的角度來看待這個問題。也許如果我問一個「這件事能做什麼」的問題,我就能更具體地了解它的行為。
我問:「有沒有一些例子可以說明:圖靈不完備可以在區塊鏈上使用?」」 Emily的回答是:「沒有。我想不出一個需要圖靈完備的區塊鏈用例。EVM不使用圖靈完備的任何屬性,因為它限制了通過gas模型進行的所有遞歸,這將強制遞歸在gas耗盡之前終止,或者在gas耗盡時終止程序。所以實際上,EVM的gas模型模擬了圖靈不完備,但不是真的。這就是為什麼我說他們採用了圖靈完備的所有缺陷(副作用、難以理解和不合理的代碼、任意循環),但是沒有使用它的任何好處(不允許無限遞歸)。「啊哈,我明白了!」也就是說當你有能力做更多的事情,這也意味著更多的事情可能出錯。圖靈完備天生就更強大,但是如果您不能利用這種強大的優勢,那麼您就不必要地將自己暴露在更多的攻擊向量中,因為增加的表面積帶來了如此多的額外特性。
為進一步明確區分特徵:
· 圖靈完備語言總是有條件重複或條件跳轉的形式
· 根據區塊鏈的設計,區塊鏈可以通過像gas這樣的機制來阻止這些無休止的循環。
· 因此,圖靈完備帶來了一個不必要的、繁重的攻擊表面。風險高,回報低,如下圖所示。
在發布時,已知有16種針對Solidity的攻擊向量,Solidity是用於智能合約的最流行的特定領域的程式語言,碰巧是圖靈完備。如果圖靈機不完整,那麼這些攻擊中代價最高的攻擊甚至都不可能發生。最值得注意的是,2016年的DAO攻擊——圖靈完備支持的可重入攻擊,從該基金中抽走了360萬ETH(約5000萬美元),導致以太坊社區對整個網絡進行了硬分叉,以恢復他們喜歡的歷史版本。最近在2019年,君士坦丁堡升級暫停,因為它引入了一種新的重入攻擊形式。
在設計像智能合約這樣的規避風險技術時,最好避免將開發人員和用戶暴露在不必要的潛在風險中,這樣他們也許有一天就可以提出一個用例來享受它所帶來的好處。畢竟,智能合約只不過是運行在區塊鏈上的電腦程式。他們是按要求去做的。在使用它們時,您將自己暴露在對所有可能的輸入的風險中。與其信任一個未知程式設計師的邏輯,不如考慮信任一個圖靈不完備的程式語言,使用這種語言甚至不可能有危險的錯誤和漏洞。為了獲得更多的安全性,請考慮信任一種圖靈不完備語言,該語言在設計時考慮了智能合約安全性。
隨著我對這個主題的不斷了解,我很想知道您是否認為圖靈完備裡有我沒有提到的關鍵含義。您在您的智能合約中發現使用圖靈完備的好處了嗎?
打開APP閱讀更多精彩內容
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴