以太坊二層賬戶金鑰生成指南

買賣虛擬貨幣
最近,Loopring Exchange發生了一起因前端漏洞引發的安全事件,導致中繼服務緊急停止。所有使用者在交易前需要更新其EdDSA金鑰對。有關該錯誤的完整說明請參見Starkware的部落格[1]。幸運的是,事件並未造成損失。然而,關於弱私鑰的漏洞屢屢發生,由於使用不當而造成大量損失。據WEIRD[2],由於使用“腦錢包”(一種不正確的方法來生成私鑰),超過2800個比特幣和40,000個以太幣被盜。但在Loopring事件中情況略有不同。出現風險的是用於zkRollup的新金鑰,而不是以太坊賬戶的金鑰,或者如Starkware所說,這是一個賬戶金鑰。以太坊金鑰仍然處於安全狀態。為什麼需要賬戶金鑰而不是使用以太坊金鑰?如何安全地生成和儲存它?為什麼我們需要一個賬戶金鑰?zkRollup增強了以太坊的可擴充套件性,同時安全性仍保持在L1級別。與新手使用者不同,zkRollup的使用者很可能已經擁有一個以太坊賬戶。為什麼仍需要一個賬戶金鑰?主要有三個原因。1.SNARK友好賬戶金鑰需要對SNARK友好。與以太坊金鑰不同,它使用不同的橢圓曲線(例如Ed25519,取代secp256k1)。通常,EdDSA金鑰用於簽署鏈下請求,因為它對SNARK更為友好。但是,因為私鑰的長度相同,仍然可以使用與以太坊金鑰相同的私鑰,但顯然對應的公鑰是不同的。
2.相容智慧合約賬戶由於中繼器需要簽名來檢查鏈下交易的有效性並生成證明,因此它不適用於合同賬戶。最佳實踐是使用以太坊賬戶授權建立一個新的金鑰對,這樣對外部賬戶和合約賬戶都適用。3.風險隔離鏈下簽名帶來了新的安全風險。如果以太坊金鑰用於zkRollup,則賬戶金鑰的洩漏意味著以太坊帳戶不再安全。使用不同的賬戶金鑰可以隔離風險,即使賬戶金鑰被盜或丟失,以太坊金鑰也可以保持安全。如何生成賬戶金鑰?私鑰必須完全隨機且不可預測,並且金鑰空間應足夠大。因此,問題似乎等同於生成隨機數。這看似可行,但並非那麼容易,因為這需要收集足夠的噪聲。但是,如果以太坊賬戶已經存在,我們可以使用多種方法來確定性地從以太坊賬戶生成一個賬戶金鑰。
1.使用以太坊賬戶簽名簡單來說,我們可以透過指定簽名從私鑰生成賬戶金鑰。如Vitalik[3]所述,account_key = ecdsa_sign(private_key,“ 42”)。可使用有意義的訊息代替“ 42”,以警告使用者他在做什麼,例如“簽署此訊息以登入xxx。”。如果以太坊賬戶是合約賬戶,則將使用EIP-1271來檢查有效性。2.對簽名進行雜湊Matter Labs的聯合創始人Alex Gluchowski改進了Vitalik的建議[4],account_key = sha256(ecdsa_sign(private_key, “Sign this message to login to service xyz”))。他強調說:“從密碼分析的角度來看,sha256(或另一個偽隨機雜湊)很重要:簽名是橢圓曲線的點,因此我們需要打破兩個金鑰之間的任何潛在關係。”實際上,這種方法已在zkSync中使用。這看起來類似簡化版的PBKDF2[5]協議。但是,我希望對此有更正式的安全分析或證明,因為近來的一些研究成果指出基於雜湊的MAC存在安全風險。3.Loopring的新方法
在最新的文章[6]中,Loopring提出了一種生成賬戶金鑰的新方法。Loopring採納了Alex和Vitalik的建議。此外,引入了計數器n,這樣使用者更新賬戶金鑰時,可以確定性地產生不同的私鑰。總而言之,我們可以藉助數字簽名、偽隨機預言機和計數器等技術手段,從以太坊賬戶中獲得一個賬戶金鑰。賬戶金鑰是唯一且確定的。不過,你仍然可以選擇生成一個隨機數作為私鑰。如何管理賬戶金鑰?如果使用確定性的方式生成賬戶金鑰,則不需要額外的手段來管理賬戶金鑰。當我們需要為Rollup交易簽名時,只需即時從以太坊賬戶中計算出賬戶金鑰。以太坊金鑰仍由數字貨幣錢包管理,這不會引入金鑰管理中的額外安全風險。儘管如此,大部分的賬戶金鑰仍儲存在瀏覽器中(極度不建議這樣使用),加密錢包(包括硬體錢包)需要支援更多的加密原語,這樣dApp才無需擔心金鑰管理的問題。結論
我們可以確定性的方式從以太坊賬戶中生成一個賬戶金鑰。賬戶金鑰的安全級別可以與以太坊金鑰相同。加密錢包需要支援更多的加密原語,以提供更好的安全基礎架構。參考資料:[1]https://medium.com/starkware/looprings-frontend-vulnerability-explained-106df1aa17db[2]https://www.wired.com/story/blockchain-bandit-ethereum-weak-private-keys/[3]https://twitter.com/VitalikButerin/status/1258382081417187331[4]https://twitter.com/gluk64/status/1258426478334787585
[5]https://eprint.iacr.org/2014/406.pdf[6]https://blogs.loopring.org/new-approach-to-generating-layer-2-account-keys-cn/

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;