原文:Why we need wide adoption of social recovery wallets
作者:Vitalik
譯者:洒脱喜
來源:巴比特
特別感謝 Argent 團隊的 Itamar Lesuisse 以及 Loopring 的王東(Daniel Wang)提供的反饋。
要讓數字資產和區塊鏈應用對普通用戶可用的挑戰之一,就是安全性:我們如何防止用戶的資金丟失或被盜?損失和盜竊是一個嚴重的問題,它們往往會讓無辜的區塊鏈用戶損失數千美元,甚至在某些情況下,用戶會損失掉其淨值的大部分。
這些年來,行業當中已經出現了很多解決方案,例如:紙錢包、硬件錢包,還有我自己曾經最喜歡的多重簽名錢包。事實上,它們已經很好地改善了安全問題。然而,這些解決方案都有各種各樣的缺陷,有時錢包提供的防盜和防丟失的額外保護,遠遠低於實際需要,有時則是錢包繁瑣且難以使用,導致這些錢包的採用率非常低,而有時這些問題都會存在。而在最近,出現了一種更好的替代方案:一種新型的智能合約錢包,稱之為「社交恢復錢包」。這些錢包有可能提供高水平的安全性,以及比以往選擇更好的可用性,但在它們能被輕易和廣泛地採用之前,還有一段路要走。這篇文章將討論什麼是「社交恢復錢包」,它們為什麼是重要的,以及我們如何在整個生態系統中更廣泛地採用它們。
錢包安全是一個大問題
從一開始,錢包安全問題便一直是區塊鏈生態系統面臨的一個棘手問題。即使在 2011 年,比特幣幾乎還是當時唯一的數字資產時,相關的損失和盜竊也非常猖獗。事實上,在創建以太坊之前,我作為 Bitcoin Magazine 的聯合創始人和作者,寫了一整篇文章來詳細描述當時已發生的駭人聽聞的黑客行為、損失及盜竊情況。
以下是其中一個示例:
「昨晚太平洋時間 9 點左右,我點擊了一個鏈接進入 CoinChat[.]freetzi[.]com,然後我被提示運行 java。我這麼做了(以為這是一個合法的聊天室),什麼也沒發生。我關上窗口,什麼也沒想。大約 14 分鐘後,我打開了我的 bitcoin-qt 錢包,看到了一筆未經我批准的交易,我錢包裡的所有資金都轉到了 1Es3QVvKN1qA2p6me7jLCVMZpQXVXWPNTC……」
此人的損失是 2.07 BTC (當時價值約 300 美元),而在今天看來,他的損失超過了 7 萬美元。還有一個例子:
「2011 年 6 月,Bitcointalk 論壇成員 ‘allinvain’ 失去了 25000 個 BTC (當時價值 50 萬美元),當時一個未知的攻擊者直接入侵了他的電腦。攻擊者可訪問 allinvain 的 wallet.dat 文件,並迅速清空了錢包。這要么是從 allinvain 的電腦上發送的交易,要么是簡單地將這個 wallet.dat 錢包文件傳給攻擊者本身,然後在自己的機器上清空它。」
以現在的價值計算,‘allinvain’ 損失接近 10 億美元。但盜竊並不是唯一的問題,丟失私鑰也會造成非常大的損失,下面是來自 Stefan Thomas 的例子:
「比特幣開發者 Stefan Thomas 的錢包有三個備份,一個加密 U 盤、一個 Dropbox 賬戶以及一個 Virtualbox 虛擬機。然而,他刪除了其中兩個備份,並忘記了第三個備份的密碼,這使得他永遠無法訪問到自己的 7000 BTC (當時價值 12.5 萬美元)。Thomas 的反應是:‘自那以後(我)會一直致力於創造更好的客戶端。」
而一項針對比特幣生態系統的分析表明,每天全球用戶可能會損失 1500 BTC,這是比特幣用戶交易費用的 10 倍之多,這些年丟失的比特幣合計占到了總供應量的 20%。這些事件和數字都指向了一個無法迴避的事實:錢包安全問題的重要性是巨大的,我們不應該低估。
很容易得出錢包安全性容易被低估的社會和心理原因:人們很自然地會擔心在總愛評判的公眾面前顯得自己不小心或愚蠢,因此很多人會把自己資金被黑的經歷隱藏起來。資金損失更為嚴重,因為人們普遍認為「除了你自己,沒有人可以責怪」。但現實是,包括區塊鏈在內的數字技術的全部意義在於,使人類更容易地從事非常複雜的任務,而不必付出極大的精神努力,也不必生活在不斷害怕犯錯的恐懼之中。如果一個生態系統對損失和失竊的唯一答案是一個 12 步教程、不太安全的措施以及不那麼偶然的半諷刺性的「對於你的損失感到抱歉」這樣的方案,那麼它將很難被廣泛採用。
因此,在不要求所有數字資產用戶將個人安全變成全職愛好的情況下,減少損失和盜竊數量的解決方案對業界來說是非常有價值的。
單靠硬件錢包還不夠
硬件錢包通常被吹捧為管理數字資產資金的最佳技術,硬件錢包是一種專門的硬件設備,其可以連接到你的計算機或手機(例如通過 USB),它包含了一個專門的只能生成私鑰和簽署交易的芯片。交易將在你的計算機或手機上啟動,必須在硬件錢包上確認後才能發送。私鑰會留在你的硬件錢包裡,因此入侵你的電腦或手機的攻擊者,無法盜走你的資金。
硬件錢包是一種顯著的改進,它們當然可以保護 Java 聊天室受害者,但它們並不完美,我發現硬件錢包存在兩個主要問題:
- 供應鏈攻擊:如果你購買了一個硬件錢包,你就相信了生產它的許多參與者(包括設計錢包的公司、生產錢包的工廠,以及所有參與運輸錢包的人),這些參與者可以用贗品來代替錢包。硬件錢包可能是此類攻擊的磁石:被盜資金與存在問題的設備數量的比率非常高。值得稱道的是,Ledger 等硬件錢包商已經採取了很多措施來防範這些風險,但仍然存在一些風險。從根本上講,硬件設備不能像開源軟件那樣被審計。
- 仍然存在單點失敗風險:如果有人偷了你的硬件錢包,並獲取了你的 PIN 密碼,那他們就可以竊取你的資金。如果你失去了你的硬件錢包,那麼你就失去了你的資金。除非硬件錢包在設置時生成並輸出一個備份,但我們會看到,這些措施都存在著自己的問題….
助記詞短語還不夠友好
很多錢包(無論是硬件錢包還是軟件錢包),都有一個設置過程,在這個過程中,它們會輸出一個助記詞短語,這是錢包根私鑰的一種人類可讀的 12 個單詞或 24 個單詞的短語,例如下面這個就是一個 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
如果你丟失了錢包,但你有助記詞的話,你可以在設置新錢包以恢復你的賬戶時輸入這些助記詞,由於助記詞短語包含根密鑰,因此可以從中生成所有其他密鑰。
助記詞短語有助於防止丟失,但對於防盜竊而言卻無能為力。更糟糕的是,它們為盜竊增加了一個新的載體:如果你有標準的硬件錢包+助記詞備份組合,那麼有人偷了你的硬件錢包+密碼或你的助記詞備份,就可以竊取你的資金。此外,保護好一個助記詞短語,而不是不小心將其丟掉,這本身就是一件不容易辦到的事情。
如果你把這個助記詞短語一分為二,將其中一半分給你的朋友,那盜竊的問題就可以得到緩解,但(1)幾乎沒有人會這麼做,(2)存在安全問題,因為這個助記詞短語很短(128 位),那麼就有可能存在一個老練而有動機的攻擊者,如果其拿到了其中一半的助記詞短語,他就可能通過暴力碰撞可能的組合來找到另一部分助記詞短語,並且(3)它進一步增加了精神壓力。
那麼,我們需要的是什麼?
我們需要的是能夠滿足三個關鍵標準的錢包設計:
- 沒有單一的失敗點:如果被盜,攻擊者也無法簡單地訪問你的資金;
- 低精神負擔:盡可能地降低要求,它不應該要求用戶學習一些奇怪的新習慣,也不應強迫用戶總是記住要遵循特定的行為模式。
- 交易的最大便利性:大多數正常的活動,不需要比普通錢包付出更多的努力(例如 Status、Metamask 等);
多重簽名是好的!
早在 2013 年,解決這些問題的最佳技術就是多重簽名(multisig)。你可以擁有一個存在三把密鑰的錢包,只要有其中任意兩把密鑰簽名,你就可以發送交易。
這項技術最初是在比特幣生態系統中開發的,但優秀的多重簽名錢包(例如 Gnosis Safe)現在也適用於以太坊。多重簽名錢包在組織內部是非常成功的:以太坊基金會使用了一個 4-of-7 多重簽名錢包來存儲資金,以太坊生態系統中的許多其他組織也是如此。
而對於個人來說,使用多重簽名錢包的主要挑戰是:誰持有資金,以及如何批准交易?最常見的公式是「兩個易於訪問但獨立的密鑰是由你掌握的(筆記本或手機),第三個是更安全但不易訪問的備份,其離線存放或由朋友或機構託管。」
這是相當安全的:即便其中一個設備丟失或被盜,你也可以訪問到自己的資金。但安全性遠不是完美的:如果你能偷別人的筆記本電腦,偷他們的手機通常也沒有那麼難。可用性也是一個挑戰,因為現在每筆交易都需要使用兩個設備進行兩次確認。
社交恢復是更好的選擇
這讓我想到了我最喜歡的錢包保護方法:社交恢復。社交恢復系統的工作原理如下:
- 只有一個「簽名密鑰」可用於批准交易;
- 有一組(至少 3 個或更多)的「守護人」,其中多數人就可合作更改帳戶的簽名密鑰。
簽名密鑰可以添加或刪除守護人,但會有一個延遲期(通常是 1-3 天)。
在所有正常情況下,用戶只需像普通錢包一樣使用他們的社交恢復錢包,使用他們的簽名密鑰對消息進行簽名,這樣每筆簽名的交易都可以通過一次確認點擊完成,就像在「傳統」的錢包那樣(例如 Metamask)。
如果用戶丟失了他們的簽名密鑰,那麼社交恢復功能就會啟動。用戶只需聯繫他們的守護人,讓他們簽署一項特殊交易,將錢包合約中註冊的簽名公鑰更改為新的。這很簡單:他們可以簡單地去訪問一個頁面,例如 security.loopring.io,登錄,查看恢復請求並簽名。對於每一個守護人來說,操作就像進行一筆 Uniswap 交易一樣容易。
對於選誰作為守護人,有很多種可能的選擇。最常見的三種選擇是:
- 錢包持有者自己擁有的其他設備(或紙質助記詞);
- 朋友和家人;
- 機構,如果他們得到了你的電話號碼或電子郵件的確認,或者在價值很高的情況下,通過視頻電話親自核實你的身份,機構就會簽署一條恢復信息;
守護人是很容易添加的:你只需要輸入他們的 ENS 域名或 ETH 地址即可添加守護人,不過大多數社交恢復錢包都要求守護人在恢復網頁中籤署交易,以同意添加守護人。在任何設計合理的社交恢復錢包中,守護人不需要下載和使用同一個錢包。他們只需使用現有的以太坊錢包,無論是哪種類型的錢包。考慮到添加守護人的高度便利性,如果你足夠幸運,你的社交圈已經由以太坊用戶組成,我個人傾向於增加守護人的數量(最好是 7 個以上),以提高安全性。如果你已經有了一個錢包,那麼你就不需要一直在精神上努力做一個守護人:你所做的任何恢復操作都會通過你現有的錢包來完成。如果你不認識許多其他活躍的以太坊用戶,那麼你信任的技術上有能力的少數守護人則是最好的。
為了減少守護人攻擊或合謀的風險,你不必公開你的守護人:事實上,他們不需要知道對方的身份。這可以通過兩種方式實現,首先,不必將守護人的地址直接存儲在鏈上,而是將地址列表的哈希存儲在鏈上,錢包所有者只需在恢復時發布完整的列表。第二,可以要求每個守護人確定地生成一個新的單用途地址,它們將僅用於特定的恢復。除非實際需要恢復,否則它們不需要使用該地址實際發送任何交易。
為了補充這些技術保護,建議從不同的社交圈子中選擇不同的守護人集合(理想情況下要包括一個機構守護人),這些建議加在一起,將使得守護人極難同時受到攻擊或發生合謀。
如果持有者不幸身亡或永久喪失行為能力,守護人就可以公開宣布自己的身份,這樣他們就可以找到對方並收回你的資金。
社交恢復錢包不是一種背叛,而是「加密價值」的一種表達
對於使用任何形式的多重簽名錢包、社交恢復或其他方式的建議,一個常見的回應是,這種解決方案回到了「信任人」的角度,這也是對區塊鍊和數字資產行業價值觀的背叛。雖然我理解人們為什麼會這麼想,但我認為,這種批評源於對「crypto 應該是什麼」的根本誤解。
對我來說,加密的目的永遠不會消除對所有信任的需求。相反,加密的目標是讓人們能夠訪問加密和經濟構建塊,讓人們有更多的信任選擇,並進一步讓人們建立更受約束的信任形式:給予某人代表你做某些事情的權力,而不給予他們做任何事情的權力。從這個角度來看,多重簽名和社交恢復是這一原則的完美體現:每個參與者對接受或拒絕交易的能力都有一定的影響,但任何人都不能單方面轉移資金。這種更為複雜的邏輯,使得社交恢復錢包設置的安全性,遠遠高於只有一個人或一把密鑰單方面控制資金的安全性。
這個基本的想法(應謹慎地使用人的輸入而不是直接丟掉它)是有效的,因為它可以很好地與人腦的優缺點相適應。
人腦非常不適合記住密碼和跟踪紙錢包,但是它是用於跟踪與其他人的關係的 ASIC。對於普通用戶來說,這種效果甚至更強:他們可能更難使用錢包和密碼,但他們同樣擅長處理諸如「選擇 7 個不會勾結的人」之類的社交任務。如果我們可以從人類輸入中至少提取一些信息到一種機制中,而又不將這些輸入變成攻擊和利用的載體,那麼我們應該弄清楚如何做到。社交恢復是非常強大的:要盜取一個有 7 個守護人的錢包,這需要 7 個守護人中的 4 個,以某種方式相互發現,並同意竊取錢包中的資金,而不讓他們中的任何一個向失主告密:這當然要比攻擊一個純粹由一個人保護的錢包要困難得多。
社交恢復如何防止盜竊?
上面說明的社交恢復涉及你丟掉錢包的風險。但是仍然存在簽名密鑰被盜的風險:有人入侵了你的計算機,在你已登錄時偷偷溜到你的身後,然後用一些用戶界面故障誘使你簽署自己不打算簽署的交易。
我們可以通過增加一個金庫來擴展社交恢復,以應對此類問題。每個社交恢復錢包都可以自動生成金庫。只需將資產發送到金庫的地址即可將其移動到金庫,但只有在一周延遲期後才能將其移出金庫。在該延遲期間,簽名密鑰(或者擴展為守護人)可以取消交易。如果需要,還可以對金庫進行編程,以便可以毫不延遲地完成一些有限的金融操作(例如在一些列入白名單的代幣之間進行 Uniswap 交易)。
現有的社交恢復錢包
目前,實施社交恢復功能的兩大主要錢包有 Argent 錢包和 Loopring 錢包:
Argent 錢包是首個,也是目前最流行的「智能合約錢包」,而社交恢復是其主要賣點之一。 Argent 錢包包括一個可以添加和刪除守護人的界面:
為了防止被盜,錢包有一個每日限額:達到該金額的交易是即時的,而超過該金額的交易,需要守護人批准才能最終取款。
而 Loopring 錢包是由 Loopring 協議(這是一個用於支付和去中心化交易的 ZK Rollup 協議)的開發者構建的。 Loopring 錢包也有一個社交恢復功能,其工作原理與 Argent 非常相似。在這兩種情況下,錢包公司都免費提供了一名守護人,這依賴於手機發送的確認碼來驗證你的身份。對於其他守護人,你可以添加同一錢包的其他用戶,或通過提供其以太坊地址添加任何以太坊用戶。
這兩個錢包的用戶體驗都出奇地流暢。但它們存在著兩個主要挑戰,首先,兩個錢包的平穩性都依賴於錢包商運行的「中繼器」(relayer),它將簽名消息作為交易重新發布。第二,費用是很高的。幸運的是,這兩個問題都是可以克服的。
遷移到 Layer 2 (Rollups)可解決剩餘的挑戰
如上所述,社交恢復錢包面臨兩個關鍵的挑戰:(1)依賴中繼器(relayer)處理交易,(2)高交易費用。第一個挑戰是對中繼器的依賴,這是以太坊應用中普遍面臨的問題。這個問題的產生是因為以太坊中有兩種類型的帳戶:外部擁有賬戶(EOA)和合約賬戶,前者是由單個私鑰控制的賬戶。在以太坊中,有一條規則是每一筆交易都必須從 EOA 開始,其初衷是 EOA 代表「用戶」,合約則代表「應用」,只有用戶與應用會話時,應用才能運行。如果我們希望錢包具有更複雜的策略,比如多重簽名和社交恢復,我們需要使用合約來代表用戶。但這帶來了一個挑戰:如果你的資金是放在了一個合約裡,你需要有一些其他有 ETH 的帳戶,以用於支付每一筆交易,那它就需要相當多的的 ETH,以防交易費用變得非常高。
Argent 和 Loopring 通過親自運行「中繼器」(relayer)來解決這個問題。這個「中繼器」(relayer)負責偵聽用戶提交的帶數字簽名的鏈外「消息」,並將這些消息包裝在交易中並發佈到鏈上。但從長遠來看,這是一個糟糕的解決方案,它增加了一個額外的中心點。如果「中繼器」(relayer)關閉,並且用戶確實需要發送一筆交易,他們總是可以從自己的 EOA 賬戶發送交易,但是在中心化和不便之間引入了一種新的權衡。有人在嘗試解決這個問題,即在沒有中心化的情況下獲得便利,主要的兩類是圍繞著建立一個通用的去中心化中繼網絡或修改以太坊協議本身,以允許交易從合約開始。但這兩種解決方案都不能解決交易費用問題,事實上,由於智能合約本身更為複雜,它們使得問題變得更糟。
幸運的是,通過尋找第三種解決方案,我們可以同時解決這兩個問題:將生態系統移動到 layer 2 協議上,例如 Optimistic Rollup 和 ZK Rollup。 Optimistic 和 ZK Rollup 都可以使用內置的帳戶抽象進行設計,從而避免對「中繼器」(relayer)的任何需求。現有的錢包開發者已經在研究 Rollup 解決方案,但最終遷移到 Rollup 是整個生態系統的挑戰。
整個生態系統大規款遷移到 Rollup 是一個很好的機會,它可以扭轉以太坊生態系統早期的錯誤,讓多重簽名和智能合約錢包在幫助確保用戶資金安全方面發揮更重要的作用。
但這需要更廣泛的認識,即錢包的安全性是一個挑戰,而且我們在嘗試應對和挑戰方面還沒有做得足夠。多重簽名和社交恢復不一定是故事的結局,可能還會有更好的設計。但是,簡單地進行改革,即遷移到 Rollup,並確保這些 Rollup 將智能合約錢包視為一類公民,是實現這一目標的重要一步。