Por @Alvy — 14 de Abril de 2021

En este detallado vídeo de Computerphile, ese gran canal de vídeos sobre informática y sus derivados que no podemos dejar de recomendar, Mike Pound explica cómo se pueden descifrar los mensajes de la máquina Enigma con ordenadores de hoy en día. Su explicación es una variación basada en el criptoanálisis publicado en 1995 por James J. Gillogly en Ciphertext-only Cryptanalis of Enigma. El tiempo necesario: 10 segundos por mensaje, usando un portátil normal y corriente… pero la cosa tiene truco porque hay que añadir un poco de ayuda genuinamente humana.

Para entender la explicación conviene conocer algo más sobre cómo funciona una máquina Enigma (el vídeo de Brady Haran de Numberphile es también muy detallado), en especial cómo era el sistema de cables y rotores. Pound no entra mucho en las matemáticas del asunto, excepto para hacer algunos cálculos de servilleta sobre cómo cuantos más cables para enlazar pares de letras y más rotores se usaran, más complicado «probar todas las combinaciones» sería.

Cada rotor tenía 26 contactos –uno para cada letra del alfabeto– y podían usarse cinco discos en tres de las ranuras de los rotores (en algunos modelos se usaban cinco). En la práctica cambiaban cada día (o cada hora) y solían usarse diez cables pareados; también había que tener en cuenta la posición del anillo y la posición inicial, lo que complicaba el asunto.

Resolver Enigma se convierte básicamente en un problema estadístico: si se toma el mensaje cifrado con un número suficiente de caracteres y se intenta un descifrado «al azar» se obtiene un resultado que puede ser estadísticamente significativo o no. Eso se llama índice de coincidencia y se refiere al parecido del resultado con la frecuencia del alfabeto, que se conoce para todos los idiomas. Basta compararlo con el alemán –el idioma en que estaban cifrados los mensajes de Enigma– para ver si «parecen alemán» o no tanto.

Una particularidad de este método es que el valor del índice de coincidencia «mejora» o «empeora» si uno de los rotores es correcto, así como con los distintos pares de cableados correctos. De este modo se puede ir probando si fijar un rotor e ir variando los otros mejora el resultado (o lo empeora) y lo mismo con los pares de cables. A veces es posible incluso ver cómo van apareciendo bloques de palabras bien descifradas (o casi) lo cual estadísticamente no puede atribuirse a una mera coincidencia; eso implica que el proceso va por el buen camino: cables bien conectados o rotores en las posiciones correctas. Es cuestión entonces de afinar los demás y repetir el proceso. Criptoanálisis a la más vieja usanza.

El trabajo de Pound está disponible para quien quiera trastear con en Github; código fuente: Java Enigma y también en la llamada Cryptool, que tiene una interfaz gráfica y sirve para experimentar con este tipo de herramientas de criptoanálisis. Ojo que no es trivial: el ordenador no lo hace todo él sólo y hay que irle guiando en el proceso. Algo que sólo se ha podido mejorar con redes neuronales hasta cierto punto.

Como también explica, y esto es quizá lo más interesante, se necesita no sólo cierta cantidad de texto cifrado para poder atacarlo convenientemente, sino además saber algo sobre lo que contiene. Con textos pequeños de 50 caracteres es muy, muy difícil hacerlo; durante la Segunda Guerra Mundial se necesitaban entre 200 y 250 caracteres. Incluso con 1.200 o 1.500 a veces hoy en día es complicado si no se tiene una idea de qué contiene el mensaje. Pero por suerte es normal que en aquella época incluyeran palabras como «informe meteorológico», saludos, nombres de lugares, el arquetípico «heilhitler» y otros detalles que se conocían de otros mensajes ya descifrados, lo que hizo posible crackearlos, algo que hoy en día es más rápido y cómodo, pero que utiliza la misma idea aunque con un poco más de «fuerza bruta».

Relacionado:

Compartir en Flipboard Publicar / Tuitear Publicar