透過臨時金鑰對與帳戶抽象實現量子安全
感謝 @abaiocchi 的貢獻以及 @asanso 的回饋
摘要
我們提出了一種量子安全錢包設計,無需更改以太坊的簽名方案或協議規則。透過利用帳戶抽象(Account Abstraction),我們使每個 ECDSA 金鑰對變為一次性使用:每次交易都會輪換簽名者,而智能合約錢包地址保持不變。這消除了長期公鑰暴露的問題(這是 Shor 演算法會利用的核心漏洞),且僅使用現有的基礎設施。此方案旨在至少在短期內解決執行層的量子安全問題。
簡介
量子計算對橢圓曲線加密的威脅已不再是遙遠的擔憂。Shor 演算法能有效解決離散對數問題,進而破解 ECDSA。雖然目前尚未出現具備密碼學相關能力的量子電腦,但時間表正在縮短。以太坊基金會已設立了專門的後量子(Post-Quantum, PQ)研究項目,Vitalik 最近也概述了更廣泛的 PQ 路線圖 。
在以太坊上,一個從未進行過交易的外部帳戶(EOA)實際上是量子安全的,因為其公鑰隱藏在雜湊值(Hash)之後。但一旦它簽署了交易,公鑰就會永久暴露在鏈上,從量子抗性的角度來看,該地址實際上已被廢棄。
目前已有大量工作致力於將後量子簽名方案直接引入 EVM,最著名的包括 Falcon (1 , 2 , 3 , ETHFALCON ) 和 Poqeth 。這些努力對於長期發展至關重要,但目前 Falcon 的鏈上驗證成本高達 100 萬 gas 以上,而基於雜湊的簽名目前約在 20 萬 gas 範圍。一旦 EIP-8051 和 EIP-8052 被加入 EVM,這些成本可能會進一步降低。
Gas 成本並非後量子簽名的唯一挑戰:標準化、硬體錢包相容性以及對經典攻擊的驗證抗性,都是以太坊簽名新標準需要克服的重大障礙。即使此類簽名已準備就緒,標準化仍需時間,且完全取代 ECDSA 需要協議層級的變更(EIP-7701 , RIP-7560 )。我們的方法是互補的:與其取代 ECDSA,我們讓它變得「可丟棄」。
提議設計
我們可以利用帳戶抽象來對區塊鏈其餘部分保持靜態身份(智能帳戶),同時在每次交易後切換簽名者的身份。這並不能阻止量子電腦恢復用戶的私鑰,而是讓用於簽署前一筆交易的私鑰對於簽署任何未來交易變得毫無用處。
該方案非常簡單:
用戶在其 userOp 的 calldata 中附加一個地址
智能合約錢包驗證交易
執行 userOp
智能合約錢包上的授權簽名者更改為新地址
交易執行後,舊私鑰即使被恢復也完全無效。由於只有地址被傳遞給智能合約錢包,因此僅揭露了公鑰雜湊的一部分,使得新私鑰在下一次交易前保持量子安全。
可以採取一些實際措施來簡化流程:例如,用戶無需選擇任意新地址,而是可以按照 BIP44 衍生路徑生成要發送的地址,這在目前使用的錢包中已廣泛支援。
實際實現
此設計可以透過對基礎 SimpleWallet 進行細微調整來實現。我們只需要一種從 calldata 中提取下一個調用者並更改智能合約錢包所有者的方法。我們在此 repo 實現了一個概念驗證(PoC)。
此實現還旨在解決我們發現的一個關鍵問題:即使 userOp 失敗(revert),我們也需要輪換簽名者。否則,失敗的交易將意味著智能合約錢包當前的簽名者已暴露。相反,如果 userOp 失敗,我們會發出一個事件,但仍會完成交易並執行輪換部分。
透過此實現,我們記錄了一些交易(範例 ),並測得 ERC20 轉帳約需 13.6 萬 gas,相對於同一鏈上相同的代幣轉帳(範例 ),gas 開銷不到 10 萬。這一開銷已經明顯低於目前的後量子簽名驗證,且還帶來了帳戶抽象的額外好處。如果將用戶輪換本身的 gas 成本添加到現有的基於帳戶抽象的錢包中,成本會更低,在整體架構中幾乎可以忽略不計。
社交恢復功能的再利用
實現相同程序的另一種方法是利用智能合約錢包現有的社交恢復功能。除非有特定的限制禁止這樣做,否則我們可以將帳戶的恢復守護者設置為我們自己的地址,在每次交易後請求身份恢復。這會帶來略高的 gas 成本,因為我們是在挪用一個為不同目的設計的功能,但優點是無需在鏈上部署自定義架構即可開始使用這種量子安全錢包設計。
我們對此方法的實驗顯示,此操作預計的 gas 成本開銷約為 3 萬,而我們使用的整個架構(不含恢復)的總 gas 開銷約為 11 萬。^([1] )
已知漏洞
我們意識到此設計存在一個漏洞:內存池(mempool)等待期 。在此期間,用戶的公鑰是可見的,具備量子能力的攻擊者可以檢索其私鑰並進行搶跑(frontrun)。
目前這個問題並非深不可測,因為攻擊者恢復私鑰的時間窗口極短,使得這種攻擊極難甚至不可能實現。如果想要完全安全,使用私有內存池 可以完全消除此問題。此外,在 L2 環境下,由於等待時間更短,該漏洞也會得到緩解。
結論
我們提出了一種方案,透過在每次交易後輪換 ECDSA 金鑰對,並利用帳戶抽象來保持穩定的鏈上身份,從而在執行層實現量子安全。該方法不需要更改協議,且引入的 gas 開銷極小(比標準轉帳多約 10 萬)。它並非要取代後量子簽名方案(後者對於完整的長期解決方案仍是必要的),但它僅利用當前基礎設施就消除了長期公鑰暴露的問題。主要的開放性問題是內存池層級的暴露:在交易待處理期間,當前簽名者的公鑰是可見的,而私有內存池是最直接的緩解措施。