Лучшие практики веб-кошелька

Я собираю кошелек с токенами 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.

Ответы (2)

Вы имеете в виду локальное хранилище, как в локальном хранилище HTML5?

Если да, то лично я бы не стал хранить закрытый ключ пользователя в localStorage.

Вредоносный фрагмент javascript, такой как этот,

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

который будет использовать ключевой метод в localStorage.key(index), который возвращает индексный ключ для циклического просмотра 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

Таким образом, при закрытии браузера/сеанса расшифрованный закрытый ключ исчезнет.

как этот вредоносный javascript мог попасть на страницу

Я бы посоветовал не создавать собственный кошелек, если у вас нет соответствующего опыта в области безопасности. Есть много вещей, которые могут пойти ужасно неправильно при обработке секретов во внешнем интерфейсе, один xss может привести к утечке всех секретов, неправильный подход к дизайну может оставить ваше расширение открытым на милость любого вредоносного сайта, который посещает ваш пользователь и т. д. Тем не менее, если вам необходимо создать новый кошелек, вы должны проверить, как разработано и реализовано расширение браузера метамаски https://github.com/MetaMask/metamask-extension . Metamask прошел несколько раундов проверки безопасности и получил надежную проверку сообщества.