DESENCRIPTADO DE MENSAJES CIFRADOS

119
CRIPTOANÁLISIS, MEDIANTE ALGORITMOS GENÉTICOS, DE TEXTOS CIFRADOS EN LA GUERRA CIVIL ESPAÑOLA CON LA TÉCNICA DE CINTA MÓVIL Proyecto de fin de carrera, Ingeniería Informática Superior Universidad Pontificia de Comillas – ICAI (Madrid – 2011) Autor: José Miguel Soriano de la Cámara ÍNDICE Página Cap 1.- Introducción...................................................................................................... 3 1.1.- Origen del proyecto.......................................................................................... 3 1.2.- Objetivos del proyecto ..................................................................................... 4 1.3.- Herramientas empleadas ................................................................................. 4 1.4.- Enfoque de resolución ..................................................................................... 5 Cap 2.- Criptografía y Criptoanálisis .......................................................................... 9 2.1.- Métodos de cifrado clásicos .......................................................................... 10 2.1.1.- Clasificación de los sistemas de cifrado............................................... 10 2.1.2.- Reglas de Kerckhoffs .............................................................................. 12 2.2.- Reseña histórica de los sistemas de cifra ..................................................... 13 2.2.1.- La escítala lacedemonia.......................................................................... 13 2.2.2.- Método César........................................................................................... 13 2.2.3.- Cifra Monoalfabética. ............................................................................. 14 2.2.4.- Cifrado Vigenère ..................................................................................... 15 2.2.5.- Cifrado de Playfair.................................................................................. 17 2.2.6.- Cifrado Vernam....................................................................................... 18 2.2.7.- Cifrado Bazeries ...................................................................................... 19 2.3.- Máquinas de cifrar en el siglo XX................................................................. 21 2.3.1.- La máquina Enigma................................................................................ 21 2.3.2.- La máquina Hagelin ............................................................................... 23 2.4.- Cifrado por homófonos ................................................................................. 25 2.4.1.- Cifrado homofónico de orden n>1 ....................................................... 26 2.4.2.- Criptoanálisis de los cifrados por sustitución con homófonos ........ 27 2.4.3.- El método de cinta móvil o método español....................................... 27 2.4.4.- Ataque al método español: sus debilidades........................................ 31 Cap 3.- Método Español: criptoanálisis con algoritmo genético. ......................... 35 3.1.- Teoría general sobre Algoritmos Genéticos................................................ 37 3.2.- Preparación de los datos de entrada ............................................................ 41 3.2.1.- Cálculo de frecuencias reales. ............................................................... 41 3.2.2.- Carga del texto cifrado ........................................................................... 44 3.2.3.- Generación de la tabla inversa. ............................................................. 45 3.2.4.- Procesado del diccionario ...................................................................... 47 3.3.- Diseño de la estructura de los cromosomas ............................................... 50

Transcript of DESENCRIPTADO DE MENSAJES CIFRADOS

Page 1: DESENCRIPTADO DE MENSAJES CIFRADOS

CRIPTOANÁLISIS, MEDIANTE ALGORITMOS GENÉTICOS, DE TEXTOS CIFRADOS EN LA GUERRA CIVIL ESPAÑOLA

CON LA TÉCNICA DE CINTA MÓVIL

Proyecto de fin de carrera, Ingeniería Informática Superior

Universidad Pontificia de Comillas – ICAI

(Madrid – 2011)

Autor: José Miguel Soriano de la Cámara

ÍNDICE Página

Cap 1.- Introducción...................................................................................................... 3 1.1.- Origen del proyecto.......................................................................................... 3 1.2.- Objetivos del proyecto ..................................................................................... 4 1.3.- Herramientas empleadas................................................................................. 4 1.4.- Enfoque de resolución ..................................................................................... 5

Cap 2.- Criptografía y Criptoanálisis .......................................................................... 9 2.1.- Métodos de cifrado clásicos .......................................................................... 10 2.1.1.- Clasificación de los sistemas de cifrado............................................... 10 2.1.2.- Reglas de Kerckhoffs .............................................................................. 12

2.2.- Reseña histórica de los sistemas de cifra..................................................... 13 2.2.1.- La escítala lacedemonia.......................................................................... 13 2.2.2.- Método César........................................................................................... 13 2.2.3.- Cifra Monoalfabética. ............................................................................. 14 2.2.4.- Cifrado Vigenère..................................................................................... 15 2.2.5.- Cifrado de Playfair.................................................................................. 17 2.2.6.- Cifrado Vernam....................................................................................... 18 2.2.7.- Cifrado Bazeries ...................................................................................... 19

2.3.- Máquinas de cifrar en el siglo XX................................................................. 21 2.3.1.- La máquina Enigma................................................................................ 21 2.3.2.- La máquina Hagelin ............................................................................... 23

2.4.- Cifrado por homófonos ................................................................................. 25 2.4.1.- Cifrado homofónico de orden n>1 ....................................................... 26 2.4.2.- Criptoanálisis de los cifrados por sustitución con homófonos ........ 27 2.4.3.- El método de cinta móvil o método español....................................... 27 2.4.4.- Ataque al método español: sus debilidades........................................ 31

Cap 3.- Método Español: criptoanálisis con algoritmo genético. ......................... 35 3.1.- Teoría general sobre Algoritmos Genéticos................................................ 37 3.2.- Preparación de los datos de entrada............................................................ 41 3.2.1.- Cálculo de frecuencias reales. ............................................................... 41 3.2.2.- Carga del texto cifrado........................................................................... 44 3.2.3.- Generación de la tabla inversa. ............................................................. 45 3.2.4.- Procesado del diccionario...................................................................... 47

3.3.- Diseño de la estructura de los cromosomas ............................................... 50

Page 2: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 1.- Introducción. 2/119

José Miguel Soriano de la Cámara Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.4.- Inicialización del AG...................................................................................... 51 3.5.- Reproducción o cruce de los individuos ..................................................... 51 3.6.- Mutación de los cromosomas. ...................................................................... 51 3.7.- Evaluación: Función Objetivo (Fitness)....................................................... 52 3.8.- Definición final del texto descifrado............................................................ 54

Cap 4.- Casos de estudio y resultados ...................................................................... 55

Cap 5.- Conclusiones y futuros desarrollos ............................................................. 69

Anexo A: Tabla de frecuencias de uso aplicada...................................................... 72

Anexo B: Método Kasiski (ataque a un cifrado polialfabético)............................. 75

Anexo C: Códigos de Baudot..................................................................................... 78

Anexo D: Cifra con ENIGMA .................................................................................... 79

Anexo E: El Método Español según Carmona: año 1894. ...................................... 80

Anexo F: Claves y tablas de homófonos de la GC36; ejemplos. ........................... 82

Anexo G- Planificación y Presupuesto ..................................................................... 86

Anexo H.- Código fuente............................................................................................ 88

Índice de Figuras........................................................................................................ 117

Bibliografía.................................................................................................................. 118

Page 3: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 1.- Introducción. 3/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Cap 1.- Introducción.

1.1.- Origen del proyecto

El presente trabajo tiene su origen en el proyecto fin de carrera supervisado por los investigadores Don Francisco Alberto Campos Fernández y Don Jesús María Latorre Canteli del Instituto de Investigación Tecnológica de UP Comillas. Dicho proyecto es la continuación natural del desarrollado por el ingeniero Alberto Gascón González en el curso 2009-2010.

Este proyecto aúna por un lado el interés que el acontecimiento “Guerra Civil Española” o “Guerra del 36” (en adelante GC36) ha despertado y despierta en cualquiera (nacional o extranjero) que se acerque y pretenda entender la España del siglo XX. Por otro lado, para cualquier “informático” supone un reto profesional el “romper” el secreto de miles de documentos que aún permanecen cifrados en numerosos archivos históricos (en España y fuera de ella), secreto que, roto, podría revelar datos sobre interpretaciones de hechos que ahora parecen definitivas. Adicionalmente, este proyecto permite la aplicación del algoritmo genético a las técnicas de criptoanálisis y su desarrollo.

El proyecto de Don Alberto Gascón referido al inicio ceñía sus hipótesis con las siguientes acotaciones:

a) La tabla de homófonos (ver cap. 2.4.3) es conocida pero la clave no.

b) Uso de un “diccionario” compuesto con palabras elegidas por la certeza de su pertenencia al texto origen o plano, y ello no es real.

c) Todas las palabras del “diccionario” tienen 6 o más caracteres1.

Nuestra solución se plantea:

Cuando la tabla de homófonos y la clave (ver pág. 28) no son conocidas porque de hecho el criptógrafo no las conoce.

Por resolución con Algoritmo Genético (en adelante AG) sin limitación de palabras o nº de caracteres.

Incorporando un diccionario real (como fichero de texto) de 550.000 términos para la búsqueda de coincidencias que permite mejorar el análisis estadístico de la frecuencia de los monogramas, bígramas, trigramas e incluso de palabras.

Implementando en el algoritmo reglas de uso del idioma español del tipo “después de Q siempre va U”, “la K, J, H y V siempre van seguidas de vocal”, “cada 4 caracteres hay al menos una vocal”, etc.

1 Con sólo encontrar una palabra se ha resuelto el 22% (6/27) del problema. ¿Qué pasa con las palabras de uno a cinco caracteres?

Page 4: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 1.- Introducción. 4/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

1.2.- Objetivos del proyecto

a) Objetivo principal: diseño de un algoritmo genético para el criptoanálisis de mensajes generados a partir de tabla de homófonos y clave desconocidas. Objetivos parciales…

1. Análisis de la región factible del problema para identificar debilidades en el cifrado de las que se puedan derivar restricciones que ayuden a resolver el problema.

2. Planteamiento de un problema de optimización con restricciones equivalente al proceso de criptoanálisis.

3. Diseño del AG que permita resolver el problema anterior. El propio desarrollo del AG ha ido generando la necesidad de una obligada

interacción del criptoanalista2 con la herramienta que supone, en sí, el AG codificado (por ejemplo, en la fase de inicialización del algoritmo), lo que ha obligado a definir un segundo objetivo:

b) Objetivo secundario: diseño de una herramienta Software (SW) con interface amigable que resulte útil e intuitiva para el futuro investigador que pudiera aprovechar los resultados del presente trabajo. Dicho SW…

1. No requiere un ordenador muy potente ni aplica técnicas de descifrado por “fuerza bruta”.

2. Permite opciones de inicialización (diccionarios a usar, texto cifrado, etc.)

3. Facilita informes intermedios y permite restricciones durante la ejecución para que el usuario pueda incorporar su análisis personal en cualquier fase del proceso.

Dejamos advertido desde este inicio que aun cuando se consigan todos los

objetivos relacionados, nunca podremos implementar un arma esencial para cualquier analista y más en esta materia: la intuición.

1.3.- Herramientas empleadas

Microsoft Visual Studio 2008.

Librería de algoritmos genéticos: GALIB v2.4.6 de Enero del 2005 adaptada a c++.

Excel para realizar análisis estadísticos y matemáticos a la hora de redactar los algoritmos.

Notepad++ para comprobar el funcionamiento de los algoritmos antes de implantarlos.

Microsoft Visio para la realización de los diagramas de flujo de los algoritmos.

2 Ver inicio del Capítulo 2

Page 5: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 1.- Introducción. 5/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

1.4.- Enfoque de resolución

Como se detalla en capítulo 2.4.3, el método de Cifrado por Cinta Móvil o Método Español consiste en el uso de una tabla con 27 columnas correspondientes a las 27 letras del alfabeto y 8 filas que permiten asignar de 2 a 5 valores numéricos (homófonos) por letra con un rango3 de 00-99 (ver pág. 28). De manera que a cada letra del mensaje origen (texto plano) le pueden corresponder hasta 5 números (<= 99) y a cada número le corresponde una sola letra. Al cifrar el texto origen cada letra puede ser cifrada al azar usando cualquiera de los números de su columna. Además, mediante el uso de una clave se hace bailar la correspondencia entre las columnas de números y las letras (ver Fig. 1 de cap 2.4.3).

Del ejemplo desarrollado en página 28 extraemos el siguiente resumen…

Mensaje: Atacar el jueves diez a las 6 horas Texto:

plano A T A C A R J U E V E S D I E Z A S E I S H O R A S

cifrado 58 29 85 34 58 06 50 08 86 03 25 89 49 76 54 81 23 15 25 02 40 77 01 68 85 79

Resumen de cifrado por cinta móvil 0-1

Para aplicar el algoritmo genético, se realiza una ordenación previa, de menor a mayor, de todos los números (tomados una sola vez) contenidos en el texto cifrado, componiendo un “vector de valores numéricos”. En el ejemplo

01 02 03 06 08 15 23 25 29 34 40 49 50 54 58 68 76 77 79 81 85 86 89

Vector de valores numéricos 0-2

A cada número le corresponderá una sola letra del texto plano. Pero, no conociendo la tabla4, a cada número le podría corresponder cualquiera de las 27 letras del alfabeto. ¿Cómo reducir ese espacio de búsqueda tan amplio -27 letras posibles por número-?:

1º. Se calcula la frecuencia relativa de cada número (de cada homófono) en el texto cifrado y ese valor se multiplica por 1, por 2, por 3, por 4 y por 5, que es el número habitual de homófonos por columna de letra en la tabla de cifrado5.

2º. Se comparan esos cinco resultados con las frecuencias relativas de aparición de las letras en un texto de la época (ver pág. 74), admitiendo un margen de +-20% para aceptar como positiva la comparación (ver tabla de pág. 32).

3 Rango 10-99 y de 3 a 4 valores numéricos en la definición clásica de finales del siglo XIX (ver [7] y [8]).

4 Ver nuestro planteamiento en página 3.

5 Es de suponer que si el cifrador dispone de 3 homófonos (cardinal 3) para la letra “F”, al cifrar un texto largo elegirá con la misma probabilidad (1/3) a cada representante de “F” en la tabla. Luego si se multiplica por 3 la frecuencia relativa de aparición en el texto cifrado de uno de los homófonos, se debería obtener la frecuencia de uso habitual de la “F” en el texto origen, que si es suficientemente largo será semejante a la de uso en el idioma (ver Anexo A).

Page 6: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 1.- Introducción. 6/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3º. Con ese margen de error, en las pruebas realizadas se obtiene para cada número del vector de valores un conjunto L de letras candidatas con una media de 9 letras por cada homófono en vez de las 27 iniciales. Se ha reducido el espacio de búsqueda en un 65%. Se puede componer, así, una tabla, que llamaremos “tabla inversa de homófonos” que con alta probabilidad contiene la solución que estamos buscando:

Homófonos 01 02 03 … … … 86 89

Let

ras

Ca

nd

ida

tas

f b a ñ r

h g e x i

q v d

z y l

j j

u ñ

x

Tabla inversa de homófonos 0-3

Se puede ver en detalle este análisis en aptdo. 2.4.4

¿Cómo inicializamos el cromosoma del AG?

1º. El vector de valores numéricos obtenido induce un cromosoma inicial en el que cada gen es una letra del alfabeto. Dicha letra es asignada de manera aleatoria pero…

a. Con las limitaciones derivadas del proceso de reducción del espacio de búsqueda explicado en los párrafos anteriores. Cada gen (letra) debe pertenecer al conjunto L de candidatos del homófono.

b. No puede repetirse una letra más de cinco veces en el cromosoma puesto que en la tabla de homófonos a una letra no se le asignan más de 5 números.

Ejemplo: si el homófono “01” del vector ejemplo tiene como conjunto candidato {f, h, q, z, j, u}, el gen de índice 1 en el cromosoma inducido no puede ni podrá contener una g. Al homófono “86” nunca le podrá corresponder una “h” dado que h no pertenece a {ñ, x}

01 02 03 06 08 15 23 25 29 34 40 49 50 54 58 68 76 77 79 81 85 86 89

Vector de valores numéricos 0-4

z g e a o q a e s u o q s e i t c g r e s x d

Cromosoma inducido 0-5

2º.- La calidad del cromosoma se evalúa en función del texto resultante al aplicar el cromosoma sobre el texto cifrado, comparando la suma de los errores relativos de las frecuencias de las letras, bigramas y trigramas del texto de la época con los del texto resultante. Además, se realiza una búsqueda secuencial en el texto resultante sobre un diccionario buscando palabras de una determinada longitud; el número de palabras encontradas incrementa la valoración del cromosoma de cara al proceso de selección (ver función objetivo en pág. 52).

Page 7: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 1.- Introducción. 7/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3º.- El proceso de reproducción trata de conseguir un cromosoma con mejor resultado en la función objetivo, respetando como genes las letras del conjunto candidato de cada homófono

4º.- El proceso de mutación cambia genes al azar dentro del conjunto candidato y se reitera hasta encontrar un individuo más óptimo.

¿Cómo definimos el texto final del mensaje descifrado?

El AG informa al analista de los cromosomas que evalúa y de su resultado en la función objetivo. Escogiendo aquellos cuyo resultado está incluido dentro del primer 5% de los mejores resultados, definimos los que llamaremos “cromosomas candidatos”.

En las pruebas realizadas, dichos cromosomas (normalmente de 3 a 6) generan hasta un 65% de acierto en los caracteres del texto plano original. Con esa plataforma de partida, y con la utilidad desarrollada al efecto que permite al analista actuar a nivel de cromosoma, se pueden evaluar soluciones basadas en su experiencia, contexto del mensaje o informaciones ajenas a él, que acerquen a la solución final (ver proceso en detalle desarrollado en “cap 4 Casos de Estudio”).

Con el proceso descrito se completa el criptoanálisis sin necesidad de encontrar la tabla de homófonos. Ésta, en todo caso, surge como parte de la información que resulta del proceso.

Page 8: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 1.- Introducción. 8/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Como resumen del enfoque de solución expuesto se presenta el esquema siguiente:

C

rip

tog

ram

a d

el

tod

o E

spa

ño

l

Algoritmo Genético

Utilidad de Análisis

Vector de valores

Tabla Inversa de homófonos

Cromosoma InicialCromosoma InicialCromosoma InicialCromosoma Inicial

Cromosoma InicialCromosoma InicialCromosoma InicialCromosoma candidato

Estudio de Frecuencias

Función Objetivo

Textos planosTextos planos

Texto FinalTexto Final

Analista

Texto CifradoTexto Cifrado

Page 9: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 9/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Cap 2.- Criptografía y Criptoanálisis

No siendo objeto de este trabajo el estudio de los diferentes sistemas de cifrado o su trayectoria histórica, pero con objeto de enmarcar y clasificar el método de cifrado por cinta móvil y de definir algunos términos habituales en criptografía, a continuación se desarrolla un breve estudio sobre la materia y se describen algunos de estos sistemas.

Etimológicamente la palabra criptografía deriva del griego kriptos (oculto) y de graphos (escritura), lo que da una clara idea de su definición clásica: arte de escribir mensajes en clave secreta o enigmáticamente [1].

Fue considerada un arte hasta que Claude Shannon publicó en 1949 el artículo “Teoría de los sistemas de comunicación secretos” y poco después el libro “La teoría matemática de la comunicación”, con Warren Weaver. Entonces la criptografía empezó a ser considerada una ciencia aplicada, debido a su relación con otras ciencias, como la estadística, la teoría de números, la teoría de la información y la teoría de la complejidad computacional [1]. La publicación en el año 1976 de un artículo por parte de Whitfield Diffie y Martin Hellman en el que proponen una nueva filosofía de cifra, dando lugar a los criptosistemas de

clave pública, se considera el segundo hito significativo en la criptografía moderna [4].

Ahora bien, la criptografía corresponde sólo a una parte de la comunicación secreta. Si se requiere secreto para la comunicación, es porque existe desconfianza o peligro de que el mensaje transmitido sea interceptado por alguien hostil. Este enemigo, si existe, utilizará todos los medios a su alcance para descifrar esos mensajes secretos mediante un conjunto de técnicas y métodos que constituyen una ciencia conocida como criptoanálisis. Al conjunto de ambas ciencias, criptografía y criptoanálisis, se le denomina criptología [1].

Históricamente la criptología ha sido una materia exclusiva del ámbito militar o diplomático. Sin embargo en la sociedad actual la criptología ha extendido sus aplicaciones a todo el ámbito civil proporcionando la seguridad de las redes telemáticas, incluyendo la identificación de entidades y autenticación, el control de acceso a los recursos, la confidencialidad de los mensajes transmitidos, la integridad de los mensajes y su no repudio [1].

Page 10: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 10/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

2.1.- Métodos de cifrado clásicos

Se llama cifrado (o transformación criptográfica) a una transformación del texto original (texto plano, inicial o texto claro) que lo convierte en el llamado texto cifrado o criptograma. Análogamente, se llama descifrado a la transformación que permite recuperar el texto original a partir del cifrado. Cada una de esas transformaciones está determinada por un parámetro llamado clave [1].

2.1.1.- Clasificación de los sistemas de cifrado

Por ocultación: Disimulo del mensaje origen dentro de otros textos.

Por transposición: Método por el que se reordena el texto original aplicando un algoritmo que produce el texto cifrado. El receptor reordena el texto cifrado aplicando el algoritmo inverso.

Por sustitución: Método de cifrado por el que unidades de texto plano origen son sustituidas con texto cifrado siguiendo un sistema regular; las "unidades" pueden ser una sola letra, pares de letras, tríos de letras, mezclas de lo anterior, entre otros. El receptor descifra el texto realizando la sustitución inversa [1].

En la figura siguiente hacemos una clasificación detallada de esas tres técnicas de cifrado clásico generales descritas.

Haremos a lo largo de las siguientes páginas un somero estudio comparativo de los sistemas reflejados en la fila inferior del esquema de arriba (elaboración propia).

Si el cifrado opera sobre caracteres simples, se denomina cifrado por sustitución simple; un cifrado que opera sobre grupos de letras se denomina poligráfico. Un cifrado monoalfabético usa una sustitución fija para

Sistemas de cifra clásicos 1

Page 11: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 11/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

todo el mensaje, mientras que un cifrado polialfabético usa diferentes sustituciones en diferentes momentos del mensaje, por ejemplo los homófonos, en los que una unidad del texto plano es sustituida por una de entre varias posibilidades existentes para el texto cifrado [1].

Se llama cifrado producto a la aplicación iterativa de operaciones de cifrado sobre texto ya cifrado, combinando o no sustitución y transposición [1].

En un cifrado por transposición, las unidades del texto plano son cambiadas usando una ordenación diferente, pero las unidades en sí mismas no son modificadas. Por el contrario, en un cifrado por sustitución las unidades del texto plano mantienen el mismo orden, lo que se cambia son las propias unidades del texto plano.

Según la relación existente entre la clave de cifrado y descifrado, los sistemas criptográficos se pueden dividir en dos grandes grupos: cifrado

simétrico o de clave secreta en el caso de que ambas coincidan; si es imposible obtener la clave de descifrado a partir de la clave de cifrado estamos ante un sistema de cifrado asimétrico o de clave pública [1].

En los sistemas asimétricos la seguridad del sistema no depende del conocimiento de la clave de cifrado. Cualquier usuario puede enviar un mensaje cifrado a otro usando la clave pública de este último, pero sólo aquel que conozca la clave privada correspondiente puede descifrarlo correctamente. El criptoanalista que intente averiguar la clave privada a partir de la pública se encontrará con un problema intratable [1].

Aquí trataremos los sistemas clásicos. El adjetivo de clásico, en contraposición al de criptosistemas modernos, se debe tanto a las técnicas utilizadas en las primeras, básicamente operaciones de sustitución y transposición de caracteres unidas al concepto de clave secreta, como al uso de máquinas dedicadas a la cifra. La criptografía clásica abarca, pues, desde tiempos inmemoriales hasta los años de la postguerra mundial, es decir, hasta la mitad del siglo XX. En el caso de los sistemas modernos, éstos hacen uso, además de lo anterior, de algunas propiedades matemáticas como, por ejemplo, la dificultad del cálculo del logaritmo discreto o el problema de la factorización de grandes números, unido esto a la representación binaria de la información. No obstante, muchos sistemas modernos y que en la actualidad se siguen utilizando, como los algoritmos de clave secreta DES e IDEA, se basan en conceptos que podríamos denominar clásicos como son los de transposición y sustitución con una clave privada, si bien en estos sistemas la operación se realiza sobre una cadena de bits y no sobre caracteres [4].

¿Cuándo un sistema criptográfico se considera óptimo o eficaz?. En 1883, el francés Auguste Kerckhoffs, en su libro “La criptografía militar”, enuncia las reglas que, desde entonces, la comunidad criptográfica considera que debe cumplir un buen sistema criptográfico [1].

Auguste Kerckhoffs 1

Page 12: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 12/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

2.1.2.- Reglas de Kerckhoffs:

1. No debe existir ninguna forma de recuperar mediante el criptograma el texto inicial o la clave. Esta regla se considera cumplida siempre que la complejidad del proceso de recuperación del texto original sea suficiente para mantener la seguridad del sistema.

2. Todo sistema criptográfico debe estar compuesto por dos tipos distintos de información. • Pública, como es la familia de algoritmos que lo definen. • Privada, como es la clave que se usa en cada cifrado particular.

3. La forma de escoger la clave debe ser fácil de recordar y modificar. 4. Debe ser factible la comunicación del criptograma por los medios de

transmisión habituales. 5. La complejidad del proceso de recuperación del texto original debe

corresponderse con el beneficio obtenido.

Genéricamente se conoce como Principio de Kerckhoffs aquel que enuncia de que la seguridad del sistema se debe medir suponiendo que el enemigo conoce completamente ambos procesos de cifrado y descifrado [1]. Es decir, si se mantiene en secreto la clave un sistema perfecto es indescifrable.

Page 13: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 13/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

2.2.- Reseña histórica de los sistemas de cifra

2.2.1.- La escítala lacedemonia:

Del griego (skytálē). Es el primer uso de la escritura secreta de que se tiene constancia; data del siglo V a. C., durante las guerras entre Atenas y Esparta. Está formada por dos varas idénticas en sus medidas, en especial su grosor. Se basaba únicamente en la alteración del mensaje mediante la escritura de los símbolos de

forma vertical sobre una cinta enrollada en un rodillo, de manera que al desenrollarla

los símbolos del mensaje quedaban desordenados o traspuestos, por lo que sólo se podía leer el mensaje tras enrollar la cinta en un rodillo de igual grosor.

Es el método de transposición más elemental; también conocido como transposición de matrices. Es equivalente a disponer en una tabla cada uno de los caracteres del texto plano en filas y luego tomarlos en

columnas. Siendo el ancho de fila el número de caras que presenta la escítala y el número de filas la cantidad resultante de dividir el largo total del mensaje entre el ancho de fila. (Ver http://es.wikipedia.org/wiki/Escítala)

La frase “ostentar el bastón de mando" tiene su origen en esta época. El bastón (la escítala) aseguraba el control del sistema de información y por tanto de la seguridad y de la vida política en la antigua Grecia [4].

2.2.2.- Método César.

Otra de las primeras noticias sobre criptografía proviene de la época romana (siglo I a.c.). El cifrado en este caso consistía en una sustitución según una regla fija: un caracter se cifra con un desplazamiento de 3 puestos en el orden del alfabeto; la “A” será “D”, la “F” será “I”

Mensaje: Atacar a las 6 horas del jueves 10

Alfabeto

Plano A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Cifrado D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

Texto

Plano A T A C A R A S E I S H O R A S J U E V E S D I E Z

Cifrado D W D F D U D V H L V K R U D V M X H Y H V G L H C

Transmitir: DWDFD UDVHL VKRUD VMXHY HVGLH CXYZM

Matemáticamente podemos describir el método usado por Julio César como una función lineal del tipo E(x)= (x+3) mod 26. Para descifrar emplearíamos la función D(x)= (x-3) mod 26 [1].

Puede parecer un sistema infantil pero considerando que durante milenios el 99,9% de la humanidad ha sido analfabeta, no creemos que en la Guerra de las Galias las tribus enemigas tuvieran muchos lectores y, menos aún,

Escítala lacedemonia 1

Page 14: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 14/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

capacitados para leer el latín codificado de esta manera. De hecho, el Método Cesar se ha usado durante siglos hasta la época del Renacimiento.

2.2.3.- Cifra Monoalfabética.

El cifrado Cesar visto, se puede generalizar usando cualquier desplazamiento hasta 26 con la evidente ventaja de que es muy fácil recordar la clave: sólo un número entre 1 y 26. Pero también es fácil de descifrar: hay 26 alfabetos posibles [1].

Podemos anular esta “facilidad” recordando que si tenemos 26 letras podríamos desordenar el alfabeto plano en alguna de las 26! (4x1026) permutaciones. Una técnica habitual para generar alguno de esos 26! alfabetos posibles desplazados era usar palabra clave: en dicha palabra se eliminan caracteres repetidos y a continuación se relaciona el resto del alfabeto si repetir caracteres. Veamos un ejemplo:

Mensaje: Atacar a las 6 horas del jueves 10 Alfabeto

Plano A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Clave S A N T I A G O

Cifrado S A N T I G O P Q R U V W X Y Z B C D E F H A J K L

Texto

Plano A T A C A R A S E I S H O R A S J U E V E S D I E Z

Cifrado S E S N S C S D I Q D P Y C S D R F I H I D T Q I L

Transmitir SESNS CSDIQ DPYCS DRFIH IDTQI LFINE

En la tabla, de elaboración propia como todas las que seguirán, hemos dispuesto el mensaje a transmitir como tradicionalmente se ha enseñado en las escuelas de transmisiones [27]: compartimentándolo en grupos de 5 caracteres, formando una especie de palabras que facilitaran la lectura, emisión, copia del mensaje cifrado o comprobación en la recepción, con preguntas del tipo “repita grupo 3”; en el ejemplo “DPYCS”. En el último grupo era habitual que las normas previeran caracteres de relleno y sin significado para completar hasta 5 (en el ejemplo el último grupo es L y se completa con FINE). Estaba previsto el uso de caracteres numéricos (coordenadas, fechas y horas) y de abreviaturas (H -hora-, PD –posición defensiva-, BP –base de partida-, LZ –zona de lanzamiento-, PC –puesto de mando, etc.). Junto con la palabra clave era normal especificar qué grupos se introducían como nulos; en el ejemplo clave “SANTIAGO”, grupos nulos 3 y 5, daría este mensaje a transmitir:

Transmitir SESNS CSDIQ XFRWE DPYCS BFTUP DRFIH IDTQI LFINE

Igualmente se instruía en una redacción a formato telegrama previa al cifrado, pero que mantuviera la esencia de la información, con objeto de reducir los recursos requeridos y errores en el proceso de transmisión y descifrado.

¿Es seguro enviar un mensaje con este sistema? Durante siglos esta técnica se consideró segura. En el siglo XI, Al-Kindi encontró un punto débil en la codificación monoalfabética: cada letra del alfabeto plano se sustituye por

Page 15: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 15/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

otra y siempre la misma. Si el texto cifrado es suficientemente largo, un análisis de frecuencia de sus caracteres comparado con las frecuencias de uso habituales en el idioma de que se trate permitirá deducir la tabla de conversión utilizada [5]. El criptoanálisis acababa de nacer.

La idea de la sustitución se utiliza también en la Biblia, donde se pueden encontrar textos cifrados con atbash hebreo: consiste en usar el carácter simétrico en el alfabeto (el de la “a” es la “z”), a lo que se llama método espejo, o “atbash” en hebreo; por ejemplo “ayuda” será “zbfwz” [1].

Es del siglo XIV la obra más antigua que existe sobre criptografía. Se titula Liber Zifrorum y su autor, Cicco Simoneta, estudia en ella diversos sistemas basados en simples sustituciones de letras. En el siglo XV la criptografía es impulsada por las intrigas entre el papado y las ciudades-estado italianas [5]. En 1466 León Battista Alberti, músico, pintor, escritor y arquitecto, concibió un sistema de sustitución polialfabética que emplea varios abecedarios, saltando de uno a otro; los cambios se indicaban escribiendo la letra del correspondiente alfabeto en el mensaje cifrado. El emisor y el destinatario han de ponerse de acuerdo para fijar la posición relativa de dos círculos concéntricos que determinará la correspondencia de los signos; son los llamados discos de Alberti.

2.2.4.- Cifrado Vigenère

Durante el siglo XVI se generaliza el uso de la criptografía en los ambientes diplomáticos y en 1586 Blaise de Vigenère publica una obra titulada Traité des “chiffres où secrètes manières d'ecrire”, donde reúne diferentes métodos utilizados en la época. En dicho tratado recoge un método originalmente descrito por Giovan Batista Belaso en 1553. De ahí que incorrectamente se le atribuyera en el siglo XIX a Vigenère, conociéndose aún hoy como el "cifrado Vigenère".

El cifrado Vigenère es un cifrado de sustitución polialfabético que se puede considerar como la generalización del cifrado César. La clave está constituida por una secuencia de símbolos del alfabeto K = {k0, k1, ... ,kd-1} de longitud “d” y donde ki<>kj para todo i,j<d (i<>j). Emplea la siguiente transformación congruente lineal de cifrado [1]:

Ek (mi) = (mi + k (i mod d)) mod n

siendo mi el i-ésimo símbolo del texto claro y n el cardinal del alfabeto (26 sin la ñ). En el ejemplo que sigue,

El descifrado vendrá dado por la transformación mi= (Ek - k (i mod d)) mod n

plano T →20 (20+26) mod 26= 20→S

clave Z →26

Disco de Alberti 1

Page 16: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 16/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

TABLA de VIGENÈRE Entrada texto plano

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

1 A A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

2 B B C D E F G H I J K L M N O P Q R S T U V W X Y Z A

3 C C D E F G H I J K L M N O P Q R S T U V W X Y Z A B

4 D D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

5 E E F G H I J K L M N O P Q R S T U V W X Y Z A B C D

6 F F G H I J K L M N O P Q R S T U V W X Y Z A B C D E

7 G G H I J K L M N O P Q R S T U V W X Y Z A B C D E F

8 H H I J K L M N O P Q R S T U V W X Y Z A B C D E F G

9 I I J K L M N O P Q R S T U V W X Y Z A B C D E F G H

En

tra

da

cla

ve J J K L M N O P Q R S T U V W X Y Z A B C D E F G H I

K K L M N O P Q R S T U V W X Y Z A B C D E F G H I J

L L M N O P Q R S T U V W X Y Z A B C D E F G H I J K

M M N O P Q R S T U V W X Y Z A B C D E F G H I J K L

N N O P Q R S T U V W X Y Z A B C D E F G H I J K L M

O O P Q R S T U V W X Y Z A B C D E F G H I J K L M N

16 P P Q R S T U V W X Y Z A B C D E F G H I J K L M N O

17 Q Q R S T U V W X Y Z A B C D E F G H I J K L M N O P

18 R R S T U V W X Y Z A B C D E F G H I J K L M N O P Q

19 S S T U V W X Y Z A B C D E F G H I J K L M N O P Q R

20 T T U V W X Y Z A B C D E F G H I J K L M N O P Q R S

21 U U V W X Y Z A B C D E F G H I J K L M N O P Q R S T

22 V V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

23 W W X Y Z A B C D E F G H I J K L M N O P Q R S T U V

24 X X Y Z A B C D E F G H I J K L M N O P Q R S T U V W

25 Y Y Z A B C D E F G H I J K L M N O P Q R S T U V W X

26 Z Z A B C D E F G H I J K L M N O P Q R S T U V W X Y

Para cifrados de “campo” se usaba la llamada Tabla de Vigenère. Veamos un ejemplo de cifrado:

Tras relacionar la palabra clave reiteradamente hasta abarcar todo el mensaje, el carácter cifrado se obtenía leyendo en la primera fila el carácter plano y en la primera columna el carácter correspondiente de la palabra clave; el carácter cifrado resultaba de la intersección de las dos entradas en la tabla. Ejemplo:

Mensaje: Atacar a las 6 horas del jueves 13 Clave: A Z U L Texto:

plano A T A C A R A S E I S H O R A S J U E V E S T R E C E

clave A Z U L A Z U L A Z U L A Z U L A Z U L A Z U L A Z U

cifrado A S U N A Q U D E H M S O Q U D J T Y G E R N C E B Y

Transmitir: ASUNA QUDEH MSOQU DJTYG ERNCE BYXYZ

En este ejemplo podemos comprobar como la A se cifra en A y en U, la C en N y en B, la R en Q y en C, etc.

Según la forma de entrar a la tabla, este método tuvo variantes:

Vigenère Plano Beaufort Cifrado Alemana Cifrado

↓ ↑ ↑

Cla

ve

→ Cifrado

Pla

no

→ Clave

Cla

ve

→ Plano

Page 17: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 17/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Durante siglos el método Vigenère fue considerado irrompible; si la clave de Vigenère tiene mas de 6 caracteres distintos, se logra una distribución de frecuencias en el criptograma del tipo normal, es decir más o menos plana, por lo que se logra difuminar la redundancia del lenguaje. En 1863, Friedrich Kasiski (oficial prusiano) publicó un libro sobre criptografía, Die Geheimschriften und die Dechiffrierkunst ("La escritura secreta y el arte del descifrado"). Ésta fue la primera publicación sobre criptoanálisis aplicado a los

cifrados de sustitución polialfabéticos, especialmente el cifrado de Vigenère, desarrollando lo que luego se ha llamado Método Kasiski (ver Anexo B).

La importancia del trabajo criptoanalítico de Kasiski no fue valorada entonces o, si lo fue, se mantuvo en secreto. De hecho esta técnica luego se ha sabido que fue diseñada también por el británico Charles Babbage (Gran Bretaña 1791-1871) y usada en campañas militares inglesas, siendo considerada un secreto militar. Como resultado, el mérito por haber descifrado esta clave le fue otorgado a Friedrich Kasiski.

2.2.5.- Cifrado de Playfair.

Sustitución 2-palabras o digrámico

Los cifrados anteriores se hacían carácter a carácter, es decir eran monográmicos. Para aumentar la seguridad de la cifra y romper las estadísticas, podemos cifrar por poligramas o bloques de caracteres.

Un sistema inventado a finales del siglo XIX (obra del físico Charles Wheatstone pero difundido por su amigo Lord Playfair (que acabó dándole el nombre) es el de Playfair que trabaja con una matriz de 5x5 letras, cifrando por digramas: a cada par de letras del texto claro hace corresponder otras dos letras en el texto cifrado. Se rellena la matriz de izquierda a derecha y de arriba abajo con la palabra clave, no repitiendo letras, y se completa con el resto del alfabeto, sin repetir letras y eliminando J y Ñ: total 25 letras. El texto plano se agrupa por parejas (x,x´) de caracteres; (y,y´) serán el par respectivo cifrado tras aplicar las siguientes reglas [1]:

• Si (x,x´) están en la misma fila, (y,y´) son los dos caracteres de la derecha.

• Si (x,x´) están en la misma columna, (y,y´) son los dos caracteres de abajo.

• Si (x,x´) están en filas y columnas distintas, (y,y´) son los dos caracteres de la diagonal, desde la fila de x.

• Si x=x´, insertar carácter sin significado entre x y x´ para evitar su repetición, después aplicar reglas 1-3

• 5.- Si el número de letras es impar, añadir una sin significado al final del texto, por ejemplo la X.

Mensaje: Atacar a las 6 horas del jueves 13

Clave: MURCIELAGO

Texto plano ATACAR A SEIS HORAS JUEVES TRECE

grupos AT AC AR AS EI SH OR AS JU EV ES TR EC EX

Page 18: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 18/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Cuadrado Playfair

M U R C I

E L A G O

B D F H K

N P Q S T

V W X Y Z

Texto cifrado OQ GR FA GQ OM TK AI GQ MR BM GN QI GM AV

Este sistema también es criptoanalizable pues en el criptograma persisten algunas propiedades del lenguaje; en este caso la distribución de digramas típicos; por ejemplo en el castellano en, de, mb, etc. El secreto de este cifrado está obviamente en la matriz, en la palabra clave elegida.

2.2.6.- Cifrado Vernam

Hemos visto que, según el principio de Kerckhoffs, un sistema criptográfico basa su seguridad en la clave, seguridad que se mide conociendo el oponente el algoritmo de cifrado pero no la clave.

En 1917 Gilbert S. Vernam, ingeniero del MIT que trabajaba en los laboratorios de la empresa AT&T, diseña un dispositivo criptográfico para comunicaciones telegráficas basado en los 32 códigos de Baudot (ver anexo C) que usaban los teletipos desarrollados por su compañía. Estos códigos representan los caracteres del lenguaje con cinco elementos que pueden ser el espacio o la marca (el cero y el uno) diseñado para transmisiones telegráficas. Es decir, un sistema binario con 5 dígitos: 2^5= 32 caracteres.

Este cifrador, que tuvo una gran aplicación durante la Primera Guerra Mundial, basa su seguridad en el secreto de una clave aleatoria que se supone tan larga o más que el mensaje y que luego de usarse debe destruirse [4]. Este sistema por sustitución polialfabética es el caso límite del cifrado Vigenère. El hecho de que la seguridad absoluta dependa de un único uso de la clave le dio el sobrenombre de “one time pad” [14].

Usa una clave constituida por una sucesión de símbolos (bits o caracteres) llamada serie cifrante, operando o-exclusivo XOR cada símbolo de ésta con el correspondiente del texto en claro. Debido a la definición de la función XOR, el descifrado se realiza, igualmente, operando con dicha función cada bit de la misma serie cifrante con el correspondiente del texto cifrado. Si la serie cifrante no se repite, es aleatoria, y de longitud igual o mayor al texto a cifrar, éste cifrado alcanza el secreto perfecto. Además, es el único que verifica tal condición [1].

Cada carácter mi se representa con 5 bits en código Baudot que se suma OR exclusivo (módulo 2) con la correspondiente clave ki de una secuencia binaria aleatoria [4]. De esta forma, el cifrador de Vernam genera un flujo de bits de texto cifrado de la forma:

Page 19: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 19/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

C = EK(M) = C1C2C3 ... Cn

Donde Ci = (mi + ki) mod 2 para i = 1 ,2 ,..., n; o sea, ci = mi XOR ki

Mensaje: Atacar el jueves trece a las seis horas

plano: ATACARJUEVESTRECEASEISH 23 caracteres

Clave: TCEGIKMOQSUWYBDFVABCDGT 23 caracteres

en código Baudot

Plano Clave Plano Clave Cifra Cifra

A XOR T 00011 XOR 10000 = 10011 = W

T XOR C 10000 XOR 01110 = 11110 = V

A XOR E 00011 XOR 00001 = 00010 = 2

C XOR G 01110 XOR 11010 = 10100 = H

A XOR I 00011 XOR 00110 = 00101 = S

R XOR K 01010 XOR 01111 = 00101 = S

J XOR M 01011 XOR 11100 = 10111 = Q

U XOR O 00111 XOR 11000 = 11111 = 3

E XOR Q 00001 XOR 10111 = 10110 = P

V XOR S 11110 XOR 00101 = 11011 = 4

E XOR U 00001 XOR 00111 = 00110 = I

S XOR W 00101 XOR 10011 = 10110 = P

T XOR Y 10000 XOR 10101 = 00101 = S

R XOR B 01010 XOR 11001 = 10011 = W

E XOR D 00001 XOR 01001 = 01000 = 1

C XOR F 01110 XOR 01101 = 00011 = A

E XOR V 00001 XOR 11110 = 11111 = 3

A XOR A 00011 XOR 00011 = 00000 = 6

S XOR B 00101 XOR 11001 = 11100 = M

E XOR C 00001 XOR 01110 = 01111 = K

I XOR D 00110 XOR 01001 = 01111 = K

S XOR G 00101 XOR 11010 = 11111 = 3

H XOR T 10100 XOR 10000 = 00100 = 5

Cifrado6: WV2HS SQ3P4 IPSW1 A36MK K35

Para la operación de descifrado utilizaremos el mismo algoritmo por la propiedad involutiva de la operación OR exclusivo. Esto es:

ci XOR ki = (mi XOR ki) XOR ki

Como ki XOR ki = 0 para ki = 0 y ki = 1 se obtiene ci XOR ki = mi

2.2.7.- Cifrado Bazeries:

Como hemos visto, sustitución y transformación no resultan muy fiables; sin embargo combinados resultan la base de sistemas mucho más difíciles de romper. Un ejemplo de cifrado producto (transposición más sustitución) fue

6 Como se explica en Anexo C, los caracteres especiales ha sido representados por los dígitos 1 a 6 a efectos de este ejemplo.

Page 20: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 20/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

ideado por Etienne Bazeries (criptólogo y comandante del Ejército francés, 1846 a 1931). En este sistema se fija un número clave menor que 1.000.000 y se le expresa en texto eliminando las segundas y siguientes repeticiones del mismo carácter. El texto plano se ordena en grupos de cardinal igual a las cifras que componen el número clave: por ejemplo, grupos de 2, 3, 2, 6 y 7 caracteres si la clave fuera “23.267” [1].

Se generan dos matrices de 5x5: la 1ª contiene el alfabeto relacionado de arriba a abajo y de izquierda a derecha eliminando Ñ y W; la 2ª contiene los caracteres de la clave numérica expresada en texto sin repeticiones, relacionados de izquierda a derecha y de arriba abajo, completando los huecos a partir del último carácter de la clave con los caracteres alfabéticos que le siguen, siempre sin repeticiones.

1ª fase, transposición: se invierten simétricamente los caracteres en cada uno de los grupos del texto plano.

2ª fase, sustitución: en la matriz 1 se busca el carácter plano; el carácter cifrado es el de su misma posición en la matriz 2

Mensaje: Atacar a las 6 horas del jueves 13

Clave: 23267 VEINTITRES MIL DOSCIENTOS SESENTA Y SIETE VEINTRSMLDOCAY

Texto:

plano ATACAR A SEIS HORAS JUEVES TRECE

Grupos-clave AT ACA RA SEISHO RASJUEV ES REC EZ

transposición TA ACA AR OHSIES VEUJSAR SE CER ZE

matriz 1ª 5x5 matriz 2ª 5x5

A F K P U V E I N T

B G L Q V R S M L D

C H M R X O C A Y Z

D I N S Y A B C F G

E J O T Z H J K P Q

sustitución PV VOV VY KCFBHF DHTJFVY FH OHY QH

transmisión PVVOV VYKCF BHFDH TJFVY FHOHY QHZYX

Para la transmisión se agrupan en grupos de 5 y se completa el último con caracteres nulos.

Page 21: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 21/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

2.3.- Máquinas de cifrar en el siglo XX

La rotura de los sistemas tradicionales de cifrado a principios del siglo XX y la masificación de medios materiales y humanos que permitió la Revolución Industrial del XIX en los usos de la guerra moderna en todos los niveles, incluido el tráfico de mensajes cifrados, derivó en el diseño de máquinas que permitieran automatizar el lento y engorroso sistema manual de cifrado.

Algunos de los esquemas de cifrado producto fueron usados en los años 20 del siglo pasado para el diseño de máquinas de rotor. Las más conocidas fueron la HAGELIN y la ENIGMA, usadas durante la 2ª Guerra Mundial y que fueron criptoanalizadas en su momento destacando tanto por sus características como por el halo de misterio que las rodeó. El sistema de rotores daba lugar a un importante número de claves secretas que, para aquel entonces, dificultaba in extremis el criptoanálisis.

2.3.1.- La máquina Enigma

Inventada por el ingeniero alemán Arthur Scherbius en el año 1923, la máquina Enigma [4] consiste en un banco de rotores montados sobre un eje, en

cuyos perímetros había 26 contactos eléctricos, uno por cada letra del alfabeto inglés. En realidad el precursor de este tipo de máquinas con rotores fue Edward Hugh Hebern que algunos años antes inventa y comercializa los denominados cifradores de códigos eléctricos. Esta máquina debe su fama a su amplia utilización durante la Segunda Guerra Mundial, en especial por parte del ejército alemán. El imperio japonés también cifró sus mensajes durante el citado conflicto con una máquina similar denominada Purple.

Los rotores se desplazaban como un odómetro. Es decir, al cifrar un carácter el primer rotor avanzaba una posición (correspondiente a 1/26 de una rotación) y sólo cuando éste había realizado una rotación completa (26 letras), el

segundo se desplazaba un carácter, y así sucesivamente [4]. Los rotores volvían a su posición

inicial, tras un período igual a nt. Por ejemplo, en un sistema con 4 rotores, se utilizan 264 = 456.976 alfabetos de 26 letras. Si aumentamos los rotores a 5, esta cantidad asciende a 11.881.376. Esto implicaba que la Enigma usaba un sistema polialfabético, porque la misma letra podía ser sustituida por varias letras distintas a lo largo de un mensaje. Por ejemplo, una 'A' podía ser codificada como una 'M' al principio de un mensaje y más adelante (en el mismo mensaje) ser codificada como una 'T'. La operación de cifra para estas máquinas sigue la siguiente congruencia [4]:

Ei (M) = ( fi (M - pi) mod (26 + pi) ) mod 26

Enigma K adquirida en Nov-36 1

Page 22: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 22/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

donde pi es la posición en la que se encuentra el rotor i-ésimo y fi la correspondencia de los caracteres de la cara anterior y posterior de este rotor. Por lo tanto, el carácter i-ésimo mi del mensaje M = m1m2m3... se cifrará como:

Eki(mi) = ft ..... f1(M) donde indica la posición relativa entre dos rotores colindantes y t el número de rotores.

Había ciertas características de la Enigma que facilitaban un poco la tarea de decodificación. Por ejemplo, las sustituciones que se realizaban eran tales que una letra nunca podía ser codificada consigo misma. Es decir, una 'A', nunca podía aparecer como 'A' en el mensaje en clave. Si entramos en el simulador [16] y ciframos el mensaje “AAAAAAAAA” el resultado es “KTWREEOST” habiendo colocado los rotores 1, 2 y 3 en posición inicial H, D y X. Por mucho que repitamos “A” nunca se cifra como “A”

Los anillos movibles alrededor de los rotores también incrementaban la complejidad de la máquina. Su objetivo era asignar un número a cada posición del rotor (la cual a su vez correspondía a una letra), de manera que aunque se supiera cuál era la posición inicial de los rotores, el mensaje no podría descifrarse si no se conocía la posición física de los anillos.

Cifrar con la máquina Enigma era un proceso lento. Lo operadores trabajaban en grupos de dos, con una persona pulsando las teclas, operación muy lenta ya que las teclas debían pulsarse con mucha fuerza para hacer girar los rotores, y otro registrando la letra cifrada que se encendía en el panel superior de bombillas. Las primeras máquinas Enigma tenían tres rotores y unos doce kilos de peso. La mayoría de los países compraron maquinas para su evaluación y todos ellos hicieron sus versiones. La versión británica era conocida como TYPEX y de ella se construyeron unas 12.000 unidades, siendo adoptada por el ejército y la RAF. Incluso los polacos, que fueron de los primeros en romper el código generado por la máquina, tuvieron su versión de la misma que llamaban LACIDA [15].

En España, el Bando Nacional, durante la Guerra Civil del 36, adquirió 10 máquinas, como la de la figura del inicio, en Noviembre de 1936, que fueron dedicadas a enlace entre el Alto Mando y con los aliados alemanes e italianos; en total, se calcula que operaron en la Península una cincuentena de estas máquinas [10].

Rotores de Enigma. www.simonsingh.net 1

Page 23: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 23/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Quien desee hacer una prueba de funcionamiento de la máquina en tiempo real y cifrado puede hacerlo en

http://enigmaco.de/enigma/enigma.swf

El anexo D es un resultado de esta web

2.3.2.- La máquina Hagelin

La máquina Hagelin [17] fue inventada por el criptólogo sueco Boris Hagelin, quien adquirió en 1927 la fábrica de máquinas de cifrar de Arvid G. Damm, otro inventor sueco que no tuvo la suerte de sacar un producto competitivo en el mercado. Entre los años veinte y los treinta, Hagelin diseña diversas máquinas (B-21, B-211, C-36, C-38, etc.) en las que a través de ruedas con piñones realiza una cifra similar a la utilizada por el sistema de Beaufort7 [4].

La particularidad de estas máquinas, que a la postre hizo millonario a Hagelin, probablemente ante la desesperación de Damm, estaba en una periodicidad muy alta puesto que el número de dientes de las diferentes ruedas eran primos entre sí. Para seis ruedas estos valores eran 26, 25, 23, 21, 19 y 17, de forma que el período era igual a su producto, un valor que supera los 100 millones. La ecuación matemática que representa al cifrado de Hagelin es [4]:

Eki(mi) = (k (i mod d) – mi) mod n

Siendo, d la longitud de la palabra clave, k el carácter correspondiente dentro de dicha palabra, mi el i-ésimo símbolo del texto claro y n el cardinal del alfabeto.

El modelo C-38 de esta máquina fue adquirido por el Ejército USA para las comunicaciones militares y diplomáticas durante la IIGM con la designación de M-209. Un diseño compacto y reducido (del tamaño de una sandwichera) facilitaba su uso incluso en niveles tácticos inferiores, pero, sobre todo, el disponer de un sistema de impresión era lo que de verdad facilitaba su uso en relación, por ejemplo, a máquinas como Enigma. Un desarrollo posterior de 1952, el modelo C-52, ha estado operativo en más de 60 países hasta inicios de los 80 y durante toda la “guerra fría” [17]. En España, en los años cincuenta y a

7 Variante del cifrado Vigenère (ver pág. 13)

Hagelin CX-52 1

Page 24: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 24/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

partir de 19548, con las máquinas Enigma ya retiradas por obsoletas, el Ejército español empezó a dotarse con máquinas Hagelin para asegurar sus comunicaciones [10].

Para información más completa y descarga de simulador se recomienda entrar en http://users.telenet.be/d.rijmenants/en/c52tech.htm

8 Primer Tratado de Amistad y Cooperación España-USA de 26-sept-1953.

Page 25: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 25/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

2.4.- Cifrado por homófonos

¿Qué entendemos por homófonos? [4] La definición del vocablo puede encontrarse en cualquier diccionario: "palabras de igual pronunciación o sonido y distinto significado" como por ejemplo hola y ola. En criptografía entenderemos por homófonos a las distintas representaciones que damos al mismo carácter plano sin seguir ninguna relación o función determinada. Por ejemplo, si establecemos una relación entre los 27 caracteres del alfabeto con los 100 primeros números del 0 al 99, al cifrar podríamos sustituir la letra A con cualquiera de los siguientes números: {1, 15, 18, 29, 50, 97}. Luego, el receptor autorizado, que conoce esta correspondencia, simplemente reemplaza dichos números por la letra A para descifrar el mensaje.

En términos matemáticos, pues, una sustitución homofónica es una correspondencia de uno a muchos en lugar de una correspondencia uno a uno típica de los métodos de sustitución monoalfabéticos. Se asigna a cada letra del alfabeto original un conjunto de elementos de un alfabeto ampliado o de elementos agrupados de un alfabeto. Los subconjuntos que se asignan a cada una de las letras del alfabeto original deben ser evidentemente disjuntos [6].

La técnica descrita da lugar a los denonimados “cifradores por homófonos”, cuya característica principal es la de suavizar la distribución de frecuencias típica del lenguaje, de forma que el criptoanalista no pueda emplear las técnicas estadísticas aplicables en los métodos anteriores. Asignamos, para ello, un mayor número de homófonos a los caracteres más frecuentes del lenguaje y un menor número a aquellos menos frecuentes, con el objeto de que la distribución de estos valores se asemeje lo más posible a una distribución normal [4].

Observamos en el ejemplo que sigue como con arreglo a la tabla de homófonos definida, el mensaje “atacar el jueves diez a las 6 horas” quedará cifrado según caracteres de “cifrado 1” o de “cifrado 2” o… de cualquier otra combinación que se desprenda de la tabla mostrada.

Mensaje: Atacar el jueves diez a las 6 horas

Texto:

plano A T A C A R J U E V E S D I E Z A S E I S H O R A S

Cifrado 1 92 17 53 62 92 35 15 61 44 34 44 86 01 32 14 02 12 76 44 70 86 39 00 77 09 36

Cifrado 2 78 30 92 41 33 40 15 61 46 34 74 11 03 73 14 02 09 19 55 32 11 50 99 40 53 86

Tabla de homófonos Entrada texto plano

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

09 48 13 01 14 10 06 23 32 15 04 26 22 18 00 38 94 29 11 17 08 34 60 28 21 02

12 81 41 03 16 31 25 39 70 37 27 58 05 95 35 19 20 61 89 52

33 62 45 24 50 73 51 59 07 40 36 30 63

47 79 44 56 83 84 66 54 42 76 43

53 46 65 88 71 72 77 86 49

67 55 68 93 91 90 80 96

78 57 85 99 69 75

92 64 97

82 74

87

98

Cifrado por homófonos 1

Page 26: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 26/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

En la tabla de arriba se observa como las letras que más frecuencia de aparición tienen en un texto son las que presentan más alternativas de elección de homófono.

En http://simonsingh.net/The_Black_Chamber/homophoniccipher.htm se puede realizar una práctica de cifra homofónica automática.

El criterio para asignar los homófonos no siempre tiene que ser a través de una tabla cartesiana. Más novelesco es el sistema usado en el cifrador homofónico más conocido de la historia de la criptografía, atribuido al aventurero Thomas Jefferson Beale, quien en 1821 dejó tres mensajes cifrados, llamados respectivamente B1, B2 y B3, en el que supuestamente entrega todas las pistas para descubrir un fabuloso tesoro por él enterrado en Virginia, Estados Unidos. La técnica aplicada por Beale para formar el conjunto de homófonos del cifrado B2 es sencilla pero ocurrente: asigna números a los caracteres del alfabeto según la posición de la palabra en cuestión que comienza con dicha letra dentro del texto de la Declaración de la Independencia de los Estados Unidos. Se puede ampliar información en [20].

2.4.1.- Cifrado homofónico de orden n>1

La fortaleza del cifrado está, pues, en la tabla o el texto que determina los homófonos. Un cifrador por homófonos de orden n > 1 será aquel sistema que para cada carácter plano prevea dos o más conjuntos posibles de caracteres homófonos [1]. Un orden 2 se puede obtener, por ejemplo, a través de la tabla de homófonos 2 de ejemplo. “B” entrando por columna se cifrará como A2, Q5, O8, …; entrando por fila será C2, H0, T3, ….

Para el cifrado se dará una función que defina para cada carácter del mensaje plano cómo entrar en la tabla: por fila o por columna. Por ejemplo, “todo filas”, “todo columnas”, “fila, fila, columna”, “columna en caracteres n+3”, etc. Esa función, junto con la tabla, deberá ser conocida por el destinatario del mensaje [27].

Usando la tabla de ejemplo, se puede diseñar otro cifrador por homófonos de orden 2. Definimos dos textos planos: uno V, el verdadero, otro F, falso, de la misma longitud que V.

V= “atacar jueves trece” (17 caracteres)

F= “retirada jueves dos” (17 caracteres)

El criptograma se forma con los valores de la tabla intersección V(i) x F(i) entrando V(i) por columna y F(i) por fila.

En el ejemplo, 1 ≤ i ≤ 18 V(1)= “a”, F(1)= “r” V(1)xF(1)= “H8”.

En el peor de los casos, si el enemigo posee la tabla, nunca sabrá cual es el mensaje correcto [4].

A B C D …

A A2 V1 X5 …

B C2 H0 T3 …

C W9 Q5 S9 …

D Z5 O8 R1 …

… … … … …

R H8 J2 N6 Z0 S1

Tabla de homófonos 2

Page 27: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 27/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

2.4.2.- Criptoanálisis de los cifrados por sustitución con homófonos

Si ningún símbolo aparece con más frecuencia que ningún otro, un intento de desciframiento usando el análisis de frecuencia no parece posible. ¿Ofrece, por tanto, una seguridad perfecta el cifrado por homófonos?. No del todo, aunque estos sistemas pueden llegar a ser extremadamente difíciles de romper, especialmente si la asignación de tales valores no sigue una lógica. Con una gran cantidad de texto cifrado es posible encontrar algunas cadenas de números o símbolos que se repiten y, por tanto, se pueden forman digramas, trigramas y en el mejor de los casos palabras y frases completas. Con suerte podremos obtener en algunos casos la tabla de homófonos [4].

Y es que un texto cifrado, a pesar de la sustitución, todavía contiene pistas sutiles. Cada letra de un idioma tiene su propia personalidad, determinada por su relación con todas las demás letras. Por ejemplo [27]:

La “Q” es una letra infrecuente y, por tanto, es probable que esté representada sólo por un símbolo, y sabemos que la u, que supone aproximadamente el 3 por ciento de todas las letras, probablemente esté representada por tres símbolos. Si encontramos un símbolo en el texto cifrado que sólo esté seguido por tres símbolos particulares, entonces sería razonable asumir que el primer símbolo representa la letra “q” y los otros tres símbolos representan a la “u”.

Otras letras son más difíciles de localizar, pero también las delata su relación con las demás letras: la K, J, H y V siempre van seguidas de vocal.

En español, si se divide el texto en grupos de 4 letras, en cada grupo debería aparecer una vocal.

En función de que se cuente con una gran cantidad de texto cifrado, se pueden asociar los números más repetidos a letras de alta frecuencia, ir rellenando la matriz de homófonos y, a su vez, buscar digramas, trigramas, palabras, etc., con el objeto de obtener la matriz de cifrado.

2.4.3.- El método de cinta móvil o método español

Este método consiste en un caso particular del cifrado por sustitución con homófonos9. Su origen data de mediados del siglo XIX y la primera vez que aparece documentado es en 1894 en el libro “Tratado de criptografía con aplicación especial al ejército” de Joaquín García Carmona [7], donde se le denomina “Método Oficial de Guerra” (ver Anexo E, pág. 80). Poco después, en 1898, aparece en un texto de telegrafía militar de Losada con el nombre de “método español” [8]. Según Carmona el método era utilizado en la época de su publicación por todos los Ministerios exceptuando el de Estado; Losada, por su parte, afirma que es el procedimiento adoptado en España para cifrar los escritos oficiales.

9 El ataque y “rotura” de mensajes cifrados con este método conociendo sólo el texto cifrado es el principal objetivo de este Proyecto de Fin de Carrera.

Page 28: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 28/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

El criptógrafo de cinta móvil consiste en una tabla de homófonos a la que se añaden dos filas, una en la que figura el alfabeto en orden normal y en la otra se introduce una cinta móvil con un alfabeto doble totalmente aleatorio. En el diseño original la cinta pasa a través de dos ranuras a ambos lados de la tarjeta donde esta ubicada la clave y justo debajo del alfabeto claro, tal como muestra la siguiente figura [5]

Tabla de homófonos con cinta móvil 1

Para formar la tabla de homófonos se utilizaban números de dos cifras del 10 al 99 distribuidos correlativamente por filas y de manera que a cada carácter le correspondieran 3 ó 4 números [8], sin embargo, en los sistemas usados durante la Guerra Civil del 36 esta limitación se cambia en algunos casos y se elimina en otros llegándose a representar todos los números del 01 al 99.

El alfabeto de la cinta móvil solía generarse mediante la utilización de una palabra clave. Por ejemplo, si utilizamos la palabra “revolución” el alfabeto generado podría ser, utilizando el mismo esquema que el presentado en el libro de Carmona [10]

R E V O L U C I N

A B D F G H J K M

P Q S T W X Y Z -

Con lo que el alfabeto en la cinta quedaría como, RAPEBQVDSOFTLGUHWCJXIKYNMZ

Para cifrar ambos comunicantes debían ponerse de acuerdo en la colocación de la cinta móvil, para ello indicaban el par de letras, la primera del alfabeto normal y la segunda de la cinta para posicionarla correctamente (en la tabla de ejemplo, “N” en “J”). La definición de la clave completa, siguiendo el ejemplo, se daba con la expresión “revolución N en J”. Posteriormente se procedía a cifrar utilizando el alfabeto marcado en la cinta como alfabeto base y escogiendo cualquiera de los números de la columna debajo de la letra a cifrar como texto cifrado. Ejemplo:

Mensaje: Atacar el jueves diez a las 6 horas Texto:

plano A T A C A R J U E V E S D I E Z A S E I S H O R A S

Clave Revolución N en J

cifrado 1 58 29 85 34 58 06 50 08 86 03 25 89 49 76 54 81 23 15 25 02 40 77 01 68 85 79

cifrado 2 23 46 85 07 85 68 73 63 54 37 86 36 14 32 25 47 23 79 54 02 15 42 70 38 23 40

Page 29: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 29/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

El ejemplo se ha confeccionado con la tabla usada en sus comunicaciones por el barco “Mar Cantábrico” [12] (ver Anexo F, pág. 80) y la clave “revolución N en J”.

Si bien el secreto depende de ir variando los números usados como cifra, lo cierto es que muy frecuentemente eran empleados los mismos números para representar las letras. Al cifrar el mensaje del ejemplo presentado hemos detectado lo que para textos largos suponía, creemos, el Talón de Aquiles de este método: el cifrador, por mucho cuidado que tuviera, acaba repitiendo números porque para cada carácter sólo dispone de 3-4 homófonos posibles; las letras de mayor frecuencia de uso acaban por no poder ser encubiertas10. En el corto mensaje plano usado (26 letras) la “a” aparece 5 veces y la “e” 4 veces por lo que alguno de sus homófonos es repetido (el 58 en cifrado 1, el 54 en cifrado 2, por ejemplo), y esto en un mensaje de 300 ó 400 caracteres termina por descubrir frecuencias de uso.

Como se ve en Anexo F (pág. 80) el sistema descrito no era seguido al pié de la letra en 1936. Una de las primeras variaciones fue el cambio del alfabeto de la primera fila. Originalmente dicha fila presentaba todas las letras en orden alfabético, siendo sustituida más adelante por un alfabeto en el que las letras aparecían en un orden aleatorio o no estaban todas. Esta modificación ya aparece en la clave general de 15 de abril de 1910, con lo que no podemos decir que se trate de una innovación aparecida en la guerra. Otra fue el añadir varias cintas móviles como en la clave aviación 1931 en la que las cintas eran una la típica del alfabeto móvil y dos correspondientes a dos de las filas de códigos. Esto hacia que un mismo número representase a varias letras en función de su colocación y permitía, teóricamente, mejorar la resistencia del código. Además se solían incluir pequeños repertorios para las claves más comunes [10].

Lo expuesto junto a otras faltas en disciplina de transmisiones (falta de concienciación sobre el secreto en las comunicaciones, enviar mensajes cifrados parcialmente, uso reiterado de la misma clave, cifrado del mismo mensaje con distintas claves, etc.) hacía que el sistema no proporcionara gran seguridad, sobre todo si la tabla era descubierta por el enemigo. Además, la compartimentación de las zonas de operaciones que sufrió sobre todo el Bando

10 Eliminando, de este modo, la “distribución normal” que se consigue en los sistemas de sustitución homofónica puros (ver pág. 23).

Tabla de clave X (caso "Mar Cantábrico") A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Q D S O F T L G V U H W C J X I K Y N M Z R A P E B

01 09 03 08 07 02 05 06 04

10 14 15 17 13 19 12 18 16 11

29 27 22 20 23 26 25

30 31 35 37 33 34 32 36 38 39

49 40 48 46 45 42 44 43 47 41

51 50 53 56 58 54

69 67 66 65 63 61 60 62 64 68

79 70 71 72 75 77 74 73 76 78

89 81 85 87 86 82

Page 30: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 30/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Rojo (en denominación de la época) dificultaba la actualización o renovación de claves y tablas aún cuando se tuviera la certeza de haber sido descubiertas por el enemigo.

Por ello es chocante que un sistema con tan poca seguridad fuese tan ampliamente utilizado, y lo es más cuando vemos que se utilizó en los niveles más altos de Mando. Carmona ya avisaba de la poca seguridad del método y daba un ejemplo11 de cómo descifrar un mensaje conocida la tabla pero no la clave [7]. No sólo avisaba, sino que la Junta Superior Consultiva de Guerra eleva un informe al Ministro de la Guerra por el cual se le concede Cruz de Primera Clase al Mérito Militar por el contenido del tratado que ha publicado, y en ese informe se hace eco de la inseguridad del método. Léase en la siguiente imagen extracto de dicho informe [7]…

Informe de la Junta Consultiva sobre la seguridad del Método Español 1

A pesar de lo dicho, este sistema fue el método más ampliamente utilizado durante la GC36 por los dos contendientes, si bien la mayor disciplina y coordinación que se estableció en el Bando Nacional en este área de las comunicaciones, como en casi todas las demás del esfuerzo bélico, le permitió jugar con ventaja durante los 3 años de contienda. Como ya se ha dicho al tratar las máquinas de rotor, para las comunicaciones el Bando Nacional adquirió diez máquinas Enigma alemanas en noviembre de 1936 que fueron dedicadas al enlace del Alto Mando. El cifrado en escalones operativos altos y medios siguió realizándose con tabla de homófonos y cinta móvil, sistemas de sustitución o transposición más elementales [10] y códigos de trinchera como el que se muestra en página 83. Véase en este sentido, apéndice VII de [9]

11 En pág. 100 de su tratado, para apoyar su crítica, presenta dos ejemplos: en el primero parte de un mensaje que contiene partes sin cifrar, consiguiendo deducir de la relación entre esas partes y las cifradas la tabla de homófonos; en el segundo ejemplo, totalmente encriptado, se apoya en dicha tabla y en un análisis de frecuencias de uso para salvar el obstáculo de la cinta móvil.

Page 31: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 31/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Como curiosidad en Anexo F (pág. 80) se muestran algunos ejemplos de claves y tabla de homófonos y documentos reales utilizados durante el conflicto.

2.4.4.- Ataque al método español: sus debilidades

Hemos visto, pues, que a cada letra del mensaje origen (texto plano) le pueden corresponder hasta 5 números (<= 99) y a cada número le corresponde una sola letra. Al cifrar el texto origen cada letra puede ser cifrada al azar usando cualquiera de los números de su columna en la tabla. Además, mediante el uso de una clave se hace bailar la correspondencia entre las columnas de números y las letras.

Atendiendo al objetivo de este proyecto: el criptoanálisis sin conocer la tabla de homófonos… ¿Qué debilidades encontramos en el sistema de cinta móvil a efectos de “atacar” el criptograma?. Veamos:

1º. Aún no habiéndose encontrado escrita como norma, en todas las tablas observadas (ver al efecto [9] y [11]) se respeta la costumbre de relacionar la misma decena de números por fila de la tabla, de manera que los homófonos de la columna de una letra están separados siempre por al menos 10 unidades.

2º. En el cifrado por homófonos, la distribución normal de frecuencias de uso se consigue asignando a cada carácter del alfabeto un número de homófonos proporcional a su frecuencia de uso en el idioma. Esto no es posible en el “método español”.

3º. En el “método español” la columna de homófonos de cada letra suele tener de 3 a 5 números, lo que en textos largos mantiene información indirecta sobre frecuencia de uso de la letra.

4º. Dicho problema se incrementa con el uso de la cinta móvil12.

5º. La operación de cifrado obliga a elegir entre una media de 4 homófonos por letra. Si se supone esa elección aleatoria, cada homófono tendrá una probabilidad del ¼ de ser elegido para reemplazar a “su” letra.

6º. Con esa probabilidad de ¼, si multiplicamos la frecuencia de uso del homófono en el texto cifrado (frec Hj) por 4, obtenemos la frecuencia de uso de la letra en el texto plano y, si este texto es largo, dicha frecuencia debe ser semejante o igual a la frecuencia relativa estándar de uso en el idioma o “frec Ci“. Luego … frec Ci≈ 4 x frec Hj

Sin considerar los argumentos anteriores, el espacio de búsqueda de la solución (el alfabeto que encabeza las columnas de la tabla) comprende 27 letras

12 Por ejemplo, si en la tabla original a la “A” (frecuencia de uso habitual 13,34%) se le asignan 5 homófonos y a la “X” (frecuencia de uso habitual 0,10%) 3 homófonos, la aplicación del alfabeto perturbado por la cinta móvil puede invertir la asignación, imputándole a la “A” sólo 3 homófonos y a la “X”, que tal vez no se use en el mensaje plano, 5 homófonos.

Page 32: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 32/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

posibles por homófono dado que a cada número le podría corresponder cualquiera de las 27 letras del alfabeto. ¿Cómo reducir ese espacio de búsqueda tan amplio -27 letras posibles por número-?:

Para abarcar mayor casuística:

a) Se estimará el número n de homófonos por columna entre 1 y 5 13.

b) frec Ci se comparará con cada (n x frec Hj) donde 1≤ n ≤ 5.

c) Si el texto cifrado es corto14 y, por tanto, la frecuencia de uso del homófono puede estar algo alejada de la habitual de “su” letra en el idioma, admitimos un margen de fluctuación o error Me y comparamos (frec Ci) con (n x frec Hj ±Me).

d) De dicha comparación obtenemos para cada homófono Hj un conjunto de letras candidatas L= { Ci } donde

Ci pertenece a L si existe n / (frec Ci) pertenece a [ (n x frec Hj ±Me ) ],

siendo 1 ≤ n ≤ 5. Es decir, si frec Ci= 8,93% y (2 x frec Hj)= 9,01%, la letra Ci queda incluida en L del homófono Hj, dado que

(9,01%x 0,8) ≤ 8,93% ≤ (9,01%x 1,2)

¿Cómo definimos Me?

Se han hecho pruebas sobre un mensaje plano de 511 caracteres del que conocemos la tabla de homófonos y el texto cifrado; se ha podido comparar los resultados de la técnica expuesta en los párrafos anteriores con la tabla real, buscando definir un Me eficiente. El resumen está en la tabla siguiente:

Me Acierto Cm Reducción

10% 50,68% 6,31 76,60%

20% 84,00% 9,76 63,83%

30% 89,00% 12,05 55,35%

40% 93,00% 13,23 50,99%

50% 93,00% 14,12 47,69%

60% 93,00% 15,24 43,53%

70% 93,00% 16,52 38,81%

80% 93,00% 17,86 33,84%

90% 95,00% 19,37 28,26%

100% 96,00% 21,03 22,12%

110% 96,00% 22,03 18,42%

120% 96,00% 22,23 17,66%

Análisis de Me y media de letras candidatas 0-1

13 No sólo porque la tabla pudiera tener sólo 1 número en una columna, sino porque aunque la tabla tuviera 5 homófonos en esa columna, el cifrado de un mensaje en particular puede que no requiera escoger más que un número de esa columna.

14 No más de 250 caracteres, como se instruía en la época a los operadores dentro de las normas de seguridad a cumplir.

Page 33: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 33/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Donde:

“Me” es el margen que admitimos en torno a “n x frec Hj” para dar positiva la comparación de frecuencias de uso: ±10%, ±20%, etc.

“Acierto” indica el porcentaje de letras de la tabla de homófonos real que quedan incluidas correctamente en el conjunto L de candidatos de cada homófono. Para Me= 20%, acierto= 84%.

“Cm” es el cardinal medio de los conjuntos candidatos. Para Me= 20%, Cm es 9,76 en la tabla.

“Reducción” es el porcentaje medio en que se reduce el espacio de búsqueda. Para Me=20%, Reducción= ( (27- 9,76) / 27 ) x 100= 63,86 %.

La gráfica siguiente informa de Cm en función de Me

Cm en función de Me

0,00

5,00

10,00

15,00

20,00

25,00

10

%

20

%

30

%

40

%

50

%

60

%

70

%

80

%

90

%

10

0%

11

0%

12

0%

13

0%

14

0%

15

0%

Cm

La gráfica siguiente cruza “Acierto” con “Reducción” e informa del punto de Me más eficiente: 20%

Rendimiento en función del margen

de error Me

0,00%10,00%20,00%30,00%40,00%50,00%60,00%70,00%80,00%90,00%

100,00%

10

%

20

%

30

%

40

%

50

%

60

%

70

%

80

%

90

%

10

0%

11

0%

12

0%

13

0%

14

0%

15

0%

Acierto

Reducción

Page 34: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 2.- Criptografía y Criptoanálisis 34/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Tras lo expuesto, para cada homófono obtenemos un conjunto L de letras candidatas que, pudiendo ser amplio (8-10 caracteres), nunca serán las 27 letras que a priori se nos presentan como posibles para cada homófono. De esta manera podemos componer una tabla inversa de asignación de letras candidatas a cada homófono como la que sigue:

Homófonos 01 02 03 … … … 86 89

Let

ras

Ca

nd

ida

tas

f b a ñ r

h g e x i

q v d

z y l

j j

u ñ

x

Tabla inversa de homófonos 0-2

Con la técnica descrita hemos reducido, pués, el espacio de búsqueda de 27 a 10 letras de media por homófono, un 65% menos.

A partir de esta tabla inversa inicializamos el AG (ver en detalle cap 3.2 pág. 40).

Page 35: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 35/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Cap 3.- Método Español: criptoanálisis con algoritmo genético.

Habiendo estudiado los sistemas de sustitución por homófonos y analizado en particular el Método de Cinta Móvil, pasamos a plantear y explicar la solución que proponemos.

Sobre el núcleo fundamental que supone el código del Algoritmo Genético (ver Cap 3.1), se ha diseñado un programa que interactuando con el usuario permite definir ciertos parámetros como, por ejemplo, las listas que se usarán para definir un diccionario en el que reconocer las palabras, la longitud mínima de las palabras a buscar. Además, para permitir que el criptoanalista incorpore su intuición o criterios personales, se le permite elegir cualquier cromosoma que genere el AG15, para, a partir de él y con la utilidad desarrollada al efecto, continuar con el criptoanálisis, aceptando que hay un nivel a partir del cual el AG no mejora significativamente sus resultados, ya que la posibilidad de falsos positivos que desvirtúen el resultado es muy alta16. Y ello, porque estamos ante un problema de sustitución polialfabética (proyección inyectiva); el Sr. Gascón, al dar por conocida la tabla, reducía su problema a una sustitución monoalfabética, dado que la misma tabla permite tratar la proyección como biyectiva aún siendo, aparentemente, inyectiva17.

Niv

el E

xte

rno

AlgoritmoGenético

Usuario

Parámetros

Menú, Cromosomas_candidatos

Nivel externo del Sistema 1

15 Lo lógico será elegir aquellos cromosomas con mejor resultado en la función objetivo.

16 Y al contrario, lo que pueden parecer falsos positivos, para el analista pueden tener todo el sentido lógico: por ejemplo, palabras o caracteres componentes de un “código de trinchera”.

17 f: A→B es inyectiva <=> para todo x1, x2 / x1≠x2 => f(x1) ≠ f(x2)

Page 36: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 36/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

El diagrama de flujo interno del programa queda definido según el siguiente esquema:

Niv

el

1Mostrar menú

Menú

Opción

Opción

2Procesado

Automático

Opción = 0

3Cargar texto

histórico

Opción = 1

4Analizar

frecuencias

Cromosomascandidatos

Opción = 2

5Analizar texto

cifrado

Opción = 3

6Procesar

diccionario

7Descifrar texto

Opción = 4

Opción = 5

1er. Nivel interno del Sistema 1

El esquema muestra la estructura lógica del flujo interno dedicando los puntos 3, 4, 5 y 6 a la preparación de los datos (ver aptdos 3.2 y 3.3 siguientes) y el punto 7 para el AG (ver aptdos. 3.4 a 3.7).

Page 37: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 37/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.1.- Teoría general sobre Algoritmos Genéticos

Los algoritmos genéticos (AG) son una familia de métodos de cálculo inspirados en la teoría de la evolución de las especies y la selección natural. Como algoritmos en sí, se puede decir que son métodos estocásticos de búsqueda ciega de soluciones cuasi-óptimas [26].

Un AG codifica información relativa a un problema concreto en una serie de estructuras de datos denominadas “cromosoma” o “genotipo”. Aplicando a estas estructuras sucesivos operadores de recombinación se puede encontrar una posible solución al problema planteado.

Funcionamiento interno del AG

En un AG se genera un conjunto de cromosomas (cromosoma, cada solución planteada) compuestos por genes (o características) que representa a un conjunto de posibles soluciones o “población”. Esa población es sometida a ciertas transformaciones y a un proceso de selección sesgado a favor de los mejores candidatos con los que se pretende obtener nuevas soluciones candidatas.

La estrategia del AG parte de una población aleatoria de individuos descritos de diversas formas mediante cromosomas y genes. A partir de esa población y con los operadores de reproducción y mutación se genera una nueva población que en general debe ser de mejores características en relación a una función objetivo o “fitness” o de “adaptación” que guía el proceso de búsqueda de la mejor solución o individuo.

La reproducción o cruce entre individuos procura obtener nuevos candidatos (soluciones) mejores que sus padres. La mutación permite realizar cambios aleatorios en individuos para obtener material genético perdido o no existente.

Individuo o cromosoma 1

Individuo o cromosoma 2

Individuo o cromosoma 3

Individuo o cromosoma n

genes

POBLACIÓN

Conceptos básicos del AG 1

Page 38: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 38/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Ventajas del AG

No requieren representación matemática muy elaborada de los problemas tratados.

Dan soluciones a problemas desahuciados mediante otras técnicas o muy complejos con otros métodos.

Son muy robustos frente a ruido o decisiones puntuales erróneas.

Son fácilmente hibridables con otras técnicas de Inteligencia Artificial: Redes neuronales, Lógica Borrosa.

Modularidad y portabilidad.

Ofrecen un entorno amplio para tratar muy diversos tipos de problemas que requieran optimización.

Criterios a implementar

"La naturaleza es sabia: cualquier animal o vegetal en sucesivas generaciones ha sido capaz de adaptarse a base de cambios de su forma de vida o de su estructura para sobrevivir" (Charles Darwin).

Lo que sea favorable para la supervivencia hay que conservarlo.

Lo que represente debilidad para la supervivencia hay que descartarlo.

Estructura del Algoritmo Genético

1º. Generación de una población de individuos totalmente aleatoria.

2º. Evaluación de esta población siguiendo un criterio de distancia al objetivo buscado según la función objetivo.

3º. Aplicación de selección de cualidades más ventajosas de la población.

4º. Aplicación de operadores de cruce y mutación.

5º. Resultado: población siguiente con una generación más cercana a la solución.

6º. Repetir desde punto 2 hasta lograr una solución similar al objetivo buscado.

Page 39: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 39/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Alg

ori

tmo

Ge

tico

Inicio

Fin

Inicio estadístico de la población

Seleccionar individuos para reproducción

Producir descendencia

Mutar descendencia

Evaluación de la población y

búsqueda de palabras con impresión de

informes

¿Fin?

Estructura del AG 1

Origen del término AG

La expresión “algoritmo genético” aparece por primera vez en la tesis doctoral de J. D. Bagley "The behavior of adaptive Systems which employ genetic and correlation algorithms". Universidad de Michigan en 1967.

La teoría general y su aplicación tiene origen en el trabajo de John Henry Holland "Adaptation in natural and artificial Systems" (1975), Profesor de Filosofía, de Ingeniería Eléctrica y de Ciencias de la computación en la Universidad de Míchigan.

Page 40: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 40/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Un grupo de investigadores seguidores de Holland en los 80 dan un fuerte empuje (Goldberg, Baker y otros). Hoy día es una técnica muy extendida para resolver problemas de optimización, sobre todo si la función a optimizar tiene muchos máximos/mínimos locales. En estos casos se requerirán más iteraciones del algoritmo para "asegurar" el máximo/mínimo global. También son adecuados si la función a optimizar contiene varios puntos muy cercanos en valor al óptimo y solamente podemos "asegurar" que encontraremos uno de ellos (no necesariamente el óptimo).

Page 41: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 41/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.2.- Preparación de los datos de entrada

Como todo sistema de información, para el inicio de ejecución del AG necesitamos unos imputs o datos de entrada. La definición de dichos imputs se realiza en las siguientes fases:

3.2.1.- Cálculo de frecuencias reales.

Obtención de las frecuencias de uso de las letras, bigramas y trigramas que aparecen en un texto que podríamos considerar como “de la época” (ver en Anexo A pág. 74), que nos sirva de referencia para poder evaluar la calidad del posible texto plano generado por cada cromosoma (ver aptdo. 3.7):

a. Dicho texto se lee de la carpeta “Textos\” (fichero “TextoCalculoFrecuencias.txt”, preparado por defecto o definido por el usuario), y se carga en un string:

Muestra de TextoCálculoFrecuencias.txt 1

Page 42: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 42/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.

Ca

rga

r te

xto

lcu

lo d

e f

recu

en

cia

s

3.1Cargar texto

Texto texto_frecuencias

Simplemente abre el archivo de texto y lo carga en un string.

Textos

Carga del texto de la época 1

b. Se recorre el texto leyendo primero en grupos de una letra, luego dos letras y por último tres letras almacenando, en un vector V la cantidad de veces que aparece cada n-grama. Posteriormente se divide entre el total para hallar la frecuencia de cada n-grama. Para incrementar el contador por cada nueva aparición del n-grama de manera eficiente se utiliza una función HASH que trabaja en base 2718, función que evita una búsqueda secuencial dentro del vector para encontrar la posición de memoria donde almacenar el nuevo valor del contador de iteraciones del n-grama dado.

Ejemplo de trabajo de la función Hash F:

índice 0 1 2 … … … … … … … … 726 727 728

bi-gramas aa ab ac … … … ba bb bc … … zx Zy zz

Vector V 2 5 6 23 1 4 3 7 9

Aparece el bigrama “zx”. En base 27 z= 26 y x= 25.

F(zx)= 26x271 + 25x270= 726 V(726)= V(726) + 1= 4

18 27 es el número de caracteres del alfabeto aplicado. Usamos un sistema de numeración en base 27, donde el cero es “A” y el 26 es “Z” (comparar con el sistema hexadecimal para comprender).

Page 43: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 43/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

4. A

nal

izar

fre

cuen

cias

4.1Calcular

frecuencialetras

Texto_frecuencias

4.2Calcular

frecuenciabigramas

4.3Calcular

frecuenciatrigramas

fre_letras fre_bigramas fre_trigramas

Recibe el texto_frecuencias y analiza las frecuencias de los monogramas, bigramas y trigramas

Frecuencias

Esquema de análisis de frecuencias 1

4.1

,2,3

Cal

cula

r fr

ecu

enci

a n

gram

as

7.1.1Leer ngrama

7.1.2Calcular Posición

Texto_frecuencias

letra

7.1.3Colocar

Letra, pos

fre_letras

Recorre el texto frecuencias letra a letra, cada letra es pasada a una función hash que trabajando en base 27 halla la posición adecuada y es almacenada en el vector.

Inicio

Leer ngrama

Potencia = 0Val = 0

Long = long(ngrama)Pos = Long - 1

Pos >= 0

val += (ngrama[pos] - 'a')*27^ potencia;

Potencia++Pos--

Devolver val

Fin

Procedimiento de cálculo de frecuencias 1

Page 44: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 44/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Las frecuencias resultantes serán almacenadas en ficheros independientes en la carpeta “Frecuencias\”. En Anexo A (pág. 72) se puede observar el resultado de frecuencias obtenido para los n-gramas más significativos.

3.2.2.- Carga del texto cifrado

Se lee el texto cifrado cargando los distintos valores numéricos que lo integran y se ordenan de menor a mayor para eliminar los repetidos y facilitar las búsquedas, de manera que obtenemos un vector numérico que se usará de referencia a la hora de aplicar los cromosomas para poder generar un texto plano candidato con el que comparar las frecuencias cargadas anteriormente. Estos valores formarán la base de los cromosomas del algoritmo genético. (ver apartado 3.3)

Texto cifrado 1

Vector de Valores

01 02 04 05 06 08 09 10 11

12 13 14 17 18 19 21 22 24

25 27 28 29 30 32 33 35 37

38 39 40 42 44 46 47 48 49

51 52 53 54 56 57 58 59 61

62 64 65 67 68 69 70 71 72

74 75 76 77 78 79 80 81 83

85 86 87 88 89 93 95 97 98

99

Page 45: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 45/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.2.3.- Generación de la tabla inversa.

Una vez definido el vector de valores y siguiendo con el proceso explicado en capítulo 2.4.4, obtenemos una tabla19, de la que se muestra a continuación un extracto

Extracto de tabla inversa 1

La primera fila es informativa y no interviene en la confección de la tabla; se coloca para visualizar el resultado del proceso. Vemos que el homófono 22 se repite en el texto cifrado 9 veces: frecuencia relativa 1,76%; al multiplicarla por 2, por 3, por 4 y por 5, resultan frecuencias de uso de 3,52%, 5,28%, 7,05% y 8,81%. Estas cifras, con un margen de error Me de 20% (ver pág. 32), se

19 Esta tabla corresponde al criptoanálisis realizado sobre el mensaje que estudia el Sr. Gascón en su proyecto, correspondiente al texto plano “barco toda confianza en isla Ibiza…”

Page 46: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 46/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

corresponden con las frecuencias de uso de las letras {b, c, d, i, l, n, o, r, s, t, u}, como se puede apreciar viendo los datos de la tabla lateral “Frec. uso idioma”. Queda definido el conjunto candidato L para el homófono 22 (ver pág. 32). Y, comprobando en la primera fila, que ya decíamos, es informativa, vemos que, efectivamente, la “b” en el mensaje original se cifra con el 22.

Con Me= +-20% el cardinal medio de los conjuntos candidatos es 9,5 y se reduce el espacio de búsqueda en un 65%.

En el caso del homófono 70 su conjunto candidato L= {f, g, h, q, v, y, z}. En la primera fila la letra es “u” que no pertenece a L… Esto es así porque la frecuencia de uso del 70 en el texto cifrado es tan pequeña (0,20%) que no permite sacar conclusiones. En los casos estudiados se ha encontrado una media de un 10% de estas situaciones pero son situaciones tan poco significativas que no desvirtúan el proceso general pero ya anticipan la necesidad de la intervención del analista para alcanzar el 100% del criptoanálisis.

5. A

nal

izar

te

xto

cif

rad

o

5.1Cargar texto

cifrado

5.2Ordenar y Eliminar

repetidos

Textos

Texto Cifrado

texto_cifrado

valores_texto

Calcular Tabla

Inversa

tabla_inversa

fre_letras

Ilustración 1

Análisis del texto cifrado 2

En la figura se observa cómo se carga el texto cifrado de la carpeta “\Textos” dando como resultado por un lado el texto cifrado y por otro tras ordenarlo y eliminar repetidos, el vector de valores de “equivalencia” para el cromosoma.

Page 47: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 47/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.2.4.- Procesado del diccionario

Para procesar el diccionario se siguen los siguientes pasos los siguientes pasos:

a) Se intenta cargar el diccionario “diccionario_completo.txt” de la carpeta “\Diccionarios” filtrando las palabras en función de la mínima longitud especificada por el usuario20.

i. Si falla la carga, buscará los archivos “base.txt”, “lista1.txt” y “lista2.txt” en la carpeta “Diccionarios\”. Estos archivos contendrán bien listados de palabras, bien textos normales con los que generar un nuevo diccionario y que el analista podrá definir a conveniencia.

ii. Cargará todas las palabras en memoria eliminando los signos ortográficos, las ordenará alfabéticamente y eliminará las repetidas (ver fig. “diccionario completo” siguiente).

iii. Por último generará el índice base “índice.txt” para acelerar la búsqueda de palabras a partir de su raíz, procedimiento explicado en apartado b) siguiente (ver fig. “Índice base de búsqueda” siguiente)

Diccionario completo 1

20 El mínimo aconsejable es 6. Cuanto menor sea la longitud de palabra mayor será la cantidad de falsos positivos encontrados por el algoritmo.

Page 48: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 48/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Índice base de búsqueda 1

b) Se intenta cargar de “índice#.txt”el índice correspondiente al grupo de palabras que tienen una longitud mayor o igual a la mínima especificada por el usuario. Si falla la carga porque no exista el fichero

i. Seleccionará del diccionario completo las palabras de longitud mayor o igual a la especificada y definirá como término de búsqueda los primeros cuatro caracteres (ver figura siguiente).

ii. Eliminará las repetidas y buscará las posiciones en el diccionario.

iii. Para acabar generará el índice específico “índice#.txt”

Índice para palabras >= 6 caracteres 1

Page 49: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 49/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

6.

Pro

cesa

r d

icci

on

ari

o

Listados

6.1Cargar

diccionario

diccionario

¿Error?

6.2Cargar índice

Índice_filtrado

No

longitud

Listados

6.3Cargar listados

Sí listados

6.4Ordenar y

limpiar

diccionario

6.5Generar índice

diccionario

índice

diccionario

¿Error?6.6

Generar índice filtrado

Listados

Índice_filtrado

diccionario

Longitud == 0 longitud

longitud

No

Sí / índice_filtrado

Índice_filtrado

Procedimiento:Intenta cargar el diccionario, si da error genera tanto el diccionario como el índice básico.Si consigue cargarlo intenta carga el índice con el filtro de longitud adecuado y si no lo hay lo genera.

No / Índice_filtrado

El 6.3 a la vez que carga cada palabra, le quita las tildes y demás símbolos.

Proceso de carga de diccionario e índice 1

Con estos pasos ya tenemos preparado para el proceso las frecuencias de uso “de la época” con las que comparar los textos, el vector de valores y el diccionario e índice sobre el que buscar las palabras.

Page 50: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 50/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.3.- Diseño de la estructura de los cromosomas

Como ya se ha dicho, para inicializar el AG se realiza una ordenación previa de todos los números contenidos en el texto cifrado y con ellos se genera el vector de valores numéricos. A cada número de este vector le corresponderá una sola letra del texto plano. El vector de caracteres resultante es lo que compone el cromosoma del AG.

Mensaje cifrado 1

Vector de valores ordenado

01 02 04 05 06 08 09 10 11

12 13 14 17 18 19 21 22 24

25 27 28 29 30 32 33 35 37

38 39 40 42 44 46 47 48 49

51 52 53 54 56 57 58 59 61

62 64 65 67 68 69 70 71 72

74 75 76 77 78 79 80 81 83

85 86 87 88 89 93 95 97 98

99

Cromosoma

z m u a o q a e s

u o q s e i t c g

r e s c c p a l f

t d d o f u t s r

n o p n v a a z u

r r p v d n ñ i b

n y m b b f u g x

m i i e ñ d h e l

l

Page 51: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 51/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.4.- Inicialización del AG

El vector de valores numéricos obtenido induce un conjunto de cromosomas inicial en el que cada gen es una letra del alfabeto. Dicha letra es asignada al gen de manera aleatoria pero…

a. Con las limitaciones derivadas del proceso de reducción del espacio de búsqueda explicado en los párrafos anteriores. Cada gen (letra) debe pertenecer al conjunto L de candidatos del homófono (ver pág. 32).

b. No puede repetirse una letra más de cinco veces en el cromosoma puesto que en la tabla de homófonos a una letra no se le asignan más de 5 números.

Ejemplo: si el homófono “22” de la tabla inversa de pág. 45 tiene como conjunto candidato {b, c, d, i, l, n, o, r, s, t, u}, su gen en el cromosoma inducido no puede ni podrá contener una “g”.

Un resumen del vector de valores y su cromosoma inducido sería el siguiente:

01 02 03 06 10 11 22 25 29 33 40 49 50 54 58 67 68 70 80 81 85 86 97

Vector de valores numéricos 0-1

z g e a d e l e s t o q s e g c y q u e s x a

Cromosoma inducido 0-2

3.5.- Reproducción o cruce de los individuos

Al reproducir los cromosomas, la función de la librería Galib utilizada (ver aptdo. 1.3) responde con dos casos posibles:

1. Que sólo devuelva un cromosoma: devuelve el mismo cromosoma en uno de los dos hijos.

2. Que devuelva dos cromosomas: se selecciona de manera secuencial cada gen (letra) del padre y de la madre si, perteneciendo al conjunto candidato, el resultado de la función objetivo del cromosoma, fijados el resto de los genes, es el menor de los resultados que se obtienen con las demás letras del conjunto candidato a ese gen. Se añade, además la limitación de que un mismo gen no puede repetirse más de cinco veces en el cromosoma. Una vez recorrido todo el cromosoma fijando los nuevos genes, se selecciona el nuevo cromosoma si su resultado de la función objetivo es mejor que el del cromosoma padre. Si no, se deshecha el hijo y se continua con los padres en el proceso de mutación.

Page 52: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 52/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.6.- Mutación de los cromosomas.

La mutación escoge genes (letras) del cromosoma al azar y los cambia por otros asegurándose de que se cumplen las limitaciones seguidas en la reproducción del cromosoma descritas en los anteriores puntos. Repite este proceso hasta encontrar un cromosoma con resultado de función objetivo mejor o alcanzar 500 reiteraciones, en cuyo caso mantiene pasa a la siguiente generación el cromosoma original.

3.7.- Evaluación: Función Objetivo (Fitness)

La calidad del cromosoma se evalúa en función del texto resultante al aplicar el cromosoma sobre el texto cifrado, comparando la suma de los errores relativos de las frecuencias de las letras, bigramas y trigramas del texto de la época con los del texto resultante. Además, se realiza una búsqueda secuencial en el texto resultante sobre un diccionario buscando palabras de una determinada longitud; el número de palabras encontradas incrementa la valoración del cromosoma de cara al proceso de selección.

El error se calcula, como viene siendo común en este tipo de problemas, comparando la frecuencia de los n-gramas del texto de referencia (“de la época” o el que haya definido el usuario) con el del texto plano generado por el cromosoma a evaluar. La fórmula aplicada es:

letras

iomaUsoLetraIdfrecCandidatoLetraTextofrecError ..

2*..bigramas

IdiomaUsoBigramafrecomaCandidatLetraBigrafrec

trigramas

aIdiomaUsotrigramfrectoxtoCandidaTrigramaTefrec 3*..

Reº1(*

animaPalabrlongitudMí

datoTextoCandiCaracteresn

conocidasPalabrasnErrorError

En los tres primeros sumandos se “penaliza” la mayor diferencia de uso de bigramas y trigramas, multiplicando por 2 y por 3 respectivamente.

El resultado obtenido se “premia” en función del número de palabras detectadas en el diccionaria: cuanto más palabras detectadas, más bajo es “Error”. Sin embargo este “premio” se trata de que sea mínimo porque el encontrar muchas palabras en el texto no es garantía de que sean correctas o estén en el lugar correcto.

Vemos a continuación un esquema del proceso:

Page 53: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 53/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

7.5

Eva

lua

r

7.5.1Obtener texto plano asociado

Cromosoma

7.5.2Comparar

frecuencias

Fre_letras, fre_bigramas, fre_trigramas error

Proceso de evaluación 1

El resultado de esta fórmula sobre el texto plano de cada cromosoma indicará la bondad de un cromosoma para pasar a la generación siguiente: a menor error mayor posibilidad de paso a la siguiente generación.

Si el programa detecta que el AG deja de encontrar mejores individuos, desactiva la condición de que el cromosoma de salida tiene que tener mejor valoración en función objetivo que el de entrada, con el fin de empeorar la población para buscar otras vías de mejora.

Page 54: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 3.- Método Español: criptoanálisis con algoritmo genético. 54/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3.8.- Definición final del texto descifrado.

El AG informa al analista de los cromosomas que evalúa y de su resultado en la función objetivo. Escogiendo aquellos cuyo resultado está incluido dentro del primer 5% de los mejores resultados, definimos los que llamaremos “cromosomas candidatos”. Dichos cromosomas generaban en las pruebas efectuadas un nivel de aciertos21 de hasta el 65% de los caracteres del mensaje original. Vale como resumen la tabla siguiente

Nº de caracteres del mensaje plano

Valor fitness

Aciertos

hasta 400 5,2 35% - 52%

hasta 800 4,1 53% - 65%

Aciertos del AG según longitud del mensaje 0-3

A partir de esos cromosomas, y con la utilidad desarrollada al efecto, el analista evalúa soluciones que acercan a la solución final (ver proceso en detalle desarrollado en “Cap 4: Casos de Estudio”).

La intervención del analista es obligada en esta fase porque si el AG presenta, por ejemplo, como parte de “su” solución, la expresión “mijarporelhlego”, el analista, en función del resto del mensaje y de otras informaciones que posea, puede evaluar la expresión “fijarporelfuego”, usual en el argot de táctica militar. La expresión “pablicaazionel”, pueden ser “acelerada” en su solución si el analista prueba con “fabricaaviones”22.

Además, la utilidad desarrollada informa de los cambios que se producen en el resto del mensaje plano puesto que el analista actúa sobre el gen del cromosoma candidato, de manera que el cambio de “m” por “f” y de “l” por “u” en el ejemplo anterior, repercute en el resto del mensaje y no sólo en la expresión “mijarporelhlego”.

Considérese, además, que las claves solían incorporar abreviaturas y “códigos” indicativos de autoridades, organismos o unidades militares, acciones habituales en combate, etc. cuyo significado es muy difícil implementar a priori en una aplicación (ver al respecto Apéndice VII de “Soldados sin rostro” [9]) pero que el analista interesado en la materia sí debe conocer.

Con el proceso descrito se completa el criptoanálisis sin necesidad de encontrar la tabla de homófonos. Dicha tabla, en todo caso, surge como parte de la información que resulta del proceso.

21 Acierto en la letra y en la posición ocupada en el mensaje.

22 Ambos ejemplos son muestra real de situaciones que se nos han dado durante el estudio cuyo resumen se presenta en Cap 4.

Page 55: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 55/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Cap 4.- Casos de estudio y resultados

Partiendo del caso del “Mar Cantábrico” (ver Anexo F, pág. 80), se ha trabajado sobre tres telegramas (caso 1, 2 y 3 siguientes) que en su día fueron descifrados y probablemente ello contribuyó a la captura del barco [12]. Describen comunicaciones entre el Ministro de Marina y Aire y el Presidente del Gobierno Vasco. Fueron cifrados con la clave Bocho (ver pág. 82); la tabla de homófonos de dicha clave no comprendía la Ñ pero si la CH. Para nuestro trabajo no se ha considerado la CH como letra.

Para nuestro estudio, los mensajes planos, extraídos de [12], han sido cifrados con una utilidad desarrollada para este fin en Visual C++: por ello el texto cifrado que recoge el estudio no es el texto cifrado histórico pero si es resultado de la clave Bocho real. En el caso 1 no se aplica cinta móvil y no se utiliza alfabeto perturbado; en el caso 2 se aplica como cinta móvil la segunda fila de la tabla Bocho de página 82. Se verá con ello que es indiferente el uso de la cinta móvil, puesto que con el procedimiento seguido, en ambos casos se obtiene la tabla de homófonos23.

Caso de estudio 1

Clave Bocho.

De Valencia para Bilbao.

Transmitido día 13-2-37. A las 9.15 horas. 880 caracteres

Texto plano:

El ministro Marina y Aire a Presidente Gobierno vasco.

Estamos examinando la idea de establecer en Bilbao una fábrica aviones en que se construiría bien el aparato americano "Martin Bombers" y el "Fokker 31". Ruégole llame al ingeniero aeronáutico Cerro de servicio en Lamiaco y exponiéndole esta idea nos diga dados los elementos que ahí podrían reunirse y clase materiales que han de emplearse en uno y otro modelo cual estima preferible para fabricación ahí, o si simultáneamente pudieran construirse ambos. Primera condición es encontrar local adecuado y en condiciones relativa seguridad y con terreno próximo que pueda acondicionarse para aeródromo. Díceme que en caso reúna ambas condiciones Zamudio donde instalóse fábrica Esperanza que antes se hallaba en Marquina y otro aspecto a estudiar inmediatamente es posibilidad reunir ahí con rapidez y urgencia caso requiere todo elemento mecánico para producciones referidas y suplico V.E. tome con máximo empeño esta iniciativa y me dé cuenta su desarrollo v previamente déme seguridades que espero respecto posibilidad realizar este proyecto. (Fin del comunicado.)

Texto cifrado:

23 La aplicación de la cinta móvil implica sólo un cifrado por sustitución simple, fácilmente rompible por análisis de frecuencias.

Page 56: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 56/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

2883 7205 2723 5753 6405 2742 3488 3477 8262 8801 2104 5421 0453 4608

5452 6253 9853 3804 7325 9314 5288 6131 1205 4588 5203 9322 5433 4893

8212 2857 0473 1056 0457 0478 2334 5736 6531 6365 6333 1901 2873 0443

0524 5403 8808 2388 5991 3863 7854 1249 2788 9572 0112 1961 2719 2838

1716 5314 4549 3915 5365 3603 9183 8634 8203 5653 3023 4353 1462 8827

2888 1493 7330 2873 4204 6561 5453 3823 1288 5697 6398 2351 0495 9549

7753 8304 6518 0151 0182 0434 4354 2793 5478 2316 9194 2449 1293 9112

2149 4353 2817 9788 0177 9105 3482 1750 0130 3377 8850 4983 4382 5791

6204 5953 1208 6146 9956 2833 1363 6723 7795 6333 7395 9100 3493 6557

0487 2262 5457 9127 3372 0403 4254 6291 4699 3104 1333 7377 0453 8447

6204 3338 8391 5334 5634 2369 4936 0323 2761 7728 6249 2200 3343 5346

3601 2705 6738 9185 9103 9325 4328 6733 3888 4505 5238 0178 8878 6349

7388 5893 4983 4246 0109 0062 3605 3453 5459 2834 0853 4731 2163 2865

0573 2282 1217 7265 3142 6546 5354 0952 8246 6795 6327 2865 5422 6173

2193 5163 8234 5346 2873 9823 7336 6505 3843 6198 8814 8850 9122 3133

5023 3228 1298 2334 7763 2201 8273 2857 6553 4333 9701 1888 4653 0256

9501 7733 7769 7861 3472 5338 9504 3423 9003 2394 0159 6155 5691 2486

9121 0533 7861 1250 4278 4282 3405 9517 5367 8803 3333 9138 2350 6523

5961 5093 9891 2704 1000 0491 7398 5446 2338 5356 3488 3309 1988 8322

4973 2101 5193 4973 0417 2605 2700 5001 8250 2334 5028 0173 5736 5443

4983 2845 0552 3801 5105 2846 9028 3833 3444 0510 3153 0534 7204 4646

0474 8862 6288 5205 9173 8454 6529 3193 1233 3261 7265 4988 5767 9151

3661 3353 1736 0050 6305 3801 3427 9121 6354 9733 0953 1297 0428 1747

8217 6325 4243 0177 3377 0304 3134 4238 5441 4278 8234 0354 9093 7728

4432 8638 9204 1251 4205 5188 8349 3804 8156 4228 9591 3623 2149 0414

5309 9134 9761 5953 9888 1293 5182 6788 6588 4703 2321 8651 9801 6134

5346 9591 8553 6593 2105 8316 4686 4762 6378 4975 9136 4909 2822 4973

5954 3793 0923 0484 6791 1282 9183 0833 9312 0198 9305 9742 4888 3227

0477 0422 3153 7308 5457 3121 5317 0595 0382 6214 4975 4738 0418 9388

2753 1297 5377 9127 9146 2802 0095 0177 8821 5317 8100 5353 4647 0438

6103 9146 4704 2236 6167 2317 0125 6362 9321 5421 3891 3343 6326 5465

2846 0804 2465 4969 9178 9723

Vector de valores ordenado:

00 01 02 03 04 05 08 09 10 12 13 14 15 16 17 18 19 21 22 23 24 25 26

27 28 29 30 31 32 33 34 36 37 38 39 41 42 43 44 45 46 47 48 49 50 51

52 53 54 55 56 57 58 59 61 62 63 64 65 67 69 72 73 74 75 77 78 81 82

83 84 85 86 87 88 90 91 92 93 94 95 97 98 99

Tabla inversa (conjunto de candidatos para cada homófono):

00: b c f g h m p t u v y

01: a c d e i l m n o r s t

02: f g h q v y z

03: b c d i l m n o r s t u

04: a c e i n o r s t u

05: a c d e i l m n o p r s t

08: b c f h m p t u y

09: b c f h m p t u y

10: b f g h j q v y

12: c d i l n o p r s t u

13: f g h q v y z

14: b c f h m p t u y

15: j q x z

16: b f g h j q v y

17: b c d i l m n r s t u

18: b f g h j q v y

19: b f g h m p v y z

21: b c d i l n o r s t u

22: c d g i l m n p r s t u v

23: a c d e i l m n o r s

24: b f g h m p v y z

Page 57: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 57/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

25: b f g h m p v y z

26: f g h q v y z

27: b c d i l n o p r s t u

28: a d e i l m n o r s

29: j q x z

30: b f g h j q v y

31: c d g i l m n p r s t u v

32: b f g h m p v y z

33: a c d e i l m n o r s t

34: a c d e i l m n o r s

36: b c d i l m n r s t u

37: j q x z

38: a c d e i l m n o p r s t

39: j q x z

41: j q x z

42: b c d i l m n o r s t u

43: b c d i l m n r s t u

44: f g h q v y z

45: b f g h m p v y z

46: c d i l n o p r s t u

47: b c f g h m p t u v y

48: f g h q v y z

49: a c d e i l m n o p r s t

50: c d g i l m n p r s t u v

51: c d g i l m p t u v y

52: b c f h m p t u y

53: a c e n o s t u

54: a c d e i l m n o p r s t

55: j q x z

56: c d f g h l m p t u v y

57: c d g i l m n p r s t u v

58: j q x z

59: b c f h m p t u y

61: c d i l n o p r s t u

62: b c d i l m n o r s t u

63: c d i l n o p r s t u

64: j q x z

65: c d i l n o p r s t u

67: c d f g h l m p t u v y

69: b f g h j q v y

72: b c f h m p t u y

73: a c d e i l m n o p r s t

74: j q x z

75: f g h q v y z

77: b c d i l n o p r s t u

78: c d g i l m n p r s t u v

81: f g h q v y z

82: c d i l n o p r s t u

83: c d g i l m n p r s t u v

84: b f g h j q v y

85: f g h q v y z

86: b g m p q v y

87: j q x z

88: a d e i n o r s u

90: b f g h j q v y

91: a e i n o r s u

92: j q x z

93: a c d e i l m n o p r s t

94: f g h q v y z

95: b c d i l m n o r s t u

97: c d f g h l m p t u v y

Page 58: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 58/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

98: c d g i l m p t u v y

99: f g h q v y z

La media de letras posibles asignadas a cada homófono es 9,35. El porcentaje medio de reducción del espacio de búsqueda es 65%.

Cromosoma del mensaje plano y cromosomas candidatos

Cp: uigreatmqnhlkysvbdcopbzmeqguyantxrkhilzfspvodcbeaqushmolixrpytnhvdcqosmfuyapegixrtcq

Cc1:uigraotmgnymjblgpdcemmhdeqfupsntqrzxidvpspvescbeaquljcolojrlvtnzhtsqosfvyzabazifrdcq

Cc2:uigraotmgnymjblgpdcemmhdeqfupsntqrqxidfpspvescbeazuljcolojrlvtnzhtsqoshvyzabazifrdcq

Cc3:uigleotmqnhmjhsvpdcegghdeqvuyantqrjxidfpspzascbeajulzcorojrmbtnzvlsfosvfyxabazifcdtq

Cc4:uigleotmqnhmjvsvpdcegmhdeqfuyantqrqxidvpspgascbeajuljcorojrmbtnzzlsfoshvyxabazifcdtq

Leyenda:

Cromosoma candidato es aquel con un resultado de función objetivo óptimo: resultado dentro del primer 5% de la escala de los mejores resultados.

Cp, cromosoma del texto plano; Ccn, cromosoma candidato nº n (n desde 1 a 4).

El color Rojo indica consonante fallida. Color Azul indica vocal fallida24.

La tabla siguiente resume datos que reflejan la eficiencia de los cromosomas resultado del AG y de los sucesivos análisis del criptoanalista a partir de dicho cromosoma resultante.

# Cromosoma resultante del AG. #.1 cromosoma con las vocales corregidas. #.2 cromosoma tras el estudio del analista.

Cromosoma Cc

Fitness del cromosoma

Nº Aciertos en cromosoma

% Aciertos en cromosoma

Nº Aciertos en texto plano

% Aciertos en texto plano

1 4,255964 38 45,24% 516 58,64%

1.1 44 52,38% 668 75,91%

2 4,255658 37 44,05% 515 58,52%

2.1 44 52,38% 691 78,52%

3 4,206555 40 47,62% 547 62,16%

3.1 45 53,57% 664 75,45%

3.2.1 55 65,48% 750 85,23%

3.2.2 61 72,62% 809 91,93%

3.2.3 70 83,33% 847 96,25%

3.2.4 83 98.81% 879 99,89%

3.2.5 84 100% 880 100%

4 4,232578 38 45,24% 543 61,70%

4.1 43 51,19% 660 75,00%

Eficiencia de los cromosomas candidatos 1

24 El comportamiento del AG permite enunciar la siguiente regla empírica: “Si en un cromosoma candidato se reconoce una vocal, en el cromosoma del texto plano habrá una vocal”. Dicha regla debe ser aprovechada por el analista generando el cromosoma Ccn.1.

Page 59: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 59/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

El analista usará los cromosomas candidatos para analizar los mensajes planos que de ellos se derivan. Como ejemplo, se muestra a continuación el proceso de mejora seguido sobre el cromosoma candidato Cc3 que es el de mojor resultado fitness. Con la utilidad desarrollada al efecto (que permite ver el texto plano generado por un cromosoma candidato) el analista lo modifica y crea el cromosoma Cc3.1, 3.2.1 y siguientes hasta llegar a la solución final.

Texto solución del AG (Cromosoma 3):

estodelejodinanloraideadeestabreterengimbaounopablicaazionelenquelesenltruoroa

pienedogalateacarosanadactinpodpershempajjertlasynoluevedemradeaminvenieroaere

naudotececcaleservicioendadiasehafganiandadeesdailaonossivalasasdolarecentosqu

eahomelcoancaunirlexcraladateliarasquehanleevprearsaenunebatledoleracuadestido

mrafaligdemarapobrisasoanaziasisimurtoneacentepudoeronconstruirseambosmcoderac

ondicoonesententrordotamasacuaseyentenlocionelredadivasegucilalbsonterceneblef

icojuagyadoasonsisionocsemalaaaresrecositadequeantasereunaampascandicianeshodu

siosenseinltadasepobricoesberanfoqueontessezarraboanvarquinayotraalmactoaestus

oorindadoadamendeesposogidilalleuniraxisonlabilefyyrzenciocasarefuiecatedaemem

andocetanicomarapledyctionescaferidoshsyprosavatamecancaqimeevmanoastainitiodi

zaydelecuentaludesoclormavpreviadendeladaseguciladesfueesperolaspectomesigorid

adraadoharestegrabasde

Texto solución del analista (Cromosoma 3.1):

estadolejadinanloraideadeestabreterengimbaounapablicaazionelenquelesonltruiria

pienedagalatoacerisanodactinpodpershempojjertlesynoluevodemradeaminvenieroaero

nauditoceccoleservicioendadiasohefgoniendodeesdaileanossivalasosdolerecentosqu

eahimolcianceunirlexcraledateliaresquehanleevprearseenunobotlodolerocuadestida

mrefeligdemarapabrisasionaziosisimurtaneacentepudieranconstruirseambosmciderac

ondicionesentontrardotamasecuasoyentonlicionelredadivasegucilalbsontercenoblof

icojuegyedaasonsisionacsemalaaerosrocositedequeentasoreunaampascondicioneshadu

siosonseinltadosepabricaesberanfaqueantessezarrabaenvarquinayotroalmectoaestus

iarindediadamendeesposigidilalleuniraxisonlabilefyyrzenciacasorefuiecetodoemem

endocetanicomaraplodyctionesceferidashsyprisovetomeconcaqimoevmenoestainitiadi

zaydelecuentaludesaclormovpreviadendeledeseguciladesfueesperolespectomosigirid

adreadiharestegrobesdo

En el Cc3.1 se “ven” palabras fácilmente reconocibles:

estabreter -> establecer -> {(62,l);(98,c)}25

gimbao -> bilbao -> {(25,b); (14,l)}

pablicaazionel -> fabricaaviones -> {(45,f);(3,r);(48,v);(57,s)}

enquelesonltruiria -> enqueseconstruiria -> {(57,s);(78,c)}

aeronaudito -> aeronautico -> {(97,t);(98,c)}

Con estos cambios se obtiene el cromosoma 3.2 que genera el siguiente texto candidato 3.2.1:

estadosejadinanlolaideadeestablecerenbilbaounafabricaavionesenqueseconstruiria

pienedagaratoacericanodactinpodpershelfojjertresynoruevodelladealinvenieroaero

nauticoceccoleservicioendadiacohefgoniendodeestaileanossivalasosdoselecentosqu

eahimolcianceunirsexclasedaterialesquehanleevplearseenunobotrodolelocuadestida

mreferibdemarafabricacionaziosisimultaneacentepudieranconstruirseambosmciderac

ondicionesencontrardocalasecuasoyenconlicionesredativasegucilalbcontercenobrof

icojuegyedaaconsicionacsemaraaerosrocosicedequeencasoreunaampascondicioneshadu

siosonseinstadosefabricaesberanfaqueantessezallabaenvarquinayotroasmectoaestus

iarindediatamenteesposibidilalreuniraxiconrabilefyyrzenciacasorefuiecetodoelem

25 Con esta expresión se indica que al homófono 62 le debe corresponder la “L” y al 98 la “C”. Se

comprueba, por ejemplo, que “R” y “L” pertenecen al conjunto de candidatos del 62 en la tabla inversa, aunque dado el origen probabilístico de este estudio, podría ocurrir que “L” no hubiera pertenecido.

Page 60: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 60/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

entocecanicomaraprodyccionesceferidashsyplicovetomeconcaqimoevmenoestainiciati

vaydelecuentasudesacrollovpreviadenteledeseguciladesfueesperorespectomosibilid

adreadiharestegrobecto

agaratoacericano -> aparatoamericano -> {(24,p);(59,m)}

elecentos -> elementos -> {(59,m)}

ceunirse -> reunirse -> {(95,r)}

dateriales -> materiales -> {(27,m)}

leevplearse -> deemplearse -> {(77,d);(84,m)}

texto candidato 3.2.2:

estamosejaminandolaideadeestablecerenbilbaounafabricaavionesenqueseconstruiria

pienedaparatoamericanomartinpompershelfojjertresynoruevodellamealinvenieroaero

nauticocerrodeservicioendamiacohefponiendodeestaideanossivadasosdoselementosqu

eahimodrianreunirsexclasematerialesquehandeemplearseenunobotromodelocuadestima

mreferibdemarafabricacionaziosisimultaneamentepudieranconstruirseambosmrimerac

ondicionesencontrardocalasecuasoyencondicionesredativaseguridadbconterrenobrof

imojuepyedaaconsicionarsemaraaerosromosicemequeencasoreunaampascondicioneshamu

siosonseinstadosefabricaesberanfaqueantessezallabaenmarquinayotroasmectoaestus

iarinmediatamenteesposibididadreuniraxiconrabidefyyrzenciacasorefuieretodoelem

entomecanicomaraprodyccionesreferidashsyplicovetomeconmaqimoemmenoestainiciati

vaymedecuentasudesarrollovpreviamentedemeseguridadesfueesperorespectomosibilid

adreadiharesteprobecto

ejaminando -> examinando -> {(64,x)}

martinpompers -> martinbombers -> {(19,b)}

fojjertresyno -> fokkertresuno -> {(39,k);(15,k);(86,u)}

damiaco -> lamiaco -> {(43,l)}

efponiendo -> exponiendo -> {(94,x)}

enunobotro -> enunoyotro -> {(69,u/y)}

mreferibdemara -> preferiblepara -> {(67,p);(43,l)}

redativa -> relativa -> {(43,l)}

probecto -> proyecto -> {(69,y)}

Con este último paso se genera un texto comprensible casi al 100%, (en la tabla se indica un 96,25% de aciertos sobre el texto plano original), a falta de volver a repetir el procedimiento una última vez.

Texto candidato 3.2.3:

estamos examinando la idea de establecer en bilbao una fabrica aviones en que

se construiria bien el aparato americano martin bombers h el fokker tres uno

ruevo le llame al inveniero aeronautico cerro de servicio en lamiaco h

exponiéndole esta idea nos siva dasos los elementos que ahi podrian reunirse x

clase materiales que han de emplearse en uno y otro modelo cual estima

preferible para fabricacion azi o si simultaneamente pudieran construirse

ambos primera condicion es encontrarlo calasecuasoyen condiciones relativa

seguridad y con terreno broximo jue pueda aconsicionarse para aerosromo siceme

que en caso reuna ambas condiciones hamusiosonse instalose fabrica esberanfa

que antes se zallaba en marquina y otro aspecto a estusiar inmediatamente es

posibilidad reunir axi con rabidef y urzencia casorefuiere todo elemento

mecanico para producciones referidas h suplico ve tome con maqimo empeno esta

iniciativa y me de cuenta su desarrollo v previamente deme seguridades fue

espero respecto posibilidad realihar este proyecto

ruevo -> ruego -> {(30,g)}26

26 Con esta expresión se quiere indicar que al homófono 30 le debe corresponder la “G”.

Page 61: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 61/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

inveniero -> ingeniero -> {(30,g)}

siva -> diga -> {(50,d);(30,g)}

dasos -> dados -> {(50,d)}

azi -> ahí -> {(58,h)}

broximo -> proximo -> {(90,p)}

jue -> que -> {(55,q)}

aconsicionarse -> acondicionarse -> {(50,d)}

aerosromo -> aerodromo -> {(50,d)}

siceme -> diceme -> {(50,d)}

esberanfa -> esperanza -> {(90,p);(44,z)}

zallaba -> hallaba -> {(74,h)}

estusiar -> estudiar -> {(50,d)}

axi -> ahí -> {(41,h)}

rabidef -> rapidez -> {(44,z)}

urzencia -> urgencia -> {(92,g)}

h -> y -> {(16,y)}

*ve -> se -> {(75,s)}

maqimo -> maximo -> {(37,x)}

*v -> y -> {(75, y)}

fue -> que -> {(81,q)}

realihar -> realizar -> {(26,z)}

Texto candidato 3.2.4:

estamos examinando la idea de establecer en bilbao una fabrica aviones en que

se construiria bien el aparato americano martin bombers y el fokker tres uno

ruego le llame al ingeniero aeronautico cerro de servicio en lamiaco y

exponiendole esta idea nos diga dados los elementos que ahí podrian reunirse x

clase materiales que han de emplearse en uno y otro modelo cual estima

preferible para fabricacion ahí o si simultaneamente pudieran construirse

ambos primera condicion es encontrar local adecuado y encondiciones relativa

seguridad y con terreno proximo que puedaa condicionarse para aeródromo diceme

que en caso reuna ambas condiciones zamudio donde instalose fabrica esperanza

que antes se hallaba en marquina y otro aspecto a estudiar inmediatamente es

posibilidad reunir ahí con rapidez y urgencia caso requiere todo elemento

mecanico para producciones referidas y suplico ve tome conmaximo empeno esta

iniciativa y me de cuenta su desarrollo v previamente deme seguridades que

espero respecto posibilidad realizar este proyecto

x -> {(87,y)}

Cromosoma 3.2.5: cromosoma final

uigreatmqnhlkysvbdcopbzmeqguyantxrkhilzfspvodcbeaqushmolixrpytnhvdcqosmfuyapegixrtcq

Page 62: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 62/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Ta bla de homófonos derivada del cromosoma 3.2.5

a 05 g 30 n 73 s 83

a 33 g 92 o 23 t 08

a 54 h 13 o 49 t 36

a 88 h 41 o 61 t 72

b 19 h 58 o 82 t 97

b 25 h 74 p 24 u 00

b 52 i 01 p 47 u 31

c 22 i 42 p 67 u 56

c 51 i 63 p 90 u 86

c 78 i 93 q 10 v 18

c 98 k 15 q 29 v 48

d 21 k 39 q 55 v 75

d 50 l 14 q 81 x 37

d 77 l 43 q 99 x 64

e 04 l 62 r 03 x 94

e 28 m 09 r 38 y 16

e 53 m 27 r 65 y 32

e 91 m 59 r 95 y 69

f 45 m 84 s 17 y 87

f 85 n 12 s 46 z 26

g 02 n 34 s 57 z 44

Tabla de homófonos resultado del criptoanálisis 0-1

Se obtiene una tabla casi idéntica al original dado que en el proceso de cifrado no tienen porque haberse utilizado todos los números de la tabla original.

Caso de estudio 2

Clave Bocho.

De Valencia para Bilbao.

Transmitido día 5-3-37. A las 2.05 horas. 453 caracteres.

Texto plano:

El ministro de Marina y Aire al presidente Gobierno vasco.

Por Ministerio Estado se me ha remitido telegrama del embajador España París fechado ayer que dice lo siguiente: Gobierno México en vista bloqueo y para evitar situaciones diplomáticas desairadas ha dado órdenes representantes en extranjero para que no se despachen de puertos en que se encuentran actualmente barcos matriculados México a nuestros servicios, por tanto barcos en esta situación que se hallen en España no deben salir ya bajo pabellón mexicano y deberán ser tomadas medidas con respecto a los que se encuentren en extranjero.

Page 63: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 63/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Texto cifrado:

5290 3418 2750 5970 4420 7327 4785 3076 8861 9002 8518 6035 0534 4518

5976 8461 9026 4516 8593 3454 8988 6145 3220 4843 3311 8823 6712 4592

5233 5054 2588 7359 0272 2064 0705 6147 5446 6073 5351 4523 2794 2069

2402 5901 9809 2021 7685 4267 6259 4573 2190 8960 1359 3767 4521 2927

0244 5414 3247 2822 6067 4619 8873 8860 2909 7654 1202 5944 9888 9427

4777 4592 4927 2569 4718 5444 5964 3302 2385 7088 5973 0549 0592 8033

6154 8224 6734 2345 2185 0234 4519 7385 7060 2176 8877 7645 0285 7745

5876 3454 7711 8512 2452 8873 5491 2220 2147 3060 8245 3019 8894 6685

7723 6019 2220 7376 4770 4550 0478 6002 6085 5037 7885 2144 3488 7754

0626 2254 6975 8577 4460 1405 7364 6792 4888 7612 0937 9816 0561 9030

4820 4127 9490 5450 7845 0244 1247 0202 4512 2927 0627 2402 5290 7344

3377 4424 4333 7394 9002 8550 4530 2633 3084 2622 5437 0967 7753 7845

0285 6688 3287 4550 2077 2030 5205 5054 2167 4920 1460 5030 8869 2773

1788 1488 4024 1954 6245 6932 6777 1860 7427 6488 7747 4661 6014 6073

0577 3060 7344 6748 3361 8802 1845 6109 4988 7094 9021 3420 9252 4537

4424 3332 4792 0478 6070 2020 7706 5160 7744 3445 5020 7785 4144 7354

5011 8534 2424

Vector de valores ordenado:

01 02 04 05 06 07 09 11 12 13 14 16 17 18 19 20 21 22 23 24 25 26 27

28 29 30 32 33 34 35 37 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

58 59 60 61 62 64 66 67 69 70 72 73 74 75 76 77 78 80 82 84 85 87 88

89 90 91 92 93 94 98

Tabla inversa (conjunto de candidatos para cada homófono):

01: f g h q v y z

02: a d e i n o r s u

04: b f g h p v y z

05: b c d i l n o r s t u

06: b g m p q u

07: f g h q v y z

09: c d g i l m p t u v y

11: b g m p q u

12: b c d g i l m n p r s t u

13: f g h q v y z

14: c d g i l m p t u v y

16: b f g h p v y z

17: f g h q v y z

18: b c d g i l m n p r s t u

19: c d g i l m p t u v y

20: a d e i l m n o r s u

21: c d i l n o p r s t u

22: c d g i l m p t u v y

23: c d g i l m p t u v y

24: c d i l n o p r s t u

25: b f g h p v y z

26: b c f h m p t u v y

27: a c d e i l m n o p r s t

28: f g h q v y z

29: b g m p q u

30: c d i l n o p r s t u

32: c d g i l m p t u v y

33: c d i l n o p r s t u

34: c d i l n o p r s t u

35: f g h q v y z

37: c d g i l m p t u v y

40: f g h q v y z

41: b f g h p v y z

42: f g h q v y z

Page 64: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 64/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

43: b f g h p v y z

44: a c d e i l m n o r s

45: a c d e l o t

46: b g m p q u

47: c d i l n o p r s t u

48: b c f h m p t u v y

49: b c f h m p t u v y

50: a c d e i l m n o p r s t

51: b f g h p v y z

52: b c d g i l m n p r s t u

53: b f g h p v y z

54: a d e i n o r s u

58: f g h q v y z

59: c d i l n o p r s t u

60: a c e i n o r s t u

61: c d i l n o p r s t u

62: b f g h p v y z

64: b c f h m p t u v y

66: b f g h p v y z

67: c d i l n o p r s t u

69: c d g i l m p t u v y

70: b c d g i l m n p r s t u

72: f g h q v y z

73: a d e i n o r s u

74: f g h q v y z

75: f g h q v y z

76: c d i l n o p r s t u

77: a d e i n o r s u

78: c d g i l m p t u v y

80: f g h q v y z

82: b f g h p v y z

84: b f g h p v y z

85: a e i n o r s u

87: f g h q v y z

88: a c e n o s t u

89: b f g h p v y z

90: c d i l n o p r s t u

91: f g h q v y z

92: b c d g i l m n p r s t u

93: f g h q v y z

94: b c d g i l m n p r s t u

98: b g m p q u

La media de letras posibles asignadas a cada homófono es 9,26. El porcentaje medio de reducción del espacio de búsqueda es 66%.

Cromosoma del mensaje plano y cromosomas candidatos

Cp: gsqachijrxblympenudoptiqvslarhcjxgbteyomdnupqaxiedbcholsfrxmtnuhdielamoqsgcu

Cc1: zspomgimrfcfvrlenudobceguncodycvvhpiepiucsbtfagtadbmpollyrggtniqpyehahoqszlm Cc2: qspouhimrycgzdlerudshcegmncodglqpvpaebiccsptgefoadvmbitlyrfhtnifbyahavoqnzlu Cc3: qspouhimrycpzdlerudshcegmncodgtqpvpaebiccsgtgefoadvmbillyrfhtnifbyahavoqnzlu Cc4: qspouhimrycpzdlerudshceggncodgtqpvpaebiccsgtgefoadvmbillyrfhtnifbyahavoqnzlu Cc5: qspouvimrycpzllerudlhcegmscodgtqpvpaebiccsgtgefoadvmbildyrfhtnufpyahavoqnznu Cc6: gspomhiurvcfvtlenidlbcafmncodydqvgpeepimcsbtfaqiarbchollyrzgtnuqpyevahogszdm Cc7: gspomhiurvcfvtlenidlbcafmncodydqvgpeepimcsbtfaziarbchollyrzgtnuqpyevahogsqdm Cc8: gspomhiurqlpvclenidlbcafmncodydfvgpeepimcsbtgafiarbchotlyrzgtnufpyefahovsqdm Cc9: qngouhimrftpvtcenidopcavmsdosvcyzgpdemimclytpagierbcbolnfrhhlsufbpagavofnydu Cc10: qnpibhimrytbgdcenudopuagmsdolvchvypeemimclptvagserbczoldfrhhtsiffpagayoqngdu Cc11: qngimhimsqdhztcenilopcavpslorvcybzpdemimclptpafuerbcbolnfrvhtsufgyayavofngdu Cc12: qngimhiprqlbvtcanidibcavmslorfczvypdemomclvtpahuedfcbolszrhgtsufpyehayogngdu

Page 65: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 65/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Leyenda:

Cromosoma candidato es aquel con un resultado de función objetivo óptimo: resultado dentro del primer 5% de la escala de los mejores resultados.

Cp, cromosoma del texto plano; Ccn, cromosoma candidato nº n (n desde 1 a 12).

El color Rojo indica letra fallida. Color Azul indica vocal fallida.

La tabla siguiente resume datos que reflejan la eficiencia de los cromosomas candidatos resultado del AG y de los sucesivos análisis del criptoanalista a partir de dichos cromosomas.

# Cromosoma resultante del AG. #.1 cromosoma tras el estudio del analista.

Cromosoma Cc

Fitness del cromosoma

Nº Aciertos en cromosoma

% Aciertos en cromosoma

Nº Aciertos en texto plano

% Aciertos en texto plano

1 5,1554

(23 palabras) 23 30,26% 233 51,43%

2 5,1068

(27 palabras) 16 21,05% 159 35,10%

3 5,1184

(29 palabras) 17 22,37% 164 36,20%

4 5,1897

(30 palabras) 17 22,37% 164 36,20%

5 5,2014

(21 palabras) 18 23,68% 177 39,07%

6 5,0167

(20 palabras) 26 34,21% 232 51,21%

7 5,0180

(20 palabras) 26 34,21% 232 51,21%

8 5,0138

(17 palabras) 25 32,89% 227 50,11%

9 4,9688

(23 palabras) 26 34,21% 211 46,58%

10 4,9741

(20 palabras) 27 35,53% 212 46,80%

11 4,9509

(25 palabras) 25 32,89% 212 46,80%

11.1.1 29 38,16% 242 53,42%

11.1.2 31 40,79% 259 57,17%

11.1.3 34 44,74% 271 59,82%

11.1.4 38 50,00% 295 65,12%

11.1.5 40 52,63% 303 66,89%

11.1.6 44 57,89% 332 73,29%

11.1.7 54 71,05% 402 88,74%

11.1.8 60 78,95% 425 93,82%

11.1.9 70 92,11% 446 98,45%

11.1.10 76 100% 453 100%

12 4,9894

(22 palabras) 26 34,21% 237 52,32%

Eficiencia de los cromosomas candidatos 2

Page 66: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 66/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Se observa como para cromosomas con la misma puntuación en la función objetivo los que tienen más palabras del diccionario reconocidas en el texto son al mismo tiempo los que menos aciertos tienen en el mismo.

El analista usará los cromosomas candidatos para analizar los mensajes planos que de ellos se derivan. Como ejemplo, se muestra a continuación el proceso de mejora seguido sobre el cromosoma candidato 11. Con la utilidad desarrollada al efecto (que permite ver el texto plano generado por un cromosoma candidato) el analista lo modifica en sucesivas reiteraciones hasta llegar a la solución final.

Para que sea más realista, en esta ocasión no aplicamos la regla empírica enunciada en pié de página 58. Tras comprobar los textos planos generados por los cromosomas candidatos, el texto que sigue, generado por el cromosoma 11 tras aprovecharnos de la debilidad 1ª “regla de la decena” (ver Cap 2.4.4-1º) por la que aplicamos al homófono 83 la “e” (83,e), ha resultado ser uno de los más “inteligibles”.

Texto solución del AG (Cromosoma 11):

tortalunderaiestaroneteviretutyrocehegravarelempomalosentolaparunfechiriamerpp

eladelonuquientezobuernovequcoenpandadlivieomcaraepitasnuduadaisencaplitaducon

lenauricinforagoorlenenrecrenentasteneseftrasmesotarafienisegescadbesleciertin

elgueneelcuendrasamcialhesdedirconmatsicuhirosmebadoaluendsinnespamaontordosdo

pordonelescosyciaciospuenebalyelesestilanocedelsalarzadayocabellostevacasimred

erisserdomorantericandonrentecdoolingueneesmpesdrelesebdralmero

zobuerno -> gobierno -> {(42,g);(59,i)}

tortalinderaiestaroneteviretityrocehegravarelempomalosentolaparinfechiriamerpp

eladeloniquientegobiernoveqicoenpandadlivieomcaraepitasniduadaisencaplitadicon

lenairicinforagoorlenenrecrenentasteneseftrasmesotarafienisegescadbesleciertin

elgueneelcuendrasamcialhesdedirconmatsicuhirosmebadoaluendsinnespamaontordosdo

pordonelescosyciaciospuenebalyelesestilanocedelsalarzadayocabellostevacasimred

erisserdomorantericandonrentecdoolingueneesmpesdrelesebdralmero

niquiente -> siguiente -> {(2,s);(1,g)}

tortalinderaiestaroseteviretityrocehegravarelempomalosentolaparisfechiriamerpp

eladelosiguientegobiernoveqicoenpasdadlivieomcaraepitassiduadaisencaplitadicos

lenairicinforagoorlenesrecrenentasteseseftrasmesotarafienisegescadbesleciertin

elgueseelcuendrasamcialhesdedirconmatsicuhirosmebadoaluesdsissespamaostordosdo

pordoselescosyciaciospuesebalyelesestilanocedelsalarzadayocabellostevacasimred

erisserdomorastericandonrentecdoolingueneesmpesdrelesebdralmero

estaro -> estado -> {(61,d)}

veqico -> mexico -> {(89,m);(13,x)}

tortalinderaiestadoseteviretitydocehegramadelempomalosentolaparisfechidiamerpp

eladelosiguientegobiernomexicoenpasdadlivieomcaraepitassiduadaisencaplitadicos

lenairicinfodagoorlenesrecrenentasteseseftrasmesotarafienisegescadbesleciertin

elgueseelcuendrasamcialhesdedirconmatsicuhidosmebadoaluesdsissespamaostordosdo

pordoselescosyciaciospuesebalyelesestilanocedelsalarzadayocabellostevacasimded

erisserdomodastedicandonrentecdoolingueneesmpesdrelesebdralmero

cehegrama -> telegrama -> {(26,t);(16,l)}

fechidi -> fechado -> {(5,a);(47,o)}

Page 67: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 67/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

tortalinderaoestadosetevaretitydotelegramadelempomalosentolaparisfechadoamerpp

eladelosiguientegobiernomexicoenpasdadlovieomcaraepitassiduadaosencaplotadicos

lenairacanfodagoorlenesrecrenentasteseseftrasmesotarafienosegescadbeslecierton

elgueseelcuendrasamtialhesdedarconmatsiculadosmebadoaluesdsossespamaostordosdo

pordoselestosytiaciospuesebalyelesestalanocedelsalarzadayocabellostevacasomded

erasserdomodastedicandonrentecdoolongueneesmpesdrelesebdralmero

retitydo -> remitido / repetido -> {(18,m);(84,i)} / {(18,p);(84,i)}

tormalinderaoestadosemevaremitidotelegramadelempomalosentolaparisfechadoamerpp

eladelosiguientegobiernomexicoenpasdadlovieomcaraepitassiduadaosencaplomadicos

lenairacanfodagoorlenesrecrenentasteseseftrasmesotarafienosegescadbeslecierton

elgueseelcuendrasamtialhesdedarconmatsiculadosmebadoaluesdsossespamaostordosdo

pordoselestositiaciospuesebalyelesestalanocedelsalarzadayocabellosmevacasomded

erasserdomodasmedicandonrentecdoolongueneesmpesdrelesebdralmero

va -> ha {(35,h)}

caplomadicos -> diplomaticos -> {(49,d);(27,i);(44,t)}

tormilinterioestadosemeharemitidotelegramadelempomalosentolaparisfechadoamerpp

elidelosiguientegobiernomexicoenpistadlovieomcaraepitassituadiosendiplomaticos

lenairadanfodagoorlenesrecrenentasteseseftrasmesotarafienosegescadbeslecierton

elgueseelcuentrasamtialhestedarconmatsiculadosmebidoaluestsossespimiostortosto

pordoselestositiaciospuesebalyelesestalanodedelsalirzadayocabellosmevicasomded

erassertomodasmedidandonrentectoolongueneesmpestrelesebtralmero

situadioses -> situaciones -> {(94,c);(77,n)}

diplomaticos -> diplomaticas -> {(33, a)}

dederas ser tomodas medidan don rentecto -> deberan ser tomadas

medidas con respecto ->

{(14,b);(77,n);(33,a);(70,s);(94,c);(92,s);(52,p)}

ebtralmero -> extranjero -> {(41,x);(50,n);(11,j)}

porministerioestadosemeharemitidotelegramadelempajalosespanaparisfechadoamerpp

elicelosiguientegobiernomexicoenpistablovieomcaraepitassituacionesdiplomaticas

lesairadasfadagoorlenesrecresentanteseneftranjesoparafienosegescacbenleciertos

engueseencuentranamtialhentebarcosmatsiculadosmexicoanuestsossespimiosportanto

parcosenestasitiacionpuesebalyenenespananodebensalirzabayocabellonmevicanomdeb

eransertomadasmedidasconrespectoalosgueseenmpentrenenextranjero

espana -> españa (no se considera la ñ)

en pista blovieo m cara epitas -> en vista bloqueo y para evitar ->

{(29,v);(28,q);(22,u);(46,y);(19,p);(29,v);(12,r)}

porministerioestadosemeharemitidotelegramadelempajalorespañaparisfechadoayerpp

elicelosiguientegobiernomexicoenvistabloqueoyparaevitarsituacionesdiplomaticas

lesairadasfadagoorlenesrepresentanteseneftranjeroparafuenosegespacbenlepuertos

engueseencuentranamtualhentebarcosmatriculadosmexicoanuestrosservimiosportanto

parcosenestasituacionpuesebalyenenespañanodebensalirzabayopabellonmevicanoydeb

eransertomadasmedidasconrespectoalosgueseenmpentrenenextranjero

empajalor -> embajador -> {(43,b);(23,d)}

lice -> dice -> {(23,d)}

lesairadas -> desairadas -> {(23,d)}

orlenes -> ordenes -> {(23,d)}

eftranjero -> extranjero -> {(58,x)}

para fue no se gespacben le-> para que no se despachen de->

{(91,q);(82,d);(23,d)}

Page 68: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 4.- Casos de estudio y resultados 68/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

gue -> que -> {(4,q)}

amtualhente -> actualmente -> {(6,c)(75,m)}

que se enmpentren -> que se encuentren -> {(4,q);(6,c)(51,u)}

por ministerio estado se me ha remitido telegrama del embajador españa paris

fechado ayer pue dice lo siguiente gobierno mexico en vista bloqueo y para

evitar situaciones diplomaticas desairadas fa dado ordenes representantes en

extranjero para que no se despachen de puertos en que se encuentran

actualmente barcos matriculados mexico a nuestros servicios por tanto barcos

en esta situacion pue se halyen en españa no deben salir za bayo pabellon

mevicano y deberan ser tomadas medidas con respecto a los que se encuentren en

extranjero

pue -> que -> {(53,q)}

fa -> ha -> {(80,h)}

pue -> que -> {(53,q)}

halyen -> hallen -> {(87,l)}

za -> ya -> {(17,y)}

bayo -> bajo -> {(40,j)}

mevicano -> mexicano -> {(74,x)}

por ministerio estado se me ha remitido telegrama del embajador españa paris

fechado ayer que dice lo siguiente gobierno mexico en vista bloqueo y para

evitar situaciones diplomaticas desairadas ha dado ordenes representantes en

extranjero para que no se despachen de puertos en que se encuentran

actualmente barcos matriculados mexico a nuestros servicios por tanto barcos

en esta situación que se hallen en españa no deben salir ya bajo pabellón

mexicano y deberan ser tomadas medidas con respecto a los que se encuentren en

extranjero

Ta bla de homófonos derivada del cromosoma 11.1.10

a 05 e 85 l 87 q 91 x 58

a 33 f 72 m 18 r 12 x 74

a 54 g 01 m 48 r 34 y 17

a 88 g 42 m 75 r 73 y 46

b 14 g 93 m 89 s 02

b 43 h 07 n 21 s 30

b 62 h 35 n 50 s 70

c 06 h 66 n 77 s 92

c 37 h 80 o 24 t 26

c 64 i 09 o 47 t 44

c 94 i 27 o 67 t 76

d 23 i 59 o 90 u 22

d 49 i 84 p 19 u 51

d 61 j 11 p 25 u 78

d 82 j 40 p 52 u 98

e 20 l 16 q 04 v 29

e 45 l 32 q 28 x 13

e 60 l 69 q 53 x 41

Tabla de homófonos resultado del criptoanálisis 0-2

Page 69: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 5.- Conclusiones y futuros desarrollos 69/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Cap 5.- Conclusiones y futuros desarrollos

Se ha diseñado un procedimiento que permite el descifrado de mensajes cifrados con cinta móvil sin conocer la tabla de homófonos y con resultados óptimos. Dicho procedimiento combina resultados de un Algoritmo Genético (aciertos hasta el 65%) con el criterio de un analista en la proporción de 8 a 2.

¿El método de la cinta móvil se puede considerar un sistema criptográfico seguro?. Es obvio que no alcanza el nivel de fortaleza del método de sustitución por tabla de homófonos convencional (ver cap. 2.4, pág 25) que consigue enmascarar totalmente la frecuencia de uso de los caracteres en el texto plano. La dificultad de atacar este sistema ya se comentó en el capítulo 2.4.2 “Criptoanálisis de los cifrados por sustitución con homófonos”.

El estudio de sistemas clásicos presentado en Capítulo 2, ha tenido como objetivo secundario el analizar los mecanismos de criptoanálisis que los rompían por si se encontraba algo aplicable al Método Español. De todos hemos encontrado alguna técnica de rotura menos de los sistemas de sustitución por tabla de homófonos, de los que hay en Internet en general, y en la bibliografía en particular, un silencio absoluto al respecto.

Si seguimos las Reglas de Kerckhoffs (ver cap. 2) es evidente que el Método Español las cumple parcialmente: la regla 3 relativa a la facilidad de escoger, recordar o modificar la clave (en este método consideramos a la tabla de homófonos la “clave” real) no se cumple. Partiendo de las debilidades analizadas en el Aptdo. 2.4.4, se ha demostrado a lo largo de los capítulos 3 y 4 que tampoco cumple la Regla 1 (no debe existir ninguna forma de recuperar mediante el criptograma el texto inicial o la clave). En términos conceptuales, pués, no es un método seguro.

Pero es que, además, desde las primeras referencias bibliográficas (1894, ver pág. 30 y [7]), es criticado por su inseguridad; problema de inseguridad acrecentado por la dificultad de renovar, modificar y distribuir las tablas y, sobre todo, por la falta de disciplina en la aplicación de las normas de seguridad.

Conocida la tabla, el mecanismo de la cinta móvil no incorpora seguridad adicional dado que en los mensajes se especificaba en abierto la clave que generaba la cinta móvil (“sector X en B”); en el supuesto de no conocer la clave, el criptoanálisis, conociendo la tabla, se reduce a un simple ataque por análisis de frecuencias, dado que el criptograma se deriva, en este caso, de una sustitución simple. La verdadera seguridad viene dada, por tanto, por el desconocimiento de la tabla de homófonos. Pero esta tabla, al tener limitado el número de homófonos a un máximo de cinco por carácter (a veces sólo dos) reduce la eficiencia de la sustitución y en textos largos denuncia la frecuencia de uso habitual en el idioma por mucho que el cifrador elija aleatoriamente los números asignados al carácter plano en su columna de la tabla de homófonos. Además, la “costumbre” de relacionar los homófonos por filas respetando las decenas (una fila, una decena), crea otra debilidad.

Page 70: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 5.- Conclusiones y futuros desarrollos 70/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Una vez hecho el análisis de frecuencias de bigramas y trigramas en el texto cifrado, se ha observado que no es necesario atender a reglas como “tras la ‘q’ siempre va una ‘u’ y tras esta casi siempre una ‘e’ “ o “tras la ’k’, ‘j’, ‘h’, ‘v’, ‘ñ’ siempre sigue una vocal”, puesto que su implementación no incrementaba la eficiencia pero retardaba la ejecución del algoritmo.

Conclusiones de los casos de estudio

La inicialización del AG programada con las limitaciones expuestas en cap. 2.4.4 produce un inmediato acercamiento a valores próximos al óptimo (en 10 reiteraciones), para luego realizar mejoras inapreciables y estancarse a partir de la reiteración 50. El gráfico siguiente plasma este comportamiento mostrando en el eje de abcisas el número de iteraciones y en ordenadas el valor de la función objetivo.

Valor fitness

4,8

5,3

5,8

6,3

6,8

7,3

7,8

8,3

8,8

0 81

6

24

32

40

48

56

64

72

80

88

96

10

41

12

12

0

12

81

36

14

4Valor fitness

Comportamiento del AG 1

No se han apreciado mejoras en el rendimiento del AG a partir de una población de 30 individuos porque las limitaciones impuestas al proceso de reproducción, al tratar de aprovechar las debilidades encontradas en el “método español”, obligan a definir individuos muy similares.

Valores en el parámetro del AG “probabilidad de mutación” superiores al 5% dejan de producir mejoras en el cromosoma.

Cromosomas con mejor valor fitness no tienen porque ser los que generen mayor número de palabras reconocidas en el texto; el encuentro de una palabra no implica que sea correcta en el mensaje final o que esté en el lugar correcto. Esto ya se advertía en la definición de la función objetivo (cap. 3.7).

En el caso 2 se ha usado cinta móvil para el cifrado previo pero ello ha sido indiferente para el proceso de criptoanálisis, que es el mismo seguido en el Caso 1 en el cual no se usó cinta móvil para el cifrado previo.

La tabla de homófonos se relaciona al final de cada caso de estudio y es que no ha sido necesaria “buscarla”. Se consigue el mensaje plano y la tabla de

Page 71: DESENCRIPTADO DE MENSAJES CIFRADOS

Cap 5.- Conclusiones y futuros desarrollos 71/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

homófonos es consecuencia informativa del proceso pero no paso previo para conocer el mensaje final.

Para mensajes de 800 caracteres, el AG proporciona resultados que reconocen hasta un 65% de caracteres en el mensaje final. El trabajo que el analista hace a continuación (descrito en los dos casos de estudio así como el efectuado en dos más que no se exponen) supone un tiempo de unas dos horas para textos de 400 caracteres y una hora con 800 caracteres, dado que el AG incrementa su eficiencia con la longitud del mensaje.

Futuros desarrollos

El principal objetivo del proyecto ha estado en el desarrollo del AG y se ha conseguido que facilite cromosomas con aciertos de hasta el 65%. Por ello, la utilidad de análisis complementaria desarrollada lo ha sido sin más pretensiones que el que “funcione”; no es operativa aún cuando resuelve. Esta utilidad de análisis debería ser capaz de automatizar parte del 35% restante aún considerando que siempre tendrá que intervenir el analista, implementando, por ejemplo:

La “debilidad de la decena”: los homófonos de la columna de una letra están separados siempre por al menos 10 unidades.

La regla empírica de que si en el gen de un cromosoma candidato hay vocal en el cromosoma final también lo habrá.

El reconocimiento de palabras incompletas para sugerir solución al analista.

La separación de palabras conforme van siendo reconocidas.

Se propone como modo de coordinar el AG con esa utilidad de manera eficiente, la aplicación futura de técnicas de “backtraking”27.

27 Backtracking (o búsqueda atrás) es una técnica de programación para hacer búsqueda sistemática a través de todas las configuraciones posibles dentro de un espacio de búsqueda. Para lograr esto, los algoritmos de tipo backtracking construyen posibles soluciones candidatas de manera sistemática. En general, dado una solución candidata S:

1. Verifican si S es solución. Si lo es, hacen algo con ella (depende del problema). 2. Construyen todas las posibles extensiones de S, e invocan recursivamente al algoritmo

con todas ellas.

Page 72: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo A: Tabla de frecuencias de uso aplicada. 72/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Anexo A: Tabla de frecuencias de uso aplicada. Aún pareciendo sencillo el asunto (basta examinar un tratado de

lingüística o de criptología para extraer un tabla de frecuencias), la definición de frecuencias de uso de caracteres en español, como en cualquier idioma, es matizable. Hemos encontrado que:

1. Es diferente el uso escrito del hablado. En el diccionario de la RAE la letra más frecuente es la “a” (14,02%) seguida de la “e” (9,55%), pero en cualquier texto castellano, la frecuencia de las partículas "que", "el", "se", "me", etc. hace que la "e" sea más frecuente. En la lengua hablada el fonema /e/ aparece un 14,67%, seguido de /a/ 12,19%

2. Influyen también la época, la materia, el entorno profesional o social, la región, etc. en la que se emplee el lenguaje.

3. El estilo narrativo es determinante. En el caso particular del mensaje de guerra, por ahorro de recursos, es habitual la redacción en formato telegrama previa al cifrado, lo que implica primar la “r” de los infinitivos.

El gráfico, extraído de un estudio de los profesores Antonio Moren, *Doroteo T. Toledano, *Raúl de la Torre, *Marta Garrote, **José M. Guirao, muestra la relación entre el uso hablado y el escrito. Las primeras 100 sílabas más usadas en español suponen el 78,7% del cuerpo hablado mientras que en el escrito es el 72,5%. En el estudio referido, en la tabla de frecuencias resultante la “a” muestra un 12,27% y 12,89% y la “e” 15,12% y 12,74% respectivamente [22].

Hemos intentado suavizar la incidencia de este problema:

1. Realizando el estudio de frecuencias sobre textos de mensajes de la GC39 agrupados sin espacio entre caracteres ni acentos en el fichero “TextoCalculoFrecuencias.txt” (ver pág. 74).

2. Calculando frecuencias sobre textos militares de la época: Reglamento táctico de Caballería 1926, Reglamento de Intendencia 1952, Reglamento táctico de Infantería 1909.

3. Haciendo el cálculo de frecuencias en tiempo real al inicio de la aplicación. La aplicación lee ese fichero previamente. El usuario puede indicar de esta manera sobre qué texto quiere hacer el cálculo de las frecuencias.

En la tabla que sigue se relacionan los porcentajes que obtenemos con el método expuesto (que son los que usa el algoritmo de la aplicación) analizando letras, digramas y trigramas y, como complemento a la discusión expuesta, se compara con los porcentajes deducidos sobre “La Regenta” de Leopoldo Alias “Clarín”, novela escrita en 1884, a partir de estudio y discusión descritos en

Page 73: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo A: Tabla de frecuencias de uso aplicada. 73/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

http://www.kriptopolis.org/frecuencia-letras-castellano donde, además, se añade un análisis de frecuencias sobre el Quijote.

Análisis de frecuencias sobre…

“TextoCalculoFrecuencias.txt” La Regenta a 13,341% de 2,731% ent 0,657% a 13,994%

e 13,227% en 2,465% sde 0,657% e 12,829%

o 8,707% as 2,151% ade 0,647% o 9,317%

n 7,403% er 2,008% del 0,647% s 7,374%

s 7,260% es 1,979% con 0,552% r 6,496%

r 6,832% os 1,751% ien 0,495% n 6,375%

i 6,575% la 1,694% ode 0,476% i 6,280%

d 5,719% ad 1,684% que 0,476% l 6,079%

l 5,462% on 1,646% cio 0,466% d 4,892%

c 4,596% el 1,532% ela 0,466% u 4,197%

t 4,520% al 1,513% nte 0,466% t 3,926%

u 3,549% se 1,427% ria 0,466% c 3,810%

m 2,693% ar 1,408% ter 0,457% m 2,657%

p 2,122% do 1,389% dos 0,438% p 2,473%

b 1,513% an 1,370% ene 0,438% b 1,940%

g 1,075% re 1,266% eri 0,428% q 1,294%

v 1,018% nt 1,247% ado 0,419% v 1,128%

y 0,923% ra 1,209% ada 0,409% g 1,106%

f 0,856% te 1,171% ero 0,409% h 1,004%

h 0,828% ca 1,152% ese 0,409% y 0,991%

q 0,628% ci 1,104% ion 0,409% f 0,615%

z 0,447% ue 1,085% est 0,400% j 0,468%

j 0,295% ta 1,075% ndo 0,390% z 0,404%

ñ 0,247% co 1,037% los 0,371% ñ 0,255%

x 0,105% ro 1,018% sen 0,362% x 0,089%

k 0,057% ne 0,990% sta 0,352% k 0,004%

w 0,000% ri 0,980% ido 0,343% w 0,001%

in 0,971% one 0,343%

na 0,961% ose 0,343%

or 0,961% por 0,343%

ia 0,952% des 0,324%

st 0,923% ase 0,314%

ac 0,914% era 0,314%

nd 0,904% cas 0,305%

ma 0,847% esd 0,305%

lo 0,837% nto 0,305%

ec 0,799% las 0,295%

to 0,790% nde 0,295%

ie 0,771% res 0,295%

da 0,752% aci 0,286%

sd 0,752% ala 0,286%

sa 0,742% ias 0,286%

io 0,733% and 0,276%

un 0,723% das 0,276%

od 0,704% ede 0,276%

tr 0,695% nes 0,276%

nc 0,638% asa 0,266%

le 0,628% enc 0,266%

Page 74: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo A: Tabla de frecuencias de uso aplicada. 74/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

0,000%

2,000%

4,000%

6,000%

8,000%

10,000%

12,000%

14,000%

a e o n s r i d l c t u m p b g v y f h q z j ñ x k w

Análisis de Frecuencias

“TextoCalculoFrecuencias.txt” La Regenta

Extracto del texto de la época sobre el que se realiza el análisis de frecuencias (fichero TextoCalculoFrecuencias.txt). Usado en la inicialización por defecto del AG y extraído del proyecto del Sr. Gascón (2009-10) que ya lo usaba con la misma finalidad: tiene 10.509 caracteres y está compuesto por el texto de varios telegramas.

Loscuatrobatallonesdelabrigadaefectuaranmañanaunejercicioconsusp

uestotacticosaliendodespuesdelafuerzadeldesayunoyregresandoasusb

asesantesdelahoradelasegundacomidalaprimerasedistribuiraenelcamp

oelsegundoycuartobatallonsaldrandelacinetatomandodireccionesdist

intasyelprimeroytercerbatallonesdesdestalinmartaenlamismaformato

dosellosefectuaranunrecorridodeveinticincokilometroscomprendidoe

lregresoestableciendodurantelamarchalosserviciosdefranqueoexplor

acionyseguridadqueseindiquenenlosreglamentostacticosydecampañalo

sjefesdebatallonterminadoelsupuestoharanunabrevememoriahaciendoc

onstarenellaeltiempoinvertidoenlamarchayenelejerciciotacticopunt

odondesehadesarrolladoasicomotambiencualquierdeficienciaobservad

adurantesucursolafuerza… … …

(siguen 4 páginas de texto)

…dedicadasalafabricaciondematerialdeguerraentreotrasdespuesdelas

masconocidasestanlafabricaderadiadoresrocaencastelldefelalacasas

bampyunafabricadebombasdemanoenarenyademartambiensetrabajamuchoe

nelparquedeartilleriadondetrabajanunosquinientosobrerosyenlaanti

guacasadaviddedicadatambienadepositosdematerialbelicoplanamayor.

Page 75: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo B: Método Kasiski (ataque a un cifrado polialfabético) 75/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Anexo B: Método Kasiski (ataque a un cifrado polialfabético)

En 1863, Friedrich Kasiski (oficial prusiano) publicó un libro sobre criptografía, Die Geheimschriften und die Dechiffrierkunst ("La escritura secreta y el arte del descifrado"). Ésta fue la primera publicación sobre criptoanálisis aplicado a los cifrados de sustitución polialfabéticos, especialmente el cifrado de Vigenère, desarrollando lo que luego se ha llamado Método Kasiski. Dado que el criptoanálisis estadístico directo no funciona porque la distribución de las letras originales está suavizada, se basa en que [3]:

1. A lo largo de un texto suficientemente largo ciertas secuencias de caracteres aparecen muchas veces en el texto plano y consecuentemente los textos cifrados con Vigenère tienen las correspondientes secuencias de letras cifradas también muy repetidas.

2. La distancia entre las cadenas más repetidas en el texto cifrado debe ser un múltiplo de la longitud de la clave K y un buen candidato a longitud será el máximo común divisor de los valores más repetidos en las distancias encontradas.

3. Dividimos el criptograma en L subcriptogramas que entonces han sido cifrados por una misma letra de la clave y en cada subcriptograma hacemos un ataque simple ahora de tipo estadístico monoalfabético.

4. La idea es buscar ahora a través de los tres caracteres más frecuentes en cada subcriptograma las posiciones relativas de las letras A, E y O que en castellano están separadas por 4 y 11 espacios. La letra de la posición que ocupe la letra A (A = 0) será entonces la letra clave correspondiente.

5. Si la posición relativa de la letra A es el valor 0, entonces la letra E está cuatro espacios a la derecha de la A (m+4 mod 26) y la letra O está 15 espacios a la derecha de la letra A (m+15 mod 26) y a 11 de la letra E.

6. Buscaremos en cada subcriptograma Ci las tres letras más frecuentes y que

cumplan además con esa distribución: 0 +4 +11 mod 26.

7. Es suficiente contar con estas tres letras para que el ataque prospere. No obstante, se puede afinar un poco más el ataque si tomamos en cuenta la siguiente letra frecuente en castellano S, en la posición (m+19) mod 26.

Veamos un ejemplo de esta metodología [3]:

Sea el criptograma C de 404 caracteres que vamos a criptoanalizar el siguiente:

PBVRQ VICAD SKAÑS DETSJ PSIED BGGMP SLRPW RÑPWY EDSDE ÑDRDP CRCPQ MNPWK

UBZVS FNVRD MTIPW UEQVV CBOVN UEDIF QLONM WNUVR SEIKA ZYEAC EYEDS ETFPH

LBHGU ÑESOM EHLBX VAEEP UÑELI SEVEF WHUNM CLPQP MBRRN BPVIÑ MTIBV VEÑID

ANSJA MTJOK MDODS ELPWI UFOZM QMVNF OHASE SRJWR SFQCO TWVMB JGRPW VSUEX

INQRS JEUEM GGRBD GNNIL AGSJI DSVSU EEINT GRUEE TFGGM PORDF OGTSS TOSEQ

OÑTGR RYVLP WJIFW XOTGG RPQRR JSKET XRNBL ZETGG NEMUO TXJAT ORVJH RSFHV

NUEJI BCHAS EHEUE UOTIE FFGYA TGGMP IKTBW UEÑEN IEEU.

Se observan las siguientes cadenas (subrayadas) en el criptograma:

Page 76: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo B: Método Kasiski (ataque a un cifrado polialfabético) 76/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

3 cadenas GGMP, separadas por 256 y 104 posiciones.

2 cadenas YEDS, separadas por 72 espacios.

2 cadenas HASE, separadas por 156 espacios.

2 cadenas VSUE, separadas por 32 espacios

Luego el período o longitud de la clave puede ser el m.c.d. (256, 104, 72, 156, 32) = 4. La clave tendrá cuatro caracteres, por lo tanto tomaremos del criptograma el carácter 1º, el 5º, el 9º, etc. para formar el primer subcriptograma CA; luego el 2º, el 6º, el 10º, etc. para formar el subcriptograma CB, y lo mismo para subcriptogramas CC y CD.

Tenemos ahora 4 subcriptogramas de sólo 101 letras c/u (muy importante tenerlo en cuenta en las estadísticas) que han sido cifrados con la misma letra de la clave:

CA = PQAAEPDMRÑEEDCNUSRIECNIONSAAETLUOLAUIEULMNIIEAAOOLU

MNARSOMRSISERNAISIRTMDTOORLIORRENENOAVSNIAEOFAMTEI

CB = BVDÑTSBPPPDÑPPPBFDPQBUFNUEZCDFBÑMBEÑSFNPBBÑBÑNMKDPF

QFSJFTBPUNJMBNGDUNUFPFSSÑRPFTPJTBTETTJFUBSUTFTPBÑE

CC = VISSSIGSWWSDCQWZNMWVOEQMVIYESPHEEXEEEWMQRPMVISTMSWO

MOEWQWJWEQEGDISSETEGOOSETYWWGQSXLGMXOHHECEEIGGIWEE

CD = RCKDJEGLRYDRRMKVVTUVVDLWRKEYEHGSHVPLVHCPRVTVDJJDEIZ

VHSRCVGVXRUGGLJVEGEGRGTQGVJXGRKRZGUJRRVJHHUEYGKUNU

La frecuencia relativa observada en cada uno de los subcriptogramas es:

A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z

CA 12 0 2 3 12 1 0 0 11 0 0 5 6 9 1 10 2 1 9 7 4 5 1 0 0 0 0

CB 0 14 1 6 4 12 1 0 0 4 1 0 3 6 8 0 14 2 1 6 9 7 1 0 0 0 1

CC 0 0 2 2 18 0 7 3 7 1 0 1 7 1 0 6 2 6 1 12 3 0 4 12 3 2 1

CD 0 0 3 5 7 0 12 6 1 7 5 4 1 1 0 0 2 1 13 2 3 6 14 1 2 3 2

Luego, la letra más frecuente del subcriptograma debería corresponder a la letra E del texto en claro, la segunda a la letra A y la tercera a la letra O.

La regla AEO en el ataque de Kasiski

1. Si la posición relativa de la letra A es el valor 0, entonces la letra E está cuatro espacios a la derecha de la A (m+4) mod 27 y la letra O está 15 espacios a la derecha de la letra A (m+15) mod 27 y a 11 de la letra E.

2. Buscaremos en cada subcriptograma Ci las tres letras más frecuentes y que

cumplan además con esa distribución: 0 +4 +11 mod 27.

3. Es suficiente contar con estas tres letras para que el ataque prospere. No obstante, podemos afinar un poco más el ataque si tomamos en cuenta la siguiente letra frecuente en castellano S, en la posición (m+19) mod 27

En el ejemplo para CA se observa que la única solución que cumple con esto es la que coincide la AEO (12, 12, 10) luego la letra clave sería la A. Para CB elegimos BFP (14, 12, 14) por lo que la letra clave sería B. Para CC elegimos EIS (18, 7, 12) por lo que la letra clave sería E. Para CD elegimos RVG (13, 14, 12) por lo que la letra clave sería R.

Page 77: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo B: Método Kasiski (ataque a un cifrado polialfabético) 77/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Con la clave K = ABER obtenemos el texto plano siguiente:

PARAQ UELAC OSANO MESOR PREND ACOMO OTROS AÑOSH ECOME NZADO YACON

UNOSS UAVES EJERC ICIOS DEPRE CALEN TAMIE NTOMI FNTRA SDESA YUNAB

AHECO NTEMP LADOU NABOL APLAT EADAY UNATI RAEEE SPUMI LLONY MAÑAN

AMEIN ICIAR EENEM AMORA LPROJ IMOCO NLOSQ UELIM PIENE LPARA BRISA

SENLO SSEMA FOROS ESTAG IMNAS IADEL CORAZ ONMET AFORI COEST ANIMP

ORTAN TECOM OLADE LOTRO CORAZ ONPOR QUELO SRIES GOSCO RONAR IOSES

TANAH IESCO NDIDO STRAS LAVID ASEDE NTARI AYPAR APETA DOSEN FECHA

SCOMO ESTAS DENAV IDAD

“Para que la cosa no me sorprenda como otros años he comenzado ya con unos suaves ejercicios...”.

Page 78: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo C: Códigos de Baudot 78/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Anexo C: Códigos de Baudot El código Baudot fue inventado por Emile Baudot en 1874 y se

utilizó en las primeras transmisiones telegráficas y radioeléctricas como Alfabeto Internacional de Telegrafía Nº 1. Se trata de un código de 5 bits que representa 32 caracteres distintos (2^5); dos de ellos permiten conmutar entre dos grupos denominados “letras” y “signos”. “Letras” contiene el alfabeto completo de la A a la Z y algunos caracteres especiales como los de cambio a grupo de signos o cambio a letras, hasta un total de 32; “signos” contiene las cifras del 0 al 9, los signos de puntuación y caracteres especiales hasta un total de 26. Total 58 caracteres. La siguiente tabla muestra el código Baudot y la operación XOR que utiliza el sistema de cifrado Vernam:

Código de Baudot XOR

Bit de salida Signos letras

Secuencia Bit letras* Mensaje Clave

- A 00011 A 0 0 0

? B 11001 B 0 1 1

: C 01110 C 1 0 1

$ D 01001 D 1 1 0

3 E 00001 E

! F 01101 F

& G 11010 G

# H 10100 H

8 I 00110 I

´ J 01011 J

( K 01111 K

) L 10010 L

. M 11100 M

, N 01100 N

9 O 11000 O

0 P 10110 P

1 Q 10111 Q

4 R 01010 R

` S 00101 S

5 T 10000 T

7 U 00111 U

; o = V 11110 V

2 W 10011 W

/ X 11101 X

6 Y 10101 Y

+ o " Z 10001 Z

ret. carro 01000 1 Para el ejemplo desarrollado en cap 2.2.6 “cifrado Vernam” hemos representado los caracteres especiales de la izquierda con los dígitos 1 a 6, usando para el cifrado la columna adjunta “letras*”

cambio linea 00010 2

cambio a letras 11111 3

cambio a signos 11011 4

espacio 00100 5

blanco 00000 6

Page 79: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo D: Cifra con ENIGMA 79/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Anexo D: Cifra con ENIGMA

Entrando en http://www.enigmaco.de/enigma/enigma.swf encontramos una aplicación SW que en tiempo real muestra el movimiento de los rotores de ENIGMA v4.3. La imagen corresponde al estado de los rotores tras la cifra del último carácter del siguiente mensaje (entrada “O” salida “K”:

“Difícil parece romper el cifrado homofónico con cinta móvil pero mas difícil pareció el cifrado con ENIGMA y se rompió”

Cifrado:

VFKVG OZYTL KESKX QEGWL UMOVN PHKIN EXSUO PVNGF YRCAF IBPUI

AZWKG HXBJT LDONQ VXVFF OSCVG JLWGZ ZJPMU BWAMP FSYCB SSTK

Page 80: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo E: El Método Español según Carmona: año 1894. 80/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Anexo E: El Método Español según Carmona: año 1894. Por la dificultad de encontrar el Tratado de Criptografía de J. G. Carmona del

año 1894 referido en [7], una vez localizado en la Biblioteca Nacional, adjuntamos algunas imágenes de la publicación que se refieren al Método de la cinta móvil.

Método Oficial de Guerra según Carmona 1

Page 81: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo E: El Método Español según Carmona: año 1894. 81/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Portadilla del Tratado de Carmona 1

Carmona: críticas al método 1

Page 82: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo F: Claves y tablas de homófonos de la GC36; ejemplos. 82/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Anexo F: Claves y tablas de homófonos de la GC36; ejemplos.

Clave Bocho [9]

Utilizada durante los primeros meses de 1937 para comunicaciones en clave del Ministro de Marina y Aire, Indalecio Prieto, con el Presidente del Gobierno Vasco y con el Delegado del Gobierno en Santander.

Clave BOCHO

Ministro de Marina y Aire con Gobierno Vasco y Delegado en Santander

REPUBLICANA Febrero-Mayo 37

X R K B L H C F T M D Q

A P U N Q E S X G J K B I R D O V Z Y F CH M H C L T

05 04 02 01 09 03 08 00 07 06

19 13 11 15 14 12 10 17 18 16

25 22 21 28 20 27 23 24 29 26

33 30 39 34 38 36 31 35 37 32

45 41 42 40 43 49 47 46 48 44

54 52 51 50 53 58 59 55 57 56

60 63 68 62 61 67 65 66 64 69

78 77 70 74 79 71 73 72 75 76

88 85 84 82 81 83 86 89 80 87

98 91 92 93 96 90 99 95 97 94

Clave Bocho 0-1

La primera fila indica el alfabeto fijo y la segunda la cinta móvil.

Clave X [12]

El 8 de marzo de 1937, el carguero republicano Mar Cantábrico fue apresado por el crucero nacional Canarias. El Mar Cantábrico, procedente de América, se dirigía a Santander desde Méjico cargado con gran cantidad de material bélico. Su captura no sólo significó una gran pérdida desde el punto de vista meramente militar, sino también un fuerte golpe a la moral de los gobiernos autónomos del Norte. El Mar Cantábrico llevaba instrucciones para el uso de la radio, lo que incluía una clave (clave X) para comunicarse con Madrid. Algunos autores afirman que el desciframiento de dicha clave por parte de los servicios criptoanalíticos franquistas, jugó un papel fundamental en el desenlace de este caso.

Santuario de la Virgen de la Cabeza [11]

Clave X (caso "Mar Cantábrico") A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

01 09 03 08 07 02 05 06 04

10 14 15 17 13 19 12 18 16 11

29 27 22 20 23 26 25

30 31 35 37 33 34 32 36 38 39

49 40 48 46 45 42 44 43 47 41

51 50 53 56 58 54

69 67 66 65 63 61 60 62 64 68

79 70 71 72 75 77 74 73 76 78

89 81 85 87 86 82

Clave X 1

Page 83: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo F: Claves y tablas de homófonos de la GC36; ejemplos. 83/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Tabla utilizada por los Guardias Civiles sitiados en el Santuario de la Virgen de la Cabeza (08/1936-01/05/1937).

A B C D E F G H Y J L M N O P Q R S T U

53 13 49 31 27 24 16 11 40 22 13 15 96 84 75 71 32 28 19 74

91 70 96 43 59 66 39 33 54 44

Servicio de Estudios Históricos de la Guardia Civil

Clave LEALTAD [11]

Archivo General Militar de Ávila.

Clave LUNA con “código de trinchera”

Clave LUNA

SUSTITUCIÓN HOMOFÓNICA con Código de Trinchera [11]

Republicana IV C. de Ejérc.

A B C D E F G H I J K L M N Ñ O P Q R S T U V X Y Z *

09 01 00 08 07 06 03

11 18 13 19 17 12

25 28 24 27 26 29 21 20

39 31 30 34 35 38 37

49 47 42 48 41 45 43

54 57 51 59 50 58 53 56

69 62 61 63 66 60 67 68

73 70 76 72 77 78

86 80 81 84 87 82 85

96 99 92 98 94 91 91

Clave Luna 1

Código de trinchera

Grupo Valor

02 Avanzo sin encontrar resistencia

04 Avanzo venciendo resistencia

10 Me encuentro detenido en

22 He conseguido el objetivo

32 Me repliego sobre

33 Me encuentro en situación comprometida en

40 El enemigo se hace fuerte en

44 El enemigo contraataca sobre

Clave LEALTAD

Sustitución HOMOFÓNICA 17 de marzo de 1939

Republicana XIV División

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

08 09 04 07 05 06 01 02 03

11 10 16 19 17 14 13 12 16 15

28 20 24 29 25 27 28 25 21 23

32 36 31 37 33 30 34 35 39 38

44 41 48 46 47 42 43 49 40 45

50 55 53 51 54 52 58 57 59 56

64 61 65 66 69 62 63 62 60 67

70 77 73 71 76 72 75 78 79 74

83 89 84 86 85 87 88 82 80 81

92 91 90 99 96 93 98 95 97 94

Clave Lealtad 1

Page 84: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo F: Claves y tablas de homófonos de la GC36; ejemplos. 84/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

46 El enemigo se retira a

71 Necesito refuerzos

74 Necesito municiones

79 Necesito tiro de artillería sobre

83 Recibo fuego de artillería propia

Archivo General Militar de Ávila. Facilitada por: Julián Dueñas Méndez. El * representa un valor nulo y se utiliza para completar grupos al final del telegrama.

Clave GENERAL [11]

De 1 de abril de 1939. Utilizada por: Presidente Consejo General de Defensa, Consejero Estado, Consejero Defensa, Director General de Seguridad y Gobernadores Civiles.

Clave GENERAL TIPO DE CLAVE: CINTA MOVIL REPUBLICANA

A B C D E F G H I J L M N O P Q R S T U V X Y Z

X Q T V R U S Z P Y L I O M H N A D C F J B G E

08 03 05 07 01 02 00 04 06 09

12 15 19 18 17 16 11 13 14 10

24 20 26 21 28 23 25 29 22 27

31 30 39 38 37 32 36 35 34 33

40 48 41 43 49 46 42 47 44 45

50 59 51 58 56 57 55 54 53 52

66 60 62 69 68 61 67 65 63 64

76 77 78 71 75 70 74 73 79 72

80 88 89 87 86 84 85 83 82 81

94 96 98 92 90 93 91 99 97

Clave General 1

Fuente : Fundación Francisco Largo Caballero

Page 85: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo F: Claves y tablas de homófonos de la GC36; ejemplos. 85/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Ejemplo de parte de envío de telegrama cifrado

Page 86: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo G- Planificación y Presupuesto 86/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Anexo G- Planificación y Presupuesto

Page 87: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo G- Planificación y Presupuesto 87/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Page 88: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 88/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Anexo H.- Código fuente

Main

// SCD4.cpp: define el punto de entrada de la aplicación de consola. // #include "stdafx.h" #include <stdio.h> #include <conio.h> #include <cstdio> #include <cstdlib> #include <cstring> #include <string> #include <vector> #include <algorithm> #include <cmath> #include "ga\GASimpleGA.h" //vamos a usar el simple GA #include "ga\std_stream.h" //Ya incluido en CClave.h #include "CClave.h" #include "Ngramas.h" #include "Pdiccionarios.h" #define cout STD_COUT

using namespace std; short MostrarMenu(short estado); string CargarTexto(string texto); vector<short> CargarTextoCifrado(); vector<short> limpiar(vector<short> cadena); vector<vector<char> > GenerarTablaHomofonosInversa(vector<short>, vector<short>, vector

<float>, float); //Texto cifrado y vector de valores numéricos void ProcesarAG(vector<float>, vector<CNgramas>, vector<CNgramas>, vector<short>, vector <short>, vector<vector<char> >, int, const char**, const char**, vector<int>,

short); int _tmain(int argc, _TCHAR* argv[]) {

short estado = 0; short opcion, correcto, longitud; short disable_auto = 0; string texto_frecuencias; CNgramas analiza_ngramas; CPdiccionarios compone_diccionario; vector<float> fre_letras; vector<CNgramas> fre_bigramas; vector<CNgramas> fre_trigramas; vector<short> texto_cifrado; vector<short> valores_texto; vector<vector<char> > tabla_homofonos_inversa; system("TITLE SCD v0.1"); do {

opcion = MostrarMenu(estado); //printf("%d",opcion); switch (opcion % 10) { case 1: if(estado == 0) {

disable_auto = 1; texto_frecuencias = CargarTexto("TextoCalculoFrecuencias"); estado = 1; printf("Texto hist%crico cargado\n", 162); } else

printf("Texto hist%crico YA cargado\n", 162); break; case 2: if(estado == 1) {

fre_letras = analiza_ngramas.Contar(1, texto_frecuencias.c_str());

Page 89: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 89/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

fre_bigramas = analiza_ngramas.Analiza_ngramas(2, texto_frecuencias.c_str

()); fre_trigramas = analiza_ngramas.Analiza_ngramas(3, texto_frecuencias.c_str

()); estado = 2; printf("Frecuencias analizadas\n"); } else

printf("Frecuencias YA analizadas\n"); break; case 3: if(estado == 2) {

texto_cifrado = CargarTextoCifrado(); //Trabajamos directamente con un texto cifrado

valores_texto = texto_cifrado; //Sacamos un vector con los distintos números hallados en el texto

sort(valores_texto.begin(), valores_texto.end()); valores_texto = limpiar(valores_texto); printf("Valores distintos detectados:\n"); for(unsigned int a = 0; a < valores_texto.size(); a++) printf("%d ", valores_texto[a]); printf("\n"); printf("\nValores distintos del texto: %d\n", valores_texto.size()); tabla_homofonos_inversa = GenerarTablaHomofonosInversa(texto_cifrado,

valores_texto, fre_letras, 0.2); float media = 0; printf("\nEspacio de búsqueda:\n"); for(unsigned short i = 0; i < tabla_homofonos_inversa.size(); i++) {

printf("%02d: ", valores_texto[i]); for(unsigned short j = 0; j < tabla_homofonos_inversa[i].size(); j++) {

printf("%c ", tabla_homofonos_inversa[i][j]); media++; }

printf("\n"); }

media /= tabla_homofonos_inversa.size(); printf("\nLa media de letras posibles asignadas a cada homófono es: %5.2f\

n", media); printf("El porcentaje de recducción del espacio de búsqueda es: %0.2f\n",

1-media/27); estado = 3; printf("Texto cifrado cargado\n"); } else

printf("Texto cifrado YA cargado\n"); break; case 4: if(estado == 3) { do{

printf("\n\nEspecifique la longitud base del filtro: "); fflush(stdin); correcto = scanf_s("%hd", &longitud); }while(!correcto); ifstream f0("Diccionarios\\diccionario_completo.txt"); if (f0.fail()) {

printf("Diccionario no encontrado. Generando....\n"); //Carga los listados eliminando los acentos y los procesa limpiando y generando un índice

compone_diccionario.CargarListado("base",0); compone_diccionario.CargarListado("lista_1",0); compone_diccionario.CargarListado("lista_2",0); compone_diccionario.ProcesarListado(); } else

printf("Diccionario encontrado. Cargando....\n"); //Carga el diccionario preprocesado y el índice

Page 90: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 90/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

compone_diccionario.CargarListado("diccionario_completo",1,longitud); compone_diccionario.CargarIndice(longitud); estado = 4; printf("Diccionario e %cndice procesados\n", 'í'); } else

printf("Diccionario e %cndice YA procesados\n", 'í'); break; case 5: if(estado >= 4) { ProcesarAG(fre_letras, fre_bigramas, fre_trigramas, texto_cifrado, valores_texto, tabla_homofonos_inversa, longitud, compone_diccionario.DevolverDiccionarioCharFormat(), compone_diccionario.DevolverIndiceCharFormat(), compone_diccionario.DevolverValoresIndice(),

opcion/10); //ProcesarAG(fre_letras, fre_bigramas, fre_trigramas, texto_cifrado,

valores_texto); estado = 5; }

break; case 6:

printf("\n\nSaliendo... Gracias por utilizar la aplicaci%cn\n",162); break; default: if(!disable_auto) { //1

texto_frecuencias = CargarTexto("Texto largo"); printf("Texto hist%crico cargado\n", 162); //2

fre_letras = analiza_ngramas.Contar(1, texto_frecuencias.c_str()); fre_bigramas = analiza_ngramas.Analiza_ngramas(2, texto_frecuencias.c_str

()); fre_trigramas = analiza_ngramas.Analiza_ngramas(3, texto_frecuencias.c_str

()); printf("Frecuencias analizadas\n"); //3

texto_cifrado = CargarTextoCifrado(); //Trabajamos directamente con un texto cifrado

valores_texto = texto_cifrado; //Sacamos un vector con los distintos números hallados en el texto

sort(valores_texto.begin(), valores_texto.end()); valores_texto = limpiar(valores_texto); printf("Valores distintos detectados:\n"); for(unsigned int a = 0; a < valores_texto.size(); a++) printf("%d ", valores_texto[a]); printf("\n"); printf("\nValores distintos del texto: %d\n", valores_texto.size()); vector<vector<char> > tabla_homofonos_inversa =

GenerarTablaHomofonosInversa(texto_cifrado, valores_texto, fre_letras, 0.2); float media = 0; printf("\nEspacio de búsqueda:\n"); for(unsigned short i = 0; i < tabla_homofonos_inversa.size(); i++) {

printf("%02d: ", valores_texto[i]); for(unsigned short j = 0; j < tabla_homofonos_inversa[i].size(); j++) {

printf("%c ", tabla_homofonos_inversa[i][j]); media++; }

printf("\n"); }

media /= tabla_homofonos_inversa.size(); printf("\nLa media de letras posibles asignadas a cada homófono es: %5.2f\

n", media); printf("El porcentaje de recducción del espacio de búsqueda es: %0.2f\n",

1-media/27); //4

longitud = 5;

Page 91: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 91/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

ifstream f0("Diccionarios\\diccionario_completo.txt"); if (f0.fail()) {

printf("Diccionario no encontrado. Generando....\n"); //Carga los listados eliminando los acentos y los procesa limpiando y generando un índice

compone_diccionario.CargarListado("base",0); compone_diccionario.CargarListado("lista_1",0); compone_diccionario.CargarListado("lista_2",0); compone_diccionario.ProcesarListado(); } else

printf("Diccionario encontrado. Cargando....\n"); //Carga el diccionario preprocesado y el índice

compone_diccionario.CargarListado("diccionario_completo",1,longitud); compone_diccionario.CargarIndice(longitud); printf("Diccionario e %cndice procesados\n", 'í'); //5 ProcesarAG(fre_letras, fre_bigramas, fre_trigramas, texto_cifrado, valores_texto, tabla_homofonos_inversa, longitud, compone_diccionario.DevolverDiccionarioCharFormat(), compone_diccionario.DevolverIndiceCharFormat(), compone_diccionario.DevolverValoresIndice(),

5); //ProcesarAG(fre_letras, fre_bigramas, fre_trigramas, texto_cifrado,

valores_texto); estado = 5; }

break; }

fflush(stdin); printf("Pulse una tecla para continuar...\n"); _getch(); fflush(stdin); }while(opcion != 6); //printf("Saliendo...\n"); return 0; } short MostrarMenu(short estado) { ... } string CargarTexto(string texto) {

string str, cadena; char direccion[80] = "Textos\\"; strcat_s(direccion, texto.c_str()); strcat_s(direccion,".txt"); //ifstream f0("Textos\\" + texto + ".txt"); ifstream f0(direccion); if (!f0.fail()) { while (!f0.eof()) {

f0 >> str; cadena+=str; }

f0.close(); }

return cadena; } vector<short> CargarTextoCifrado() {

string str; vector<short> cadena; ifstream f0("Textos\\Texto cifrado.txt"); if (!f0.fail()) { while (!f0.eof()) {

f0 >> str; cadena.push_back(atoi(str.c_str())); }

f0.close(); }

Page 92: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 92/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

return cadena; } vector<vector<char> > GenerarTablaHomofonosInversa(vector<short> texto_cifrado, vector <short> vector_valores, vector<float> fre_letras, float margen) {

vector<vector<char> > tabla_homofonos_inversa; vector<char> columna_homofonos_inversa; vector<float> fre_num, fre_num_por_2, fre_num_por_3, fre_num_por_4,

fre_num_por_5; float error, error2, error3, error4, error5; int cuenta; char abecedario[29] = "abcdefghijklmnopqrstuvwxyzñ"; //Para cada valor del vector_valores contar cuantas veces aparece en el texto cifrado, hallar la frecuencia relativa del número y de las posibles letras asociadas a dicho número

for(unsigned short i = 0; i < vector_valores.size(); i++) {

cuenta = count(texto_cifrado.begin(), texto_cifrado.end(), vector_valores[i]); fre_num.push_back(cuenta/(float)texto_cifrado.size()); fre_num_por_2.push_back(fre_num[i]*2); fre_num_por_3.push_back(fre_num[i]*3); fre_num_por_4.push_back(fre_num[i]*4); fre_num_por_5.push_back(fre_num[i]*5); } //Comparamos las frecuencia de cada número con las de las letras

for(unsigned short i = 0; i < vector_valores.size(); i++) //Cogemos un número {

columna_homofonos_inversa.clear(); //27 con 'ñ', 26 sin 'ñ'

for(unsigned short j = 0; j < 26; j++) //Se compara con las letras {

error = abs(fre_num[i]-fre_letras[j]); error2 = abs(fre_num_por_2[i]-fre_letras[j]); error3 = abs(fre_num_por_3[i]-fre_letras[j]); error4 = abs(fre_num_por_4[i]-fre_letras[j]); error5 = abs(fre_num_por_5[i]-fre_letras[j]); if(error <= fre_num[i]*margen || error2 <= fre_num_por_2[i]*margen || error3 <= fre_num_por_3[i]*margen || error4 <= fre_num_por_4[i]*margen || error5 <= fre_num_por_5[i]*margen) {

columna_homofonos_inversa.push_back(abecedario[j]); } }

tabla_homofonos_inversa.push_back(columna_homofonos_inversa); }

return tabla_homofonos_inversa; } vector<short> limpiar(vector<short> cadena) {

for(unsigned int i = cadena.size() - 1; i > 0; i--) if(cadena[i - 1] == cadena[i])

cadena.erase(cadena.begin() + i); return cadena; } void ProcesarAG(vector<float> fre_letras, vector<CNgramas> fre_bigramas, vector<CNgramas> fre_trigramas, vector<short> texto_cifrado, vector<short> valores_texto, vector<vector<char> > tabla_homofonos_inversa, int longitud, const char ** diccionario, const char **indice_str, vector<int> indice_num, short modo) {

int popsize = 30; //30 int ngen = 1000; //400 float pmut = 0.05; float pcross = 0.95; CClave genoma(fre_letras, fre_bigramas, fre_trigramas, texto_cifrado, valores_texto,

Page 93: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 93/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

tabla_homofonos_inversa,longitud, diccionario, indice_str, indice_num, modo); GARandomSeed(69); GASimpleGA ga(genoma); ga.minimize(); ga.populationSize(popsize); //ga.TerminateUponConvergence(0.09); ga.nGenerations(ngen); ga.pMutation(pmut); ga.pCrossover(pcross); //ga.recordDiversity(gaTrue); //ga.scoreFilename("DatosAG.txt"); //ga.scoreFrequency(5); // keep the scores of every 10th generation //ga.flushFrequency(50); //write to disk cout << ga.generation(); //ga.selectScores(GAStatistics::AllScores); ga.evolve(); // Now we print out the best genome that the GA found. cout << "\nEl algoritmo ha encontrado la siguiente clave:\n\n" << ga.statistics().

bestIndividual() << "\n"; CClave &clave=(CClave &)ga.statistics().bestIndividual(); float error_clave = clave.score(); string texto = clave.getTexto(); cout << texto << endl;

}

Ngramas

#include "StdAfx.h" #include "Ngramas.h" CNgramas::CNgramas(void) {

ngrama = (char *) malloc(20 * sizeof(char)); strcpy_s(ngrama,20,""); frec_ngrama = 0; } CNgramas::CNgramas(char a, char b) {

ngrama = (char *) malloc(3 * sizeof(char)); ngrama[0] = a; ngrama[1] = b; ngrama[2] = '\0'; frec_ngrama = 0; } CNgramas::CNgramas(char a, char b, float f) {

ngrama = (char *) malloc(3 * sizeof(char)); ngrama[0] = a; ngrama[1] = b; ngrama[2] = '\0'; frec_ngrama = f; } CNgramas::CNgramas(char a, char b, char c) {

ngrama = (char *) malloc(4 * sizeof(char)); ngrama[0] = a; ngrama[1] = b; ngrama[2] = c; ngrama[3] = '\0'; frec_ngrama = 0; } CNgramas::CNgramas(char a, char b, char c, float f) {

ngrama = (char *) malloc(4 * sizeof(char)); ngrama[0] = a; ngrama[1] = b; ngrama[2] = c; ngrama[3] = '\0'; frec_ngrama = f; }

Page 94: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 94/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

CNgramas::CNgramas(char* n) {

ngrama = (char *) malloc((strlen(n)+1) * sizeof(char)); strcpy_s(ngrama,strlen(n)+1,n); frec_ngrama = 0; } CNgramas::CNgramas(char* n, float f) {

ngrama = (char *) malloc((strlen(n)+1) * sizeof(char)); strcpy_s(ngrama,strlen(n)+1,n); frec_ngrama = f; } /* Funcion que cuenta el número de veces que aparece un ngrama en un texto. El objetivo de esta función es ser usado para almacenar sus estadísticas */ vector<float> CNgramas::Contar(int ncant, const char* texto) {

int j,k; int nelem = 27; int long_vector = (int) pow((double)nelem, ncant); vector<float> frec_ngramas(long_vector, 0.0); int long_texto = strlen(texto); char* ngrama; /*printf("Tamaño del ngrama: %d\n", ncant); printf("Tamaño del vector: %d\n", long_vector); printf("Tamaño texto a analizar: %d\n", long_texto); printf("\nPulse una tecla para continuar...\n"); _getch();*/ //Inicializamos el array de frecuencias de los ngramas a 0; Con la segunda opción del constructor es automático

/*for(j = 0; j < long_vector; j++) frec_ngramas.push_back(0.0);*/ //printf("Frecuencias inicializadas a 0.0\n"); //A partir del texto los elementos desde el 0 al n-ncant+1 //Contamos cada grupo de letras y aumentamos el contador de la fecuencia en la pos indicada por PosNgramas

for(j = 0; j < long_texto - ncant + 1; j++) {

ngrama = substring(texto, j, j + ncant); //Seleccionar ngrama //printf("\tngrama[%d] - \"%s\"", j, ngrama); k = PosNgramas(ngrama); //Buscar posición correspondiente al ngrama

//printf(" - [%4d]", k); frec_ngramas[k] = frec_ngramas[k] + 1; //Aumentar Frecuencia //printf("- (%4.0f)\n", frec_ngramas[k]); free(ngrama); }

//printf("Frecuencias calculadas\n"); for(j = 0; j < long_vector; j++) frec_ngramas[j] = frec_ngramas[j] / (long_texto - ncant + 1); /*for(j = 0; j < long_vector; j++) {

printf("id = %4d, frec(%c) = %6.4f\n", j, '%', frec_ngramas[j]*100); }*/

//printf("Guardando frecuencias...\n"); //CrearFich(frec_ngramas); //Ralentiza un 300% al ser ejecutado en la función de evaluar del AG

//printf("Frecuencias guardadas.\n"); return frec_ngramas; } //Definir tambien el mismo método pero recibiendo el vector de frecuencias y/o la longitud vector<CNgramas> CNgramas::Analiza_ngramas (int ncant, const char* texto) {

unsigned int j = 0; //Llamar a contar

vector<float> fre_ngramas = Contar(ncant, texto); //Declarar un vector de ngramas de la misma longitud

Page 95: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 95/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

vector<CNgramas> ngramas(fre_ngramas.capacity()); //Rellenar calculando los ngramas y añadir la frecuencia recogida en contar

for(j = 0; j < fre_ngramas.capacity(); j++) {

strcpy_s(ngramas[j].ngrama, 20, PosToChar(j, fre_ngramas.capacity())); ngramas[j].frec_ngrama = fre_ngramas[j]; }

return ngramas; } int CNgramas::PosNgramas(char* ngrama) {

int potencia = 0; int pos = 0; int val = 0; int long_ngrama = strlen(ngrama); //printf("[Tamaño: %d, pos_inicio: %d]", long_ngrama, val); for(pos = long_ngrama - 1; pos >= 0; pos--) { if(ngrama[pos] != 'ñ')

val = val + (ngrama[pos] - 'a')*pow((double)27, potencia); else

val = val + 26*pow((double)27, potencia); potencia++; }

/*printf("PosNgramas(%s) = %d", ngrama, val); _getch();*/ return val; } char* CNgramas::PosToChar(int pos, int total) {

static char ngrama[4] = ""; int tipo, primera, segunda, tercera; if(total > 27) if(total > 729)

tipo = 3; else

tipo = 2; else

tipo = 1; switch(tipo) { case 1: if(pos == 26)

ngrama[0] = 'ñ'; else

ngrama[0] = pos + 'a'; ngrama[1] = '\0'; break; case 2:

primera = pos / 27; segunda = pos - primera * 27; if(primera == 26)

ngrama[0] = 'ñ'; else

ngrama[0] = primera + 'a'; if(segunda == 26)

ngrama[1] = 'ñ'; else

ngrama[1] = segunda + 'a'; ngrama[2] = '\0'; break; case 3:

primera = pos / (27*27); segunda = (pos - primera * (27*27))/27; tercera = pos - primera * (27*27) - segunda * 27; if(primera == 26)

ngrama[0] = 'ñ'; else

ngrama[0] = primera + 'a'; if(segunda == 26)

ngrama[1] = 'ñ';

Page 96: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 96/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

else

ngrama[1] = segunda + 'a'; if(tercera == 26)

ngrama[2] = 'ñ'; else

ngrama[2] = tercera + 'a'; ngrama[3] = '\0'; break; }

//printf("PosToChar(%d, %d) = %s\n", pos, total, ngrama); //_getch(); //printf("[%s -", ngrama); return ngrama; } char* CNgramas::substring(const char* texto, int inicio, int fin) {

int tamano = fin - inicio; char *subcadena; subcadena = (char *) malloc((tamano+1) * sizeof(char)); //printf("[Tamaño: %d, inicio: %d, fin: %d]", tamano, inicio, fin); int i; for(i = inicio; i < fin; i++) {

subcadena[i - inicio] = texto[i]; }

subcadena[i - inicio] = '\0'; /*printf("substring(texto, %d, %d) = %s", inicio, fin, subcadena); _getch();*/ return subcadena; } void CNgramas::CrearFich(vector<float> frecuencias) {

string str; char cadena[4]; string texto = "Frec"; unsigned int i = 0; //Solo tenemos en cuenta a los ngramas hasta longitud 3 if(frecuencias.size() > 27) if(frecuencias.size() > 729)

texto += "Trigramas.txt"; else

texto += "Bigramas.txt"; else

texto += "Monogramas.txt"; //cout << "Abriendo fichero " << texto << "\n"; char direccion[80] = "Frecuencias\\"; strcat_s(direccion, texto.c_str()); //ofstream f0("Frecuencias\\" + texto); ofstream f0(direccion); if (!f0.fail()) {

//printf("Iniciando bucle de escritura...\n"); for(i = 0; i < frecuencias.capacity(); i++) {

strcpy_s(cadena, 4, PosToChar(i, frecuencias.capacity())); //printf(" %s]",cadena); //cout << cadena << " - frec(%): " << frecuencias[i]*100 << '\n'; f0 << cadena << " - frec(%): " << frecuencias[i]*100 << '\n'; }

f0.close(); }

return; } char* CNgramas::getNgrama() {

return ngrama; } float CNgramas::getFrecuencia() {

return frec_ngrama; }

Page 97: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 97/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Pdiccionarios

#include "StdAfx.h" #include "Pdiccionarios.h" CPdiccionarios::CPdiccionarios(void) { } CPdiccionarios::~CPdiccionarios(void) { } void CPdiccionarios::CargarListado(string archivo, int modo) {

CargarListado(archivo, modo, 0); return; } void CPdiccionarios::CargarListado(string archivo, int modo, unsigned int long_minima) {

SYSTEMTIME lt; GetLocalTime(&lt); string str; unsigned int a = diccionario.size(); unsigned int b; //Carga del diccionario

char direccion[80] = "Diccionarios\\"; strcat_s(direccion, archivo.c_str()); strcat_s(direccion,".txt"); printf("\nProcesando: %s\t\t(%02d:%02d:%0.2d)", direccion, lt.wHour, lt.wMinute, lt.

wSecond); ifstream f0(direccion); if (!f0.fail()) { while (!f0.eof()) {

f0 >> str; if(strlen(str.c_str()) >= long_minima) { if(modo == 0)

diccionario.push_back(QuitarAcentosYMayusculas(str)); else

diccionario.push_back(str); b = diccionario.size(); if(b % 50000 == 0)

printf("."); //printf("%s\n", str.c_str()); } }

f0.close(); } /*if(modo == 1) //Modo 1 implica la carga del diccionario ya procesado

CrearIndice();*/ GetLocalTime(&lt); printf("\n%d palabras incluidas en el diccionario.\t(%02d:%02d:%0.2d)\n", b-a, lt.

wHour, lt.wMinute, lt.wSecond); return; } void CPdiccionarios::CargarIndice() {

CargarIndice(0); return; } void CPdiccionarios::CargarIndice(unsigned int longitud) {

char direccion[80] = "Diccionarios\\indice"; if(longitud > 0) {

direccion[strlen(direccion)+1] = '\0'; direccion[strlen(direccion)] = '0' + longitud; direccion[strlen(direccion)] = '\0'; }

strcat_s(direccion,".txt");

Page 98: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 98/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

SYSTEMTIME lt; GetLocalTime(&lt); string str; unsigned int i; printf("\nProcesando: %s\t\t(%02d:%02d:%0.2d)\n", direccion, lt.wHour, lt.wMinute, lt.

wSecond); ifstream f0(direccion); if (!f0.fail()) {

i = 0; while (!f0.eof()) {

f0 >> str; if(i % 2 != 0)

indice_num.push_back(atoi(str.c_str())); else

indice_str.push_back(str); i++; }

f0.close(); } else { //Crear diccionario de dicha longitud y dejarlo cargado en memoria // Copiar todos los elementos del diccionario filtrando por longitud // Limpiar indice

GetLocalTime(&lt); printf("%cndice adecuado no encontrado. Generando...\t(%02d:%02d:%0.2d)\n", 'í',

lt.wHour, lt.wMinute, lt.wSecond); for(i = 0; i < diccionario.size(); i++) { if(strlen(diccionario[i].c_str()) >= longitud)

indice_str.push_back(diccionario[i].substr(0,4)); }

LimpiarIndice(); ofstream f1(direccion); if (!f1.fail()) {

for(unsigned int i = 0; i < indice_str.size(); i++) {

f1 << indice_str[i] << " " << indice_num[i] << '\n'; }

f1.close(); } }

/*for(i = 0; i < indice_str.size(); i++) {

printf("\n%s - %d", indice_str[i], indice_num[i]); }

_getch();*/ GetLocalTime(&lt); printf("\n%d palabras incluidas en el %cndice.\t\t(%02d:%02d:%0.2d)\n\n", indice_str.

size(), 'í', lt.wHour, lt.wMinute, lt.wSecond); return; } void CPdiccionarios::ProcesarListado() {

SYSTEMTIME lt; GetLocalTime(&lt); printf("\nOrdenando listado: %d palabras\t\t(%02d:%02d:%0.2d)\n", diccionario.size(),

lt.wHour, lt.wMinute, lt.wSecond); sort(diccionario.begin(), diccionario.end()); EliminarRepetidos(); //Escritura de la versión sin acentos, ordenada y limpiada

ofstream f0("Diccionarios\\diccionario_completo.txt"); if (!f0.fail()) {

for(unsigned int i = 0; i < diccionario.size(); i++)

Page 99: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 99/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

{

indice_str.push_back(diccionario[i].substr(0,4)); //1ª opción: añadir valores tras la limpieza //2ª opción: añadir todos los valores y eliminarlos al limpiar

f0 << diccionario[i] << '\n'; }

f0.close(); }

LimpiarIndice(); ofstream f1("Diccionarios\\indice.txt"); if (!f1.fail()) {

for(unsigned int i = 0; i < indice_str.size(); i++) {

f1 << indice_str[i] << " " << indice_num[i] << '\n'; }

f1.close(); }

diccionario.clear(); indice_num.clear(); indice_str.clear(); return; } string CPdiccionarios::QuitarAcentosYMayusculas(string palabra) {

unsigned int i; transform(palabra.begin(), palabra.end(), palabra.begin(), tolower); for(i = 0; i < palabra.length(); i++) { if(palabra[i] == 'á' || palabra[i] == 'ä' || palabra[i] == 'à' || palabra[i] == 'â ' || palabra[i] == 'Á' || palabra[i] == 'Ä' || palabra[i] == 'À' || palabra[i] == 'Â')

palabra.replace(i,1,"a"); if(palabra[i] == 'é' || palabra[i] == 'ë' || palabra[i] == 'è' || palabra[i] == 'ê ' || palabra[i] == 'É' || palabra[i] == 'Ë' || palabra[i] == 'È' || palabra[i] == 'Ê')

palabra.replace(i,1,"e"); if(palabra[i] == 'í' || palabra[i] == 'ï' || palabra[i] == 'ì' || palabra[i] == 'î ' || palabra[i] == 'Í' || palabra[i] == 'ï' || palabra[i] == 'Ì' || palabra[i] == 'Î')

palabra.replace(i,1,"i"); if(palabra[i] == 'ó' || palabra[i] == 'ö' || palabra[i] == 'ò' || palabra[i] == 'ô ' || palabra[i] == 'Ó' || palabra[i] == 'Ö' || palabra[i] == 'Ò' || palabra[i] == 'Ô')

palabra.replace(i,1,"o"); if(palabra[i] == 'ú' || palabra[i] == 'ü' || palabra[i] == 'ù' || palabra[i] == 'û ' || palabra[i] == 'Ú' || palabra[i] == 'Ü' || palabra[i] == 'Ù' || palabra[i] == 'Û')

palabra.replace(i,1,"u"); }

return palabra; } void CPdiccionarios::EliminarRepetidos() {

SYSTEMTIME lt; GetLocalTime(&lt); unsigned int i; printf("\nLimpiando listado: %d palabras\t\t(%02d:%02d:%0.2d)\n", diccionario.size(),

lt.wHour, lt.wMinute, lt.wSecond); i = diccionario.size() - 1; while(i > 0) //Para evitar ralentizar haciendo excesivas escrituras en consola { switch(i % 40) //Para evitar ralentizar haciendo excesivas escrituras en consola { case 0: // ( 1 0 0 , 0 0 _ % ) . . .

Page 100: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 100/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

printf("\b\b\b\b\b\b\b\b\b\b\b\b\b"); printf("(%6.2f %c) ", ((float)diccionario.size() - i)*100 / diccionario.

size(),37); break; case 10:

printf("\b\b\b\b\b\b\b\b\b\b\b\b\b"); printf("(%6.2f %c). ", ((float)diccionario.size() - i)*100 / diccionario.

size(),37); break; case 20:

printf("\b\b\b\b\b\b\b\b\b\b\b\b\b"); printf("(%6.2f %c).. ", ((float)diccionario.size() - i)*100 / diccionario.

size(),37); break; case 30:

printf("\b\b\b\b\b\b\b\b\b\b\b\b\b"); printf("(%6.2f %c)...", ((float)diccionario.size() - i)*100 / diccionario.

size(),37); break; } if(diccionario[i - 1] == diccionario[i])

diccionario.erase(diccionario.begin() + i); i--; }

GetLocalTime(&lt); printf("\nNuevo tamaño del listado: %d palabras\t(%02d:%02d:%0.2d)\n", diccionario.

size(), lt.wHour, lt.wMinute, lt.wSecond); return; } void CPdiccionarios::LimpiarIndice() { //1º Copiar substr(0,3) del diccionario al índice //2º Eliminar repetidas incluyendo en el índice num el valor de la primera antes de repetir

SYSTEMTIME lt; GetLocalTime(&lt); unsigned int i; printf("\nLimpiando %cndice: %d palabras\t\t(%02d:%02d:%0.2d)\n", 'í', indice_str.size

(), lt.wHour, lt.wMinute, lt.wSecond); i = indice_str.size() - 1; while(i > 0) {

//printf("indice_str[%d] = %s", i, indice_str[i].c_str()); switch(i % 40) //Para evitar ralentizar haciendo excesivas escrituras en consola { case 0: // ( 1 0 0 , 0 0 _ % ) . . .

printf("\b\b\b\b\b\b\b\b\b\b\b\b\b"); printf("(%6.2f %c) ", ((float)indice_str.size() - i)*100 / indice_str.

size(),37); break; case 10:

printf("\b\b\b\b\b\b\b\b\b\b\b\b\b"); printf("(%6.2f %c). ", ((float)indice_str.size() - i)*100 / indice_str.

size(),37); break; case 20:

printf("\b\b\b\b\b\b\b\b\b\b\b\b\b"); printf("(%6.2f %c).. ", ((float)indice_str.size() - i)*100 / indice_str.

size(),37); break; case 30:

printf("\b\b\b\b\b\b\b\b\b\b\b\b\b"); printf("(%6.2f %c)...", ((float)indice_str.size() - i)*100 / indice_str.

size(),37); break; } if(indice_str[i - 1] == indice_str[i])

Page 101: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 101/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

indice_str.erase(indice_str.begin() + i); else

indice_num.insert(indice_num.begin(), i); i--; }

indice_num.insert(indice_num.begin(), i); GetLocalTime(&lt); printf("\nNuevo tamaño del listado: %d palabras\t(%02d:%02d:%0.2d)\n", indice_str.size

(), lt.wHour, lt.wMinute, lt.wSecond); return; } vector<string> CPdiccionarios::DevolverDiccionario() {

return diccionario; } const char** CPdiccionarios::DevolverDiccionarioCharFormat() { const char** diccionarioChar = (const char **) malloc(diccionario.size() * sizeof

(const char*)); for(unsigned int i = 0; i < diccionario.size(); i++) {

diccionarioChar[i] = diccionario[i].c_str(); }

return diccionarioChar; } const char** CPdiccionarios::DevolverIndiceCharFormat() { const char** indiceChar = (const char **) malloc(indice_str.size() * sizeof(const char

*)); for(unsigned int i = 0; i < indice_str.size(); i++) {

indiceChar[i] = indice_str[i].c_str(); }

return indiceChar; } vector<int> CPdiccionarios::DevolverValoresIndice() {

return indice_num; }

AG

#include "StdAfx.h" #include "CClave.h" #ifndef _cclave_C_ #define _cclave_C_ //Definicion de las variables miembro static

class vector<float> CClave::fre_letras_estaticas; class vector<CNgramas> CClave::fre_bigramas_estaticos; class vector<CNgramas> CClave::fre_trigramas_estaticos; class vector<short> CClave::texto_cifrado_estatico; class vector<short> CClave::valores_texto_estatico; class vector<vector<char> > CClave::tabla_homofonos_inversa_estatica; int CClave::longitud; const char **CClave::diccionario_estatico; const char **CClave::indice_str_estatico; class vector<int> CClave::indice_num_estatico; short CClave::modo; int CClave::contador; int CClave::iteracion; int CClave::indice; float CClave::error_medio, CClave::error_medio_ant; bool CClave::seguro, CClave::dejar_seguro; class vector<char*> CClave::lista_blanca; class vector<char*> CClave::lista_negra; //Constructor por defecto CClave::CClave():GAArray<char> (100) , GAGenome (Iniciar,Mutar,Comparar) {

evaluator(Evaluar);

Page 102: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 102/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

crossover(Reproduccion); } CClave::CClave(const CClave& orig):GAArray<char> (100) , GAGenome() {

CClave::copy(orig); } CClave::CClave(vector<float> fre_letras, vector<CNgramas> fre_bigramas, vector<CNgramas> fre_trigramas, vector<short> texto_cifrado, vector<short> valores_texto, vector<vector<char> > tabla_homofonos_inversa, int filtro , const char **diccionario, const char **indice_str, vector<int> indice_num, short _modo): GAArray<char> (100) , GAGenome (IniciarIngInvFreBri, Mutar, Comparar) {

//printf("CClave::CClave(...)\n"); printf("\n\tIniciando par%cmetros...\n",'á'); fre_letras_estaticas = fre_letras; fre_bigramas_estaticos = fre_bigramas; fre_trigramas_estaticos = fre_trigramas; texto_cifrado_estatico = texto_cifrado; valores_texto_estatico = valores_texto; tabla_homofonos_inversa_estatica = tabla_homofonos_inversa; longitud = filtro; diccionario_estatico = diccionario; indice_str_estatico = indice_str; indice_num_estatico = indice_num; indice = 0; contador = 0; iteracion = 0; modo = _modo; seguro = true; dejar_seguro = true; error_medio_ant = 100; /*switch(modo) { case 2: //Lista blanca: Carga la lista blanca lista_blanca = CargarListado("lista_blanca"); break; case 3: //Lista negra: Carga la lista negra lista_negra = CargarListado("lista_negra"); break; case 4: //Lista blanca + negra: Carga ambas listas case 5: //Interactivo: Carga ambas listas lista_blanca = CargarListado("lista_blanca"); lista_negra = CargarListado("lista_negra"); break; } system("del Listas\\reconocidas.txt"); system("del Soluciones\\*.* /Q");*/

printf("\tProcesando...\n"); evaluator(Evaluar); crossover(ReproduccionAjusteFrec); } CClave::~CClave(void) { } void CClave::copy(const GAGenome& orig) { ... } GAGenome* CClave::clone(CloneMethod) const { ... } #ifdef GALIB_USE_STREAMS Bloque activo del preprocesador #endif //a la funcion equal hay que eliminarle la comprobacion de tamaño int CClave::equal(const GAGenome & c) const { ... } /* ... */ CClave& CClave::operator= (const GAGenome& orig) { ... } //Rellena cada elemento del genoma con letras realizando un análisis previo del texto a descifrar. void CClave::Iniciar(GAGenome& c) { ... } void CClave::IniciarIngInv(GAGenome& c) { ... } void CClave::IniciarIngInvFreBri(GAGenome& c) {

CClave & genoma = (CClave &)c;

Page 103: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 103/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

contador++; char abecedario[28] = "abcdefghijklmnopqrstuvwxyzñ"; char letra; bool repetido; short cuenta, min, max; short repeticiones[27]; for(unsigned short j = 0; j < 27; j++) repeticiones[j] = 0; vector<char> poblacion_inicial(valores_texto_estatico.size()); vector<short> elementos_columna(valores_texto_estatico.size()); vector<short> prioridad(valores_texto_estatico.size()); vector<vector<char> > tabla_extraña = tabla_homofonos_inversa_estatica; //Creamos una cola dandole mayor prioridad a cifras con menos letras asignadas

min = 27; max = 0; for(unsigned int i = 0; i < valores_texto_estatico.size(); i++) {

elementos_columna[i] = tabla_homofonos_inversa_estatica[i].size(); if(elementos_columna[i] > max)

max = elementos_columna[i]; if(elementos_columna[i] < min)

min = elementos_columna[i]; }

cuenta = 0; for(unsigned int i = min; i <= max; i++) {

for(unsigned int j = 0; j < valores_texto_estatico.size(); j++) { if(tabla_homofonos_inversa_estatica[j].size() == i)

prioridad[cuenta++] = j; } }

int ok, limite; unsigned short k,l; CNgramas analiza_ngramas; char bigrama[3]; int aux; float frec; short decena, m; limite = 4; do {

ok = 1; tabla_extraña = tabla_homofonos_inversa_estatica; for(unsigned int i = 0; i < valores_texto_estatico.size() && ok; i++) {

cuenta = 0; do{

repetido = false; //Añadir condición que haga esto si la tabla XXXXXXX no tiene elementos en la columna correspondiente letra = tabla_homofonos_inversa_estatica[prioridad[i]][GARandomInt(0, 100)

%tabla_homofonos_inversa_estatica[prioridad[i]].size()]; //Si los tiene sacarlos de esa columna if(letra != 'ñ') if(repeticiones[letra-'a'] >= limite)

repetido = true; else if(repeticiones[26] >= limite)

repetido = true; //Procedimiento que tiene en cuenta si la letra ya ha sido usada en su misma decena

/*decena = (valores_texto_estatico[prioridad[i]]/10)*10; m = 0; while(valores_texto_estatico[m] < decena && m < valores_texto_estatico. size())

m++; while(m < valores_texto_estatico.size() && valores_texto_estatico[m] <= decena+9 && !repetido) { if(letra == poblacion_inicial[m] && m != prioridad[i])

Page 104: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 104/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

repetido = true; m++; }*/

cuenta++; }while(repetido && cuenta<100); if(cuenta >= 100)//Chapuza antierror para evitar problemas surgidos de no poder escoger un candidato porque todos ellos ya hallan sido usados más de 5 veces {

i=0; //Vuelve a empezar for(unsigned short j = 0; j < 27; j++) //Resetea las repeticiones repeticiones[j] = 0; }

poblacion_inicial[prioridad[i]] = letra; if(poblacion_inicial[prioridad[i]] != 'ñ')

repeticiones[poblacion_inicial[prioridad[i]]-'a']++; else

repeticiones[26]++; /* Para el número anterior busca en el texto sus siguientes números Y comprobando en los bigramas elimina en estos las letras que corresponden a combinaciones imposibles */

bigrama[0] = letra; bigrama[1] = '\0'; for(unsigned short j = 1; j < texto_cifrado_estatico.size() && ok; j++) { if(texto_cifrado_estatico[j-1] == poblacion_inicial[prioridad[i]]) // Encuentra un número posterior al que nos interesa {

k = 0; //Localizamos la columna del número posterior en el texto al que acabamos de asignarle una letra while(valores_texto_estatico[k] < texto_cifrado_estatico[j])

k++; l = 0; while(l < tabla_extraña[k].size() && ok) { //Preguntamos si la frecuencia para ese ngrama es mayor que 0 y si no eliminamos la letra

bigrama[1] = tabla_extraña[k][l]; bigrama[2] = '\0'; aux = analiza_ngramas.PosNgramas(bigrama); frec = fre_bigramas_estaticos[aux].getFrecuencia(); if(frec == 0) {

tabla_extraña[k].erase(tabla_extraña[k].begin() + l); if(tabla_extraña[k].size() == 0)

ok = 0; } else

l++; } } } }

}while(!ok); genoma.ConstruyePoblacion(poblacion_inicial); /* Si el siguiente bucle en el proyecto anterior pasaba: 1º parámetro: los valores de la columna de la tabla 2º parámetro: el alfabeto de ordenación Entonces este bucle tendrá que pasar: 1º parámetro: valor del texto 2º parámetro: el alfabeto de posibles equivalencias */

printf("\n\nGenoma inicial %d:", contador); for(unsigned int i = 0; i < valores_texto_estatico.size(); i++) {

genoma.gene(valores_texto_estatico[i], poblacion_inicial[i]); }

for(unsigned int i = 0; i < valores_texto_estatico.size(); i++) {

Page 105: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 105/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

printf("%c", poblacion_inicial[i]); }

printf("\n"); printf("\nProporcion:\n"); for(unsigned int i = 0; i < 27; i++) {

printf("%c ", abecedario[i]); }

printf("\n"); for(unsigned int i = 0; i < 27; i++) {

printf("%d ", repeticiones[i]); }

printf("\n\n"); } int CClave::Mutar(GAGenome & c, float pmut) {

//printf("CClave::Mutar(GAGenome & c, float pmut)\n"); CClave &hijo=(CClave &)c; if(pmut <=0.0) return (0); std::vector<char> poblacion_individual = hijo.getPoblacion(); int num_elem = valores_texto_estatico.size(); char abecedario[28] = "abcdefghijklmnopqrstuvwxyzñ"; int nMut; char aux; short ok, cuenta, intentos; short pos1, pos2, decena, m; bool repetido; float error_cromosoma = CompararFrecuencias(poblacion_individual); float error_candidato; intentos = 0; do { /*if(seguro)//En situaciones normales muta letras al azar {*/

nMut=0; poblacion_individual = hijo.getPoblacion(); //Calcular repeticiones

short repeticiones[27]; for(unsigned short j = 0; j < 27; j++) repeticiones[j] = 0; for(int i = 0; i < num_elem; i++) { if(poblacion_individual[i] != 'ñ')

repeticiones[poblacion_individual[i] - 'a']++; else

repeticiones[26]++; }

for(int i = 0; i < num_elem; i++) if(GAFlipCoin(pmut)) { /* 1º Comprobar repeticiones de la vacante Preguntar en el vector de repeticiones, Si se puede: aumentar las de la vacante disminuir las de la actual realizar cambio */

cuenta = 0; do{ //Letra aleatoria dentro de su columna en la tabla inversa de homofonos

repetido = false; aux = tabla_homofonos_inversa_estatica[i][GARandomInt(0,

tabla_homofonos_inversa_estatica[i].size()-1)]; if(aux != 'ñ') if(repeticiones[aux-'a'] >= 4)

repetido = true; else

repeticiones[aux-'a']++; else if(repeticiones[27] >= 4)

repetido = true;

Page 106: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 106/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

else

repeticiones[26]++; //Modulo que tiene en cuenta la distribución de los números dentro de la tabla, no repitiendo dos números de una //misma decena para una misma letra

/*decena = (valores_texto_estatico[i]/10)*10; m = 0; while(valores_texto_estatico[m] < decena && m < valores_texto_estatico.size())

m++; while(m < valores_texto_estatico.size() && valores_texto_estatico [m] <= decena+9 && !repetido) { if(aux == poblacion_individual[m] && m != i)

repetido = true; m++; }*/

cuenta++; }while(repetido && cuenta < 100 && seguro); if(cuenta != 100) { if(poblacion_individual[i] != 'ñ')

pos2 = poblacion_individual[i] - 'a'; else

pos2 = 26; repeticiones[pos2]--; //disminuir las de la actual poblacion_individual[i] = aux; nMut++; //Esta línea está en el proyecto anterior } } /*} else //Si el AG deja de mejorar lo que hará será mutar todas las vocales al azar escogiendo dentro de las vocales de la tabla inversa {

vector<vector<char> > tabla_extrana = tabla_homofonos_inversa_estatica; //Obtengo una tabla inversa con solo las vocales

for(unsigned int i = 0; i < tabla_extrana.size(); i++) {

for(unsigned int j = 0; j < tabla_extrana[i].size(); j++) { if(tabla_extrana[i][j] != 'a' || tabla_extrana[i][j] != 'e' || tabla_extrana[i][j] != 'i' || tabla_extrana[i][j] != 'o' || tabla_extrana[i][j] != 'u' )

tabla_extrana[i].erase(tabla_extrana[i].begin() + j); } }

for(unsigned int i = 0; i < poblacion_individual.size(); i++) { if(poblacion_individual[i] == 'a' || poblacion_individual[i] == 'e' || poblacion_individual[i] == 'i' || poblacion_individual[i] == 'o' || poblacion_individual[i] == 'u') { poblacion_individual[i] = tabla_extrana[i][GARandomInt(0,

tabla_extrana[i].size()-1)]; } } }*/

error_candidato = CompararFrecuencias(poblacion_individual); intentos++; }

while(error_cromosoma <= error_candidato && intentos < 500 && seguro); if(error_cromosoma <= error_candidato && seguro) {

printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t- Mutación contraproducente...\n"); poblacion_individual = hijo.getPoblacion(); } else { printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ Elemento mutado exitosamente tras %3d

intentos... (%f -> %f)\n", intentos, error_cromosoma, error_candidato);

Page 107: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 107/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

dejar_seguro = true; }

hijo.ConstruyePoblacion(poblacion_individual); /* Si el siguiente bucle en el proyecto anterior pasaba: 1º parámetro: los valores de la columna de la tabla 2º parámetro: el alfabeto individual Entonces este bucle tendrá que pasar: 1º parámetro: valor del texto 2º parámetro: el alfabeto de posibles equivalencias */

for(int i = 0; i < num_elem; i++) {

hijo.gene(valores_texto_estatico[i], poblacion_individual[i]); }

return nMut; } //Sirve para evaluar cómo de distintos son dos genomas. //Un cero indica que son identicos y un 100 que no coinciden en nada. float CClave::Comparar(const GAGenome & a, const GAGenome & b) { ... } float CClave::Evaluar(GAGenome & g) // MODIFICARLO {

//printf("CClave::Evaluar(GAGenome & g)\n"); iteracion++; CClave & genoma=(CClave &)g; float error=0; char abecedario[29] = "abcdefghijklmnopqrstuvwxyzñ"; int cuenta = 0; if(indice == 0) {

error_medio /= contador; if(dejar_seguro == false) { printf("\n\n********EL AG HA DEJADO DE MEJORAR... DESACTIVANDO TEMPORALMENTE

LAS MEDIDAS DE MEJORA********\n\n"); seguro = false; } else if(seguro == 0) {

printf("\n\n********RACTIVANDO LAS MEDIDAS DE MEJORA********\n\n"); seguro = true; }

error_medio_ant = error_medio; printf("\tError medio: %f\n", error_medio); printf("\n\nEvaluando la iteracion %d:\n", iteracion/contador); error_medio = 0; dejar_seguro = false; }

error = CompararFrecuencias(genoma.getPoblacion()); //Falta desarrollar algún mecanismo que busque las palabras y en lugar de hacerlas estáticas las considere positivamente if(longitud != 0) { //1º Recorrer todo el texto //2º Buscar según la longitud del filtro en el indice y obtener valores //3º Buscar según los valores del índice en el diccionario

string texto_individuo = genoma.getTexto(); //printf("\n\n\nEntra en el buble de busqueda de palabras...\n"); string palabra_buscada; //Substring del texto //string palabra_buscada_ant; string palabra_indice_buscada; //Primeras 4 letras del substring const char *pal_buscada; const char *pal_indice_buscada; //Conversión a const char const char *pal_diccionario; const char *pal_diccionario_inf; const char *pal_diccionario_sup; const char *pal_indice; //Carga la palabra del índice const char *pal_indice_inf; const char *pal_indice_sup;

Page 108: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 108/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

char *texto_temp; char palabra_mod[20]; char palabra_cor; unsigned int inf, sup, centro, ok; int prueba; short val_aux, j, opcion, correcto; int fin=longitud; int salir; //Aquí hay un parche para un error aleatorio y estupido que ocurre cuando al visual studio o al galib le da la gana //semanas sin problemas, ejecutandose a día 20/08/2011 con una población de 1000 cromosomas y de repente a día 21 ya no funciona //porque genera un bucle infinito. Ya solo falta que empiece con el desbordamiento de pila....

for(unsigned int ppio=0; ppio<=texto_individuo.size()-longitud && fin < longitud +

6; ppio++) {

fin=longitud; salir = 0; while(!salir && fin < longitud + 6) {

palabra_buscada = texto_individuo.substr(ppio, fin); palabra_indice_buscada = palabra_buscada.substr(0, 4); pal_indice_buscada = palabra_indice_buscada.c_str(); //Busqueda en el índice

//printf("Buscando %s en el índice...\n", pal_indice_buscada); inf = 0; sup = indice_num_estatico.size()-1; ok = 0; pal_indice_inf = indice_str_estatico[inf]; pal_indice_sup = indice_str_estatico[sup]; if(strcmp(pal_indice_buscada, pal_indice_inf) >= 0 && strcmp (pal_indice_buscada, pal_indice_sup) <= 0) { while(inf <= sup && !ok) {

centro = ((sup - inf) / 2) + inf; // División entera: se trunca la fracción

pal_indice = indice_str_estatico[centro]; prueba = strcmp(pal_indice_buscada, pal_indice); switch(prueba) { case 0:

ok = 1; //encontrada break; case -1:

sup = centro - 1; break; case 1:

inf = centro + 1; break; } if(centro <= 0) //Anti error

sup = 0; } //Si sale cuando inf > sup entonces hay que intercambiarlos if(sup == 0) if(!ok) {

centro = inf; inf = sup; sup = centro; } else {

inf = centro; sup = centro + 1; } /*printf("\tLa palabra buscada se encuentra en el índice entre %s (%d)

Page 109: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 109/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

y %s (%d)\n", indice_str_estatico[inf], indice_num_estatico[inf],

indice_str_estatico[sup], indice_num_estatico[sup]);*/ //Busqueda en el diccionario

inf = indice_num_estatico[inf]; sup = indice_num_estatico[sup]; ok = 0; pal_buscada = palabra_buscada.c_str(); pal_diccionario_inf = diccionario_estatico[inf]; pal_diccionario_sup = diccionario_estatico[sup]; if(strcmp(pal_buscada, pal_diccionario_inf) >= 0 && strcmp(pal_buscada , pal_diccionario_sup) <= 0) {

//printf("\tBuscando %s en el diccionario...\n", pal_buscada); while(inf <= sup && !ok) {

centro = ((sup - inf) / 2) + inf; // División entera: se trunca la fracción

pal_diccionario = diccionario_estatico[centro]; prueba = strcmp(pal_buscada, pal_diccionario); switch(prueba) { case 0:

ok = 1; //encontrada break; case -1:

sup = centro - 1; break; case 1:

inf = centro + 1; break; } } } } if(!ok) {

centro = inf; inf = sup; sup = centro; /*printf("La palabra buscada no se encuentra en el diccionario [%s (% d) - %s (%d)]\n", diccionario_estatico[inf], inf,

diccionario_estatico[sup], sup);*/ //Si no lo encuentra salir para que continue con el bucle

salir = 1; } else { if(cuenta == 0 && error <= 4.9)

printf("\t\t{"); if(error <= 4.9)

printf("%s, ", pal_buscada); //Si lo encuentra fin++ if(fin == longitud)

cuenta++; fin++; //printf("fin:%d",fin); } } } }

error *= 1 - cuenta/(texto_cifrado_estatico.size()/longitud); error_medio += error; if(error <= 4.9)

printf("}\n"); printf("\tCromosoma %03d: %7.4f (%2d palabras)\t", iteracion - (iteracion/contador)*

contador, error, cuenta); for(unsigned int i = 0; i < (genoma.getPoblacion()).size(); i++) {

printf("%c", (genoma.getPoblacion())[i]);

Page 110: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 110/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

/*if(i < valores_texto_estatico.size()-1) if(valores_texto_estatico[i]/10 < valores_texto_estatico[i+1]/10)

printf(" ");*/ }

printf("\n"); indice++; indice = indice % contador; return error; } int CClave::Reproduccion(const GAGenome & m, const GAGenome & p, GAGenome * ho, GAGenome * ha) { ... } int CClave::ReproduccionAjusteFrec(const GAGenome & m, const GAGenome & p, GAGenome * ho, GAGenome * ha) {

CClave &madre=(CClave &)m; CClave &padre=(CClave &)p; std::vector<char> poblacion_madre = madre.getPoblacion(); std::vector<char> poblacion_padre = padre.getPoblacion(); float error_madre = CompararFrecuencias(poblacion_madre); float error_padre = CompararFrecuencias(poblacion_padre); unsigned int num_elem = poblacion_madre.size(); int n=0; std::vector<char> pob_hermano(num_elem); std::vector<char> pob_hermana(num_elem); float error_hermano, error_hermana; //Situación normal if(ho && ha) {

CClave &hermano=(CClave &)*ho; CClave &hermana=(CClave &)*ha; pob_hermano = poblacion_padre; pob_hermana = poblacion_madre; short repeticiones_p[27], repeticiones_m[27]; for(unsigned short j = 0; j < 27; j++) {

repeticiones_m[j] = 0; repeticiones_p[j] = 0; }

for(int i = 0; i < num_elem; i++) { if(poblacion_padre[i] != 'ñ')

repeticiones_p[poblacion_padre[i] - 'a']++; else

repeticiones_p[26]++; if(poblacion_madre[i] != 'ñ')

repeticiones_m[poblacion_madre[i] - 'a']++; else

repeticiones_m[26]++; }

char letra_p, letra_m, inicio_p, inicio_m; float aux_p, aux_m, minimo_p, minimo_m; int ok_p, ok_m; short decena, m; //short incremento = GARandomInt(1,4); //for(unsigned int i = GARandomInt(0,1); i < num_elem; i+=incremento) if(GARandomInt(0,1) == 0)

for(unsigned int i = 1; i < num_elem; i++) {

minimo_p = 20; minimo_m = 20; letra_p = poblacion_padre[i]; letra_m = poblacion_madre[i]; inicio_p = letra_p; inicio_m = letra_m; for(unsigned int j = 0; j < tabla_homofonos_inversa_estatica[i].size(); j+ +) {

ok_p = 1; ok_m = 1;

Page 111: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 111/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

pob_hermano[i] = tabla_homofonos_inversa_estatica[i][j]; pob_hermana[i] = tabla_homofonos_inversa_estatica[i][j]; if(pob_hermano[i] != 'ñ') { if(repeticiones_p[pob_hermano[i] - 'a'] == 5 && seguro && pob_hermano[i] != inicio_p)

ok_p = 0; } else { if(repeticiones_p[26] == 5 && seguro && pob_hermano[i] != inicio_p)

ok_p = 0; } if(pob_hermana[i] != 'ñ') { if(repeticiones_m[pob_hermana[i] - 'a'] == 5 && seguro && pob_hermana[i] != inicio_m)

ok_m = 0; } else { if(repeticiones_m[26] == 5 && seguro && pob_hermana[i] != inicio_m)

ok_m = 0; } //Modulo que tiene en cuenta la distribución de los números dentro de la tabla, no repitiendo dos números de una //misma decena para una misma letra

/*decena = (valores_texto_estatico[i]/10)*10; m = 0; while(valores_texto_estatico[m] < decena && m < valores_texto_estatico .size())

m++; while(m < valores_texto_estatico.size() && valores_texto_estatico[m] <= decena+9) { if(tabla_homofonos_inversa_estatica[i][j] == pob_hermano[m] && m ! = i)

ok_p = 0; if(tabla_homofonos_inversa_estatica[i][j] == pob_hermana[m] && m ! = i)

ok_m = 0; m++; }*/ if(ok_p == 1) {

aux_p = CompararFrecuencias(pob_hermano); if(aux_p < minimo_p) {

letra_p = pob_hermano[i]; minimo_p = aux_p; } } if(ok_m == 1) {

aux_m = CompararFrecuencias(pob_hermana); if(aux_m < minimo_m) {

letra_m = pob_hermana[i]; minimo_m = aux_m; } } }

pob_hermano[i] = letra_p; pob_hermana[i] = letra_m; if(inicio_p != 'ñ')

repeticiones_p[inicio_p - 'a']--; else

repeticiones_p[26]--; if(inicio_m != 'ñ')

repeticiones_m[inicio_m - 'a']--; else

repeticiones_m[26]--;

Page 112: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 112/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

if(letra_p != 'ñ')

repeticiones_p[letra_p - 'a']++; else

repeticiones_p[26]++; if(letra_m != 'ñ')

repeticiones_m[letra_m - 'a']++; else

repeticiones_m[26]++; } else {

for(int i = num_elem-1; i >= 0; i--) {

// printf("\t\t\t%d\n", i); minimo_p = 20; minimo_m = 20; letra_p = poblacion_padre[i]; letra_m = poblacion_madre[i]; inicio_p = letra_p; inicio_m = letra_m; for(unsigned int j = 0; j < tabla_homofonos_inversa_estatica[i].size(); j+ +) {

// printf("\t\t\t\t%d\n", j); ok_p = 1; ok_m = 1; pob_hermano[i] = tabla_homofonos_inversa_estatica[i][j]; pob_hermana[i] = tabla_homofonos_inversa_estatica[i][j]; if(pob_hermano[i] != 'ñ') { if(repeticiones_p[pob_hermano[i] - 'a'] == 5 && seguro && pob_hermano[i] != inicio_p)

ok_p = 0; } else { if(repeticiones_p[26] == 5 && seguro && pob_hermano[i] != inicio_p)

ok_p = 0; } if(pob_hermana[i] != 'ñ') { if(repeticiones_m[pob_hermana[i] - 'a'] == 5 && seguro && pob_hermana[i] != inicio_m)

ok_m = 0; } else { if(repeticiones_m[26] == 5 && seguro && pob_hermana[i] != inicio_m)

ok_m = 0; } //Modulo que tiene en cuenta la distribución de los números dentro de la tabla, no repitiendo dos números de una //misma decena para una misma letra

/*decena = (valores_texto_estatico[i]/10)*10; m = 0; while(valores_texto_estatico[m] < decena && m < valores_texto_estatico .size())

m++; while(m < valores_texto_estatico.size() && valores_texto_estatico[m] <= decena+9) { if(tabla_homofonos_inversa_estatica[i][j] == pob_hermano[m] && m ! = i)

ok_p = 0; if(tabla_homofonos_inversa_estatica[i][j] == pob_hermana[m] && m ! = i)

ok_m = 0; m++; }*/ if(ok_p == 1) {

Page 113: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 113/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

aux_p = CompararFrecuencias(pob_hermano); if(aux_p < minimo_p) {

letra_p = pob_hermano[i]; minimo_p = aux_p; } } if(ok_m == 1) {

aux_m = CompararFrecuencias(pob_hermana); if(aux_m < minimo_m) {

letra_m = pob_hermana[i]; minimo_m = aux_m; } } }

pob_hermano[i] = letra_p; pob_hermana[i] = letra_m; if(inicio_p != 'ñ')

repeticiones_p[inicio_p - 'a']--; else

repeticiones_p[26]--; if(inicio_m != 'ñ')

repeticiones_m[inicio_m - 'a']--; else

repeticiones_m[26]--; if(letra_p != 'ñ')

repeticiones_p[letra_p - 'a']++; else

repeticiones_p[26]++; if(letra_m != 'ñ')

repeticiones_m[letra_m - 'a']++; else

repeticiones_m[26]++; } } if(error_padre > minimo_p || !seguro) { printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ Padre reproducido con exito...

(%f -> %f)\n", error_padre, minimo_p); dejar_seguro = true; } else { printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t- Padre reproducido sin exito...

(%f -> %f)\n", error_padre, minimo_p); pob_hermano = poblacion_padre; } if(error_madre > minimo_m || !seguro) { printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ Madre reproducido con exito...

(%f -> %f)\n", error_madre, minimo_m); dejar_seguro = true; } else { printf("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t- Madre reproducido sin exito...

(%f -> %f)\n", error_madre, minimo_m); pob_hermana = poblacion_madre; }

hermano.ConstruyePoblacion(pob_hermano); hermana.ConstruyePoblacion(pob_hermana); for(unsigned int i = 0; i < num_elem; i++) {

hermano.gene(valores_texto_estatico[i], pob_hermano[i]); hermana.gene(valores_texto_estatico[i], pob_hermana[i]); }

n = 2; } else { if(ho)

Page 114: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 114/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

{

CClave &hermano=(CClave &)*ho; if(GARandomBit()) {

pob_hermano = poblacion_padre; } else {

pob_hermano = poblacion_madre; }

n = 1; hermano.ConstruyePoblacion(pob_hermano); for(unsigned int i = 0; i < num_elem; i++) {

hermano.gene(valores_texto_estatico[i], pob_hermano[i]); } } if(ha) {

CClave &hermana=(CClave &)*ho; if(GARandomBit()) {

pob_hermana = poblacion_padre; } else {

pob_hermana = poblacion_madre; }

n = 1; hermana.ConstruyePoblacion(pob_hermana); for(unsigned int i = 0; i < num_elem; i++) {

hermana.gene(valores_texto_estatico[i], pob_hermana[i]); } } }

return n; } int CClave::Reproduccion2(const GAGenome & m, const GAGenome & p, GAGenome * ho, GAGenome * ha) { ... } string CClave::getTexto(void) {

texto_resultante = ""; int k, j; /* Para cada valor del texto: 1º Seleccionamos el valor 2º Hallamos la posición que ocupa en el vector de valores 3º Hallamos la correspondiente letra y la añadimos al texto resultante */

for(unsigned int i = 0; i < texto_cifrado_estatico.size(); i++) {

k = texto_cifrado_estatico[i]; j = find(valores_texto_estatico.begin(), valores_texto_estatico.end(), k) -

valores_texto_estatico.begin(); texto_resultante += poblacion[j]; }

return texto_resultante; } void CClave::ConstruyePoblacion(std::vector<char> pob) {

//printf("\nCClave::Construye_alfabeto(std::vector<char> alf)\n"); poblacion = pob; } vector<char> CClave::getPoblacion(void) {

return poblacion; } void CClave::RegistrarPalabra(const char* palabra, string texto) { ... } void CClave::RegistrarTexto(char* texto, int iteracion, int genoma, const char* palabra) { ... } vector<char*> CClave::CargarListado(string texto) { ... }

Page 115: DESENCRIPTADO DE MENSAJES CIFRADOS

Anexo H.- Código fuente 115/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

bool CClave::comparar (char i[], char j[]) {

int a = 0; while(i[a] == j[a])

a++; return (i[a]<j[a]); } float CClave::CompararFrecuencias(vector<char> cromosoma) {

float error = 0; string texto_individuo = ""; for(unsigned int i = 0; i < texto_cifrado_estatico.size(); i++) texto_individuo += cromosoma[find(valores_texto_estatico.begin(), valores_texto_estatico.end(), texto_cifrado_estatico[i]) - valores_texto_estatico.

begin()]; CNgramas analiza_ngramas; vector<float> letras = analiza_ngramas.Contar(1, texto_individuo.c_str()); vector<CNgramas> bigramas = analiza_ngramas.Analiza_ngramas(2, texto_individuo.c_str

()); vector<CNgramas> trigramas = analiza_ngramas.Analiza_ngramas(3, texto_individuo.c_str

());; //Evalua la frecuencia de las letras

for(unsigned int i = 0; i < letras.size(); i++) {

error += abs(fre_letras_estaticas[i] - letras[i]); } //Evalua la frecuencia de los bigramas

for(unsigned int i = 0; i < bigramas.size(); i++) { error += abs(fre_bigramas_estaticos[i].getFrecuencia() - bigramas[i].getFrecuencia

())*2; } //Evalua la frecuencia de los trigramas

for(unsigned int i = 0; i < trigramas.size(); i++) { error += abs(fre_trigramas_estaticos[i].getFrecuencia() - trigramas[i].

getFrecuencia())*3; }

return error; } short CClave::ConsultarListado(const char* palabra, vector<char*> listado) { ... }

#endif

Page 116: DESENCRIPTADO DE MENSAJES CIFRADOS

116/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Page 117: DESENCRIPTADO DE MENSAJES CIFRADOS

Índice de Figuras 117/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Índice de Figuras Página

Resumen de cifrado por cinta móvil 0-1 ................................................................................................... 5 Vector de valores numéricos 0-2 ............................................................................................................... 5 Tabla inversa de homófonos 0-3................................................................................................................ 6 Vector de valores numéricos 0-4 ............................................................................................................... 6 Cromosoma inducido 0-5 ........................................................................................................................... 6 Auguste Kerckhoffs 1 ............................................................................................................................... 11 Escítala lacedemonia 1 ............................................................................................................................. 13 Disco de Alberti 1 ..................................................................................................................................... 15 Enigma K adquirida en Nov-36 1 ........................................................................................................... 21 Rotores de Enigma. .................................................................................................................................. 22 www.simonsingh.net 1 ............................................................................................................................. 22 Hagelin CX-52 1 ....................................................................................................................................... 23 Cifrado por homófonos 1 ......................................................................................................................... 25 Tabla de homófonos 2 .............................................................................................................................. 26 Tabla de homófonos con cinta móvil 1 ................................................................................................... 28 Informe de la Junta Consultiva sobre la seguridad del Método Español 1 ......................................... 30 Análisis de Me y media de letras candidatas 0-1 .................................................................................... 32 Tabla inversa de homófonos 0-2.............................................................................................................. 34 Nivel externo del Sistema 1 ...................................................................................................................... 35 Conceptos básicos del AG 1 ..................................................................................................................... 37 Estructura del AG 1 ................................................................................................................................. 39 Muestra de TextoCálculoFrecuencias.txt 1 ............................................................................................ 41 Carga del texto de la época 1 ................................................................................................................... 42 Esquema de análisis de frecuencias 1 ..................................................................................................... 43 Procedimiento de cálculo de frecuencias 1 ............................................................................................. 43 Texto cifrado 1 .......................................................................................................................................... 44 Extracto de tabla inversa 1 ...................................................................................................................... 45 Ilustración 1 .............................................................................................................................................. 46 Análisis del texto cifrado 2 ....................................................................................................................... 46 Diccionario completo 1............................................................................................................................. 47 Índice base de búsqueda 1 ....................................................................................................................... 48 Índice para palabras >= 6 caracteres 1 .................................................................................................. 48 Mensaje cifrado 1 ..................................................................................................................................... 50 Vector de valores numéricos 0-1 ............................................................................................................. 51 Cromosoma inducido 0-2 ......................................................................................................................... 51 Proceso de evaluación 1 ........................................................................................................................... 53 Aciertos del AG según longitud del mensaje 0-3 ................................................................................... 54 Eficiencia de los cromosomas candidatos 1 ............................................................................................ 58 Tabla de homófonos resultado del criptoanálisis 0-1 ............................................................................ 62 Eficiencia de los cromosomas candidatos 2 ............................................................................................ 65 Tabla de homófonos resultado del criptoanálisis 0-2 ............................................................................ 68 Comportamiento del AG 1 ...................................................................................................................... 70 Método Oficial de Guerra según Carmona 1 ......................................................................................... 80 Portadilla del Tratado de Carmona 1 ..................................................................................................... 81 Carmona: críticas al método 1 ................................................................................................................ 81 Clave Bocho 0-1 ........................................................................................................................................ 82 Clave X 1 ................................................................................................................................................... 82 Clave Lealtad 1 ......................................................................................................................................... 83 Clave Luna 1 ............................................................................................................................................. 83 Clave General 1 ........................................................................................................................................ 84

Page 118: DESENCRIPTADO DE MENSAJES CIFRADOS

Bibliografía 118/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

Bibliografía [1]. Introducción a la criptografía. Pino Caballero. RA-MA 2002

[2]. http://www.dma.fi.upm.es/ Departamento de Matemática Aplicada. Facultad de Informática Universidad Politécnica de Madrid

[3]. Libro electrónico de seguridad informática y criptografía. Ver. 4.1 1/03/2006. Jorge Ramió Aguirre. Escuela Universitaria de Informática - Universidad Politécnica de Madrid, España. Escuela Universitaria Politécnica - Universidad de Lérida, España

[4]. Aplicaciones Criptográficas, 1999. Jorge Ramió Aguirre. Departamento de Publicaciones de la Escuela Universitaria de Informática de la Universidad Politécnica de Madrid, España.

[5]. Criptografía, historia de la escritura cifrada. Juan Carlos Galende Díaz. Ed. Complutense

[6]. Una introducción a la Criptografía Clásica. José Ramón Soler Fuensanta. http://www.criptohistoria.es/files/cifras.pdf

[7]. Tratado de Criptografía con aplicación especial al Ejército. J. G. Carmona. 1894. Ejemplar digitalizado, adquirido en la Biblioteca Nacional.

[8]. Manual Militar de Telegrafía. Apéndice Compendio de Criptografía. 1898. Fernando de Lossada y Sada. Librería de Hernando y Compañía. Descarga de http://www.coit.es/foro

[9]. Soldados sin rostro: los servicios de información, espionaje y criptografía en la Guerra Civil española. José Ramón Soler y Francisco López-Brea. Inédita Editores 2008

[10]. La Criptología Española hasta el final de la Guerra Civil. José Ramón Soler Fuensanta.

[11]. http://www.criptohistoria.es/criptografia_real.html. Web dedicada a la historia de la criptografía española. José Ramón Soler Fuensanta.

[12]. La captura del “Mar Cantábrico”. José Luis Gordillo Coucieres. Revista "Historia y Vida", Abril 1994. http://www.ugr.es/~aquiran/cripto/museo/marcantabrico.htm

[13]. http://www.kriptopolis.org/

[14]. http://www.pro-technix.com/information/crypto/pages/vernam_base.html

[15]. http://users.telenet.be/d.rijmenants/en/enigma.htm. Máquina Enigma.

[16]. http://enigmaco.de/_fs/index-enigma.html. The rotor enigma simulation. Frank Spiess.

[17]. http://users.telenet.be/d.rijmenants/en/c52tech.htm. Máquina Hagelin

[18]. Military Cryptanalysis. William F. Friedman. Descarga desde web de la National Segurity Agency (USA) http://www.nsa.gov/public_info/declass/military_cryptanalysis.shtml

[19]. http://simonsingh.net/The_Black_Chamber/homophoniccipher.htm

[20]. http://personal.telefonica.terra.es/web/jms32/Cifra/CodSecretos/Cap02/Cap0

202.html. Cifrado por sustitución homofónica. La “güeb de Joaquín”.

[21]. Genetic algorithm for finding the key’s length and cryptanalysis of the permutation cipher. Aleksey Gorodilov, Vladimir Morozenko. International Journal "Information Theories & Applications" Vol.15 / 2008

Page 119: DESENCRIPTADO DE MENSAJES CIFRADOS

Bibliografía 119/119

Criptoanálisis, mediante algoritmos genéticos, de textos cifrados en la Guerra Civil Española con la técnica de cinta móvil

[22]. Developing a Phonemic and Syllabic Frequency Inventory for Spontaneous Spoken Castilian Spanish and their Comparison to Text-Based Inventories. *Antonio Moren, *Doroteo T. Toledano, *Raúl de la Torre, *Marta Garrote, **José M. Guirao. *Universidad Autónoma de Madrid, **Universidad de Granada, Spain

[23]. Manual de ortografía de la lengua española. Manuel Alvar, Antonia Medina. VOX 1995

[24]. Libro de estilo de ABC. Ariel S.A. 1993

[25]. Apuntes de la asignatura “Seguridad Informática”, 5º curso Ingeniería Informática 2010-11. Prof. Don Javier Jaráuta. ICAI Universidad Pontificia de Comillas.

[26]. Apuntes de la asignatura “Inteligencia Artificial”, 5º curso Ingeniería Informática 2010-11. Prof. Don Miguel A. Sanz Bobi. ICAI Universidad Pontificia de Comillas.

[27]. Apuntes de “Transmisiones y Criptografía”.Escuela Militar de Montaña y Operaciones Especiales. 1985