ENIGMA: los indicadores de clave
Boletín Enigma nº 8 2 Diciembre 2002
Ult. rev. 05-01-2023
La máquina Enigma funciona mediante el sistema que podríamos denominar de sustitución polialfabética. Hemos visto el funcionamiento de los rotores, y cómo cada vez que se pulsa una tecla para cifrar, al menos uno de los rotores cambia de posición, de forma similar a un cuentakilómetros de un coche. Hemos dejado un pequeño detalle sin comentar: el tablero de conexión. En dicho tablero existen enchufes para conectar algunas letras con otras.
Podemos considerar el tablero como si fuese un rotor fijo, cuyo efecto es el de cambiar unas letras por otras antes de que la señal se introduzca en el sistema de los tres rotores y el reflector. El tablero, que no existía en los modelos Enigma comerciales, se introdujo para complicar la vida del criptoanalista.
Existen situaciones en las que, sea por espionaje, por barrunto o por suerte, un criptoanalista conoce el texto llano, es decir, antes de cifrarlo. Una comparación entre texto llano y texto cifrado permite, en ocasiones, obtener la clave usada en ese y otros mensajes. Es decir, un criptoanalista podría probar diversas combinaciones de posiciones de rotores para conseguir dicha clave. Pero si, antes de cifrar el texto mediante los rotores, lo sometemos a una sustitución previa, el criptoanalista no sabrá cuál es dicho texto llano.
Pongamos un ejemplo. Supongamos que el texto llano "atacar" se cifra como "LJQKLZ" Nuestro criptoanalista podría suponerlo e intentar un ataque criptoanalítico. Ahora supongamos que el tablero de conexiones cambia la letra a por la s, la b por la q y la c por la u (en la práctica, habría más parejas de letras intercambiadas). Eso quiere decir que el criptoanalista tendría realmente que comparar el texto llano "stsusr" y el texto cifrado "UJQSLQ" Es decir, si nuestro criptoanalista tuviese algún "truco" que le permitiese obtener la clave conocidos los textos llanos y cifrados, usarlo con la pareja atacar-LJQKLZ no le serviría de nada. Para conocer la verdadera pareja de texto llano y cifrado stsusr-UJQSLQ tendría que saber qué parejas de letras han sido intercambiadas ... y el número de posibilidades es enorme.
La combinación de rotores y tablero de conexión es, en apariencia, invencible. Veremos que, en la práctica, no es así. Pero antes de ponernos la bata de criptoanalista, pongámonos en la piel del operador de la máquina. Hemos visto que para cifrar un mensaje hemos de ajustar tanto los rotores como el tablero de conexión. Denominaremos "indicador de clave", o sencillamente "clave", al conjunto de parámetros que se precisan para ajustar el mecanismo de la máquina Enigma. El indicador de clave está constituido por los siguiente elementos:
- El tipo y orden de los rotores que van a ser utilizados.
- La posición relativa del anillo respecto al núcleo del rotor, para cada uno de los tres rotores utilizados.
- La orientación de los rotores.
- Los pares de letras que se intercambiarán en el tablero de conexiones.
El elemento 2 se conoce con el nombre de "posición de anillo" (en alemán, Ringstellung). El elemento 3 se denomina "posición del rotor" . A veces, los elementos 1 y 2 reciben el nombre común de "posición interior" (innerstellung), y los 3 y 4 se conocen como "posición exterior" (ausstellung). La combinación de elementos 1, 2 y 4, se conocía como "posición básica" (grundstellung).
Todo eso es lo que hay que conocer para poder cifrar, o descifrar, un mensaje. Algunos de los elementos de la clave son comunes a un día, o un intervalo temporal determinado, en tanto que otros son característicos y varían de un mensaje a otro. Idealmente, todos esos elementos han de permanecer secretos para todos excepto emisor y receptor. En la práctica, resulta más cómodo guardar algunos elementos y dejar públicos otros. Más adelante veremos cuáles. Pero ahora ... el servicio criptográfico le llama.
Escuche atentamente, mein Herr. Usted se llama Fritz, y ha sido reclutado para el servicio de cifrado alemán. Se dispone a preparar su máquina para enviar un mensaje, así que no nos falle. Recuerde las instrucciones para preparar la máquina. Lo primero es conocer la clave. Supondremos que ya tiene todos los elementos: el orden de los rotores, su disposición interna y externa, y el cableado del tablero de conexión.
En primer lugar, los rotores. El primer elemento viene indicado como I IV III. Eso quiere decir que los rotores izquierdo, central y derecho son, respectivamente, los número I, IV y III. Bien. A continuación, ajuste la posición de anillo. Digamos que es AFG. Tome el rotor izquierdo, el I en nuestro caso, sujete el anillo exterior con la mano izquierda y el núcleo con la derecha (esto último es fácil, porque en el lado derecho hay un disco con muescas, unido al núcleo, para facilitar la operación). A continuación, gire el anillo hasta que la letra A coincida con una señal que hay hecha en el núcleo. Hecho eso, suelte la mano izquierda y voilá, ya tiene el primer rotor con su posición de anillo correcta. Haga lo mismo con el rotor central y el derecho.
Ahora inserte los tres rotores -en el orden adecuado, por favor- en la barra que hará de eje común a los tres. Abra la máquina, inserte la barra con los rotores, y cierre la tapa. A continuación, haga girar los rotores hasta que las letras que aparecen en la parte superior de la máquina se vean a través de tres ventanitas hechas en la tapa. Hecho eso, ya tiene el elemento 3 -la posición de rotores. Solamente le queda enchufar los diversos conectores del tablero para intercambiar las teclas adecuadas. Y ya está listo para transmitir.
Como verá, hay muchos elementos en la clave. Cuáles son públicos y cuáles son secretos depende de diversos factores. En primer lugar, la Armada cifraba sus mensajes de forma distinta; además de ello, la forma de cifrar y descifrar fue cambiando durante la guerra. He aquí lo habitual. El operador tenía un libro de claves donde, para cada día, se indicaban en orden de los rotores, la posición de anillo y las conexiones del tablero. Es decir, se daban los indicativos 1, 2 y 4, lo que hemos llamado posición básica. La posición de los rotores, generalmente, se dejaba a la elección del operador (lo que no deja de tener sus riesgos, como veremos en posterior ocasión).
Pero volvamos a nuestro operador de radio. Herr Fritz -este es usted- tiene ahora que enviar un mensaje y cifrarlo. Y aquí nos encontramos con un problema de distribución de claves bastante gordo. Imaginemos que los elementos de la clave cambian cada día. Si todo el mundo usase los mismos, todos los mensajes del día irán cifrados con la misma clave. Pero es una máxima de la criptografía que, cuantos más mensajes estén cifrados con la misma clave, más material tiene el criptoanalists para poder trabajar. Usar siempre la misma clave es, a la larga, una invitación al desastre.
Lo ideal es cambiar la clave para cada mensaje. Pero eso tiene a su vez sus problemas. Nuestro libro de claves debería contener tantas claves como posibles mensajes para un día, y eso sería una cifra enorme. Y poner de acuerdo a dos operadores dados de una red para que usen una clave dada sería muy difícil.
¿Cómo se resuelve eso? Pues con el concepto que hoy día se denomina "clave de sesión". Básicamente, consiste en cifrar el mensaje con una clave (la clave de mensaje, o de sesión), y luego cifrar la clave de sesión con una clave "maestra". De esa forma, incluso un ataque criptoanalítico contra el mensaje nos daría la clave con que éste fue cifrado, pero no nos serviría para descifrar otros mensajes. A los que usen PGP y se hayan leído mi manual on-line, seguro que les sonará el concepto. Vamos, pues, a ingeniárnoslas para seguir ese método de trabajo. Primero, ajustamos la máquina de la forma que hemos descrito antes. Es decir, tomamos nuestro libro de claves, miramos el día que es y tomamos los rotores en el orden adecuado, ajustamos sus anillos y los enchufes del tablero. Antes del 15 de septiembre de 1938, también hubiésemos tomado del libro de claves la posición de los rotores para ese día (tras de dicha fecha, dicha posición era escogida al azar por el operador de radio). Cualquiera que hubiese sido el caso, supongamos que la posición de rotores para el día de hoy sea DIA.
A continuación, vamos a escoger una "clave" para nuestro mensaje. Va a consistir en una posición de rotores escogida al azar, digamos MEN (la posición de anillo, orden de rotores y cableado del tablero, es decir, la "posición básica", permanece sin cambios; tampoco tiene sentido ajustar todos los elementos de la máquina). Lo primero que vamos a hacer es cifrar la clave del mensaje (MEN) con la máquina en la posición del día (DIA). Es decir, ponemos los rotores en la posición DIA y tecleamos las teclas MEN. El resultado será, digamos, GOL. Ese es el primer paso. El segundo será poner la máquina con los rotores en la posición MEN y cifrar el mensaje. Hecho eso, nuestro mensaje constará de dos partes:
- Las letras GOL, que representan el efecto de la máquina al cifrar la clave del mensaje (MEN) con la posición del día (DIA).
- El texto cifrado en sí.
En realidad, hay más indicadores que añadir al mensaje, al comienzo: los códigos del remitente y el destinatario, el tipo de red usada, el día y la hora, el número de letras del texto cifrado, etc; pero eso no nos atañe aquí, no son realmente parte de la clave. Cuando la posición de rotor era escogida por el operador, también era incluida antes del texto cifrado.
Cuando el destinatario recibe el mensaje, realiza el proceso inverso. Con la máquina lista, y los rotores en la posición del día (DIA), teclea GOL y obtiene MEN, que es la clave del mensaje. A continuación, ajusta los rotores a la posición MEN, teclea el mensaje cifrado ... y aparece descifrado. Buen trabajo, Fritz.
Como ya he dicho, hubo diversas variaciones de este sistema. Una de ellas, en vigor hasta Mayo de 1940, consistió en un detalle en apariencia irrelevante. A menudo, las condiciones de transmisión no eran buenas, lo que hacía que algunas letras del mensaje se perdiesen. Sin embargo, recibir mal la clave de mensaje cifrada (en nuestro ejemplo, GOL) tenía resultados desastrosos: sencillamente, el destinatario no podía descifrar el mensaje, al no saber cuál era la clave de mensaje correcta.
Como ya he dicho, hubo diversas variaciones de este sistema. Una de ellas, en vigor hasta Mayo de 1940, consistió en un detalle en apariencia irrelevante. A menudo, las condiciones de transmisión no eran buenas, lo que hacía que algunas letras del mensaje se perdiesen. Sin embargo, recibir mal la clave de mensaje cifrada (en nuestro ejemplo, GOL) tenía resultados desastrosos: sencillamente, el destinatario no podía descifrar el mensaje, al no saber cuál era la clave de mensaje correcta.
Para paliar este problema, se cifraba la clave de mensaje dos veces. Es decir, se ponían los rotores en la posición de la clave del día DIA, y se cifraban las letras MENMEN. El resultado, digamos, GOLPMA, era lo que se incluía el mensaje. El destinatario, al hacer la operación inversa, descifraba GOLPMA con la clave del día DIA, y recuperaba la clave del mensaje duplicada: MENMEN. Este detalle fue aprovechado por los criptoanalistas polacos, con resultados devastadores, como ya veremos.
Y bien, mi querido Fritz, ahora va a quedarse sin empleo. Vamos a reclutarlo para trabajar en el lado opuesto. A partir de ahora, su nombre será Alan, y trabajará para reventar los códigos Enigma alemanes. Ocasionalmente, le haré volver a su empleo original. Entre uno y otros, iremos cubriendo los entresijos de ambos lados de la balanza. Pero eso lo dejaremos para otro artículo. Aquí ya hemos trabajado bastante por ahora.