Asher llamó a la puerta del laboratorio de John Marris, aunque esta estaba abierta.
—Adelante —dijo el criptólogo.
Marris tenía el laboratorio más ordenado de todo el Complejo. No se veía ni una mota de polvo. En la mesa, aparte de media docena de manuales pulcramente apilados en una esquina, solo había un teclado y un ordenador con pantalla plana. Fotos, pósters y recuerdos brillaban por su ausencia, detalle (pensó Asher) que reflejaba a la perfección la manera de ser de Marris: un hombre tímido, reservado y de un gran hermetismo tanto sobre su vida privada como sobre sus ideas. Un hombre totalmente entregado a su trabajo. Cualidades perfectas para un criptólogo.
Era una lástima que su proyecto actual (un código tan corto, y que parecía tan sencillo) se le estuviera resistiendo.
Asher cerró la puerta y se sentó en la única silla para las visitas.
—He recibido su mensaje —dijo—. ¿Ha habido suerte con los ataques de fuerza bruta?
Marris sacudió la cabeza.
—¿Y con los filtros de aleatoriedad?
—Nada inteligible.
—Ya.
Asher se quedó desmadejado en la silla. Al recibir el e-mail en el que Marris le pedía que pasara a verle en cuanto le fuera posible, había albergado la esperanza de que el criptólogo hubiese descifrado el código. En alguien tan flemático como Marris, «en cuanto le sea posible» era prácticamente como un ruego a gritos de que corriese a hablar con él.
—Entonces ¿qué pasa?
Marris lo miró y bajó la vista.
—Se me ha ocurrido que quizá lo estamos enfocando mal.
Asher frunció el entrecejo.
—Explíquese.
—De acuerdo. Anoche estuve leyendo una biografía de Alan Turing.
Asher no se sorprendió. Marris tenía una larga trayectoria universitaria y preparaba su segundo doctorado, esta vez en historia de la informática. Alan Turing era una figura seminal de los inicios de la teoría informática.
—Siga.
—Pues… ¿Sabe qué es una máquina de Turing?
—Mejor que me lo recuerde.
—En la década de 1930, Alan Turing formuló la teoría de un ordenador que se conoce como máquina de Turing. Se componía de una «cinta», una tira de papel de longitud arbitrariamente extensible. La cinta estaba cubierta de símbolos de algún alfabeto finito. Se hacía pasar la cinta por un «cabezal» que leía los símbolos y los interpretaba basándose en una tabla de consulta. El estado del cabezal variaba en función de los símbolos que leía. La propia cinta podía almacenar datos o bien «transiciones», palabra con la que Turing designaba pequeños programas. En los ordenadores actuales la cinta sería la memoria, y el cabezal el microprocesador. Según Turing, este ordenador teórico podía resolver cualquier cálculo.
—Siga —dijo Asher.
—Me puse a pensar en este código que estamos intentando desencriptar…
Marris hizo un gesto con la mano, señalando la pantalla del ordenador, donde estaba la señal emitida por las pulsaciones luminosas del centinela, de una brevedad y opacidad casi burlonas:
0000011111001010110101011001110111000101
0110001100010100011010011000010000000000
—Y me pregunté: ¿y si es una cinta de Turing? —siguió explicando Marris—. ¿Qué ocurriría si pasásemos estos ceros y unos por una máquina de Turing?
Asher se incorporó despacio.
—¿Está insinuando que estos ochenta bits… son un programa informático?
—Ya sé que parece una locura…
«No más que el hecho de que estemos aquí abajo», pensó Asher.
—Siga, por favor.
—De acuerdo. Primero tuve que reducir la cadena de ceros y unos a órdenes individuales. Partí de la premisa de que los valores iniciales, cinco ceros y cinco unos, servían para indicar la longitud de cada instrucción, es decir, que cada «palabra» digital tendría una longitud de cinco bits. Me quedaron catorce instrucciones de cinco bits.
Marris pulsó una tecla, y el resultado fue que la larga cadena de números quedó sustituida por una serie de filas ordenadas:
00101
01101
01011
00111
01110
00101
01100
01100
01010
00110
10011
00001
00000
00000
Asher se quedó mirando la pantalla.
—Muy corto para ser un programa informático.
—Sí, es evidente que tendría que ser un programa muy simple y en lenguaje máquina, el más básico y universal de los lenguajes digitales.
Asher asintió con la cabeza.
—¿Qué más?
—Esta mañana, al llegar a mi despacho, he escrito una breve rutina para comparar estos valores con una lista de instrucciones estándar en lenguaje máquina. Primero la rutina asignaba todas las instrucciones posibles a los valores, y después verificaba si había aparecido algún programa informático.
—¿Por qué cree que los… los que nos mandan el mensaje usan el mismo tipo de instrucciones en lenguaje máquina que nosotros?
—A nivel binario hay una serie de instrucciones digitales irreductibles que deberían ser comunes a cualquier aparato informático concebible: incremento, decrecimiento, salto, omitir si es cero, lógica booleana… Bueno, pues dejé funcionando la rutina mientras hacía otras cosas.
Asher asintió con la cabeza.
—Hace unos veinte minutos ha terminado de ejecutar la rutina.
—¿Las catorce líneas en binario se pueden traducir a algún programa informático viable?
—Sí, a uno.
Asher sintió que su interés se avivaba de golpe.
—¿Enserio?
—Un programa para una expresión matemática simple. Mire.
Marris pulsó otra tecla, haciendo que apareciesen una serie de instrucciones en el monitor.
Asher se inclinó, impaciente.
INST. | MNEMÓNICO | COMENTARIOS |
00101 | ADD | / Crear un contador en el acumulador |
01101 | 01101 | / desde el numero en posición 13 (decimal). |
01011 | CNM | / Invertir el signo numérico del recuento. |
00111 | PLC | / Poner el numero resultante |
01110 | 01110 | / en la posición 14. |
00101 | ADD | / Sustraerlo del |
01100 | 01100 | / numero en posición 12. |
01100 | ISZ | / Incrementar el recuento y omitir si es cero. |
01010 | JMP | / Devolver el control del programa al |
00110 | 00110 | / paso 6. |
10011 | END | / Finalizar programa. |
00001 | / Posición 12 | |
00000 | /Posición 13 | |
00000 | / Posición 14 |
—¿Qué hace este programa? —preguntó Asher.
—Si se fija, verá que está escrito como una serie de sustracciones repetidas codificadas como un bucle. Es como se hacen las divisiones en lenguaje máquina, repitiendo sustracciones. Bueno, es una de las maneras; también se podría hacer un desplazamiento aritmético, pero haría falta un sistema informático más especializado.
—¿O sea, que es una instrucción de división?
Marris asintió con la cabeza.
Asher sintió que su sorpresa y su perplejidad se mezclaban con un repentino entusiasmo.
—No vacile, hombre. ¿Qué número dividen?
—Uno.
—Uno. Y ¿por cuál se divide?
Marris se humedeció los labios.
—Pues ahí está el problema…