Mellon acaba de cargarse este reto (aquí explica cómo). ¡ENHORABUENA!

Una coproducción infierno-celestial

Por infosniper (a las maracas y cubilete) y Agustín (a los teclados)

Tenía preparado un nuevo sistema de esos de cifrado por oscuridad cuando leí aquel comentario de Agustín:

"Un reto imposible es una mala propuesta. Los retos deben ser resolubles, aunque sean muy difíciles y requieran mucho ingenio. Por otra parte, hacer un criptograma indescifrable es fácil: Prácticamente es suficiente con que sea corto."

Y tenía razón...

Tantas vueltas les di a aquellas palabras que me provocaron un conflicto filosófico trascendental. ¿Sería capaz yo solito de crear un sistema de cifrado de esos rarillos míos, de lápiz y papel, para ser empleado por espías de la generación Ni-NI y que no fuera del tipo "one time pad"?. ¿Sería capaz de, aún dejando que el público conociera sus entrañas, conseguir que los mensajes cifrados que originara pudieran resistir medianamente un criptoanálisis?. La respuesta fue: NO. Pero se me ocurrió una idea. Si los chinos podían firmar un tratado de cooperación con sus archienemigos, los norteamericanos, entonces ¿por qué no podía firmar yo un tratado bilateral de libre comercio y fumar el calumet de la paz con Agustín?.

¡Leidis an chentelmen!. ¡Niños y niñas!. Para todos ustedes, fruto de esta tregua antinatura, tengo el honor de presentar... ¡TRRRRRR! (redoble de tambor)... ¡TXIXXT! (los platillos)... ¡EL CIFRADO DE ARENA!

¿Cuál es la ciudad del juego? Las Vegas, Nevada, USA. ¿Un juego típico de allí? Los dados. ¿Por qué los dados y no la ruleta o el Black Jack? Pues porque el dado tiene seis caras y ya se sabe que el 6 forma parte del número de la Bestia. Las Vegas está en pleno desierto. ¿Qué hay en el desierto? Arena. ¿Qué cualidad tiene la arena? Pues que irrita los ojos. Todo este refrito es la base del sistema de cifrado que se describirá a continuación, así que limpiad bien con la gamuza la pantalla del ordenador, limpiad bien vuestras gafas, porque ni Agustín ni yo nos haremos responsables de cualquier problema ocular...

Tenemos un dado desplegable compuesto por seis caras (observen los beatos su similitud con un crucifijo):

Cada una de estas caras tiene asignado un número del 1 al 6 (naturalmente):

Disponemos de un Alfabeto Maestro de 48 caracteres fácil de recordar:

<strong>A0B1C2D3E4F5G6H7I8J9K.L,MENAÑOOLPSQNRES-T-UVWXYZ</strong>

Es fácil de recordar porque está formado por todo el alfabeto castellano al que se la ha intercalado entre cada una de sus letras los números del 0 al 9, el punto (.) y la coma (,), las seis letras que más se repiten en castellano según Wikipedia (E, A, O, L, S, N), otra vez la letra más repetida de las 6 (la E), y dos caracteres comodín para representar los espacios en blanco/ruido del texto plano (-).

Este sistema de cifrado funcionará con una clave o contraseña que será la que produzca un completo desorden en ese Alfabeto Maestro.

Para que sea más fácil de entender su funcionamiento supongamos que la clave es ahora exactamente este mismísimo Alfabeto Maestro. El siguiente paso consistirá en situar esa clave dentro de las caras del dado: se repartirá carácter a carácter en cada cara manteniendo el orden de numeración de las mismas de forma que el primero irá a la cara con valor 1, el segundo a la cara con valor 2, el tercero a la 3, hasta completar las 6, momento en el que se volverá a comenzar por la cara con valor 1. La clave ya colocada quedaría así:

Como se puede observar, la distribución de los caracteres de la clave en cada cara del dado formará dos filas horizontales, una Fila Superior y una Fila Inferior con cuatro caracteres cada una (8 por cara).

La forma de representar cada letra, número, espacio, coma o punto de un texto plano será mediante la siguiente fórmula:

  1. <strong>CARA DEL DADO + FILA SUPERIOR O INFERIOR + POSICIÓN EN LA FILA CONTANDO POR LA IZQUIERDA</strong> ==> [6 caracteres en el mensaje cifrado]

[ATENCIÓN: El texto plano no deberá contener ni letras acentuadas ni otros signos distintos del punto o la coma. Además es conveniente insertar ruido entre palabras empleando espacios en blanco]

Para representar los tres datos anteriores en el mensaje cifrado se van a emplear solamente tres caracteres que son: el "." (punto), los ":" (dos puntos) y el espacio en blanco. Cada uno de los puntitos, independientemente de que estén arriba o abajo, valdrán como 1 en los cálculos para hallar la CARA DEL DADO y la POSICIÓN EN LA FILA, pero los correspondientes al apartado FILA SUPERIOR O INFERIOR tienen otra finalidad, que es la de indicar arriba/fila-superior (:) o abajo/fila-inferior (.).

De momento, y para resultar visualmente más perceptible, se sutituirá el espacio en blanco por el símbolo"*".

CARA DEL DADO => compuesta por la suma de los puntos de los tres primeros caracteres de la fórmula

FILA SUPERIOR O INFERIOR => compuesta por un sólo carácter, el ":" para la Superior y el "." para la Inferior

POSICIÓN EN LA FILA => compuesta por la suma de los puntos de los dos últimos caracteres de la fórmula

Resumiendo, cada carácter del texto plano se convierte en seis caracteres en el mensaje cifrado. ¿Mucha inflación?. No, menos de la que parece.

EJEMPLO DE CIFRADO DE LA LETRA A

CARA DEL DADO

Como se podrá ver la A está en la cara 1 y 4 del dado por lo que de entrada ya obtendremos varios resultados.

A => Posibles cifrados que dan el valor 1 =>
[.**] [*.*] [**.]

A => Posibles cifrados que dan el valor 4 =>
[::*] [:*:] [*::] [..:] [.:.] [:..]

FILA SUPERIOR O INFERIOR

La Fila Superior y la Inferior se representan respectivamente por el ":" y el ".", por lo tanto como la A de la cara 1 está en la Superior habrá que añadir el ":" y la A de la cara 4, como está en la Inferior, el ".". Vamos a ver de momento cómo quedaría la A cifrada:

A Cara 1

[.**] + [:] 	=>	[.**:]
[*.*] + [:] 	=> 	[*.*:]
[**.] + [:] 	=> 	[**.:]

A Cara 4

[::*]  + [.] 	=> 	[::*.]
[:*:]  + [.]	=>	[:*:.]
[*::]  + [.]	=>	[*::.]
[..:]   + [.]	=>	[..:.]
[.:.]   + [.]	=>	[.:..]
[:..]   + [.]	=>	[:...]

POSICIÓN EN LA FILA CONTANDO POR LA IZQUIERDA

Ahora queda por añadir la posición, que como recordaremos estará formada por dos caracteres. La A de la cara 1 está en la posición 4 y la A de la cara 4 en la posición 3, contando siempre por la izquierda. Vamos a completar el cifrado, por lo tanto las variaciones que podrán añadirse al resultado anterior serán las siguientes:

A cara 1 =>
[::]
A cara 4 =>
[:.] [.:]

La letra A presentaría finalmente con el cifrado completo todas las siguientes combinaciones:

[.**:::] [*.*:::] [**.:::] [::*.:.] [::*..:] [:*:.:.] [:*:..:] [*::.:.] [*::..:] [..:.:.] [..:..:] [.:..:.] [.:...:] [:...:.] [:....:]

Por tanto, para representar la letra A tenemos 15 posibles opciones. Ahora vamos a ver el efecto óptico que daría cifrar un texto plano compuesto por quince A sustituyendo el símbolo "*" por el que realmente debiera, el espacio en blanco:

.  ::: . :::  .::::: .:.:: ..:: :.:.: :..: ::.:. ::..:..:.:...:..:.:..:..:...::...:.:....:

Como podría parecer algo engorrosa su puesta en práctica, Agustín ha creado un estupendo programa en Logo que automatiza todo este proceso permitiendo tanto cifrar como descifrar cualquier texto. Lo único que habrá que tener en cuenta es cómo hacer que la clave que se vaya a emplear sea efectiva.

LA CLAVE

La clave no es más que el Alfabeto Maestro desordenado que se insertará en las caras del dado. La forma de desordenarlo es:

  • crear una frase fácil de recordar (estamos hablando de cifrado de papel y lápiz para espías de la generación Ni-Ni)
  • la frase debería emplear algún número, coma, punto, y los caracteres menos frecuentes del alfabeto castellano (K, W, X, Z)
  • es fácil introducir dichas letras ya que la K puede sustiruir en un texto plano a la palabra "que", la X a la palabra "por" y al símbolo de multiplicar, la Z al número 2, y la W a la M (es cuestión de jugar con la imaginación).

Un ejemplo de frase a recordar:

"2011, el año de la liebre porque lo dice el horóscopo chino."

Se convierte según queramos en:

2011,-EL-AÑO-DE-LA-LIEBRE-XK-LO-DICE-EL-HOROSCOPO-CHINO.

El Alfabeto Maestro nos dice que de caracteres repetidos hay:

  1. 2_A
  2. 3_E
  3. 2_O
  4. 2_L
  5. 2_S
  6. 2_N
  7. 2_-

Por lo tanto, de la frase que hemos dicho tendremos que eliminar todos aquellos caracteres que excedan del Alfabeto Maestro. La frase limpia que formará la primera parte de la clave quedará así:

201,-EL-AÑODELAIEBRXKOCHSPN.

De momento tenemos 28 caracteres que hay que completar hasta los 48.
Ahora deberemos eliminar del Alfabeto Maestro que conocemos y es público:

  1. A0B1C2D3E4F5G6H7I8J9K.L,MENAÑOOLPSQNRES-T-UVWXYZ

todos aquellos caracteres que ya tenemos. Esta operación será mejor hacerla sobre papel para evitar errores. La clave finalmente quedará así:

201,-EL-AÑODELAIEBRXKOCHSPN.34F5G678J9MQNSTUVWYZ

EL PROGRAMA DE AGUSTÍN

Para que funcione Arena-DLC-3.9.lgo primero hay que tener instalado en el equipo el intérprete del lenguaje Logo, por lo tanto descargamos FMSLogo 6.26.0 para Windows desde http://sourceforge.net/projects/fmslogo/ Una vez instalado, y eligiendo el idioma inglés, reconocerá de forma automática los archivos *.LGO. Ejecutamos Arena-DLC-3.9.lgo, saldrá esta ventana e introduciremos la clave => OK:

Seleccionamos según nos interese Cifrar o Descifrar. En este caso Cifrar => OK:

La siguiente ventana nos muestra cómo queda el mensaje cifrado, con lo que sólo nos queda guardarlo con la extensión *.TXT:
File => Save and Exit => ¿Quiere volver a cifrar o descifrar? => No

No puedo terminar este artículo sin primero agradecer públicamente a Agustín tanto sus brillantes ideas y consejos como las horas invertidas en la creación de este magnífico programa en Logo, y segundo solicitar a admin que dada la impagable participación de Agustín en este cifrado pues me gustaría que del total de puntos que recibiré por las lecturas al menos el 50% vaya a parar a su cuenta, simplemente porque se lo merece.

Y tampoco puedo terminar el artículo sin plantear el correspondiente reto... ¿o es que pensábais que os íbais a librar?. Aquí tenéis el archivo texto-sand.txt y ahora a ver si podéis con él.

infosniper
http://sites.google.com/site/infosniper/