hash cryptography skein

hash - xkcd: Externalidades



cryptography skein (3)

Por lo tanto, el cómic web de xkcd Externalities 1 de abril de 2013 presenta un concurso de ruptura de hash Skein 1024 1024. Supongo que esto no debe ser más que un esfuerzo de fuerza bruta donde las cadenas aleatorias son hasheadas en un esfuerzo por igualar el hash publicado por Randall. ¿Es esto correcto?

Además, mi conocimiento de la teoría de hash de Skein es prácticamente inexistente, pero al ser un programador SkeinFish pude descargar y ejecutar SkeinFish (C #) y Maarten Bodewes Skein Implementation (Java) localmente en modo 1024 1024 con algunas cadenas de entrada. Los hashes que dieron, sin embargo, fueron diferentes al hash que devolvió xkcd para la misma entrada. Esta puede ser una pregunta extremadamente ingenua, pero ¿las diferentes implementaciones de Skein dan hashes diferentes? ¿Y qué implementación de Skein está usando xkcd?

¡Gracias por perdonar mi ignorancia!


Aquí está el código fuente que usó el equipo de Stanford. Ejecutamos esto en un centenar de servidores EC2 de 8 núcleos durante un tiempo, pero no en toda la competencia.

https://github.com/jhiesey/skeincrack


Hay varias iteraciones diferentes del algoritmo de la madeja. XKCD está utilizando la versión 1.3, que también es la más reciente. Las fuentes se pueden encontrar here (busque "V1.3")

Curiosamente, este método de fuerza bruta es el mismo empleado por Bitcoin para "minar" bitcoins. Las grandes diferencias son el algoritmo hash (SHA-256 en ese caso) y el hash objetivo (que se determina dinámicamente como cualquier hash que comienza con un cierto número de ceros). Se necesita mucho trabajo para descubrir el hash, pero una vez se ha encontrado que es trivial verificar los bits fuente y que el hash resultante cumple los criterios.


Si estaba mezclando caracteres no alfanuméricos (espacios, signos de puntuación, etc.), es posible que haya obtenido resultados diferentes debido a la codificación de formularios HTML. El atributo "enctype" en el formulario que alojaba XKCD era "application / octet-stream", que según https://developer.mozilla.org/en-US/docs/HTML/Element/form no es compatible con el navegador estándar. Supongo que el navegador recurre al tipo de codificación URL cuando ve uno que no reconoce.

Observé que la cadena "=" se enviaba codificada en URL en Chrome y devolvía un hash diferente al que obtenía localmente con la última pyskein. Pero cuando lo envié con esta línea de comandos curl (ya no funciona), obtuve el hash esperado:

curl -X POST --data-binary "hashable==" "http://almamater.xkcd.com/?edu=school.edu"

El código de Stanford en otra respuesta hace lo mismo, y aparentemente tuvieron cierto éxito. Nunca obtuve datos aleatorios para el hash local con una puntuación mejor que incluso mi propia escuela, por lo que nunca tuve la oportunidad de probar exhaustivamente cómo pasar datos arbitrarios de manera adecuada. No sé cuál fue el comportamiento exacto (por ejemplo, tal vez si omitió hashable = el servidor lo detectaría y simplemente hash todo el cuerpo POST), pero puede haber sido intencionalmente un poco complicado como parte de April Fool''s.