Tengo un par de claves:
Los datos se cifran fuera de la cadena:
y se guarda en el siguiente contrato inteligente:
contract Foo {
string data;
}
¿Puedo descifrar los datos almacenados en la cadena, suponiendo que proporcione una clave privada correspondiente?
function decryptData(string privKey){
...
}
No creo que esto sea posible en el arreglo actual.
SK1 tendría que ser transmitido al contrato, por lo tanto, revelado a todos los verificadores, que es todo el mundo. En cualquier caso, ese es el obstáculo. En resumen, si el contrato puede decodificarlo, todos pueden decodificarlo.
Este es el tipo de cosas que podrían ser posibles con una implementación de ZKSnarks, según tengo entendido.
Esto podría ser de ayuda: ¿Pueden los contratos inteligentes calcular datos encriptados?
Espero eso ayude.
Sí, se puede , al menos en principio.
Ethereum es Turing-completo, por lo que puede hacer los cálculos que desee. Sin embargo, no conozco ninguna implementación real que haga esto en la cadena y, dependiendo de los detalles de sus algoritmos de cifrado, puede que no sea práctico hacerlo dentro del límite de gas. La próxima actualización del sistema Metropolis puede ayudar, ya que debería incluir la funcionalidad biginteger que hará que sea más fácil y económico hacer cosas criptográficas en la cadena.
Sin embargo, si esta es una buena idea es otra cuestión, dependiendo de lo que estés tratando de lograr. La clave privada y los datos descifrados serán visibles para cualquier persona que pueda acceder a la cadena de bloques y, en la mayoría de los casos, este es el tipo de cosas que desea hacer fuera de la cadena en cualquier caso.
Si está tratando de descifrar datos en cadena, le recomiendo usar una función de hashing en sus datos adjuntos a una dirección aleatoria de ethereum para la entropía. Así es cómo:
data
variable dada en la cadena. Para todos los efectos, estos datos están encriptados, ya que nadie más que usted conoce las entradas hash que generaron esta salida hash.web3.utils.soliditySha3([realData, randomAddress])
fuera de la cadena dentro de Web3js. Mantiene estas dos entradas en secreto de la cadena de bloques.decrypt
este hash, publique el realData
y randomAddress
en un contrato inteligente. Hazlos hash en cadena usando keccak256
la función de solidez. keccak256(abi.encodePacked(uint256 realData, address randomAddress))
.data
variable, entonces estos datos han sido efectivamente decrypted
.Originalmente escribí mi respuesta usando solo firmas, pero estaba mal. No puede usar una función de firma para esto (también cuesta más gasolina de todos modos). Para más información: https://crypto.stackexchange.com/questions/43894/asymmetry- between -public-key-and-private-key-digital-signatures-use-the-private
Si desea asegurarse de que el hash provino de un usuario autorizado, use un mapping
objeto para almacenar los hash en función de una msg.sender
variable. msg.sender
es efectivamente una firma tal como es.
No, no puedes. Ethereum EVM no proporciona funciones de cifrado/descifrado, son funciones de propósito general de muy alto nivel. Pero puede intentar descifrar fuera del contrato inteligente, utilizando la clave que ya no es privada que se encuentra en la transacción.
Consulte también ¿Cuáles son las técnicas efectivas para cifrar/descifrar datos almacenados en un contrato inteligente?
Edmundo Edgar
Rob Hitchens
Giuseppe Bertone
nick carraway