Supongamos, por ejemplo, que quiero escribir un contrato de Ethereum que paga 1 ETH para quien me dé la respuesta correcta a sha256^1000000000("good boy")
. Esa cantidad de cómputo sería mucho más alta que el límite de gas de Ethereum, por lo que necesito una forma de probar sha256^1000000000("good boy") = Y
sin necesitar tanta potencia de cómputo por parte del verificador.
¿Cómo se puede hacer eso?
(Esa es una versión más débil de mi pregunta anterior, que no obtuvo buenas respuestas. ¿Ojalá este problema sea más simple?)
Eso será casi imposible de atajar debido a la simple razón de que SHA-256 es un hash criptográficamente seguro y no ofrece una forma de hacerlo sin hacer los cálculos reales.
Además, no hay debilidades conocidas en SHA-256 que nos permitan manejar esto. Si lo hubiera, SHA-256 estaría roto y definitivamente ya no sería criptográficamente seguro.
La única solución sería tener un conocimiento previo de una parte verificada del cálculo; por ejemplo, $\text{SHA256}^{987654321} = X$, por lo que tiene $X$ como punto de partida que no espera una gran cantidad de cálculos para obtener su $Y$ que llevará más tiempo del que ambos vivimos.
Sin embargo, incluso si alguien ya calculó millones de rondas SHA-256 en la cadena "buen chico", aún tendría que verificar de alguna manera que ese cálculo previo sea correcto y no defectuoso... lo que termina siendo el mismo problema que usted. Probablemente tenga que recalcular las cosas por completo.
Pensándolo por un segundo, su escenario se acerca a una complejidad computacional que podría compararse con la complejidad que asegura algunas cadenas de bloques de criptomonedas como Bitcoin, que utilizan cálculos diferentes, pero que consumen tiempo y recursos en su "Prueba de trabajo".
Por lo tanto, mi sugerencia sería simplemente reducir la complejidad de su $$\text{SHA256("buen chico")}^{1000000000}$$ a algo más usable y alcanzable $$\text{SHA256("buen chico") }^{1000000}$$
Un verificador que no puede realizar tantos cálculos seguirá masticando uno o dos días, pero puede bajar o subir el listón según sus necesidades específicas.
Una cosa debe quedar clara: al usar un hash criptográficamente seguro, no puede verificar más rápido que calcular esto por completo; al igual que el remitente calculador tendrá que calcular completamente el resultado que luego desea verificar. Más recursos computacionales lógicamente darán como resultado un cálculo más rápido... lo que puede o no ser un problema cuando su verificador no tiene los mismos recursos computacionales que la otra parte. Esto es algo que debe recordar y tener en cuenta, dependiendo de cómo y/o dónde quiera usar/implementar su idea.
sha256^1000000000("good boy")
para que pueda verificar y probar que no es lo que afirmo: 2e115facdd6e12fdb2938b6a0d6662efa2cd92dac6a3c5c94c8784c52a1dd0b5
(que es exactamente el problema que OP está preguntando desde que dejó la pregunta en Crypto.SE). Si puede verificar y probar que mi resultado hash no es correcto, con gusto eliminaré mi respuesta. Para su comodidad, esta oferta es válida mientras yo viva. ¡Buena suerte! ;)Vea mi respuesta a su otra pregunta en Cryptography.SE : la solución más simple sería usar un contrato inteligente que realice el algoritmo de verificación de un sistema SNARG para la declaración que desea. El tiempo de verificación puede hacerse esencialmente independiente del tamaño del cálculo, y hay varias implementaciones de SNARG disponibles. El principal problema aquí es para el probador, que no solo necesitaría resolver el acertijo, sino también generar una prueba de que lo resolvió, lo que puede llevar bastante tiempo, pero estás tratando de dificultarle la solución. de todos modos, por lo que probablemente no sea un problema.
eckes
sha256(“str”)^.1000001
). Tal vez podríamos recomendar un método mejor si nos dice el problema real que desea resolver. Si este es un escenario de prueba de trabajo, use un método asimétrico como, por ejemplo, el PoW que usa bitcoin (deme un nonce que junto con mi desafío genera un hash que es más pequeño que una dificultad definida)e-sushi
eckes
e-sushi
eckes
e-sushi