
作者:Vitalik Buterin;編譯:鄧通,比特鏈視界
假設明天宣布量子計算機可用,並且不良行為者已經可以訪問它們並能夠使用它們竊取用戶的資金。 防止這種情況的發生是抗量子密碼學(例如 Winternitz 籤名、STARK)的目標,一旦帳戶抽象到位,任何用戶都可以按照自己的計劃轉而使用抗量子籤名方案。 但如果我們沒有那麼多時間,而突然的量子轉移早在這之前就發生了怎麼辦?
我認為,實際上,我們已經做好了準備, 可以製作一個非常簡單的恢復分叉來應對這種情況。 區塊鏈將不得不硬分叉,用戶將不得不下載新的錢包軟體,但很少有用戶會損失資金。
量子計算機的主要挑戰如下。 以太坊地址定義為 keccak(priv_to_pub(k))[12:],其中 k 是私鑰,priv_to_pub 是將私鑰轉換為公鑰的橢圓曲線乘法。 使用量子計算機,橢圓曲線乘法變得可逆(因為這是一個離散對數問題),但哈希仍然是安全的。 如果用戶尚未使用其帳戶進行任何交易,則只有地址是公開可見的,並且他們已經是安全的。 但是,如果用戶進行了一筆交易,那麼該交易的籤名就會洩露公鑰,這在後量子世界中允許洩露私鑰。 因此大多數用戶都容易受到攻擊。
但我們可以做得更好。 關鍵的認識是,在實踐中, 大多數用戶的私鑰本身就是一堆哈希計算的結果。 許多密鑰是使用 BIP-32 生成的,它通過從主種子短語開始的一系列哈希值生成每個地址。 許多非 BIP-32 密鑰生成方法的工作原理類似,例如: 如果用戶有腦錢包,它通常是應用於某些密碼的一系列哈希值(或中等難度的 KDF)。
這意味著 EIP 的自然結構是通過硬分叉鏈來從量子緊急情況中恢復:
-
恢復第一個明顯發生大規模盜竊的區塊之後的所有區塊;
-
傳統基於 EOA 的交易被禁用;
-
添加了新的交易類型,以允許來自智能合約錢包的交易(例如 RIP-7560 的一部分)(如果尚不可用);
-
添加新的交易類型或操作碼,您可以通過它提供 STARK 證明,證明 (i) 私有原像 x,(ii) 來自 k 個批准的哈希函數列表的哈希函數 ID 1 <= i < k, (iii) 公共地址 A,使得 keccak(priv_to_pub(hashes[i](x)))[12:] = A。STARK 還接受該新驗證碼的哈希值作為公共輸入帳戶。 如果證明通過,您的帳戶代碼將切換為新的驗證代碼,從那時起您將能夠將其用作智能合約錢包。
出於Gas效率的原因(畢竟STARK很大),我們可以讓STARK成為批量證明,證明上述類型的N個STARK(必須是STARK-of-STARK,而不是直接證明多個聲明 ,因為每個用戶的 x 需要對聚合器保密)。
原則上, 實施此類硬分叉的基礎設施可以在明天開始建設,從而使以太坊生態系統做好充分準備,以防量子緊急情況確實發生。