原標題:What I would love to see in a wallet
作者:Vitalik,以太坊創始人;編譯:鄧通,金色財經
特別感謝 Liraz Siri、Yoav Weiss 以及 ImToken、metamask 和 OKX 開發人員的反饋和審核。
以太坊基礎設施堆棧的一個關鍵層是錢包,但經常被核心 L1 研究人員和開發人員低估。錢包是用戶和以太坊世界之間的窗口,用戶只能從以太坊及其應用程序提供的任何去中心化、審查阻力、安全、隱私或其他屬性中受益,前提是錢包本身也具有這些屬性。
最近,我們看到以太坊錢包在改善用戶體驗、安全性和功能方面取得了很大進展。這篇文章的目的是給出我自己對理想的以太坊錢包應具備的一些特性的看法。這並不是一個完整的列表;它反映了我的密碼朋克傾向,它專注於安全和隱私,並且幾乎可以肯定它在用戶體驗方面是不完整的。然而,我認為願望清單在優化用戶體驗方面不如簡單地根據反饋進行部署和迭代有效,因此我認為關注安全和隱私屬性是最有價值的。
跨L2交易的用戶體驗
現在有一個越來越詳細的改善跨L2用戶體驗的路線圖,該路線圖有短期部分和長期部分。在這裡,我將談論短期部分:即使在今天理論上仍然可以實施的想法。核心思想是 (i) 內置跨 L2 發送,以及 (ii) 鍊特定地址和支付請求。您的錢包應該能夠為您提供一個地址(遵循本 ERC 草案的風格),如下所示:
0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045@optimism.eth
當某人(或某些應用程序)向您提供這種格式的地址時,您應該能夠將其粘貼到錢包的「收件人」字段中,然後單擊「發送」。錢包應該以任何可能的方式自動處理髮送的數據:
- 如果您在目標鏈上已經有足夠的所需類型的代幣,請直接發送代幣;
- 如果您在另一條鍊(或多個其他鍊)上有所需類型的代幣,請使用 ERC-7683(實際上是跨鏈 DEX)等協議來發送代幣;
- 如果您在同一條鍊或其他鍊上有不同類型的代幣,請使用去中心化交易所將它們轉換為正確鍊上的正確類型的代幣並發送它們。這應該需要用戶的明確許可:用戶將看到他們支付了多少費用,以及接收者收到了多少費用。
具有跨鏈地址支持的可能錢包接口的模型
上述內容適用於「您複製粘貼一個地址(或 ENS,例如,vitalik.eth@optimism.eth)以便某人向您付款」的用例。如果 dapp 請求存款(例如,參見 Polymarket 示例),那麼理想的流程是擴展 web3 API 並允許 dapp 發出特定於鏈的支付請求。然後,您的錢包將能夠以任何需要的方式滿足該請求。要使用戶體驗良好,還需要標準化 getAvailableBalance 請求,並且錢包需要認真考慮默認將用戶資產存儲在哪些鏈上,以最大程度地提高安全性和轉賬便利性。
特定於鏈的支付請求也可以放入二維碼中,移動錢包可以掃描二維碼。在面對面(或在線)消費者支付場景中,接收者將發出 QR 碼或 web3 API 調用,表示「我想要鍊 Z 上的 X 單位代幣 Y,帶有參考 ID 或回調 W」,錢包將可以以任何可能的方式自由地滿足該請求。另一種選擇是索賠鍊接協議,其中用戶的錢包生成一個二維碼或 URL,其中包含從其鏈上合約中索賠一定數量資金的授權,接收者的工作就是弄清楚如何將這些資金轉移到他們的賬戶上。
另一個相關主題是Gas支付。如果您在還沒有 ETH 的 L2 上收到資產,並且需要在該 L2 上發送交易,錢包應該能夠自動使用協議(例如 RIP-7755)來支付鍊上的 Gas你有 ETH 的地方。如果錢包希望你將來在 L2 上進行更多交易,它也應該只使用 DEX 來發送。價值幾百萬 Gas 的 ETH,以便未來的交易可以直接在那裡花費 Gas(因為這樣更便宜)。
賬戶安全
我對帳戶安全挑戰的概念化的一種方式是,一個好的錢包應該同時在兩個方面發揮作用:(i)保護用戶免受錢包開發人員的黑客攻擊或惡意攻擊,以及(ii)保護用戶免受自己的錯誤的影響。左邊的「錯誤」是無意的。然而,當我看到它時,我意識到它非常適合上下文,所以我決定保留它。
十多年來,我首選的解決方案是社交恢復和帶有分級訪問控制的多重簽名錢包。用戶的帳戶有兩層密鑰:主密鑰和 N 個監護人(例如 N = 5)。主鍵是能夠進行低價值和非財務操作。大多數監護人需要執行 (i) 高價值操作,例如發送帳戶中的全部價值,或 (ii) 更改主密鑰或任何監護人。如果需要,可以允許主鍵通過時間鎖執行高價值操作。
以上是基本設計,可以進行擴展。會話密鑰和 ERC-7715 等權限機制可以幫助支持不同應用程序的便利性和安全性之間的不同平衡。更複雜的監護人架構,例如在不同閾值下具有多個時間鎖定持續時間,可以幫助最大限度地提高成功恢複合法帳戶的機會,同時最大限度地降低盜竊風險。
監護人應該是誰或什麼?
對於經驗豐富的加密貨幣用戶社區中的經驗豐富的加密用戶來說,一個可行的選擇是您的朋友和家人的密鑰。如果您要求每個人為您提供一個新的地址,那麼沒有人需要知道他們是誰 -- 事實上,您的監護人甚至不需要知道彼此是誰。如果他們沒有向你通風報信,他們串通一氣的可能性很小。然而,對於大多數新用戶來說,此選項不可用。第二種選擇是機構監護人:專門提供服務的公司,只有在他們得到來自您的請求的其他確認時才會簽署交易。一個確認碼,或為高價值用戶一個視頻通話。很長一段時間以來,人們一直在嘗試製作這些東西。我在2013年介紹了CryptoCorp。然而,到目前為止,這類公司還不是很成功。
第三種選擇是多種個人設備(例如手機、桌面、硬件錢包)。這是可行的,但對於沒有經驗的用戶來說,設置和管理起來也很困難。同時還有設備丟失或被盜的風險,尤其是當它們位於同一位置時。
最近,我們開始看到越來越多的基於密鑰的錢包。密碼只能備份在你的設備上,使它們成為一種個人設備解決方案,或者備份在雲中,使它們的安全性依賴於密碼安全、機構和可信硬件假設的複雜混合。實際上,對於普通用戶來說,密鑰是一種有價值的安全增益,但它們本身不足以保護用戶的畢生積蓄。
幸運的是,有了 ZK-SNARK,我們還有第四種選擇:ZK 包裝的中心化 ID。這種類型包括 zk-email、Anon Aadhaar、Myna Wallet 等等。基本上,您可以採用多種形式(公司或政府)中心化 ID,並將其轉換為以太坊地址,您只能通過生成證明擁有中心化 ID 的 ZK-SNARK 來發送交易。
有了這個補充,我們現在有了廣泛的選擇,並且 ZK 包裝的中心化 ID 具有獨特的「新手友好性」。
為此,它需要通過簡化且集成的 UI 來實現:您應該能夠僅指定您想要「example@gmail.com」作為監護人,並且它應該自動生成相應的 zk-email 以太坊地址在引擎蓋下。高級用戶應該能夠將他們的電子郵件(以及可能保存在該電子郵件中的隱私鹽值)輸入到開源第三方應用程序中,並確認生成的地址是正確的。對於任何其他受支持的監護人類型也應該如此。
可能的安全界面模型
請注意,如今 zk-email 面臨的一個實際挑戰是它依賴於 DKIM 簽名,該簽名使用每隔幾個月輪換一次的密鑰,並且這些密鑰本身並未由任何其他機構簽名。這意味著如今的 zk-email 具有超出提供商本身的某種程度的信任要求;如果 zk-email 在受信任的硬件內使用 TLSNotary 來驗證更新的密鑰,則可以減少這種情況,但這並不理想。希望電子郵件提供商能夠開始直接簽署其 DKIM 密鑰。今天,我建議一位監護人使用 zk-email,但不建議大多數監護人使用:不要將資金存儲在 zk-email 損壞意味著您無法使用資金的設置中。
新用戶和應用內錢包新用戶實際上不希望在第一次註冊體驗中輸入大量監護人。因此,錢包應該為他們提供一個非常簡單的選擇。一種自然的途徑是在其電子郵件地址上使用 zk-email、本地存儲在用戶設備上的密鑰(可能是萬能密鑰)以及提供商持有的備份密鑰,進行 2-of-3 的選擇。隨著用戶變得更有經驗或積累更多資產,在某些時候應該提示他們添加更多監護人。
錢包集成到應用程序中是不可避免的,因為試圖吸引非加密用戶的應用程序不希望用戶同時下載兩個新應用程序(應用程序本身,加上以太坊錢包)帶來混亂的用戶體驗。然而,許多應用程序錢包的用戶應該能夠將他們的所有錢包鏈接在一起,這樣他們就只需擔心一個「訪問控制問題」。最簡單的方法是採用分層方案,其中有一個快速的「鏈接」過程,允許用戶將其主錢包設置為所有應用內錢包的監護人。 Farcaster 客戶端 Warpcast 已經支持這一點:
默認情況下,您的 Warpcast 帳戶的恢復由 Warpcast 團隊控制。但是,您可以「接管」您的 Farcaster 帳戶,並將恢復更改為您自己的地址。
保護用戶免受詐騙和其他外部威脅除了帳戶安全之外,當今的錢包還做了很多工作來識別虛假地址、網絡釣魚、詐騙和其他外部威脅,並盡力保護用戶免受此類威脅。與此同時,許多對策仍然相當原始:例如,要求點擊才能將 ETH 或其他代幣發送到任何新地址,無論您發送的是 100 美元還是 100,000 美元。在這裡,不存在單一的靈丹妙藥。這是針對不同類別威脅的一系列緩慢的持續修復和改進。然而,繼續努力改進這裡有很多價值。
隱私
現在是時候開始更加認真地對待以太坊的隱私了。 ZK-SNARK技術現在已經非常先進,不依賴後門來降低監管風險的隱私技術(例如隱私池)越來越成熟,而像Waku和ERC-4337 mempools這樣的二級基礎設施也慢慢變得更加穩定。然而,到目前為止,在以太坊上進行私人轉賬需要用戶明確下載並使用「隱私錢包」,例如 Railway(或用於隱形地址的 Umbra)。這增加了極大的不便,也減少了願意進行私人轉賬的人數。解きはディナーのあとで私人轉賬需要直接集成到錢包中。一個簡單的實現如下。錢包可以將用戶資產的一部分作為「私人餘額」存儲在隱私池中。用戶進行轉賬時,會先自動退出隱私池。如果用戶需要接收資金,錢包可以自動生成一個隱形地址。
此外,錢包可以自動為用戶參與的每個應用程序生成一個新地址(例如,defi 協議)。存款將來自隱私池,提款將直接進入隱私池。這允許用戶在任何一個應用程序中的活動與其在其他應用程序中的活動取消鏈接。
該技術的一個優點是,它不僅是保護隱私的資產轉移的自然途徑,也是保護隱私的身份的自然途徑。身份已經發生在鏈上:任何使用身份證明門控的應用程序(例如 Gitcoin Grants)、任何代幣門控聊天、以太坊遵循協議等等都是鏈上身份。我們希望這個生態系統也能保護隱私。這意味著用戶的鍊上活動不應收集在一個地方:每個項目都應單獨存儲,並且用戶的錢包應該是唯一具有「全局視圖」的東西,可以同時看到您的所有證明。原生的每用戶多賬戶生態系統有助於實現這一目標,EAS 和 Zupass 等鏈下證明協議也是如此。
這代表了中期內以太坊隱私的務實願景。儘管可以在 L1 和 L2 引入一些功能以使隱私保護傳輸更加高效和可靠,但它現在就可以實現。一些隱私倡導者認為,唯一可以接受的事情是所有事物的完全隱私:加密整個 EVM。我認為這可能是理想的長期結果,但它需要對編程模型進行更根本的重新思考,而且目前還沒有達到準備在以太坊上部署的成熟水平。我們確實需要默認隱私以獲得足夠大的匿名集。然而,首先關注(i)賬戶之間的轉賬,以及(ii)身份和與身份相關的用例(例如私有證明)是務實的第一步,更容易實現,而且錢包現在就可以開始使用。
以太坊錢包也需要成為數據錢包任何有效的隱私解決方案的一個後果是,無論是用於支付、身份還是其他用例,它都會產生用戶存儲鍊下數據的需求。這在 Tornado Cash 中很明顯,它要求用戶保存每張代表 0.1-100 ETH 存款的「票據」。更現代的隱私協議有時會在鏈上保存加密的數據,並使用單個私鑰對其進行解密。這是有風險的,因為如果密鑰洩露,或者量子計算機變得可行,數據就會全部公開。 EAS 和 Zupass 等鏈下證明對鍊下數據存儲的需求更為明顯。
錢包不僅需要成為存儲鍊上訪問權限的軟件,還需要成為存儲您的私人數據的軟件。非加密世界也越來越認識到這一點,例如。請參閱 Tim Berners-Lee最近在個人數據存儲方面的工作。所有我們需要圍繞穩健保證訪問權限控制來解決的問題,我們還需要圍繞穩健保證數據的可訪問性和不洩漏來解決。也許這些解決方案可以疊加在一起:如果您有 N 個監護人,請在這 N 個監護人之間使用 M-of-N 秘密共享來存儲您的數據。數據本質上更難保護,因為你無法撤銷某人的數據份額,但我們應該提出盡可能安全的去中心化託管解決方案。
安全鍊訪問
如今,錢包相信他們的 RPC 提供商會告訴他們有關鏈的任何信息。這是一個漏洞,有兩個方面:- RPC 提供商可能會嘗試通過向他們提供虛假信息來竊取金錢,例如關於市場價格
- RPC 提供者可以提取有關用戶正在與之交互的應用程序和其他帳戶的私人信息
為了隱私,當今唯一現實的方法是運行您自己的完整節點。然而,現在 L2 正在進入人們的視野,運行所有內容的完整節點變得越來越困難。這裡相當於輕客戶端的是私有信息檢索(PIR)。 PIR 涉及保存所有數據副本的服務器和向服務器發送加密請求的客戶端。服務器對所有數據執行計算,返回客戶端所需的數據,並加密到客戶端的密鑰,而不會向服務器透露客戶端訪問了哪條數據。
為了保持服務器的誠實,各個數據庫項目本身就是 Merkle 分支,因此客戶端可以使用輕客戶端來驗證它們。
PIR 的計算量非常大。解決這個問題有幾種途徑:
- 蠻力:算法或專用硬件的改進可能會使 PIR 運行得足夠快。這些技術可能取決於預處理:服務器可以為每個客戶端存儲加密和打亂的數據,並且客戶端可以查詢該數據。以太坊環境中的主要挑戰是使這些技術適應快速變化的數據集(就像國家一樣)。這使得實時計算成本更低,但很可能使總計算和存儲成本更高。
- 削弱隱私要求:例如,每次查找只能有 100 萬個「mixin」,因此服務器會知道客戶端可以訪問的一百萬個可能值,但不知道任何更細的粒度。
- 多服務器 PIR:如果您使用多個服務器,並且這些服務器之間的誠實性假設為 1-of-N,那麼 PIR 算法通常會更快。
- 匿名而不是保密:請求可以通過 mixnet 發送,從而隱藏請求的發送者,而不是隱藏請求的內容。然而,有效地這樣做不可避免地會增加延遲,從而惡化用戶體驗。
理想的密鑰庫錢包
除了傳輸和狀態訪問之外,需要在跨 L2 上下文中順利工作的另一個重要工作流程是更改帳戶的驗證配置:無論是更改其密鑰(例如恢復),還是對帳戶的整個邏輯進行更深層次的更改。這裡有三層解決方案,按照難度遞增的順序排列:- 重播更新:當用戶更改其配置時,授權此更改的消息將在錢包檢測到用戶擁有資產的每個鏈上重播。有可能,消息格式和驗證規則可以獨立於鏈,因此可以在盡可能多的鍊上自動重播。
- L1 上的密鑰庫:配置信息位於 L1 上,l2 上的錢包使用 L1SLOAD 或 REMOTESTATICCALL 讀取它。這樣,只需要在L1上更新配置,配置就會自動生效。
- L2 上的密鑰庫:配置信息存在於 L2 上,l2 上的錢包使用 ZK-SNARK 讀取它。這與 (2) 相同,除了密鑰庫更新可能更便宜,但另一方面讀取更昂貴。
解決方案(3)特別強大,因為它與隱私很好地結合在一起。在正常的「隱私解決方案」中,用戶有一個秘密 s ,「葉子值」 L 發布在鏈上,並且用戶證明 L = hash(s, 1) 和 N = hash(s, 2) 對於某些(從未透露)他們控制的秘密。無效器 N 被發布,確保同一葉子的未來支出失敗,而不會洩露 L。這取決於用戶保證 s 的安全。恢復友好的隱私解決方案會說: s 是鏈上的位置(例如地址和存儲槽),並且用戶必須證明狀態查詢: L = hash(sload(s), 1) 。
Dapp安全
用戶安全中最薄弱的環節通常是 dapp。大多數時候,用戶通過訪問網站與應用程序交互,網站隱式地從服務器實時下載用戶界面代碼,然後在瀏覽器中執行。如果服務器被黑客攻擊,或者 DNS 被黑客攻擊,用戶將獲得界面的虛假副本,這可能會誘騙用戶執行任意操作。交易模擬等錢包功能對於降低風險非常有幫助,但它們還遠非完美。理想情況下,我們會將生態系統轉移到鍊上內容版本控制:用戶將通過其 ENS 名稱訪問 dapp,該名稱將包含接口的 IPFS 哈希值。更新接口需要來自多重簽名或 DAO 的鍊上交易。錢包會向用戶顯示他們是否正在與更安全的鍊上界面或安全性較低的 Web2 界面進行交互。錢包還可以向用戶顯示他們是否正在與安全鍊交互(例如階段 1+、多重安全審核)。
對於注重隱私的用戶,錢包還可以添加偏執模式,要求用戶點擊接受HTTP請求,而不僅僅是web3操作:
偏執模式可能的界面模型
更先進的方法是超越 HTML + Javascript,並用專用語言(可能是 Solidity 或 Vyper 上相對較薄的覆蓋層)編寫 dapp 的業務邏輯。然後,瀏覽器可以自動生成任何所需功能的 UI。 OKContract 已經在這樣做了。
另一個方向是加密經濟信息防禦:dapp 開發者、安全公司、鍊部署者和其他人可以設立一筆保證金,如果 dapp 被黑客攻擊或以高度誤導性的方式傷害用戶,則該保證金將支付給受影響的用戶。由一些鏈上裁決 DAO。錢包可以向用戶顯示基於債券大小的分數。
更長遠的未來
以上都是在傳統界面的背景下進行的,其中涉及指向和單擊事物以及將事物輸入到文本字段中。然而,我們也正處於範式發生更深刻變化的風口浪尖:- 人工智能,這可能會導致我們從點擊式打字範式轉向「說出你想做的事情,機器人就會弄清楚」的範式;
- 腦機接口,既有眼動追蹤等「溫和」方法,也有更直接甚至侵入性的技術(參見:今年第一位 Neuralink 患者);
- 客戶端主動防禦:brave 瀏覽器主動保護用戶免受廣告、跟蹤器和許多其他不良對象的侵害。許多瀏覽器、插件和加密錢包都有整個團隊積極致力於保護用戶免受各種安全和隱私威脅。這些「積極的守護者」在未來十年只會變得更加強大。
這些更激進的想法依賴於當今極其不成熟的技術,因此我今天不會將我的資產放入依賴它們的錢包中。然而,類似的事情似乎很明顯是未來的趨勢,因此值得開始朝這個方向更積極地探索。