Web3js

網路錢包最佳實踐

  • March 12, 2022

我正在將一個 ether/erc20 令牌錢包放在一個 chrome 擴展中,但希望在私鑰安全方面遵循最佳實踐。

我正在使用localstorage處理登錄,其內容如下

Localstorage (no account):
   (empty)

Localstorage (signed out):
   password hash
   encrypted private key

Localstorage( signed in):
   password hash
   decrypted private key
   expiry timestamp for decrypted private key

這有什麼本質上的危險嗎?我正在使用 npm 包 web3v1 (beta) 和 crypto-js

您是指 HTML5 本地儲存中的本地儲存嗎?

如果是這樣,我個人不會將使用者私鑰儲存在 localStorage 中。

像這樣的惡意 javascript,

for (var i = 0; i < localStorage.length; i++){
 $('body').append(localStorage.getItem(localStorage.key(i)));
}

它將使用 localStorage.key(index) 中的 key 方法,該方法返回索引鍵以在瀏覽器中循環訪問 localStorage 並讀出所有值。

據我了解,除非您清除它,否則 localStorage 會保留。也許對於最後一個案例使用 sessionStorage

Localstorage (no account):
   (empty)

Localstorage (signed out):
   password hash
   encrypted private key

Sessionstorage( signed in):
   password hash
   decrypted private key
   expiry timestamp for decrypted private key

這樣,在瀏覽器/會話關閉時,解密的私鑰將消失。

如果您沒有適當的安全專業知識,我建議您不要建立自己的錢包。在前端處理機密時,有很多事情可能會出錯,單個 xss 可能會洩露所有機密,錯誤的設計方法可能會使您的擴展受到使用者訪問的任何惡意網站的擺佈..等等。也就是說,如果你必須創建一個新錢包,你應該查看 metamask 瀏覽器擴展的設計和實現方式https://github.com/MetaMask/metamask-extension。Metamask 已經通過了多輪安全審查,並擁有可靠的社區驗證。

引用自:https://ethereum.stackexchange.com/questions/31827