Nuevos Desafios
Nuevos Desafíos
Unos años atrás empecé este blog con el fin de escribir de manera dedicada sobre programación, de un modo más detallado y técnico de cómo lo hacía en mi blog principal, “La Naturaleza del Software”.
Hoy empieza una nueva era de este sitio, que retomaremos con una sección que fue bien popular, los desafíos de programación.
Cada semana trataré de publicar un problema con el desarrollo de su solución en algún lenguaje de programación, el que será compartido en un Gist o algún repositorio en gitHub para que lo analicen. Junto a esto les dejaré planteado un desafío para que ustedes resuelvan antes de la semana que sigue. Así que sin más dilaciones partamos.
Crackeando Claves
Este desafío nace de una mini conversación en Twitter con Denis Fuenzalida @dfuenzal, quien publicó el siguiente tweet este fin de semana:
Today I ran a #Clojure REPL to show my team how easy is to bruteforce some SHA512 hashes. An inefficient 20 line program can crack a 6-letter username in under an hour, and a 4-letter username in seconds 😁
— Denis Fuenzalida (@dfuenzal) December 6, 2019
Lo que plantea Denis es lo fácil que es “crackear” claves sencillas aunque usemos un algoritmo relativamente fuerte como SHA-512.
Aparte de este importante hecho que debe ser considerado cuando nos preocupamos de la ciberseguridad, me nación la curiosidad por la implementación particular del código de Denis. Así que le pregunté por cuantas líneas de código tenía su solución. Denis tuvo la amabilidad de publicar el Gist con su código:
La verdad es que yo pensé que el código tendría pocas líneas de código, dado lo conciso que es Clojure. Pero no consideré que debía implementar una función para generar claves en SHA-512. Aún así es notable cómo en menos de 20 lineas de código tengamos un algoritmo de fuerza bruta para determinar claves.
Decidí escribir una solución alternativa en Rust que dejé en el siguiente Gist:
El código hace lo mismo que la solución de Denis, pero al ser Rust un lenguaje compilado se ejecuta en menos tiempo que la solución en Clojure de Denis.
Lo que hace este desafío es buscar la coincidencia para una clave de 4 letras (todas minúsculas) del alfabeto inglés de 26 letras. En este caso buscamos una colisión en SHA512 para la palabra “help”.
Desafio 2018-12-08
Ahora viene el desafío para esta semana.
He elegido 5 números de 4 dígitos cada uno. Para cada uno generé su hash 512 el que he expresado en hexadecimal. Estos cinco números se encuentran en el siguiente archivo:
https://github.com/lnds/desafios-programando.org/blob/master/2019-12-08/hashes.txt
El desafío consiste en descubrir cuáles son estos números. Además deben compartir el código que usaron para encontrarlos.
Deben colocar un link a su solución en los comentarios.
Espero sus respuestas!