CRIPTOGRAFÍA: UN ANTES Y UN DESPUÉS

 

La ciencia de la criptografía es casi tan antigua como la humanidad. Consta históricamente que determinados mensajes codificados decidieron importantes batallas en las guerras Médicas. Pero esa criptografía primitiva estaba más basada en la ocultación del mensaje en dobles fondos, maletas, vainas e incluso el cuerpo del mensajero, más que en una auténtica codificación que privara del contenido del mensaje a un posible interceptor.

Para ello es necesario algún sistema, y éste debe resumirse en una “función de transformación”, previamente conocida por el destinatario. En términos matemáticos, el cifrado consiste en pasar del texto x al f(x), siendo f la función de transformación. El restablecimiento del mensaje original se conseguirá aplicando a f(x) una nueva función g[f(x)], que naturalmente debe ser la función inversa de f. O sea, g[f(x)] = f-1[f(x)] = x.

El código más antiguo conocido se basa en la substitución de cada letra del alfabeto por un signo o incluso otra letra, lo que hace el mensaje ininteligible a primera vista. Sea, por ejemplo, el llamado “texto llano” (sin cifrar) y el que llamaremos “alfabeto cifrado”, escrita debajo del primero:

 

ABCDEFGHIJKLMNOPQRSTUVWXYZ

MOPSUGKLVZABCDENWXJQRIYHFT

 

Es claro que el mensaje “BARCELONA” queda transcrito como “OMWPUADCM”. Pero este sistema, en cuanto tenga una determinada longitud, no resiste lo más mínimo a los esfuerzos de un buen criptógrafo, como se pone en evidencia en la deliciosa novela El escarabajo de oro, de Edgar Allan Poe. Toda lengua tiene sus particulares frecuencias en la aparición de sus letras, por lo que, entre los signos del mensaje cifrado, se darán también frecuencias desiguales. Unos rápidos tanteos las ajustarán a las letras correspondientes, y permitirán pasar del “alfabeto cifrado” al “alfabeto llano”. En el ejemplo anterior, pese a tratarse de un mensaje tan corto, la observación detecta enseguida el signo “M” repetido, lo que lleva a sospechar que se trate de las letras E o A, como así sucede.

Pronto se impuso, pues, la necesidad de complicar la clave de transformación, por ejemplo, haciendo que las letras más abundantes tuvieran varios signos posibles, que se utilizarían de manera aleatoria. Pero en la lengua no se dan sólo determinadas frecuencias en las letras, sino también determinadas combinaciones preferentes (v. gr., en español la Q va siempre seguida de una U, las combinaciones PL y BR aparecen, pero no las MZ o PF), y a partir de ellas es posible nuevamente, eso sí con mayores dificultades, atacar el sistema.

Blaise de Vigenère innovó imaginativamente este método, definiendo varios “alfabetos cifrados”, que a lo largo del proceso se van alternando según un determinado patrón, dado por una clave determinada, que dicta cada cuándo hay que cambiar entre los “alfabetos cifrados” disponibles. Pero este método tiene también sus debilidades, y se consigue atacarlo “construyendo” palabras usuales, cifrándolas con diversos “alfabetos cifrados” y buscando en los textos a analizar la aparición de los cifrados de esas palabras.

Observaremos que, en cada caso, van siendo necesarios textos y textos más largos para hallar su clave a partir de los correspondientes estudios. Por ello la solución definitiva sería la “clave única”, que se utiliza una sola vez para un mensaje determinado. Sin embargo, este método no resulta viable en la práctica, pues la cantidad de texto cifrado entre instituciones es tan ingente que el trabajo requerido en cambiar de claves (¡y comunicarlas a los receptores!) haría el proceso muy engorroso y caro, por no hablar de los nuevos riesgos de intercepción que introduciría.

El esfuerzo más importante en ese terreno que se hizo hasta la II Guerra Mundial fue la llamada “Máquina Enigma”, obra de Arthur Scherbius, que conseguía el cifrado sometiendo el texto mecanográfico a una “mezcla” aparentemente aleatoria mediante la superposición de diversas ruedas cuyos giros formaban un mejunje caótico en los signos iniciales. Este método tenía la ventaja de ser mecanizable, lo que resultó de gran utilidad para la formidable cantidad de mensajes que cada contendiente libraba interiormente durante la guerra.

Claro está que estos mensajes, emitidos muy a menudo por radio, eran captados por el adversario, pero la extraordinaria complejidad de la Enigma hizo imposible decodificarlos durante mucho tiempo. ¡Pero también eso se logró! La historia de este hito es un triunfo de la inteligencia y la perseverancia, personificadas en Alan Turing, quien combinó suposiciones sobre la naturaleza de los mensajes (por ejemplo, suponiendo que la palabra Wetter, ‘tiempo’, figuraría en algunos de ellos, aparentes partes meteorológicos, que a determinada hora se emitían desde Alemania), y sometiendo estas “palabras-puntal” a la prueba de máquinas Enigma hasta hallar concordancias y correlaciones.

Tras lo cual pareció, por un tiempo, que la lucha entre codificadores y descodificadores había restablecido, una vez más, la supremacía de éstos. Pero unas nuevas ideas aparecieron en el campo a partir de los años 70, que hacían posible conceptualmente el envío de una clave del emisor A al receptor B sin que en ningún momento ésta quedara al alcance de los descifradores piratas. Supongamos que A manda a B una caja con dos cerraduras, cerrada con una llave que sólo posee A. B la recibe, añade el cierre de la segunda cerradura cuya llave él posee y la reexpide a A, el cual abrirá su propio cierre y reexpedirá la caja una vez más a B. Éste no tiene más que abrir su propio cierre y tendrá finalmente la clave.

Esto suena a complicado, pero supone una doble garantía para A y B de que el mensaje procede de su compañero, y su práctica mediante el uso de la electrónica es más sencillo. Supóngase que A desea pasar el mensaje x a B, con lo cual lo codifica y = f(x). B la somete a un nuevo cifrado, z = j[f(x)], y este mensaje es nuevamente remitido a A. Éste lo cifra de nuevo según f-1{[j[f(x)]}, y lo reexpide a B, quien finalmente aplica su propia transformación inversa j-1{f-1{[j[f(x)]}}.

¿Dará este tratamiento de nuevo x? Todo depende de que las sucesivas aplicaciones f-1j y  f j-1 sean conmutativas. Por ejemplo, si A desea intercambiar con B una clave, puede hacerlo de la siguiente manera: en realidad no le envía la clave, sino mA = a  mod p[1] y lo envía a B. Simultáneamente, B enviará mB = b  mod p. Seguidamente, A calculará bA = A’ mod p, y B calculará aM = B’ mod p. A’ coincidirá con B, ya que A’ = B’ = mAB  mod p.

 

***

 

Pero el verdadero descubrimiento, que alteró los conceptos criptográficos tradicionales, se produjo a través de las propiedades de los números primos con el sistema RSA (por sus creadores, Adleman, Rivest y Shamir), más llamado “criptografía de clave pública”, que permitía aprovechar el hallazgo anterior con una clave que ya no hay interés en manetener secreta, que incuso puede ser pública. En efecto, la clave de cifrado de un texto es conocida por todo el mundo, pero no así la de descifrado.

En la actualidad se hallan desarrollados unos tests de primalidad bastante eficaces, que permiten saber, con poco tiempo de trabajo de ordenador, si un número es o no primo, pero ninguno para determinar, en poco tiempo, los factores que integran éste. Por ejemplo, en la revista Scientific American, Martin Gardner desafió en 1977 a los lectores a factorizar el siguiente número:

 

N = 114.381.625.757.888.867.669.235.779.976.146.612.010.218.296.721.242.362.562.561.842.935.706.935.245.733.897.830.597.123.563.958.705.058.989.075.147.599.290.026.879.543.541

 

Hasta después de 17 años no se logró hacerlo. En 1994 un equipo de 600 voluntarios, repartidos por todo el mundo, dio con sus dos factores primos:

 

p = 32.769.132.993.266.709.549.961.988.190.834.461.413.177.642.967.992.942.539.798.288.533

 

q = 3.490.529.510.847.650.949.147.849.619.903.898.133.417.764.638.493.387.843.990.820.577

 

Esta circunstancia proporciona un sistema enormemente eficaz para codificar. Es sabido que es relativamente fácil determinar si un número es primo mediante el pequeño teorema de Fermat: si p es primo, entonces ap-1 = 1  mod p[2]. Esto ahorra inacabables divisiones, y con un ordenador puede terminarse con poco trabajo la primalidad de un número, incluso los increíblemente grandes (digamos de varios centenares de cifras). Pero en cambio no se conoce ningún método relativamente breve para determinar los factores primos de un número dado, y la mayoría de los matemáticos sospechan que éste es un problema “intrínsecamente complejo”, es decir, que necesitaría para su resolución de un número de operaciones del orden del mismo número.

¿Qué significa esto? Que podemos codificar un mensaje mediante el siguiente procedimiento: elevemos el número codificado a una potencia fija s módulo r, siendo r un número compuesto. Recibido el mensaje, el descodificador lo elevará a otra potencia t y lo reducirá módulo r. Pero el número t sólo podrá ser obtenido por quienes conozcan p y q.

El método está pues claro: elegir dos números primos muy grandes al azar, multiplicarlos y fijar el resultado del producto como base de transformación. El resto viene solo.

El sistema RSA está conociendo actualmente un gran éxito, y son miles las empresas, los organismos políticos e incluso los particulares que lo utilizan, sin miedo alguno. El único riesgo que se corre es: ¿Qué sucederá si alguien halla un método rápido para decodificar N en sus factores p y q? Pero este riesgo parece por el momento tan remoto que nadie lo toma seriamente.

 

                                                                                     JMAiO, ago 03

 

 



[1]El significado de a  = b mod p es: el número a, al ser dividido por p, da el resto b. Se dice entonces que a y b son congruentes módulo p.

[2] En realidad esto no es rigurosamente exacto: algunos números llamados pseudoprimos no cumplen con esta condición. Pero este obstáculo puede obviarse mediante unos cálculos complementarios, que no es del caso exponer aquí.