Использование открытых и закрытых ключей Ethereum для шифрования и расшифровки сообщения (клиент метамаски)

Я пытаюсь использовать закрытый и открытый ключи Ethereum для шифрования сообщений, таких как PGP, и я обнаружил этот модуль npm на github, https://github.com/pubkey/eth-crypto#encryptwithpublickey , который позволяет вам получить открытый ключ из закрытого ключ, зашифровать сообщение с помощью открытого ключа и расшифровать сообщение с помощью закрытого ключа. Я использую MetaMask в качестве интерфейса web3 для своего децентрализованного приложения и пытаюсь сделать так, чтобы шифрование сообщений работало без проблем. Однако я не могу найти способ автоматически передать закрытый ключ учетной записи MetaMask по умолчанию в модули npm вместо того, чтобы вручную щелкнуть экспортировать закрытый ключ из пользовательского интерфейса расширения MetaMask.

Ответы (3)

Смысл Metamask как продукта в том, чтобы никогда не раскрывать закрытый ключ веб-приложениям, которые просматривает пользователь. Чтобы вы могли использовать этот конкретный инструмент для шифрования данных нестандартным способом, Metamask в качестве плагина должен включать хук, чтобы веб-приложение передавало данные для шифрования, и иметь Metamask для самого шифрования.

Это похоже на идею подписи сообщения; существует установленный стандарт использования закрытого ключа для подписи данного сообщения, а Metamask предоставляет возможность, позволяющую разработчикам приложений отправлять строку в Metamask, а затем подписывать строку и возвращать подпись, никогда не раскрывая закрытый ключ.

Подход, который вы, вероятно, захотите использовать в своем приложении, заключается не в работе с Metamask, а в создании утилиты, которая выполняет ту же роль, что и Metamask (является самостоятельным кошельком Ethereum), так что она получает закрытые ключи ( или мнемоническая фраза) от пользователя, а затем имеет ключи, доступные для шифрования данных для пользователя.

Спасибо за комментарий, я думал об использовании рабочего процесса подписи MetaMask. Однако функция подписи довольно ограничена, и я не думаю, что смогу построить на ней систему обмена сообщениями с шифрованием, подобную PGP. Вы правы, я рассмотрю возможность создания клиента Ethereum со встроенной системой шифрования.

Ваш закрытый ключ не должен автоматически отправляться на какой-либо веб-сайт, на самом деле это функция безопасности. Поскольку любой, у кого есть ваш закрытый ключ, позволит любому веб-сайту, имеющему к нему доступ, также иметь полный доступ к вашей учетной записи ethereum, что не только желательно, но я также рекомендую использовать другую учетную запись исключительно для шифрования и расшифровки сообщений, потому что, если любые проблемы безопасности, возникающие на этом или любом другом сайте, вы потеряете только секретность указанных сообщений, а не свои средства или любые другие функции, связанные с вашей основной учетной записью.

Абсолютно согласна с тобой. Что бы вы порекомендовали мне сделать для шифрования сообщений в Эфириуме, кроме использования шепота.

Вы можете использовать встроенную функцию расшифровки Metamask.

Проверьте это: https://betterprogramming.pub/exchange-encrypted-data-on-blockchain-using-metamask-a2e65a9a896c