Verwenden von öffentlichen und privaten Schlüsseln von Ethereum zum Verschlüsseln und Entschlüsseln von Nachrichten (Metamask-Client)

Ich versuche, private und öffentliche Schlüssel von Ethereum für die Nachrichtenverschlüsselung wie PGP zu verwenden, und ich habe dieses npm-Modul auf Github herausgefunden, https://github.com/pubkey/eth-crypto#encryptwithpublickey , mit dem Sie den öffentlichen Schlüssel von privat erhalten können Schlüssel, Nachricht mit öffentlichem Schlüssel verschlüsseln und Nachricht mit privatem Schlüssel entschlüsseln. Ich verwende MetaMask als Web3-Schnittstelle für meine Dapp und versuche, dass die Nachrichtenverschlüsselung nahtlos funktioniert. Ich kann jedoch keine Möglichkeit finden, den privaten Schlüssel des MetaMask-Standardkontos automatisch an die npm-Module weiterzugeben, anstatt manuell auf den privaten Schlüssel exportieren von der Benutzeroberfläche der MetaMask-Erweiterung zu klicken.

Antworten (3)

Der Sinn von Metamask als Produkt besteht darin, den privaten Schlüssel niemals den Webanwendungen zugänglich zu machen, zu denen der Benutzer navigiert. Damit Sie dieses spezielle Tool verwenden können, um Daten auf benutzerdefinierte Weise zu verschlüsseln, müsste Metamask als Plugin einen Hook enthalten, damit die Webanwendung die zu verschlüsselnden Daten weitergibt, und Metamask für die Verschlüsselung selbst haben.

Dies ähnelt der Idee, eine Nachricht zu signieren ; Es gibt einen etablierten Standard für die Verwendung eines privaten Schlüssels zum Signieren einer bestimmten Nachricht, und Metamask bietet einen Haken, der es Anwendungsentwicklern ermöglicht, eine Zeichenfolge an Metamask zu senden und Metamask die Zeichenfolge signieren und die Signatur zurücksenden zu lassen, ohne den privaten Schlüssel preiszugeben.

Der Ansatz, den Sie wahrscheinlich mit Ihrer Anwendung verfolgen möchten, besteht nicht darin, mit Metamask zu arbeiten, sondern ein Dienstprogramm zu erstellen, das die gleiche Rolle wie Metamask erfüllt (ist eine eigenständige Ethereum-Brieftasche), sodass es die privaten Schlüssel erhält ( oder mnemonische Phrase) vom Benutzer und hat dann die Schlüssel zur Verfügung, um Daten für den Benutzer zu verschlüsseln.

Vielen Dank für den Kommentar, ich habe darüber nachgedacht, den Signatur-Workflow von MetaMask zu verwenden. Die Signierfunktion ist jedoch ziemlich begrenzt, und ich glaube nicht, dass ich darauf ein PGP-ähnliches Verschlüsselungs-Messaging-System aufbauen kann. Sie haben Recht, ich werde versuchen, einen Ethereum-Client mit integriertem Verschlüsselungssystem zu erstellen.

Ihr privater Schlüssel sollte nicht automatisch an eine Website gesendet werden, das ist eigentlich eine Sicherheitsfunktion. Da jeder mit Ihrem privaten Schlüssel jede Website, die darauf Zugriff hat, auch vollen Zugriff auf Ihr Ethereum-Konto haben würde, ist das nicht nur wünschenswert, sondern ich würde auch empfehlen, ein anderes Konto ausschließlich zum Verschlüsseln und Entschlüsseln von Nachrichten zu verwenden, denn wenn Jegliche Sicherheitsprobleme, die sich aus dieser oder einer anderen Website ergeben, würden Sie nur die Geheimhaltung dieser Nachrichten verlieren und nicht Ihre Gelder oder andere mit Ihrem Hauptkonto verbundene Funktionen.

Ich stimme dir vollkommen zu. Was würden Sie mir für die Nachrichtenverschlüsselung auf Ethereum neben der Verwendung von Flüstern empfehlen?

Sie können die integrierte Entschlüsselungsfunktion von Metamask verwenden.

Schauen Sie sich das an: https://betterprogramming.pub/exchanging-encrypted-data-on-blockchain-using-metamask-a2e65a9a896c