使用 JS 為 ETH 創建安全紙錢包
我即將開始將我的 ETH 轉移到紙質錢包以妥善保管。目前,資金儲存在線上交易所。歷史表明,這是一個非常糟糕的主意。這並不多,但我的威脅模型只是失去 ETH。這些問題與安全紙錢包的創建有關。
為方便起見,我想使用網路錢包創建工具,例如 MyEtherWallet 和/或 EthAddress。我分析了他們的原始碼,但我都找不到可能的後門。(我找不到 - 這並不意味著沒有)
我所做的是:
- 驗證了github.com的TLS證書鏈
- 從 GitHub 儲存庫下載程式碼
- 審查了所有程式碼,尤其是 JavaScript 函式
- 檢查並比較他們是否使用來自官方 repo 的相同未修改的 Ethereum JavaScript 類
- 解析錢包創建程式碼
- 使用瀏覽器中的開發工具調試每個步驟
- 為非常短的碰撞測試生成 1000 個錢包
我現在知道它
window.crypto.getRandomValues
用於它的 PRNG,這是目前網路瀏覽器中最好的方式,而不使用第三方庫。他們不使用損壞的散列算法。可能的問題:
- 錢包地址公鑰衝突(與比特幣的 34-1 個字元相比,加密安全的熵/隨機源和 40 個字元的長度不太可能)
- 網站程式碼中的錯誤和/或 EthereumJS 庫和/或加密實現中的錯誤(這不是第一次在 ethereumJS-utils 中包含嚴重錯誤)
- 在生產中的測試可能比官方桌面錢包軟體少
預防措施:
- 在氣隙電腦上創建錢包
- 在多個物理位置加密和儲存資訊
- 清除瀏覽器記憶體
需要回答的問題:
- 此時創建的錢包將來會向後兼容嗎?(大都會,寧靜,…)
- 我如何驗證錢包是否已正確創建(私鑰),而無需先將少量資金送入和送出錢包?
- 還有什麼我需要考慮的並且我的假設是正確的嗎?
- 為什麼網際網路上只有第三方網路錢包創建頁面,而(還)沒有官方頁面?(可能是因為:乙太坊:“我們正在為工具製造商製造工具”?)
非常感謝你
此時創建的錢包將來會向後兼容嗎?(大都會,寧靜,…)
我可以確認 MyEtherWallet 將始終為我們加密版本的舊版本以及其他錢包創建的常用方法提供向後功能。我們目前正在轉換為使用與 geth 相同的加密,這將 (1) 幫助跨錢包標準化和 (2) 使人們在未來更容易從 MyEtherWallet -> Mist 轉移。我們也希望實現其他的訪問方式(即:Jaxx 助記符等)。
作為參考,隨著乙太坊“成長”,唯一可能改變的是私鑰的 json / keystore / encryption / etc. 格式。最後,它仍在解密以獲取相同版本的私鑰。您儲存和解密它的方式可能會改變。隨著加密方法和標準的出現,大多數(如果不是全部)錢包提供商將保持最新狀態,並提供向後功能和交叉功能。
我如何驗證錢包是否已正確創建(私鑰),而無需先將少量資金送入和送出錢包?
就個人而言,我使用 MyEtherWallet 離線交易選項卡來測試進出任何新的深冷錢包。我想您可以使用不同的客戶端導入密鑰並驗證它是否為您提供了相同的地址。因此,由於您使用的是使用 Javascript 的 MyEtherWallet,您可以將未加密的私鑰導入 geth 並驗證地址,或導入 eth,或其他任何東西。您不會希望與另一個 Javascript 實現(如 EthAddress)進行交叉驗證。
還有什麼我需要考慮的並且我的假設是正確的嗎?
我建議使用您的冷儲存密鑰保留一份 EthAddress 或 MyEtherWallet 的壓縮儲存庫的副本。這樣,將來如果發生變化或發生變化,您仍然可以執行一個本地版本,您知道該版本可以與您的私鑰一起使用。
為什麼網際網路上只有第三方網路錢包創建頁面,而(還)沒有官方頁面?(可能是因為:乙太坊:“我們正在為工具製造商製造工具”?)
乙太坊開發人員表示他們正在努力實現輕客戶端。在這一點上,我覺得令人印象深刻的是,他們有這麼多不同語言的客戶,而且 Mist / Ethereum 錢包已經和它一樣強大了。自推出以來已經過去了 7 個月。另外,請記住,乙太坊錢包 / Mist*不僅僅是一個錢包。*很多人似乎忘記了這一點,因為這就是他們使用它的全部。但實際上,他們用合約和代幣所做的事情是驚人的,也是他們目前關注的重點。
作為參考,以下是此執行緒中提到的三個站點:
全面披露:我是 MyEtherWallet 的聯合創始人。我盡量保持客觀。