Cifrado de arena

 

 

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:

A0B1C2D3E4F5G6H7I8J9K.L,MENAÑOOLPSQNRES-T-UVWXYZ

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:


CARA DEL DADO + FILA SUPERIOR O INFERIOR + POSICIÓN EN LA FILA CONTANDO POR LA IZQUIERDA ==> [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:


2_A
3_E
2_O
2_L
2_S
2_N
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:

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/

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).
Agustín's picture

Non nobis


No merezco la mitad ni ninguno de los puntos, porque para un programeta, implementar el algoritmo no presenta gran dificultad. Lo realmente meritorio es construir un buen algoritmo. Además, no pude evitar hacerlo, porque el Maligno se me apareció en sueños: "AGUSTÍIIIN, MIRA EL ALGORITMO QUE HAN PARIDO MIS FÉTIDAS ENTRAAAAAÑAS, HAZME EL PUTO FAVOR DE ESCRIBIR UN PROGRAMEJO DE ESOS TUYOS PARA QUE MIS CANSADOS OJOS NO TENGAN QUE ESFORZARSEEEEEE". Y yo me levanté en estado de trance y lo hice de un tirón. La posesión diabólica -sólo diabólica, no penséis mal- es lo que tiene.

Una aclaración:

Al escribir la clave no hace falta poner el signo "-" en los espacios, ya que el programa lo hace. También se pueden poner libremente minúsculas y letras acentuadas, que el programa reconvierte.

Igualmente se pueden introducir otros símbolos que, no siendo del alfabeto, puedan tener valor mnemotécnico, o porque al usuario le apetezca. Estos símbolos espurios se omitirán en las operaciones.

Del mismo modo, se puede cifrar cualquier texto, ya que los signos exóticos se filtran.

También os comunico que ignoro la clave del j***** cifrado este, así que me considero un atacante más. Voy a ver si puedo vengarme de la posesión diabólica, que aún huelo a azufre.

P.S.
Si queréis usar el programa, copiad el código a un fichero con la extensión .lgo
Al hacer doble click arrancará, si tenéis instalado el FMSLogo. También rueda sobre Wine

---

pbuentam's picture

Dados


No se si tiene algo que ver pero he visto una cosa que me ha llamado la atencion, ya que hablas de los dados y del juego. El dado que usas esta mal hecho. Las caras opuestas de los dados siempre suman 7, luego el 3 y el 2 estan cambiados de sitio.

mon's picture

Que imaginación


Hola

Me parece muy curioso e ingenioso el sistema de cifrado. Me da una envidia sana de como sois capaces de inventarlo y sobre todo como se ve el resultado final que desconcierta al verlo.

Lo que si veo claro es que sin ordenador al canto el sistema se hace pesado. Ya me gustaria ver algun sistema rápido sin grandes equipamientos de cifrado y descifrado (tipo tarjetas perforadas por ejemplo).

Mis felicitaciones por dar esta vidilla al sitio.

Un saludo
(Agur eta ondo ibili)

Mon el del Ibiza

infosniper's picture

Gracias en nombre de los dos


Es que Agustín está como mareadillo a causa de no sé qué ha olido y no se puede poner.

Y una cosa: el descifrado está pensado para lápiz y papel por lo que es muy rápido (no tanto el cifrado). Basta con que en el mensaje recibido se dibuje la clave repartida por un dado y se separen los caracteres del cifrado de 6 en 6. Eso sí, una vez descifrado el papel habrá que trocearlo minuciosamente y aliñarlo en la ensalada de la cena.

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

Calario's picture

¡Buena idea!


Muy útil para hacerlo desaparecer tras su descifrado.

Agustín's picture

No es mala idea


Ya me gustaria ver algun sistema rápido sin grandes equipamientos de cifrado y descifrado (tipo tarjetas perforadas por ejemplo).

Puede parecer faenero, pero puede ser útil para mensajes cortos. Una vez que tienes el alfabeto distribuido por el dado, se podría perforar una tira de cartón o de plástico en la que previamente se hubieran escrito (o troquelado) dos filas completas de puntitos. Algo como:

::::::::::::::::::::::::::::::::::::::::::::::::::

Entonces va uno mirando las letras del dado y va pinchando con un alfiler, saltando los puntos que no se deban perforar. El resultado es una especie de braille, pero hundido. Se puede usar la propia cinta como soporte, o el papel de abajo, sin más que pasar un rotulador por encima de los agujeros, para que la tinta pase al papel por ellos.

Se puede uno imaginar la utilidad de un sistema así en una situación de guerra, ocupación o revolución, cuando no se tiene acceso a ordenadores, ni internet, ni móviles, que es cuando realmente hace falta mandar mensajes cifrados.

---

infosniper's picture

No seas tan modesto y no te quites mérito


De paso podrías explicar también qué otras cualidades tiene tu programa (aquello de no sé qué aleatorio y tal).

Ah, y respecto a oler a azufre por toquetear "un algoritmo que han parido mis fétidas entrañas", o sea que -dicho finamente- he cagado, lo que pienso es que tienes un pequeño problema olfativo y lo que estás oliendo en realidad no es SO2, es otra cosa.

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

ManoloGrx's picture

Maldicion


Agustin atrapado por el lado oscuro (y fetido segun parece), estamos listos, habra que afilar el colmillo para hincarselo al reto, por probar que no quede

Saludos
ManoloGrx

No hay nada repartido de modo más equitativo que la razón: Todo el mundo está convencido de tener suficiente. Rene Descartes

lllou winxirfurfista's picture

Una duda existencial


Las caras opuestas de un dado siempre han de sumar 7. Por ejemplo: 6+1, 4+3 y 5+2. ¿Porque no se ha respetado esto en el reto? ¿Supondria mucho problema el subsanar dicho error?

infosniper's picture

De error nada, está hecho aposta


porque la distribución del valor de las caras resulta de esta manera mucho más cómoda. ¿Quieres otra curiosidad echándole imaginación?. Pues trazando una línea curva que siga el orden de esas caras se dibujará un interrogante.

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