Best Practices für Web-Geldbörsen

Ich stelle eine Ether/Erc20-Token-Brieftasche in einer Chrome-Erweiterung zusammen, möchte aber Best Practices in Bezug auf die Sicherheit privater Schlüssel befolgen.

Ich verwende localstorage, um die Anmeldung zu verarbeiten, und der Inhalt lautet wie folgt

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

ist an sich irgendwas gefährlich daran? Ich verwende die npm-Pakete web3v1 (beta) und crypto-js

Antworten (2)

Meinst du localstorage wie in HTML5 localstorage?

In diesem Fall würde ich persönlich keinen privaten Schlüssel eines Benutzers in localStorage speichern.

Ein bösartiger JavaScript-Code wie dieser,

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

die die key-Methode in localStorage.key(index) verwendet, die den Index-th-Schlüssel zurückgibt, um localStorage in einem Browser zu durchlaufen und alle Werte auszulesen.

Nach meinem Verständnis bleibt localStorage, es sei denn, Sie löschen es. Verwenden Sie für den letzten Anwendungsfall vielleicht 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

Auf diese Weise verschwindet der entschlüsselte private Schlüssel beim Schließen des Browsers/der Sitzung.

wie würde dieses bösartige Javascript auf die Seite gelangen

Ich würde davon abraten, ein eigenes Wallet zu bauen, wenn Sie nicht über die entsprechende Sicherheitsexpertise verfügen. Es gibt viele Dinge, die beim Umgang mit Geheimnissen in einem Frontend schrecklich schief gehen können, ein einziges xss kann alle Geheimnisse preisgeben, der falsche Designansatz kann Ihre Erweiterung der Gnade jeder bösartigen Website aussetzen, die Ihr Benutzer besucht, usw. Wenn Sie jedoch eine neue Brieftasche erstellen müssen, sollten Sie sich ansehen, wie die Metamask-Browsererweiterung https://github.com/MetaMask/metamask-extension entworfen und implementiert wird . Metamask hat mehrere Runden der Sicherheitsüberprüfung durchlaufen und verfügt über eine solide Community-Validierung.