來源 | vitalik.ca
作者 | Vitalik
編譯:ECN以太坊大陸
感謝 Argent 的 Itamar Lesuisse 和 Loopring 的 Daniel Wang 提供反饋,
加密貨幣和區塊鏈應用對普通用戶來說,其可用的最大挑戰之一無疑是安全性:我們如何防止用戶的資金丟失或被盜?丟失和被盜是不可忽視的問題,致使無辜的區塊鏈用戶損失數千美元,甚至在某些情況下丟失其大部分凈資產,
多年來,有許多解決方案被提出:紙錢包、硬件錢包和多簽錢包 (我個人一度的最愛)。實際上這些方案確實顯著改善了安全性,但都存在各種缺陷:防盜和防丟保護功能可能遠遠低于實際需要,或是操作的不便利導致極低的采用率。但是最近出現了一個更好的替代方案:一種稱為“社交恢復式錢包” (social recovery wallet) 的新型智能合約錢包,與以前的選擇相比,這類錢包可以提供更高的安全性和更好的可用性,但距離輕松且廣泛的部署,還有一段路要走。這篇文章將介紹什么是社交恢復式錢包、其重要性何在,以及我們應該如何在整個生態系統中對其進行更廣泛的采用。
錢包安全性問題非同小可
可以說從區塊鏈行業發軔之初,錢包安全性問題就一直困擾著生態系統,在2011年,當時比特幣幾乎是當時唯一的加密貨幣,丟失和被盜事件頻發,在建立以太坊之前,我作為 Bitcoin Magazine 的聯合創始人和作者撰寫了一篇文章詳細介紹當時加密貨幣中發生的攻擊、損失和盜竊事件,
這是其中一個例子:
昨晚約 PDT 時間晚上九點,我點擊了一個連接進入 CoinChat[.]freetzi[.]com,并被提示運行 Java,我這么做了(我以為這是一個正常的哈拉室),隨后什么也沒發生。我關閉了窗口,沒有多想。大約 14 分鐘后我打開了我的 bitcoin-qt 錢包,然后看見了一個并未經我批準的交易,幾乎將整個錢包的資產都轉移到了另一個錢包……
這位用戶丟失了 2.07 個 BTC ,當時價值 300 美元,現在已經超過 7 萬美元,還有一個例子:
2011 年 6 月,Bitcointalk 成員 allinvain 丟失了 25000 個 BTC (時值 50 萬美元),起因是一個未知的入侵者以某種方式直接訪問了他的電腦。攻擊者能直接獲取 allinvain 的 wallet.dat 文件,然后迅速將錢包洗劫一空——從 allinvain 的電腦發送交易,或是在自己的電腦中上傳 wallet.dat 文件并將其清空。
按照現在的價值來算,其價值近一百萬美元。但盜竊并不是唯一的問題,還有私鑰丟失的例子。來看看 Stefan Thomas 的故事:
比特幣開發者 Stefan Thomas 的錢包有三處備份:一個加密的 USB 設備、一個 Dropbox 帳戶和一個 Virtualbox 虛擬機。他設法抹除了其中兩個,但是忘記了第三個備份的密碼,永遠失去了 7000 BTC (當時價值 12.5 萬美元) 的訪問權限。Thomas 回應說:“ 從那時起,我一直致力于開發更好的客戶端。”
根據比特幣生態系統的一份分析,每天可能有 1500 BTC 丟失,超過比特幣用戶交易手續費的十倍,隨著時間推移丟失的比特幣總量占其總供應量的 20%。這些故事和數字都指向同一個不可避免的事實:錢包安全性問題的重要性非同小可,不應該被低估。
我們很容易得出錢包安全性容易被低估的社會和心理原因:人們不希望在總是具有批判性的公眾面前顯得愚蠢或粗心,結果其資金往往容易被盜。而丟失資金就更是如此,因為普遍 (盡管在我看來非常不正確) 的看法是“要怪只能怪自己”,但現實是,包括區塊鏈在內的數字技術,其目標在于使人們能更輕松地參與復雜事務,而無需付出極大的腦力勞動或是活在擔心失誤的恐懼中。如果一個生態系統解決丟失和被盜問題的方式僅僅是 12 個步驟的教程、不太安全的對策和不那么偶然的諷刺性的“對您的損失感到抱歉”的回應,其將很難被廣泛采用,
因此,旨在降低資金丟失和被盜風險的方案開始被采用,這些方案不需要加密貨幣用戶消耗過多精力和時間來維護個人資產安全性,并且對于整個行業來說也是非常有價值的,
光靠硬件錢包還不夠
硬件錢包經常被宣揚為加密貨幣資產管理的最佳技術,硬件錢包是一種專用硬件設備,可以連接到用戶的計算機或行動電話 (例如通過 USB),并且包含專用芯片,該芯片只能生成私鑰和簽署交易。用戶能在計算機或行動電話上發起交易,并且必須在硬件錢包中確認后才能發送,私鑰保留在硬件錢包中,因此,攻擊計算機或行動電話中無法將資金洗劫一空,
硬件錢包是一個意義重大的進步,可以避免上述的 Java 哈拉室案例,但硬件錢包也不是盡善盡美的。在我看來硬件錢包有兩大問題:
➤ 供應鏈攻擊:如果你購買了一個硬件錢包,就相當于你信任其生產過程中的許多參與者,包括設計錢包的公司、生產錢包的工廠以及運輸過程中的經手人,他們可以調換錢包。硬件錢包可能會引來此類攻擊:資金被盜的概率與被盜設備數量相關性非常高,值得稱贊的是,諸如 Ledger 之類的硬件錢包生產商已經采取了許多保護措施來防范這些風險,但并不是萬事大吉了,從根本上來說,硬件設備不像開源軟體,無法進行審計,
➤ 單點故障:如果有人站在你的身后目睹你輸入 PIN,然后偷走了你的硬件錢包,他們就能竊取你的資金,如果你丟失了你的硬件錢包,你也就丟失了你的資產,除非硬件錢包在初始設置時生成并輸出備份,但正如我們看到的一樣,仍然有不同的問題存在。
光靠助記詞也不夠
許多錢包 (無論是硬件還是軟體) 都有一個初始設置過程,在此過程中會輸出一些助記詞短語,這是錢包根私鑰的編碼,形式是人類可讀的 12-24 個單詞,助記詞短語如下:
vote dance type subject valley fall usage silk essay lunch endorse lunar obvious race ribbon key already arrow enable drama keen survey lesson cruel
如果你丟失了錢包但保留有助記詞,則可以在設置新錢包恢復帳戶時輸入助記詞,因為助記詞包含根密鑰,可以從中生成所有其他密鑰。
助記詞有助于防止丟失,但是對資金被盜的情況來說于事無補,更糟糕的是,如果你有標準的硬件錢包+助記符備份組合,那么無論是硬件錢包+ PIN 被盜或助記詞備份被盜都會導致資金損失。此外,要保證保護好助記詞并且不意外丟失本身就是一項的精神負擔,
如果將短語五五分,然后將一半交由朋友保存,可以減輕盜竊的問題,但是 1) 幾乎沒有人真正推廣這種行為;2) 存在安全問題,如果助記詞很簡短 (128位),那么一個死磕的攻擊者,偷走一半之后可能會暴力尋找其余 264 種可能的組合來找到另一半,并且 3) 進一步增加了精神負擔。
那我們需要的是什么?
我們需要的錢包設計要滿足以下三個標準:
➤ 不存在單點故障:不存在會被竊取的事物,從而使攻擊者可以獲取您的資金,或者即使丟失了,也可以拒絕獲取資金,
➤ 減輕精神負擔:盡可能不要求用戶學習陌生的新習慣或付出腦力,以始終遵循某些行為模式。
➤ 交易便捷:進行大多數正常活動不應該比常規錢包花費更多的精力 (例如 Status 和 Metamask 等等)
多簽還不錯!
早在2013年,解決這些問題的最佳技術是多重簽名 (multisig),你可以擁有一個配有三個密鑰的錢包,需要其中任何兩個密鑰才能發送交易,
最初這項技術是在比特幣生態中開發的,但是以太坊現在也有優秀的多簽錢包 (例如 Gnosis Safe),多簽錢包在組織內部的應用十分成功,以太坊基金會使用 4-7 多簽錢包來存儲資金,以太坊生態中許多其他的組織也應用了多簽錢包。
對于多簽錢包來說,要替“個人”持有資金主要的挑戰是:誰持有資金?如何批準交易?最常見的公式是“由用戶持有的兩個易于獲取但獨立的密鑰 (例如筆記本和行動電話),而第三個密鑰是更為安全且更難獲取的備份,線下保存或是由朋友或者組織持有”。
這是相當安全的:任何單一設備丟失或被盜不會導致你無法使用資金,但是其安全性遠非完美無缺,如果能竊取某人的筆記本電腦,那么竊取他們的行動電話通常來說也并不難,可用性也是一個挑戰,因為每筆交易現在都需要使用兩個設備進行兩次確認,
社交恢復更勝一籌
這是我個人比較傾向的錢包保障方式:社交恢復。其運行機制如下:
➤ 有一個單獨的“簽名密鑰”用以批準交易
➤ 還有一套至少由三個成員組成的“守護者”,其中大多數人聯合起來可以改變賬戶的簽名密鑰
簽名密鑰能夠增加或減少守護者,這個過程存在延遲 (通常為 1-3 天)。
在正常情況下,用戶都可以像普通錢包一樣簡易使用社交恢復式錢包,并使用其簽名密鑰對消息進行簽名,從而使每個已簽名的交易都可以通過一次確認點擊快速完成,操作如同“傳統”錢包 (如 Metamask)。
而社交恢復式錢包真正發揮作用的地方,就是用戶丟失簽名密鑰的情況,用戶可以聯系他們的守護者,并要求他們簽署一個特殊交易,以更改其在錢包中注冊的簽名公鑰,這其實不難,他們可以訪問一個網頁 (比如security.loopring.io),登入之后收到一個恢復請求,然后進行簽名,守護者的操作可能就像在 Uniswap上進行交易一樣簡單。
守護者有很多可能的選擇,其中最常見的三種選項是:
➤ 錢包所有者自己的其他設備 (或是紙質助記詞)
➤ 朋友或是家庭成員
➤ 組織機構,在收到你的電話號碼或電子郵件確認后簽署恢復交易,或者在所設價值較高的情況下通過視訊通話來驗證你的身份
添加守護者也很容易,只需輸入 ENS 域名或 ETH 地址即可添加監護人,盡管大多數社交恢復式錢包都要求守護者在恢復頁面中簽署交易以同意添加,在任何設計合理的社交恢復式錢包中,守護者無需下載并使用同一錢包,他們可以使用其現有的以太坊錢包,不受類型限制,鑒于添加守護者的便利性,如果你的社交圈由以太坊用戶組成,我個人更偏向設置較多守護者 (最好是7個以上),以提高安全性。如果你已經有了一個錢包,那么就不需要守護者不斷保持注意,你可以通過現有的錢包進行任何恢復操作,如果你不認識足夠的活躍以太坊用戶,那么設置數量較少且懂得操作的守護者是更好的選擇。
為了減少守護者遭受攻擊和串謀的風險,不必要公開守護者,實際上,他們不需要知道彼此的身份。這可以通過兩種方式來實現,首先,將守護者地址列表的哈希存儲在鏈上,而非守護者的地址,并且錢包所有者只需要在恢復時發布完整列表即可。其次,可以要求每個守護者確定性地生成一個新的地址,僅以用于當次恢復,除非實際需要恢復,不然他們不需要使用該地址發送任何交易,為了配合技術上的防護,建議選擇來自不同社交圈的、具有差異性的守護者 (理想情況下包括一個機構守護者),這些方案使守護者很難同時受到攻擊或是進行串謀。
如果錢包所有者去世或是永久喪失行為能力,這將是一項社會認可的標準協議,守護者可以公開其身份,以便在這種情況下他們可以找到彼此并恢復資金,
社交恢復式錢包并未背叛“密碼學價值”,而是一種體現
對于任何形式的多重簽名,社交恢復等等使用建議的一種常見反應是,這些解決方案最終還是要追溯到“信任他人”這一點上,因此是對區塊鏈和加密貨幣行業價值的背叛,雖然我理解人們為什么會在乍看之下產生這種想法,但我還是認為,這種批評源于對密碼技術的誤解,
對我而言,密碼技術的目標絕不是消除所有形式的信任,相反,密碼技術的目的是使人們能夠使用密碼學和經濟學來構建事物,從而增加可信任對象的選擇,并進一步建立更多有限的信任形式:可以授予某人代表你進行某些行為的權力,而無需授予全權,從這種角度來看,多重簽名和社交恢復是這一原則的完美體現:每個參與者對能否接受或拒絕交易都有一定影響,但是沒有人能單方面轉移資金。與必須由個人或密鑰單方面控制資金的情況相比,這種更復雜的邏輯引入了安全得多的設置,
“謹慎地運用人的輸入而非徹底拋棄”這一基本理念是有效的,因為這可以很好地與人腦的優缺點相適應,人腦非常不適合記憶密碼和保存紙錢包,但卻是用于追蹤與他人關系的 ASIC。對于非技術用戶來說,其效果甚至更強。他們可能在使用錢包和密碼時遇到麻煩,但是他們與技術用戶一樣擅長處理諸如“選擇七個不會全部勾結起來欺騙我的人”之類的社交任務,如果我們能夠從人類輸入中提取一些資訊到某種機制中,而又避免使這些輸入成為攻擊向量,那么我們應該弄清楚如何實現,社交恢復非常穩健,要破壞一個擁有七個守護者的錢包,七個守護者中至少有四個需要以某種方式識別彼此并勾結起來盜取資金,其中任何一個人都不能向錢包所有者通風報信,這比起攻擊一個純粹由個人維護的錢包要困難許多,
社交恢復如何防止盜竊?
上文所述的社交恢復討論到了“丟失”錢包的風險,但是仍然存在簽名密鑰被“竊取”的風險:有人侵入你的計算機,在你已經登入的情況下趁虛而入,然后給你當頭一棒,甚至只是通過制造用戶界面故障來引誘你簽署交易,
我們可以通過添加保險庫來增強社交恢復能力以應對此類問題,每個社交恢復式錢包都可以附帶一個自動生成的保險庫,只需將資產發送到保險庫地址即可將其轉移至保險庫,但要將其轉出保險庫需要一周延遲時間,在延遲期間,簽名密鑰 (或監護者) 可以取消交易。如果需要,還可以對保險庫進行編程,以便可以立即進行一些有限的操作 (例如在白名單代幣之間進行 Uniswap 交易)。
既有的社交恢復式錢包
目前已經有兩個主要的錢包實現了社交恢復功能,Argent 以及 Loopring:
Argent 錢包是首個且最受歡迎的“智能合約”錢包,社交恢復是其賣點之一。Argent 錢包加入了可以對監護者進行增刪的界面:
為了防止盜竊,錢包設有每日限額:達到該金額的交易可以即時進行,但超過該金額的交易需要守護者批準才能完成提款,
Loopring 錢包為大家所知可能因為它是由 Loopring 協議 (用于支付和去中心化交易所的 ZK rollup 方案) 開發者及支持者構建的,但是 Loopring 錢包還具有社交恢復功能,與 Argent 中的功能非常相似。在這兩種情況下,錢包服務商都免費提供一位守護者,該守護者通過行動電話發送的確認碼來對用戶進行身份驗證。用戶可以通過提供以太坊地址來添加同一錢包的其他用戶或任何以太坊用戶作為其他守護者。
兩個錢包的用戶體驗都非常順滑,可能存在兩個挑戰。首先,兩個錢包中的操作順滑度都依賴于錢包商的“中心化”中繼者 (relayer),將已簽署的交易重新發布出來,其次費用較高,所幸這兩個挑戰都是可以解決的。
遷移到 L2 (rollups) 可以解決其他挑戰
如上所述,存在兩個主要挑戰:1) 依賴中繼者 (relayer) 來處理交易,以及 2) 交易費用高,在以太坊應用中,對中繼者的依賴是一個日益普遍的問題,出現此問題的原因是,以太坊中有兩種帳戶類型:由單個私鑰控制的外部帳戶 (EOA) 和合約賬戶。以太坊有一條規則,即每筆交易都必須始于外部賬戶,最初的意圖是外部賬戶代表“用戶”,合約賬戶代表“應用程式”,并且僅當用戶與應用程式交互時,該應用程式才能運行。如果我們想要機制更加復雜 (如多簽和社會恢復) 的錢包,則需要使用合約來代表用戶,但一個新的挑戰隨之而來:如果你的資金在合約賬戶中,則需要擁有一個其他有 ETH 余額的賬戶,以支付每筆交易,一旦交易費用迅速攀升,可能需要大量的 ETH,
Argent 和 Loopring 的解決方案式親自運行中繼者,中繼者偵聽用戶提交的鏈下數字簽名的消息,并將這些消息打包在交易中,繼而發布到鏈上。但是從長遠來看,這不是一個好的解決方案,因其帶來了中心化問題。如果中繼者發生故障,而用戶需要發送交易,雖然他們始終可以從自己的外部賬戶發送交易,但是仍然需要在中心化和使用不便之間引入新的權衡,有解決方案嘗試在去中心化的情況下解決這個問題并提升操作便利度。主要的兩種解決方案一是創建一個通用型去中心化中繼者網路,二是修改以太坊協議以支持交易從合約賬戶發出,但是這些方案都不能解決交易費用的問題,實際上由于智能合約本來就更復雜,可能會加劇問題嚴重性。
幸運的是,我們可以尋求第三種解決方案同時解決這兩個問題:將生態系統移至二層協議,例如 optimistic rollups 和 ZK rollups,Optimistic 和 ZK rollups 可以設計為內置抽象,無需中繼者。現有的錢包開發人員已經在研究 rollups,但是最終要整體遷移到 rollup 上是整個生態系統的挑戰。
將生態系統大規模遷移到 rollups 提供了很好的機會,可以扭轉以太坊生態系統早期的錯誤,并為多簽和智能合約錢包在幫助保護用戶資金方面發揮更加重要的作用。但這需要大家更廣泛地認識到錢包安全性確實是一項挑戰,而且我們還沒有做出足夠的嘗試以應對挑戰,多重簽名和社交恢復不一定是故事的結局,可能會有更好的設計。但是轉移到 rollups 并確保其將智能合約錢包視為“頭等公民”,這一革新是實現這個目標的關鍵步驟,
原文鏈接:https://vitalik.ca/general/2021/01/11/recovery.html