Almacenar datos secretos en contrato [duplicado]

Conozco el protocolo general abierto/sin confianza para almacenar transacciones. ¿Cómo me acercaría a un escenario aquí en el que quiero almacenar algunos datos en un contrato en la implementación, para luego ser recuperados por alguien desconocido en el momento de la implementación?

El principal problema aquí es que el receptor de los datos secretos no se conoce de antemano/cuando proporciona los datos secretos. Por lo tanto, simplemente cifrar los datos con la clave pública de los compradores no es un enfoque válido.

Por ejemplo, tengo un contrato que almacena un número secreto y otros usuarios pueden interactuar con la Dapp y ofertar por estos números, solo el mejor postor recibirá el verdadero número secreto al final.

EDITAR: Pregunta diferente pero relacionada ethereum.stackexchange.com/questions/2624/…
Se responde parcialmente con la pregunta vinculada, aunque la pregunta vinculada asume que conoce al receptor de antemano, lo que no es el caso en este escenario. ¿Aclaro y reabro, o agrego un comentario a la otra pregunta?
Creo que con la aclaración, esta es una pregunta suficientemente diferente.
Además, ¿el contrato tiene que hacer todo esto por sí solo o el implementador puede cifrar el número con la clave pública del postor una vez que finaliza la licitación?
Por supuesto, esta es una posible solución, pero me encantaría tener todo lo más autónomo posible. Si el desarrollador encripta el valor después, el comprador debe confiar en el desarrollador. Tener el contrato que contiene los datos desde el principio permitiría que todo sea confiable, básicamente eliminando la posibilidad de que el desarrollador tome todo el éter y no entregue los datos.

Respuestas (1)

No hay una manera completa de hacer esto. Un enfoque que podría considerar es:

Puede comprometerse con el secreto por adelantado (haciendo que el contrato contenga un hash del secreto). Cuando conozca al destinatario, puede enviarle el secreto cifrado con su clave pública, que luego puede descifrar y verificar que coincida con el hash comprometido anteriormente. Nada te obliga a hacer esto, pero al menos no puedes cambiar de opinión sobre cuál era el secreto después del hecho. NB: sin embargo, nada te obliga a revelar el secreto.

Podría pensar en una variación de lo anterior que implique que una o ambas partes hagan apuestas que solo se reembolsan en un resultado / conclusión exitoso, pero esto no resolvería el problema subyacente por completo.

Se están realizando algunos esfuerzos de investigación/desarrollo en esta área (incluido el cifrado homomórfico ) y Hawk ), pero nada que parezca estar siquiera cerca de estar listo para el horario de máxima audiencia.

Mi opinión es que este tipo de funcionalidades serán parte de la web 4.0 ;-)

¡Espero que esto ayude!