前些天在 imToken Fans 社群裡,有用戶提出這樣一個問題:
你們是否也有過這樣的困惑呢?既然去中心化錢包不會保存用戶錢包私鑰和密碼,那麼這些信息又是從哪裡導出的?難道是錢包服務商在「撒謊」?
哈哈,請不要慌張,去中心化錢包的確沒有保存你的錢包信息,這些信息是通過權限審核後從手機中的數據庫導出的,這個數據庫有一個專業的術語叫「沙盒」。
什麼是沙盒?
沙盒(Sandbox)是一種通過隔離從而減輕因係統故障或軟件漏洞造成影響的安全機制,運用於測試未經驗證的代碼或不受信任的程序,因為在沙盒環境下進行測試,不會損害主機或者操作系統,並且沙盒會嚴格限制這些軟件,通常不允許或提供非常有限的讀取數據或網絡訪問權限。簡單來說,沙盒是能保證信息安全的一種機制。
沙盒應用廣泛,不僅運用於計算機安全領域,在我們生活中處處也有它的影子。比如監管沙盒(Regulatory Sandbox),政府在嚴控風險的前提下,鼓勵金融科技等企業進行創新,去年 9 月全國第一個區塊鏈監管沙盒在杭州成立。再比如沙盒遊戲,比較典型的就是 Minecraft。
沙盒運作流程
我們以 iOS 系統為例,iOS 在設計之初就決定將每個 APP 的存儲能力都限制在對應的沙盒中,APP 只能在系統為其創建的文件庫中讀取數據。在高版本的 iOS 中權限有所開放,當然這是在用戶給予授權的前提下。
上圖為蘋果官方 APP 沙盒文檔圖片,經過審核的應用沙盒文件都有以上三個部分:Bundle、Data 和 iCloud。 Bundle 為安裝目錄,安裝完成後是不可以進行修改的;iCloud 即為可被雲備份下的文檔;應用的數據信息存放在 Data 這個目錄下。
用戶創建導入錢包和導出錢包信息兩個操作步驟為例,當用戶錢包密碼設置和備份助記詞步驟完成時,應用會自動將助記詞通過用戶設置好的密碼進行加密(Encrypt),生成 Keystore 最後按照錢包的通用唯一識別碼(UUID )寫入對應的沙盒文件中。
下圖是 MEW 用文字的形式來具體展示了創建錢包的流程,用密碼加密完成後,同樣也存入設備中的「Local secure vault」,也就是沙盒。
而當用戶需要導出錢包信息時,需要輸入當時設置的密碼對加密文件進行解密(Decrypt),解密成功則執行後續對應操作,解密失敗則會提示用戶密碼不正確。
沙盒的安全性
在正常情況下,沙盒是安全的。即使你手機上有安裝一些來源不明的軟件,也不會對你其他應用的數據安全造成影響。 iOS 和 Android 都會採取相同的處理方式:給每個應用單獨分配一個盒子,每個盒子之間是不允許互相訪問的。惡意軟件也是一個應用,在正常的系統環境下,是沒有能力去入侵其他應用的沙盒。
但如果你的手機越獄或者 root 過,手機系統的底層相當於處於開放狀態,應用可以通過向系統申請調用權限,一旦獲得權限,就能任意訪問手機裡的所有數據信息,包括任意應用沙盒中存儲的文件,使得沙盒的安全環境完全被破壞。
今年 9 月底蘋果系統就爆出無法修復的一個漏洞,漏洞可以導致舊手機可以被越獄,如果用戶因此而進行越獄是非常不安全的行為,可能因此造成文件資料或財產的丟失,imToken 也強烈建議存有代幣資產的手機千萬不要進行越獄或者 root 操作。
銷毀和雲備份的問題
可能用戶又提問了:為什麼不干脆直接出一個備份完助記詞銷毀的功能?這樣也不怕手機被越獄或 root 了。
為什麼不能銷毀這些信息,這就要回到錢包最初的轉賬原理說起了。我們知道轉賬是需要輸入密碼進行驗證最後通過私鑰來簽名授權的,如果你的手機裡都沒有這些信息了,那麼你還能正常發起轉賬嗎?這個過程和導出錢包信息類似,只不過一個使用錢包信息授權交易一個是進行錢包備份。
如果手機沙盒裡沒有存儲錢包信息,那你的錢包將不能正常使用,無法發起轉賬操作。
一般這種情況出現在蘋果手機 iCloud 雲備份下來的 imToken APP 或者經過深度清理的安卓手機。以 iOS 為例,imToken 在產品設計時做了一個設置,將錢包信息排除在 iCloud Container 之外。由於 iCoud 經常遭受黑客的攻擊,加上用戶對於自己 iCould 賬戶安全保護做得不到位,為此導致的用戶隱私洩露事件屢見不鮮。對於直接關係到用戶財產安全的相關信息,更不應該同步在雲端的服務器中。遇到上述這種情況,只需要將私鑰或助記詞等信息重新導入錢包就可以正常使用。
寫在最後
photo by frankreddit5
手機系統中的沙盒確保我們在使用相關 APP 進行轉賬時信息不發生洩漏,關於數字錢包的安全,最重要的還是要回到錢包私鑰的備份以及後續的保管方式中,說白了最終都回到「人」的問題上。如果我們不打破這個正常的系統環境,如果我們能夠按照要求物理備份好錢包信息並將它保存在安全的地方,那麼除了你自己,誰還可以觸及到你的資產呢?
參考資料:
什麼是沙盒:https://en.wikipedia.org/wiki/Sandbox_(computer_security)
Apple Sandbox 開發者文檔:https://developer.apple.com/app-sandboxing/
Android Sandbox 開發者文檔:https://source.android.com/security/app-sandbox
如何防止文件上傳到 iCould:https://source.android.com/security/app-sandbox