Resolviendo un reto criptográfico mediante análisis de frecuencias

Debido a que lo he pasado bastante mal para encontrar tiempo para publicar el wargame de bandit completo he decidido saltarme un poco el planning de publicación que tengo para pasar a un reto que me resultó bastante interesante que resolví en verano y que me tuvo unos días entretenido. El reto que publico aqui se engloba en uno mayor pero el interesante es el que voy a publicar.

La idea es que te dan un texto tal que asi:

Y las pistas de que el texto plano está en inglés y se ha usado la misma clave para cifrar todo el texto. El reto consiste en hacer criptoanalisis a este texto y poder sacar el texto plano de él. Por lo general cuando se cifra texto de esta manera los espacios y la longitud de la palabra no tienen ninguna utilidad salvo molestar en el proceso de desencriptado.

Como nos han dicho que se usa la misma clave podemos hacer un analisis de frecuencias para ver cuales son los caracteres más repetidos y además podemos incluir los n-gramas más repetidos en el texto cifrado

Obviando la última parte que son mis intentos por descifrar el texto lo que hace el programa es sacar las veces que un caracter aparece repetido en el texto (también hace lo mismo con los n-gramas). Si ejecutamos el programa con el texto cifrado y pasamos un segundo parametro igual a 3 para indicar que queremos sacar como máximo por 3-gramas obtenemos:

Analsiis de frecuencia

El siguiente paso es hallar las frecuencias del idioma inglés. Esto podriamos hacerlo pasando un texto largo al programa en python o directamente buscarlo por internet. Si lo buscamos por internet encontramos:

ngramas en inglés

Si observamos la letra más repetida en el texto cifrado es la S y la letra más frecuente en inglés es la E. Podemos concluir que la S se descifra como E, aunque no siempre es así y tendremos que hacer un proceso manual hasta poder obtener el texto en su totalidad.

Podemos volver a usar el programa en python para hacer las sustituciones. Podemos modificar el diccionario de la parte final para probar a descifrar. Al final obtenemos lo siguiente:

Texto en plano

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *