jueves, 4 de junio de 2015

Criptografía XI: la máquina Enigma (X)

En los anteriores posts de esta serie describí el método de criptoanálisis de las hojas Zygalski y puse un ejemplo de su operativa (cómo se iban apilando en la práctica las hojas perforadas hasta dar con el orden de los rotores y el ajuste de los anillos empleados en un día por los alemanes para cifrar los mensajes), respectivamente.

En este post le toca el turno a la bomba criptológica ("bomba kryptologiczna") inventada por Marian Rejewski.

Antes de explicar el funcionamiento de esta máquina electromecánica veamos brevemente en qué se basó Rejewski para diseñarla. No hay que olvidar que el objetivo, al igual que en el método de las hojas Zygalski, era obtener el orden de los rotores y el ajuste de los anillos o posición relativa de los mismos con respecto a su núcleo con el cableado para poder descifrar los mensajes de un día.

Pues bien, supongamos que entre los mensajes interceptados en un día nos encontramos con los siguientes:

1.- BSU AQY AFK; 2.- UXS SAN IAQ; 3.- FGS VYA MSA.
Nota: los tres primeros caracteres se corresponden con el indicador (los tres caracteres que se transmitían en claro y que el operador había elegido para cifrar la "clave de sesión") y los seis siguientes con los caracteres correspondientes al doble cifrado de ésta.

Como se observa, en los tres casos hay "hembras" del mismo carácter ("A") en las diferentes posiciones de las letras correspondientes al doble cifrado de la "clave de sesión" (en el primer caso en 1-4, en el segundo en 2-5 y en el tercero en 3-6).

A continuación y como siempre a lo largo de los posts de esta serie, comparto lo que he ido aprendiendo sobre este método de criptoanálisis del cifrado de la máquina Enigma, aunque también y como siempre puedo estar equivocado (por favor, si es así y también como siempre, agradecería comentarios que me saquen del error).

¿Cómo lo haría yo manualmente?: con una réplica de la máquina Enigma iría probando, para cada uno de los posibles órdenes de los rotores, todas las posiciones de los mismos para comprobar en cuáles se producen "hembras" del carácter "A" en las posiciones 1-4, 2-5 y 3-6. Para ello actuaría de la siguiente manera:

1º) Realizaría el ajuste de los anillos a una posición dada, por ejemplo: "Z-Z-Z".

2º) Colocaría los rotores en las posiciones iniciales "B-S-U" (primer indicador) y teclearía la letra correspondiente al carácter de las "hembras" de los mensajes interceptados (en nuestro ejemplo "A").

Es decir, estableciendo la siguiente notación: PL = Posición rotor izquierdo; PM = Posición rotor central; PN= Posición rotor derecho.

Entonces: PL = "B"; PM = "S" y PN = "U".

Y el resultado sería:

Tecla "A" en 1ª posición ---> Cifrado con rotores en posición PL, PM, PN ---> Carácter Cifrado C1.

Después situaría los rotores en las posiciones "B-S-X" (PL, PM, PN+3) teclearía otra vez "A".

Y el resultado sería:

Tecla "A" en 4ª posición ---> Cifrado con rotores en posición PL, PM, PN+3 ---> Carácter Cifrado C4.

Si C1 es distinto de C4 la posición de los rotores utilizada no es la correcta y probaría con la siguiente (PL, PM, PN+1 con respecto al primer indicador), mientras que si C1 = C4 tendría una posición de los rotores que produce una "hembra" del carácter "A" en las posiciones 1-4.

Para entenderlo correctamente creo que es importante recordar que el cifrado de la máquina Enigma es recíproco, es decir, si se teclea "A" y esto nos da C1 como carácter cifrado, entonces si tecleo C1 esto nos da "A" como carácter cifrado. Por tanto, si C1 = C4 quiere decir que el operador alemán pulsó en primer lugar la tecla C1 y obtuvo "A" como carácter cifrado y después pulsó esa misma tecla en cuarto lugar (C4 =  C1) obteniendo también "A" como carácter cifrado. Lo que implica que se produce una "hembra" del carácter "A" en las posiciones 1-4.

Un vez detectada esa "hembra" en las posiciones 1-4, comprobaría si también se da una "hembra" del carácter "A" en las posiciones 2-5. Para ello: colocaría los rotores en las posiciones iniciales "U-X-T" (segundo indicador con la posición del rotor rápido desplazada una posición) y teclearía otra vez la letra correspondiente al carácter de las "hembras" de los mensajes interceptados (en nuestro ejemplo "A").

Es decir, PL = "U"; PM = "X" y PN = "T".

Y el resultado sería:

Tecla "A" en 2ª posición ---> Cifrado con rotores en posición PL, PM, PN ---> Carácter Cifrado C2.

Después situaría los rotores en las posiciones "U-X-W" (PL, PM, PN+3teclearía otra vez "A".

Y el resultado sería:

Tecla "A" en 5ª posición ---> Cifrado con rotores en posición PL, PM, PN+3 ---> Carácter Cifrado C5.

Si C2 es distinto de C5 la posición de los rotores utilizada no es la correcta y probaría con la siguiente (PL, PM, PN+1 con respecto al primer indicador) mientras que si C2 = C5 tendría una posición de los rotores que produce una "hembra" del carácter "A" tanto en las posiciones 1-4 como en 2-5.

Un vez detectada esas "hembra" en las posiciones 1-4 y 2-5, comprobaría si también se da una "hembra" del carácter "A" en las posiciones 3-6. Para ello: colocaría los rotores en las posiciones iniciales "F-G-U" (tercer indicador con la posición del rotor rápido desplazada dos posiciones) y teclearía otra vez la letra correspondiente al carácter de las "hembras" de los mensajes interceptados (en nuestro ejemplo "A").

Es decir, PL = "F"; PM = "G" y PN= "U".

Y el resultado sería:

Tecla "A" en 3ª posición ---> Cifrado con rotores en posición PL, PM, PN ---> Carácter Cifrado C3.

Después situaría los rotores en las posiciones "F-G-X" (PL, PM, PN+3teclearía otra vez "A".

Y el resultado sería:

Tecla "A" en 6ª posición ---> Cifrado con rotores en posición PL, PM, PN+3 ---> Carácter Cifrado C6.

Si C3 es distinto de C6 la posición de los rotores utilizada no es la correcta y probaría con la siguiente (PL, PM, PN+1 con respecto al primer indicador), mientras que si C3 = C6 tendríamos una posición de los rotores que produce una "hembra" del carácter "A" en las posiciones 1-4, 2-5 y 3-6 y, por tanto, una posible solución, que se calcularía como indico más adelante y la probaría para ver si es la correcta.

Es decir, considerando que "A" = 0; "B" = 1; "C" = 2; ... y "Z" = 25, en nuestro ejemplo las pruebas que yo realizaría manualmente con una máquina Enigma pueden expresarse como:


Lo que significa que en el peor de los casos habría que probar, al menos, todas las posibles posiciones de los rotores con respecto al primer indicador (26 x 26 x 26 = 17.576), y para aquellas en las que se produzcan "hembras" 1-4 probar con otra posición de los rotores, más otra adicional en el caso de que también se produzcan "hembras" 2-5. Y todo ello para cada una de las ubicaciones posibles de los rotores en las ranuras que los alojan (3! = 3 x 2 x 1 = 6), es decir, habría que hacer esto un total de 17.576 x 6 = 105.456 veces.

Por tanto, en el ejemplo:
Evidentemente es una locura probar esto manualmente (máxime cuando se trata de conocer el orden de los rotores y el ajuste de los anillos de la clave del día), por lo que Rejewski inventó la bomba criptológica para automatizar este proceso de búsqueda de "hembras" en las posiciones 1-4, 2-5 y 3-6.

Básicamente, la bomba constaba de: 6 juegos de rotores (3 pares de juegos), un motor que permitía que estos giraran de forma sincronizada y un conjunto de interruptores. Es decir, se basaba en 6 máquinas Enigma o 3 ciclómetros.

Si no lo he entendido mal:

- En todos los juegos el orden de los rotores era el mismo.

- En cada par de juegos el rotor rápido (N) del segundo juego estaba ajustado tres posiciones con respecto al rotor rápido del primero, el rotor central (M) estaba en la misma posición en ambos y el rotor lento (L) también estaba en la misma posición en los dos.

El operador ajustaba la bomba de acuerdo a los tres indicadores, de tal forma que al ponerse en funcionamiento el primer par de juegos de rotores se encargaba de probar todas las posiciones posibles a partir del primer indicador (PL1, PM1, PN1 y PL1, PM1, PN1+3), el segundo par hacía lo mismo a partir del segundo indicador (PL2, PM2, PN2+1 y PL2, PM2, PN2+4) y el tercero a partir del tercer indicador (PL3, PM3, PN3+2 y PL3, PM3, PN3+5).

La bomba recorría así las 17.576 posibles situaciones de los rotores (PL1, PM1, PN1) y cuando los tres pares de rotores encontraban simultáneamente una hembra para un carácter dado la bomba se paraba y se tenía ya una posible solución que era probada en una réplica de la máquina Enigma.

Si no eran correctas ningunas de las posibles soluciones encontradas o no se hallaba ninguna, la bomba debía ser reconfigurada para otro orden de los rotores y volver a ponerla en funcionamiento.

La bomba tardaba unas doce horas en recorrer las 105.456 posibles posiciones de los rotores correspondientes a todos los órdenes de los mismos en las ranuras que los alojaban, por lo que los polacos construyeron 6 bombas (cada una de ellas se configuraba con uno de los posibles órdenes de los rotores) para bajar el tiempo aproximadamente a dos horas.

Pero, veamos lo que ocurriría en nuestro ejemplo:

1º) Supongamos que la bomba con la configuración del orden de los rotores I-III-II se para en la prueba número 6.521, mostrándonos la posición de los rotores del primer juego del primer par de ellos en "K-I-O", lo que significaría, tal y como se muestra en la tabla anterior, que se ha encontrado una "hembra" 1-4 en dichas posiciones, otra "hembra" 2-5 en "D-N-N" y otra "hembra" 3-6 en "O-W-O".

2º) En este caso se trataría de una posible solución, por lo que habría que calcular el ajuste de los anillos; cosa trivial llegado a este punto.

Considerando que las pruebas se han hecho con el ajuste de los anillos en "Z-Z-Z", que la posición del primer juego del primer par de ellos se ha parado en "K-I-O" y que el primer indicador de los mensajes interceptados es "B-S-U":

- Como "B" está 9 posiciones por delante de "K", el ajuste del anillo del rotor lento es "Q" (ya que "Q" está 9 posiciones delante de "Z").

- Como "S" está 16 posiciones por delante de "I", el ajuste del anillo del rotor medio es "J" (ya que "J" está 16 posiciones delante de "Z").

- Como "U" está 20 posiciones por delante de "O", el ajuste del anillo del rotor rápido es "F" (ya que "F" está 20 posiciones delante de "Z").

Gráficamente:

3º) Con lo que la posible clave del día contendría los siguientes valores:

Orden de los rotores: "I-III-II".
Ajuste de los anillos: "Q-J-F".

4º) Probar la posible solución en una réplica de la máquina Enigma para ver si se obtiene algo más o menos coherente, ya que, al igual que en el método de las hojas Zygalski, todavía faltaría averiguar las conexiones realizadas en el tablero para obtener la clave del día completa. Los alemanes, por aquella época, utilizaban sólo 6 cables para intercambiar pares de letras, por lo que esta última tarea era relativamente sencilla.

Sin embargo, poco tiempo después, en diciembre de 1938, los alemanes proporcionaron dos nuevos rotores a los operadores (ahora disponían de 5 rotores utilizables de 3 en 3); con lo que, además de que era necesario deducir el cableado de los dos rotores adicionales, el número de órdenes posibles de los rotores se multiplicó por 10, es decir, las posibles disposiciones de los rotores en las ranuras que los alojaban eran ahora 60. Esto significaba que los polacos tenían que elaborar 1.404 nuevas hojas Zigalsky, hasta un total de 1.560, y construir 54 nuevas bombas Rejewski, hasta un total de 60. Lo que no era posible con los escasos recursos con los que contaban, ni por el tiempo necesario para ello; los polacos eran conscientes de la inminente invasión de Polonia. De nuevo, las comunicaciones del ejército alemán recuperaron casi por completo su opacidad.

Para complicar aún más la situación, en enero de 1939, los alemanes aumentaron de 6 a 10 los cables para intercambiar letras en el panel de conexiones, ahora 20 teclas podían verse alteradas por éste, lo que hacía todavía más difícil el criptoanálisis.

Por todo ello, en julio de 1939 (a menos de 2 meses del inicio del conflicto armado), a los polacos no les quedó más remedio que compartir su trabajo de criptoanálisis con los franceses y británicos.

Como ya sabemos, el 1 de septiembre de 1939, Alemania invade Polonia y comienza la II Guerra Mundial.

Los secretos del criptoanálisis polaco hasta la fecha acabaron en Bletchley Park, donde los británicos habían establecido la sede de la Escuela Gubernamental de Códigos y Cifras ("Government Code and Cypher School, GC&CS") y en la que contando con medios muy superiores a los de los polacos se pusieron inmediatamente a trabajar en base a la información y al material que estos últimos les habían facilitado.

El primer método de los polacos con el que comenzaron a trabajar los británicos fue el de las hojas Zygalski, pero duró poco tiempo, ya que a mediados de 1940 los alemanes dejaron de transmitir dos veces de forma consecutiva los tres caracteres cifrados de la "clave de sesión", con lo que se invalidaron todos los métodos de criptoanálisis basados en ese doble cifrado.

Y es aquí donde entra en juego en esta historia el genio de Alan Turing, pero esto lo contaré en un post posterior.

No hay comentarios:

Publicar un comentario