Ir al contenido principal

Criptografía (CCCXCIII): GCE - Criptoanálisis sustitución simple polialfabética

En esta entrada voy a realizar el criptoanálisis de un mensaje cifrado que se envió durante la Guerra Civil Española y que se conserva en el Archivo General Militar de Ávila (AGMAV).

No sé casi nada sobre él. Lo único que sé es: que se recibió en Burgos y fue enviado allí por el Comandante Jefe del SIPM (Servicio de Información y Policía Militar del bando nacional) en Irún, la fecha que figura en él es 1/04/1938, que parece que tiene una firma ("Concepcion"), o quizás sea el nombre de una clave, y que tiene una nota ("A Urruti que nos envien traducido") que parece estar fechada el 11/04/1938.

El criptograma tiene una longitud de 315 caracteres y el mensaje completo es el siguiente:

Lo primero que tengo que averiguar es de qué tipo de cifrado se trata. Inicialmente voy a suponer que se trata de un cifrado por sustitución simple monoalfabética.

Para determinar si efectivamente es así utilizo un script para calcular el Índice de Coincidencia (IC) del criptograma y obtengo lo siguiente:
El IC es 0.04173491052471945, lo que descarta la sustitución simple monoalfabética, ya que si fuera de este tipo el IC debería estar próximo a 0,0775, que es el esperado para un texto escrito en español.

Por tanto, ahora supongo que se trata de un cifrado por sustitución simple polialfabética de clave periódica y lo primero será averiguar cuál es la longitud de ésta, es decir, el número de alfabetos involucrados. Para ello, utilizo otro script en python que calcula el IC para cada una de las subcadenas en las que se dividiría el criptograma conforme a las posibles longitudes de la clave, es decr, conforme al número de alfabetos involucrados.


Ejemplo:
- Si la longitud de la clave fuera 1: todo el criptograma habría sido cifrado con la misma clave o, lo que es lo mismo, el criptograma no se divide en subcadenas (sólo hay una subcadena que coincide con el criptograma), y si el índice de coincidencia del criptograma estuviera próximo a 0,0775, entonces se trataría de un cifrado de sustitución simple monoalfabética (un solo alfabeto involucrado). En este caso, ya hemos visto antes que no es así (el gráfico siguiente se corresponde al ejemplo puesto más arriba, no con el criptograma objeto de criptoanálisis).
- Si la longitud de la clave fuera 2: se divide el criptograma en 2 subcadenas; la primera habría sido cifrada con el primer alfabeto y la segunda con el segundo alfabeto. La primera subcadena con los caracteres del criptograma 1, 3, 5, 7, ..., y la segunda con los caracteres 2, 4, 6, 8,... Si el IC de ambas subcadenas estuviera próximo a 0,0775, entonces se confirmaría que la longitud de la clave o número de alfabetos involucrados es 2 (el gráfico siguiente se corresponde al ejemplo puesto más arriba, no con el criptograma objeto de criptoanálisis).

- Si la longitud de la clave fuera 3: se divide el criptograma en 3 subcadenas; la primera habría sido cifrada con el primer alfabeto, la segunda con el segundo alfabeto y la tercera con el tercero. La primera subcadena con los caracteres del criptograma 1, 4, 7,... la segunda con los caracteres 2, 5, 8,... la tercera con los caracteres 3, 6, 9,... Si el IC de las tres subcadenas estuviera próximo a 0,0775, entonces se confirmaría que la longitud de la clave o número de alfabetos involucrados es 3 (el gráfico siguiente se corresponde al ejemplo puesto más arriba, no con el criptograma objeto de criptoanálisis).
- Y así sucesivamente.

En la práctica, el scrip considera que el IC está próximo a 0,0775 cuando éste supera 0,065

Y, tal y como se observa en la figura anterior, la longitud de la clave o número de alfabetos involucrados es 4.

Por tanto, ahora el criptoanálisis queda reducido al criptoanálisis de 4 cifrados por sustitución simple monoalfabética, es decir, de las 4 subcadenas en que se divide el criptograma: la primera habría sido cifrada con el primer alfabeto, la segunda con el segundo alfabeto, la tercera con el tercero y la cuarta con el cuarto. La primera subcadena con los caracteres del criptograma 1, 5, 9,..., la segunda con los caracteres 2, 6, 10,..., la tercera con los caracteres 3, 7, 11,... y la cuarta con los caracteres 4, 8, 12,... (el gráfico siguiente se corresponde al ejemplo puesto más arriba, no con el criptograma objeto de criptoanálisis)
Pero, ¿cómo hago ese criptoanálisis? El problema es que la longitud de cada una de estas subcadenas es muy corta (las tres primeras tienen una longitud de 79 caracteres y la cuarta de 78), por lo que un criptoanálisis "tradicional" basado en el análisis de frecuencias en cada uno de ellos no será fiable y, por tanto y casi con absoluta certeza, no tendría éxito.

Por tanto, para realizar el criptoanálisis recurro al algoritmo 'Hill climbing' (algoritmo de "Escalada de la colina") y, para ello, me apoyo en la IA; le pido que genere un script en python para criptoanalizar mediante este algoritmo un criptograma dado sabiendo que se ha cifrado mediante sustitución simple polialfabética y que están involucrados 4 alfabetos con disposición aleatoria de las letras en cada uno de ellos. Además, le pido que considere un diccionario (una palabra por entrada).

El diccionario lo creo yo recopilando palabras habituales que he visto en muchos de los telegramas enviados durante la guerra civil e incorporando otras que podrían estar en los criptogramas a atacar. Es decir, creo un diccionario específico para telegramas enviados durante la guerra civil.

Tras la generación del script por parte de la IA, no tras mucha supervisión por mi pate (correcciones, optimizaciones, etc.), ejecuto el script generado y obtengo lo siguiente:
Además, el script deja el resultado obtenido en un archivo .txt:
Con lo que ya tengo un descifrado parcial casi completo del criptograma y casi correctos los 4 alfabetos utilizados.

Texto en claro parcialmente descifrado:

"XSIYELPORTADORDELAPRESENTESEÑORCOMASDELCONSULADODECOSTARICAENESTABAPRESTADOEXCELENTESSERVICIOSALACAUSANACIONALHABERSALVADOAMASDEDOSCIENTASPERSONASYAHORAYACILITARBUIDAALABIZADELGENERALMARTINMORENOHALAVERMANADEPISUNVERELGRUPOCONCEPCIONTRIBUTAUNCALUROSORECUERDOALQUEDESINTERESADAMENTESIRVIOCONFIDELIDADALACAUSANACIONAL".

Es decir (marco en color rojo lo que no estaría correctamente descifrado):

"XSIY EL PORTADOR DE LA PRESENTE SEÑOR COMAS DEL CONSULADO DE COSTA RICA EN ESTABA PRESTADO EXCELENTES SERVICIOS A LA CAUSA NACIONAL HABER SALVADO A MAS DE DOSCIENTAS PERSONAS Y AHORA YACILITAR BUIDA A LA BIZA DEL GENERAL MARTIN MORENO H A LA VERMANA DE PI SUNVER EL GRUPO CONCEPCION TRIBUTA UN CALUROSO RECUERDO AL QUE DESINTERESADAMENTE SIRVIO CON FIDELIDAD A LA CAUSA NACIONAL".

Y ya para tenerlo completamente descifrado, sólo hay que corregir los alfabetos obtenidos con las palabras correctas que se intuyen y, en base a esas correcciones, corregir el descifrado.

Texto en claro:

"XSIV EL PORTADOR DE LA PRESENTE SEÑOR COMAS DEL CONSULADO DE COSTA RICA EN ESTA HA PRESTADO EXCELENTES SERVICIOS A LA CAUSA NACIONAL HABER SALVADO A MAS DE DOSCIENTAS PERSONAS Y AHORA FACILITAR HUIDA A LA HIJA DEL GENERAL MARTIN MORENO Y A LA HERMANA DE PI SUNYER EL GRUPO CONCEPCION TRIBUTA UN CALUROSO RECUERDO AL QUE DESINTERESADAMENTE SIRVIO CON FIDELIDAD A LA CAUSA NACIONAL".

Los cuatro primero caracteres del criptograma podrían ser algún tipo de indicativo (por ejemplo, el identificador correspondiente a cada una de las filas o alfabetos a utilizar).

Además, ahora queda claro que el mensaje pertenece al bando nacional; en concreto a un grupo llamado "Concepción".

Quizás también te interese:

Comentarios

Entradas populares de este blog

Criptografía (I): cifrado Vigenère y criptoanálisis Kasiski

Hace unos días mi amigo Iñaki Regidor ( @Inaki_Regidor ), a quien dedico esta entrada :), compartió en las redes sociales un post titulado "Criptografía: el arte de esconder mensajes"  publicado en uno de los blogs de EiTB . En ese post se explican ciertos métodos clásicos para cifrar mensajes , entre ellos el cifrado de Vigenère , y , al final del mismo, se propone un reto consistente en descifrar un mensaje , lo que me ha animado a escribir este post sobre el método Kasiski  para atacar un cifrado polialfabético ( conociendo la clave descifrar el mensaje es muy fácil, pero lo que contaré en este post es la forma de hacerlo sin saberla ). El mensaje a descifrar es el siguiente: LNUDVMUYRMUDVLLPXAFZUEFAIOVWVMUOVMUEVMUEZCUDVSYWCIVCFGUCUNYCGALLGRCYTIJTRNNPJQOPJEMZITYLIAYYKRYEFDUDCAMAVRMZEAMBLEXPJCCQIEHPJTYXVNMLAEZTIMUOFRUFC Como ya he dicho el método de Vigenère es un sistema de sustitución polialfabético , lo que significa que, al contrario que en un sistema...

Criptografía (XXIII): cifrado de Hill (I)

En este post me propongo explicar de forma comprensible lo que he entendido sobre el cifrado de Hill , propuesto por el matemático Lester S. Hill , en 1929, y que se basa en emplear una matriz como clave  para cifrar un texto en claro y su inversa para descifrar el criptograma correspondiente . Hay tres cosas que me gustan de la criptografía clásica, además de que considero que ésta es muy didáctica a la hora de comprender los sistemas criptográficos modernos: la primera de ellas es que me "obliga" a repasar conceptos de matemáticas aprendidos hace mucho tiempo y, desgraciadamente, olvidados también hace demasiado tiempo, y, por consiguiente, que, como dice  Dani , amigo y coautor de este blog, me "obliga" a hacer "gimnasia mental"; la segunda es que, en la mayoría de las ocasiones, pueden cifrarse y descifrase los mensajes, e incluso realizarse el criptoanálisis de los criptogramas, sin más que un simple lápiz y papel, es decir, para mi es como un pasat...

Criptografía (CLXXXIV): Soluciones Retos criptografía de CyberOlympics 2017

En este post pongo las soluciones a los retos de  criptografía que he ido resolviendo de la edición del año 2017 de CyberOlympics , competición en modalidad  'on-line' , estilo  'Capture the Flag'  y formato  'Jeopardy'  dirigida a centros educativos y organizada por el Instituto Nacional de Ciberseguridad (INCIBE) en el marco de la actividad llamada CyberCamp. En esta edición la mayoría de los retos presentaron un  nivel  de dificultad bajo  ( ★ ★ ☆☆☆ ) , lo que entiendo adecuado por el colectivo al que van dirigidos. Las soluciones al resto de desafíos de criptografía de esta edición, cuyos archivos asociados tenga (no me han pasado todos) y que consiga resolver, las pondré en otra entrada. Reto 1 (Criptografía) : Enunciado : Todas las mañanas cuando me despierto, me miro en el espejo y no entiendo lo que veo. Hoy me he levantado dando un salto mortal y no voy a apartarme de mi “otro yo” hasta que no descubra el mensaje. Parece q...