智慧合約的沙箱機制是什麼?
瞭解區塊鏈技術的童鞋都知道以太坊的智慧合約都是在沙箱(Sandbox)中執行的,那到底什麼是沙箱呢?為什麼要在沙箱中進行呢?下面本文就為大家一一介紹。
1.為什麼需要沙箱機制?
預設情況下,一個應用程式是可以訪問機器上的所有資源的,比如CPU、記憶體、檔案系統、網路等等。
但是這是不安全的,如果隨意操作資源,有可能破壞其他應用程式正在使用的資源,或者造成資料洩漏。為了解決這個問題,一般有下面兩種解決方案:
(1) 為程式分配一個限定許可權的賬號:利用作業系統的許可權管理機制進行限制
(2) 為程式提供一個受限的執行環境:這就是沙箱機制
2.什麼是沙箱機制?
如上所述,沙箱就是一個限制應用程式對系統資源的訪問的執行環境。
沙箱很多情況下都是實現在虛擬機器(VM)中,比如Java的虛擬機器JVM、Javascript的虛擬機器V8引擎、Android中的虛擬機器Dalvik/ART,以及以太坊的虛擬機器EVM等等。具體的實現方式各有不同,本文重點分析一下JVM和EVM的沙箱機制實現。
3.JVM的沙箱機制
JVM的沙箱機制大致可以分為三層:
第一層:類載入器
採用雙親委派模型,低層類載入器在收到類載入請求時,需要先委派給高層類載入器區完成,只有在高層類載入器無法完成該請求時,才會再重新委派給低層類載入器。通過這一機制,確保了系統的核心類不會被篡改,惡意程式碼無法訪問關鍵資源。
第二層:位元組碼校驗器
類位元組碼被載入後,需要在位元組碼層面進行檢驗,具體包括以下內容:
(1) 變數要在使用之前進行初始化
(2) 方法呼叫與物件引用型別之前要匹配
(3) 訪問私有資料和方法的規則沒有被違背
(4) 對本地變數的訪問落在執行時堆疊內
(5) 執行時堆疊沒有溢位通過這一機制,可以確保位元組碼符合Java語言規範,避免訪問無效訪問或越界訪問。
第三層:安全管理器
這一層是交由應用開發者來維護的,開發者可以根據自身需求,制定對應的安全策略。預設的安全策略配置位於以下兩個配置檔案中:
· $JAVA_HOME/conf/security/java.security
· $JAVA_HOME/conf/security/java.policy
預設情況下安全管理器是不開啟的,可以在命令列增加一個引數來開啟它:
java -Djava.security.manager SandboxTest
預設的安全策略配置不允許應用程式對檔案的讀寫操作,所以如果你試圖寫一個檔案,執行時會報如下錯誤:
如果你希望開放這個許可權,可以編寫自己的安全策略檔案,比如我們寫一個my.policy:
然後在執行時指定這個策略配置就可以了:
java -Djava.security.manager -Djava.security.policy=./my.policy SandboxTest
應用開發者可以針對不同的應用場景進行精細化定製,控制程式對網路、檔案、屬性等內容的訪問許可權。
4.EVM的沙箱機制
EVM本身是一個相對封閉的環境,不支援對網路和檔案系統的直接訪問,從這個層面來說已經起到一部分沙箱的功能了:
另外,在智慧合約之間互相呼叫時,EVM會重新分配堆疊和記憶體空間,在一個全新的環境中執行新合約,即使出現問題也不會破壞原有執行環境,從而為智慧合約的執行提供了一個沙箱環境。
最後,每個智慧合約的儲存也是相互獨立的,開發者可以根據需求,限制合約可以訪問的儲存空間,避免未授權的訪問或修改。舉例來說,下圖就描述了CALL和CALLCODE指令對儲存空間訪問的區別:
作者:位元貓
相關文章
- 什麼是智慧合約?
- 智慧合約是什麼
- 什麼是智慧合約漏洞?
- 什麼是以太坊?什麼是智慧合約?
- 為什麼智慧合約是'聰明'的?
- 區塊鏈智慧合約是什麼?區塊鏈
- 什麼是智慧合約以及如何運作?
- 什麼是U本位合約和幣本位合約?
- 永續合約與傳統合約的差異是什麼?
- 什麼是加密貨幣合約?加密
- 什麼是智慧合約?智慧合約dapp系統借貸理財系統開發案例(原始碼)APP原始碼
- 虛擬機器、容器和沙箱是什麼關係?虛擬機
- pwn 之 沙箱機制
- Linux Watchdog 機制是什麼Linux
- qiankun 的 CSS 沙箱隔離機制CSS
- qiankun 的 JS 沙箱隔離機制JS
- (現貨合約量化機器人)什麼是比特幣挖礦_比特幣挖礦機是什麼原理?機器人比特幣
- 什麼是注意力機制?
- 什麼是HTTP快取機制?HTTP快取
- 關於智慧合約的去中心化有什麼用?中心化
- 智慧合約從入門到精通:Solidity的特性與內部機制Solid
- JVM--java沙箱安全機制JVMJava
- 什麼是 Angular 的 banana-in-a-box detection 機制AngularNaN
- 瀏覽器快取是什麼?它的機制又是什麼?瀏覽器快取
- 什麼是LRU快取淘汰機制快取
- 共識機制proof of efficiency(PoE)是什麼?
- 現在正火的秒合約交易系統到底是什麼?
- 什麼是人工智慧領域的過擬合和欠擬合人工智慧
- 智慧合約從入門到精通:智慧合約的前世今生
- 什麼是IO多路複用?Nginx的處理機制Nginx
- Native Rollup 的去中心化共識機制是什麼?中心化
- 互助公排滑落機制dapp系統開發|智慧合約編寫流程APP
- JVM探究(一)談談雙親委派機制和沙箱安全機制JVM
- 講解什麼是合約交易所繫統+合約交易所開發的核心優勢有哪些?
- 面試常問的dubbo的spi機制到底是什麼?面試
- 什麼是雲主機,雲主機是什麼樣的?
- 智慧合約從入門到精通:智慧合約的應用場景
- 現在很火的合約跟單模式是什麼?詳細介紹模式