目前,MetaMask 等 EOA 錢包仍佔據著去中心化錢包的龍頭地位。而另一方面,儘管業界已經做出了巨大的努力來告知用戶保持助記詞和密鑰安全的重要性,但存在的這個單點故障問題依然是加密錢包被廣泛採用的一個重大障礙。
為解決這個問題,兩類替代密鑰管理的方案成為了錢包賽道創業的熱點,它們分別是多方計算 (MPC) 協議和智能合約錢包 ( 包括多重簽名錢包 )。未來,它們將為個人、DAO 和機構等提供更多的選擇,甚至加密錢包不再只涉及安全存儲,還將包括在新經濟中的資產使用。
但接下來,我們將著重介紹的是另一個針對 EOA 錢包使用同樣具有代表性的方案 ZKSAFE。相比 MPC 錢包將私鑰分片(shards)分發到多個節點,這仍存在中心化風險,因為節點可能被攻擊導致私鑰丟失。 ZKSAFE 則是通過純 ZK 算法實現了無節點的密碼功能,同時不會存儲用戶的私鑰和密碼。

ZKSAFE 是一款免費開源的協議級 Web3 安全產品,使用零知識證明(zk Proof)技術通過鏈上密碼+私鑰的多重簽名來保護用戶資產,即使私鑰丟失用戶的資產也是安全的。
不需要硬件錢包,用戶只需要安裝瀏覽器擴展插件,ZKSAFE 打造了一種密碼+私鑰開啟的 Safebox。用戶可以擁有自己的 Safebox 合約,資產可以存儲在錢包中,也可以存儲在 Safebox 合約中,即使私鑰和密碼丟失也能通過 Social Recovery(社交恢復)來找回資產。

ZKSAFE 將產品主要分為了 3 個模塊:ZKSAFE Safebox、ZKSAFE Password、ZKSAFE Wallet,它們可以獨立運行,也可以相互結合,或者與其他項目的產品相結合使用。
Safebox 是 ZKSAFE 系統創建的首個產品。
每個用戶都可以擁有一個用密碼+私鑰才能打開的 Safebox 合約,相當於私人銀行,ZKSAFE 不會存儲用戶的私鑰,也不存儲用戶的密碼,但即使私鑰被盜,資產依然安全。如果是私鑰和密碼忘記了,則可以通過社交恢復來重置。
安裝教程
1)打開 app.zksafe,點擊 Download,跳轉到 Chrome 應用商店下載 ZKSAFE 插件,安裝後 Download 變成 Connected 表示 ZKSAFE 插件連接成功。
2)然後點擊 Connect Wallet 按鈕,連接 MetaMask 錢包。目前,ZKSAFE 僅支持 Polygon 網絡,後續還會集成以太坊、BSC、Optimism 和 Arbitrum。

3)新用戶需要先激活 Safebox,點擊 Activate,彈出 MetaMask 確認框,再點擊確認,部署一個用戶專有的 Safebox 智能合約。
上鍊後,Safebox Address 即剛部署的合約地址,以後可以直接給這個地址轉 Token 和 NFT,只有用戶自己能取出來。

Owner Address 則是用戶的錢包地址,以後用戶 Safebox 裡的資產只能轉到這個錢包。
提款
1)從 Safebox 取出資產必須要有鏈上密碼,點擊 SET 進行設置,在 ZKSAFE 插件彈出框中創建鏈上密碼,然後在彈出的 MetaMask 確認框中點擊確認。

2)點擊橙色箭頭按鈕,在彈出框中輸入 Token 數量,點擊 Confirm 按鈕;彈出 ZKSAFE 轉出確認框,輸入密碼,ZKSAFE 通過用戶的密碼計算出 ZK-SNARK Proof,並點擊 Confirm 後彈出 MetaMask 確認框,點擊確認等待上鍊即可。

目前,正式版已上線,Safebox 裡的資產可以轉到任意地址,這樣能避免私鑰被盜,用戶把資產轉回錢包後造成損失的情況。未來,ZKSAFE 還將開發一個域名項目 ZKSAFE ID,避免轉錯的問題發生。
存款
點擊綠色箭頭按鈕,在彈出框中輸入 Token 數量,彈出 MetaMask 確認框後點擊確認按鈕,等待上鍊。

不過,相比提款時的一對一,在存款時則是多對一,用戶還可以將自己的 Token 從其他的錢包直接轉移到 Safebox 地址。
Social Recovery
如果用戶忘記密碼或私鑰,則可以通過事先設置的監護人發起多簽(無需密碼)來社交恢復,Safebox 的所有權將轉移到新的錢包,這樣就可以用新錢包的鏈上密碼+私鑰轉出資產。 Safebox 轉移到新錢包後,原來錢包的管理權就會失效。
監護人可以是自己最信任的親人朋友,也可以是該用戶的其他錢包。但為了保障安全,不要讓監護人的錢包都在同一台設備上。
ZKSAFE 旨在創建一個協議級的密碼方案,因此該密碼系統不僅支持 ZKSAFE,還擴展到支持各種資產管理平台,甚至是無私鑰錢包,這將大大降低用戶進入 Web3 的門檻。
可以簡單地進行劃分,這個密碼系統 ZKPass 主要是 to B,zkSafe 則是 to C。
值得一提的是,傳統的算法裡只有私鑰才能對數據進行簽名,但 ZKSAFE 通過將 ZK-SNARK 做了一些編程,實現了密碼對數據簽名,這將有效地阻止「三明治攻擊」。
比方說用戶提交了一個取款的 tx,裡面附上了其密碼驗證信息。由於 tx 是公開的,在排隊的時候黑客可複制這個 tx,把取款地址換成自己的,加上沒動密碼驗證信息,所以在合約裡是可以校驗通過的。然後黑客用更高的 gas 提交,這樣就能搶在用戶的前面從而取走資產。
但如果在用戶提交取款 tx 的時候,通過 ZKPass 把 tx 裡提多少錢給誰這個信息用密碼進行簽名,如果 tx 的信息被篡改,在合約裡則是能校驗出來的。
具體操作則可打開 password.zksafe,點擊 Connect Wallet 連接 MetaMask,設置 ZKPass。
輸入 password 兩次,然後點擊 Set Password,電腦會進行 ZK 計算,等待幾秒完成 ZK 計算後,會彈出 MetaMask 確認框。

此外,重置新密碼需要舊密碼,如果用戶重置了密碼,在重置頁面將能查看最近的密碼設置記錄。
1)關於 ZKPass:
- ZKPass 不存儲用戶的密碼,除了用戶自己,沒有人知道;
- ZKPass 沒有管理員,沒有人可以幫助找回或重置密碼;
- 不要將密碼保存在電腦或手機中,寫在紙上。
2)關於 ZKPass 強度,目前還無法阻止被破解,破解難度取決於密碼長度。
- 6 字的大概 10 天破解,別設置太短;
- 隨著計算機性能的提升,8 字的未來破解可能只需要幾個月;
- 推薦 12 個字符,可以是一個短句 + 一個數字;破解需要幾千片 3090 顯卡 100 年時間;
- 如果有更高安全要求,可設置 40 位密碼長度,屆時破解難度將大於私鑰。而根據目前全網算力,私鑰的破解難度則要花上億年。
3)那 ZKPass 與 MetaMask 的密碼有什麼區別呢?
的確,在使用過程中會發現存在兩個密碼:MetaMask 密碼和 ZKPass,但它們是兩個完全不同的系統。 MetaMask 不直接存儲用戶的私鑰,而是存儲該私鑰證書,用戶在打開 MetaMask 時輸入的密碼就是導出私鑰證書的密碼。
如果證書丟失(電腦重裝),則該密碼無法導出私鑰,資產也就無法提現。而當私鑰被盜,黑客就可以輕鬆竊取用戶的資產。
而 ZKSAFE 使用的密碼 ZKPass,則是存儲在智能合約中,通過零知識證明加密,只有用戶自己才能更改。 ZKPass 永遠在線,換電腦也有效; 即使 ZKSAFE 停止服務,只要以太坊網絡還存在,就一直有效。同時如果私鑰被盜,黑客在不知道 ZKPass 的情況下是無法竊取用戶資產的。
4)具體工作原理
在用戶側,ZKPass 只有改密碼的功能;如果只是驗證密碼,獲取密碼的哈希值(pwdhash)在鏈下就可以驗證,而鏈上的驗證通常是配合其他合約一起,做數據簽名用,比如 ZKSAFE 合約:ZKSAFE 合約把「用戶想要幹什麼」這些參數,在合約內生成 datahash 傳給 ZKPass 合約。
ZKPass 驗證成功後,ZKSAFE 合約就知道用戶的密碼正確,以及「用戶想要幹什麼」這些參數沒有被篡改(即簽名),然後 ZKSAFE 合約就可以做下一步(提幣)操作了。

ZKSAFE 還將開發一款基於 ERC4337(賬戶抽象),便利安全,省 gas 的錢包。該錢包還將使用 ZKPass 代替私鑰實現無私鑰的錢包,並整合 Dapp 商店,讓用戶可以自由安全地暢玩加密世界。
MPC 方案通過對私鑰進行多方計算在鏈下實現「多簽」、「跨鏈」等複雜的驗證方式。具體來說,它將一個私鑰打碎成多個分片,然後將它們交與一個去中心化的網絡進行計算和加密。當需要私鑰簽名時,則將這些分片再拼接形成一個完整的私鑰。
MPC 分散了私鑰的控制權以達到分散風險的目的,來避免單點失敗等安全問題。不過另一方面,MPC 私鑰隱藏和跨鏈橋接可能依然存在中心化的風險,一旦大量資金由極少數節點控制,尤其當這些節點是同一個人時,節點被攻擊就會導致私鑰丟失。此外,MPC 方案所用的密碼,只要校驗密碼的單一節點遭到入侵,所有用戶的密碼也存在暴力破解的風險,所以也會要求用戶輸入複雜密碼。
智能合約錢包的使用則需要更高的費用,因為需要驗證多個簽名,如添加或刪除所有者以及更改閾值等操作都是在鏈上進行。
而 ZKSAFE 則是給 EOA 錢包的使用增加了一個安全套件,並且通過存儲鏈上 zkproof 而不是存儲密碼本身來避免資產被盜。同時即使私鑰和密碼丟失,用戶也能通過社交恢復來找回資產。
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia