El reto acaba de sucumbir a los embates de mellon El Implacable. Enhorabuena.

Por Agustín & Infosniper (cómo no, en la sombra)

El alfabeto

Esta nueva versión no está pensada para que el cifrado sea irrompible (eso sería una mala propuesta), sino para que sea algo más difícil (¡Atención, mellon y compañía!). En realidad se trata de un ejercicio para medir la fuerza de un cifrado cuasi-homofónico. Para ello en el alfabeto las letras más frecuentes están repetidas, con la esperanza de que las frecuencias de los códigos cifrados –de las famosas coordenadas- sean prácticamente uniformes, y el análisis estadístico sea más difícil, aunque hay que tener en cuenta que esta circunstancia dependerá de los textos utilizados, y nunca se consigue del todo.

La teoría dice que los cifrados por sustitución homofónica son vulnerables debido a las agrupaciones de letras características del idioma; pero una cosa es la teoría...

El alfabeto consta de 108 letras, incluyendo el separador. No hay números ni signos de puntuación:

Como se ve, hay las siguientes ocurrencias múltiples:

Naturalmente, sería una debilidad presentar todas las repeticiones juntitas, por lo que el alfabeto base se presenta con una ligera reordenación aleatoria:

y sobre éste se aplicarán las transformaciones de la clave. Sí, han salido algunos pares de letras iguales juntas, qué le vamos a hacer. Por cierto, el separador es sólo un separador, y no incorpora ruido alguno.

El alfabeto se distribuye, como en la primera versión, en las caras del dado, pero ahora las filas tienen nueve columnas en vez de cuatro.

Los signos

Para evitar un aumento de la inflación se ha incorporado un tercer signo:

“;” = 3

De manera que para codificar las caras sólo utilizamos dos signos:

Cara 1 [.* *.]
Cara 2 [.. *: :*]
Cara 3 [.: :. *; ;*]
Cara 4 [.; ;. ::]
Cara 5 [:; ;:]
Cara 6 [;;]

Para la fila, como antes.

Fila 1 [:]
Fila 2 [.]

Y para la columna, tres signos:

Col. 1 [**. *.* .**]
Col. 2 [..* .*. *.. **: *:* :**]
Col. 3 [.*: .:* :.* :*. *:. *.: **; *;* ;** ... ]
Col. 4 [*:: :*: ::* *.; *;. ;*. ;.* .*; .;* ..: .:. :..]
Col. 5 [;.. .;. ..; *:; *;: :;* :*; ;*: ;:* ::. :.: .::]
Col. 6 [;;* *;; ;*; ::: .:; .;: :.; :;. ;.: ;:.]
Col. 7 [;.; .;; ;:: :;: ::; ;;.]
Col. 8 [:;; ;:; ;;:]
Col. 9 [;;;]

El asterisco “*” se sustituirá por el espacio al escribir el cifrado, con lo que el aspecto del cifrado es similar al de la versión original, salvo que la arena es menos fina:

La clave

La clave se inserta en el alfabeto, a partir de la primera letra de éste que coincide con la primera letra de la clave, de esta forma:

Sea la clave: “una clave cualquiera” = “U N A - C L A V E - C U A L Q U I E R A”

1. Se busca en el alfabeto la primera “U”, que se elimina, intercalando en su lugar la clave completa:

2. Como hemos añadido 19 letras (una menos de lo que mide la clave, tomamos las últimas 19 letras del alfabeto, y las ponemos al principio, con lo que obtenemos:

Si fuera necesario, entre las letras a mover se tomarían algunas de la clave, como ocurriría si la clave se insertara muy hacia el final

3. Ahora se recorre el alfabeto de izquierda a derecha para asegurarse de que no hay letras en exceso. Es decir, al llegar a la quinta “U”, la eliminaríamos, etc. De esta forma el alfabeto final, que no conocerá el atacante, sería:

Con este alfabeto, la configuración del dado sería la siguiente:

cara 1 fila 1 [E N A U B O A L K]
cara 1 fila 2 [N E I L X N N - -]
cara 2 fila 1 [A M - C - T R - S]
cara 2 fila 2 [A - E S D - P D M]
cara 3 fila 1 [- C O - H T J Q Z]
cara 3 fila 2 [- U R O I E G S Ñ]
cara 4 fila 1 [R - N S I E D N T]
cara 4 fila 2 [L A A - O - - O W]
cara 5 fila 1 [F - H E I R B I A]
cara 5 fila 2 [A L E D V S E P O]
cara 6 fila 1 [E C O - A T R A U]
cara 6 fila 2 [V U Y E E O - - S]

No hace falta programar

Este ejercicio está concebido como un cifrado de lápiz y papel, pero es evidente que la tarea de convertir la arena en datos manejables, como las coordenadas, puede ser tediosa, y requerir de cierto trabajo de programación. Para no dejar fuera de juego a nadie, hemos introducido en el programa una opción de análisis que permite convertir el galimatías de “arena” de un fichero cifrado, en las coordenadas de cada letra, con el formato “%CFc” (Cara, Fila, columna), para facilitar las sustituciones que se considere oportunas. También proporciona la frecuencia absoluta de cada coordenada. A partir de ahí que cada cual se apañe.

Infosniper & Agustín

P.S.
Se me olvidaba: Las configuraciones se van asignando por riguroso orden; pero las coordenadas de las letras múltiples se eligen al azar, a partir de una semilla basada en la hora de ejecución, del programa, quiero decir.