原文作者Vitalik Buterin在其最新發布的文章中提到了傳統加密貨幣錢包(例如硬件錢包和助記詞錢包)存在的安全問題,然后通過Argent和Loopring兩個例子簡單介紹了社交恢復錢包(即智能合約錢包)的原理及特征,Vitalik認為,社交恢復錢包能夠做到比傳統錢包更安全,而遷移到rollup二層方案,可有效解決社交恢復錢包當前面臨的兩大問題:(1)依賴中心化的中繼器(relayer),(2)高交易費用。
編譯 | 灑脫喜
特別感謝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的錢包有三個備份,一個加密隨身碟、一個Dropbox賬戶以及一個Virtualbox虛擬機,然而,他刪除了其中兩個備份,并忘記了第三個備份的密碼,這使得他永遠無法訪問到自己的7000BTC(當時價值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將智能合約錢包視為一類公民,是實現這一目標的重要一步。