Uso de claves públicas y privadas de Ethereum para cifrar y descifrar mensajes (cliente metamask)

Estoy tratando de usar claves privadas y públicas de Ethereum para el cifrado de mensajes como PGP y descubrí este módulo npm en github, https://github.com/pubkey/eth-crypto#encryptwithpublickey , que le permite obtener una clave pública de privado clave, cifrar el mensaje con la clave pública y descifrar el mensaje con la clave privada. Estoy usando MetaMask como la interfaz web3 para mi dapp y estoy tratando de que el cifrado de mensajes funcione sin problemas. Sin embargo, no puedo encontrar una manera de pasar automáticamente la clave privada de la cuenta predeterminada de MetaMask a los módulos npm en lugar de hacer clic manualmente en exportar clave privada desde la interfaz de usuario de la extensión de MetaMask.

Respuestas (3)

El objetivo de Metamask como producto es nunca exponer la clave privada a las aplicaciones web a las que navega el usuario. Para que pueda usar esa herramienta en particular para cifrar datos de manera personalizada, Metamask como complemento necesitaría incluir un gancho para que la aplicación web pase los datos que se cifrarán y Metamask para el cifrado en sí.

Esto es similar a la idea de firmar un mensaje; existe un estándar establecido para el uso de una clave privada para firmar un mensaje determinado, y Metamask proporciona un enlace que permite a los desarrolladores de aplicaciones enviar una cadena a Metamask y hacer que firme la cadena y devuelva la firma, sin exponer nunca la clave privada.

El enfoque que probablemente desee adoptar con su aplicación no es trabajar con Metamask, sino crear una utilidad que cumpla la misma función que Metamask (es una billetera Ethereum por derecho propio), de modo que reciba las claves privadas ( o frase mnemotécnica) del usuario, y luego tiene las claves disponibles para cifrar los datos para el usuario.

Gracias por el comentario, estaba pensando en usar el flujo de trabajo de firma de MetaMask. Sin embargo, la función de firma es bastante limitada, por lo que no creo que pueda construir un sistema de mensajería de cifrado tipo PGP sobre ella. Tiene razón, estudiaré la posibilidad de crear un cliente Ethereum con un sistema de cifrado integrado.

Su clave privada no debe enviarse automáticamente a ningún sitio web, en realidad es una función de seguridad. Dado que cualquier persona con su clave privada permitiría a cualquier sitio web que tenga acceso a ella también tendría acceso completo a su cuenta de ethereum, eso no solo es deseable, sino que también recomendaría usar una cuenta diferente únicamente para cifrar y descifrar mensajes, porque si cualquier problema de seguridad que surja de este o cualquier otro sitio, solo perderá el secreto de dichos mensajes y no sus fondos o cualquier otra funcionalidad asociada con su cuenta principal.

Totalmente de acuerdo contigo. ¿Qué me recomendaría hacer para el cifrado de mensajes en ethereum además de usar susurro?

Puede utilizar la funcionalidad de descifrado integrada de Metamask.

Mira esto: https://betterprogramming.pub/ex Changing-encrypted-data-on-blockchain-using-metamask-a2e65a9a896c