Warum hat web3.js/metamask noch keine Funktion zum Entschlüsseln mit privatem Schlüssel?

Für Smart-Contracts und dApps ist es in vielen Fällen wichtig, verschlüsselte Daten auf der Blockchain abzulegen, verschlüsselt mit dem öffentlichen Schlüssel.

Ich habe gesucht, aber es scheint keine Möglichkeit zu geben, die Daten mit einer Erweiterung wie Metamask über web3.js zu entschlüsseln. Wenn ich eine dApp mit verschlüsselten Daten auf der Blockchain erstellen möchte, könnte ich sie nur entschlüsseln, indem ich den Benutzer auffordere, seinen privaten Schlüssel jedes Mal einzugeben, wenn die App Daten entschlüsseln muss. Der Benutzer muss den privaten Schlüssel aus der Metamask-Erweiterung kopieren, wo er sein Passwort einfügen muss, um es verfügbar zu machen, dann mit dem Kopieren fortfahren und es in die App einfügen, damit die App die Daten entschlüsseln kann. Dies ist für den Benutzer lästig und auch eine große Sicherheitslücke.

Ein viel besserer Weg (wie es gemacht werden sollte) ist, wo Web3.js eine Funktion zum Entschlüsseln von Daten hat, damit die Erweiterung sie dort entschlüsseln und die entschlüsselten Daten zurückgeben kann. Aber das scheint nicht möglich zu sein.

Warum haben sie das (noch) nicht umgesetzt? Es scheint mir ziemlich wichtig zu sein, um sichere dApps und Smart-Contracts zu bauen. Wenn es bessere Möglichkeiten gibt, dies zu tun, würde ich es gerne hören.

Antworten (1)

Metamask hat eth_decrypt implementiert . encryptSie können from eth-sig-util verwenden , um die Verschlüsselung durchzuführen.

Leider gibt es nicht viel Dokumentation darüber. Es wurde in mehreren Threads auf Github wie https://github.com/MetaMask/metamask-extension/issues/1190 , https://github.com/ethereum/EIPs/pull/1098 und https://github.com diskutiert /MetaMask/eth-sig-util/pull/18#issuecomment-384796354 . Es gibt kein EIP, das die Funktion dokumentiert.

Wie greifen Sie auf die Methode zu? Ich habe nur Web3.js verwendet, aber das stammt von Metamask selbst, oder? Wie funktioniert das, wenn ein Benutzer eine andere Wallet-Erweiterung als Metamask verwendet?
Im ersten Link ist dokumentiert, wie man es benutzt: Senden Sie einen Anfragebefehl an den Ethereum-Anbieter. Clients, die dies nicht unterstützen, sollten einen Fehler zurückgeben.