¿Por qué web3.js/metamask todavía no tiene una función de descifrado con clave privada?

Para contratos inteligentes y dApps, en muchos casos es importante colocar datos encriptados en la cadena de bloques, encriptados con la clave pública.

He estado buscando, pero no parece haber una forma de descifrar los datos usando una extensión como metamask a través de web3.js. Si quisiera crear una dApp con datos cifrados en la cadena de bloques, solo podría descifrarla pidiéndole al usuario que inserte su clave privada cada vez que la aplicación necesite descifrar datos. El usuario debe copiar la clave privada de la extensión metamask, donde debe insertar su contraseña para exponerla, luego proceder a copiarla y pegarla en la aplicación, para que la aplicación pueda descifrar los datos. Esto es tedioso para el usuario y también una gran falla de seguridad.

Una manera mucho mejor (la forma en que debe hacerse) es donde Web3.js tiene una función para descifrar datos, de modo que la extensión pueda descifrarlos allí y devolver los datos descifrados. Pero esto no parece ser posible.

¿Por qué no han implementado esto (todavía)? Me parece bastante importante para crear dApps y contratos inteligentes seguros. Si hay mejores maneras de hacer esto, me gustaría escucharlo.

Respuestas (1)

Metamask ha implementado eth_decrypt . Puede usar encryptfrom eth-sig-util para realizar el cifrado.

Desafortunadamente no hay mucha documentación al respecto. Se discutió en varios hilos en github como https://github.com/MetaMask/metamask-extension/issues/1190 , https://github.com/ethereum/EIPs/pull/1098 y https://github.com /MetaMask/eth-sig-util/pull/18#issuecomment-384796354 . No hay EIP que documente la función.

¿Cómo se accede al método? Solo he usado Web3.js, pero esto es de Metamask, ¿verdad? ¿Cómo funciona eso cuando un usuario usa una extensión de billetera que no sea Metamask?
Está documentado en el primer enlace cómo usarlo: Enviar un comando de solicitud al proveedor de ethereum. Los clientes que no lo admitan deberían devolver un error.