sábado, 23 de diciembre de 2017

Criptografía (LXXVIII): Solución Reto 7

El  enunciado del séptimo reto que puse en este post era el siguiente: "Amanece en Bletchley Park, sede de la Escuela Gubernamental de Códigos y Cifras de Gran Bretaña ("Government Code and Cypher School, GC&CS"), pero la actividad es ya frenética. La red de interceptación para capturar el tráfico de mensajes cifrados de los alemanes está a pleno rendimiento y los británicos sólo disponen de un día para obtener la clave con la que descifrar los mensajes del ejército alemán y poder así anticiparse a sus movimientos, ya que ésta cambia diariamente. El método de criptoanálisis ideado por Alan Turing, basado en que una letra no puede cifrarse como sí misma y en la previsión (suposición) de parte de los contenidos de los mensajes transmitidos por los alemanes, y su implementación  mediante la bomba de Turing están demostrando una alta eficacia para obtener la clave de cada día y, en consecuencia, para poder descifrar todos los mensajes alemanes de ese mismo día, pero hay que darse prisa, muchas vidas corren un grave riesgo, y el éxito o fracaso depende en gran medida de que todo el mecanismo de interceptación y descifrado opere de forma sincronizada y eficiente. Supón que durante la II Guerra Mundial trabajas en Bletchley Park y te llega un parte metereológico cifrado en el que encajas la "crib" ("WETTER VORHER SAGE", texto en claro que significa algo así como "PRONÓSTICO DEL TIEMPO" en alemán) en el criptograma (ver recursos asociados al reto), ¿Puedes decirme cuál es la clave que el ejercito alemán está utilizando para cifrar todos los mensajes de hoy (rotores empleados y su orden, el ajuste de los anillos y las conexiones de letras en el tablero de clavijas)?".

Este reto es de criptografía y su solución es:

1.- Lo primero que tenemos que hacer es elaborar el "menú", a partir del encaje de la "crib" en el criptograma, que nos servirá como punto de partida para configurar la bomba. Ya expliqué en detalle cómo se hace esto y los siguientes pasos en este post y siguiente, por lo que en éste me limitaré a dar, sin mayores detalles, los resultados que nos llevarán a resolver el reto planteado.

El "menú" sería el siguiente:
Ahora asignamos a cada uno de los enlaces entre caracteres del "menú" un codificador de doble extremo. Para ello, seleccionamos el "camino" más largo posible a través de sus enlaces con objeto de conectar en secuencia el máximo número posible de codificadores, ya que de esta forma se simplificarán las conexiones a realizar en el panel posterior de la bomba (que veremos más adelante). Elegimos el siguiente "camino":

K -->--> E --> K --> R --> V --> T --> W --> H --> E --> --> W 

Con lo que nuestro "menú" podría representarse gráficamente de la siguiente manera:
Y finalmente, establecemos la posición inicial de cada uno de los tambores de cada codificador conforme a la posición relativa que ocupa cada uno de los enlaces en la "crib". Para ello asumimos que el ajuste de los anillos antes de cifrarse la primera letra de la "crib" es "ZZZ", por lo que en la posición relativa 1 habrá que ajustar la posición inicial de los tambores a "ZZA", en la posición relativa 2 a "ZZB", en la 3 a "ZZC" y así sucesivamente. Con los ajustes de los tres tambores de cada uno de los codificadores, nuestro "menú" podría representarse gráficamente como sigue:
2.- Ahora estamos ya en disposición de configurar la bomba, para lo que utilizaremos el simulador asociado al reto como recurso.

En nuestro reto y a partir del "menú" obtenido en el paso anterior, vamos a utilizar los doce codificadores de doble extremo de la batería situada en la parte superior (del 1 al 12 - del primer conjunto de tres tambores de la izquierda hasta el duodécimo situado más a la derecha).

En primer lugar, montamos los tambores correspondientes y ajustamos la posición inicial de cada uno de ellos en el panel frontal de la bomba. Vamos a realizar la primera prueba de nuestro "menú" para el orden de los tambores I-II-III, para lo que montamos sobre sus ejes los 3 tambores correspondientes a ese orden en cada uno de los 12 codificadores de la batería superior y ajustamos cada uno de ellos a la posición inicial indicada en el menú obtenido en el paso anterior. El siguiente gráfico muestra el ajuste realizado para los tres tambores del primer codificador:
Ahora establecemos las conexiones del "menú" en el panel posterior de la bombaTeniendo en cuenta el "camino" que hemos elegido en el paso anterior, conectamos en secuencia (cuando una misma letra es la salida de un codificador y la entrada del siguiente) los siguientes codificadores "puenteando" la salida de cada uno de ellos con la entrada del siguiente, de la siguiente manera:
Después, establecemos el resto de conexiones del "menú" mediante cables (las conexiones indicadas en color rojo ya las hemos realizadas mediante "puentes") y determinamos la letra del "menú" a la que se le va a aplicar la tensión, en nuestro reto elegimos la "E" (la "letra central"), ya que es letra del "menú" que se ve involucrada en el mayor número de bucles (3), y, por tanto, establecemos la conexión correspondiente (utilizando el conector de la columna central etiquetado con "2" que queda libre) con el conector para aplicar dicha tensión (CH1), que también se encuentra en el panel posterior. Todo ello, de la siguiente manera:
Y finalmente, para tener lista la bomba activamos los tres interruptores siguientes que se encuentran en el lateral derecho: el interruptor "CHAIN 1" (batería superior de codificadores), uno de los interruptores para dicha batería (para probar la hipótesis de partida establecida. En nuestro reto que "E" se conecta en el tablero de conexiones de la máquina Enigma con la letra correspondiente al interruptor que se accione; en nuestro reto elegimos la "A", aunque la elección de esta última letra no es importante) y el interruptor "CARRY":
Ponemos en marcha la bomba. Transcurrido un breve tiempo el simulador se para mostrando en tres tambores de su frontal un posible ajuste de los anillos correspondiente a los tres rotores de la máquina enigma: lento o izquierdo, medio o central y rápido o derecho, respectivamente. En este caso: "X", "W" y "V".
Además, en el lateral derecho de la máquina, se muestra la letra que estaría conectada en el tablero de clavijas con la letra central que hemos elegido ("E"). En esta parada nos indica la letra "T".
Con la información de esta parada tenemos ya parte de la clave:

- Los rotores utilizados y su orden: "I-II-III".
- El ajuste de los anillos: "X-W-V".
- Conexión tablero de clavijas: "E/T".

pasamos a la máquina de comprobación del simulador ("checking machine") para obtener el resto o mayor número posible de las conexiones en el tablero de clavijas y comprobar que la clave hallada hasta el momento puede ser correcta.

Para ello, con los tambores correspondientes a la prueba realizada (I-II-III), realizamos el ajuste de los anillos de los tambores a las posiciones indicadas en la parada "X-W-V" (movemos el punto negro para situarlo encima de la letra correspondiente de cada tambor) y posteriormente vamos ajustando los tambores a la posición adecuada y pulsando cada una de las letras del "menú" para obtener aquella letra a la que estaría conectada cada una de ellas en el tablero de clavijas:

Así:

- "E" es la entrada al decodificador 10 (tambores en "ZZB") y su salida es "Q". Ajustamos los tambores a esa posición y pulsamos "T" (letra que conforme a la parada estaría conectada con "E") para obtener la letra con la que estaría conectada la "Q". Se ilumina "G".

- "Q" es la entrada al decodificador 11 (tambores en "ZZA") y su salida es "W". Ajustamos los tambores a esa posición y pulsamos "G" (letra que estaría conectada con "Q") para obtener la letra con la que estaría conectada la "W". Se ilumina "W" (lo que nos indica que la "W" no estáría conectada a otra letra).

- "W" es la entrada al decodificador 8 (tambores en "ZZJ") y su salida es "H". Ajustamos los tambores a esa posición y pulsamos "W" (la "W" no estaría conectada a ninguna otra letra) para obtener la letra con la que estaría conectada la "H". Se ilumina "M".

Y así sucesivamente, y obtenemos:

- E/T.
- Q/G.
- W/W.
- H/M.
- A/D.
- K/I.
- R/R.
- V/N.
- B/O.
- X/X.
- F/U.
- S/S.

Con esto ya sabríamos 8 de las 10 posibles conexiones de letras en el tablero de clavijas y comprobamos que no se ha producido ninguna contradicción, es decir, que una misma letra no esté conectada a la vez a más de otra letra (lo que no es posible con el diseño de la máquina, y si así fuera la parada se revelaría como falsa). No es el caso, por lo que la parada puede ser correcta.

Comprobamos la clave hallada hasta el momento con la réplica de la máquina enigma del simulador (Enigma 3). Para ello:

1.- Realizamos el ajuste de los anillos de los rotores I, II y III a "X", "W" y "V", respectivamente:
2.- Ponemos la posición inicial de los rotores en "Z-Z-Z":
Comentar que, por error en el simulador de la bomba, los tambores I, II y III, que son los utilizados en nuestro reto, están una letra por delante de los correspondientes rotores de la máquina Enigma, por lo que para compensar ese error de los tambores tenemos que poner los rotores en la posición inicial "Y-Y-Y" en lugar de "Z-Z-Z".

3.- Establecemos las conexiones de letras que conocemos en el tablero de clavijas:
4.- Desciframos el criptograma correspondiente a la "crib":
Como se puede observar en la figura anterior hemos obtenido como texto en claro el correspondiente a la "crib".

Por tanto, la solución al reto 7 es:

- Rotores utilizados y su orden: "I-II-III".
- Ajuste de los anillos: "X-W-V".
- Conexión tablero de clavijas: "E/T", "Q/G""W/W", "H/M", "A/D", "K/I", "R/R", "V/N", "B/O", "X/X", "F/U", "S/S"

Para finalizar, comentar que nos faltan dos posibles conexiones de letras en el tablero de clavijas, pero obtenerlas a partir de los criptogramas interceptados no sería mayor problema.

******** PRÓXIMO RETO
Reto 8:     "Aficiones que reúnen".

No hay comentarios:

Publicar un comentario