You are on page 1of 119

CRIPTOANLISIS, MEDIANTE ALGORITMOS GENTICOS, DE TEXTOS CIFRADOS EN LA GUERRA CIVIL ESPAOLA CON LA TCNICA DE CINTA MVIL

Proyecto de fin de carrera, Ingeniera Informtica Superior


Universidad Pontificia de Comillas ICAI (Madrid 2011)

Autor: Jos Miguel Soriano de la Cmara NDICE

Pgina

Cap 1.- Introduccin...................................................................................................... 3 1.1.- Origen del proyecto.......................................................................................... 3 1.2.- Objetivos del proyecto ..................................................................................... 4 1.3.- Herramientas empleadas................................................................................. 4 1.4.- Enfoque de resolucin ..................................................................................... 5 Cap 2.- Criptografa y Criptoanlisis.......................................................................... 9 2.1.- Mtodos de cifrado clsicos .......................................................................... 10 2.1.1.- Clasificacin de los sistemas de cifrado............................................... 10 2.1.2.- Reglas de Kerckhoffs .............................................................................. 12 2.2.- Resea histrica de los sistemas de cifra..................................................... 13 2.2.1.- La esctala lacedemonia.......................................................................... 13 2.2.2.- Mtodo Csar........................................................................................... 13 2.2.3.- Cifra Monoalfabtica. ............................................................................. 14 2.2.4.- Cifrado Vigenre ..................................................................................... 15 2.2.5.- Cifrado de Playfair.................................................................................. 17 2.2.6.- Cifrado Vernam....................................................................................... 18 2.2.7.- Cifrado Bazeries ...................................................................................... 19 2.3.- Mquinas de cifrar en el siglo XX................................................................. 21 2.3.1.- La mquina Enigma................................................................................ 21 2.3.2.- La mquina Hagelin ............................................................................... 23 2.4.- Cifrado por homfonos ................................................................................. 25 2.4.1.- Cifrado homofnico de orden n>1 ....................................................... 26 2.4.2.- Criptoanlisis de los cifrados por sustitucin con homfonos ........ 27 2.4.3.- El mtodo de cinta mvil o mtodo espaol....................................... 27 2.4.4.- Ataque al mtodo espaol: sus debilidades........................................ 31 Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico. ......................... 35 3.1.- Teora general sobre Algoritmos Genticos................................................ 37 3.2.- Preparacin de los datos de entrada............................................................ 41 3.2.1.- Clculo de frecuencias reales. ............................................................... 41 3.2.2.- Carga del texto cifrado ........................................................................... 44 3.2.3.- Generacin de la tabla inversa. ............................................................. 45 3.2.4.- Procesado del diccionario ...................................................................... 47 3.3.- Diseo de la estructura de los cromosomas ............................................... 50

Cap 1.- Introduccin.

2/119

3.4.- Inicializacin del AG...................................................................................... 51 3.5.- Reproduccin o cruce de los individuos ..................................................... 51 3.6.- Mutacin de los cromosomas. ...................................................................... 51 3.7.- Evaluacin: Funcin Objetivo (Fitness)....................................................... 52 3.8.- Definicin 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: Mtodo Kasiski (ataque a un cifrado polialfabtico)............................. 75 Anexo C: Cdigos de Baudot..................................................................................... 78 Anexo D: Cifra con ENIGMA .................................................................................... 79 Anexo E: El Mtodo Espaol segn Carmona: ao 1894....................................... 80 Anexo F: Claves y tablas de homfonos de la GC36; ejemplos. ........................... 82 Anexo G- Planificacin y Presupuesto ..................................................................... 86 Anexo H.- Cdigo fuente............................................................................................ 88 ndice de Figuras........................................................................................................ 117 Bibliografa.................................................................................................................. 118

Jos Miguel Soriano de la Cmara

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 1.- Introduccin.

3/119

Cap 1.- Introduccin.


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 Fernndez y Don Jess Mara Latorre Canteli del Instituto de Investigacin Tecnolgica de UP Comillas. Dicho proyecto es la continuacin natural del desarrollado por el ingeniero Alberto Gascn Gonzlez en el curso 2009-2010. Este proyecto ana por un lado el inters que el acontecimiento Guerra Civil Espaola o Guerra del 36 (en adelante GC36) ha despertado y despierta en cualquiera (nacional o extranjero) que se acerque y pretenda entender la Espaa del siglo XX. Por otro lado, para cualquier informtico supone un reto profesional el romper el secreto de miles de documentos que an permanecen cifrados en numerosos archivos histricos (en Espaa y fuera de ella), secreto que, roto, podra revelar datos sobre interpretaciones de hechos que ahora parecen definitivas. Adicionalmente, este proyecto permite la aplicacin del algoritmo gentico a las tcnicas de criptoanlisis y su desarrollo. El proyecto de Don Alberto Gascn referido al inicio cea sus hiptesis con las siguientes acotaciones: a) La tabla de homfonos (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 ms caracteres1. Nuestra solucin se plantea: Cuando la tabla de homfonos y la clave (ver pg. 28) no son conocidas porque de hecho el criptgrafo no las conoce. Por resolucin con Algoritmo Gentico (en adelante AG) sin limitacin de palabras o n de caracteres. Incorporando un diccionario real (como fichero de texto) de 550.000 trminos para la bsqueda de coincidencias que permite mejorar el anlisis estadstico de la frecuencia de los monogramas, bgramas, trigramas e incluso de palabras. Implementando en el algoritmo reglas de uso del idioma espaol del tipo despus 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.

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

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 1.- Introduccin.

4/119

1.2.- Objetivos del proyecto a) Objetivo principal: diseo de un algoritmo gentico para el criptoanlisis de mensajes generados a partir de tabla de homfonos y clave desconocidas. Objetivos parciales 1. Anlisis de la regin 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 optimizacin con restricciones equivalente al proceso de criptoanlisis. 3. Diseo del AG que permita resolver el problema anterior. El propio desarrollo del AG ha ido generando la necesidad de una obligada interaccin del criptoanalista2 con la herramienta que supone, en s, el AG codificado (por ejemplo, en la fase de inicializacin del algoritmo), lo que ha obligado a definir un segundo objetivo: b) Objetivo secundario: diseo 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 tcnicas de descifrado por fuerza bruta. 2. Permite opciones de inicializacin (diccionarios a usar, texto cifrado, etc.) 3. Facilita informes intermedios y permite restricciones durante la ejecucin para que el usuario pueda incorporar su anlisis 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 ms en esta materia: la intuicin. 1.3.- Herramientas empleadas Microsoft Visual Studio 2008. Librera de algoritmos genticos: GALIB v2.4.6 de Enero del 2005 adaptada a c++. Excel para realizar anlisis estadsticos y matemticos a la hora de redactar los algoritmos. Notepad++ para comprobar el funcionamiento de los algoritmos antes de implantarlos. Microsoft Visio para la realizacin de los diagramas de flujo de los algoritmos.

Ver inicio del Captulo 2


Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 1.- Introduccin.

5/119

1.4.- Enfoque de resolucin Como se detalla en captulo 2.4.3, el mtodo de Cifrado por Cinta Mvil o Mtodo Espaol 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 numricos (homfonos) por letra con un rango3 de 00-99 (ver pg. 28). De manera que a cada letra del mensaje origen (texto plano) le pueden corresponder hasta 5 nmeros (<= 99) y a cada nmero le corresponde una sola letra. Al cifrar el texto origen cada letra puede ser cifrada al azar usando cualquiera de los nmeros de su columna. Adems, mediante el uso de una clave se hace bailar la correspondencia entre las columnas de nmeros y las letras (ver Fig. 1 de cap 2.4.3). Del ejemplo desarrollado en pgina 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 mvil 0-1

Para aplicar el algoritmo gentico, se realiza una ordenacin previa, de menor a mayor, de todos los nmeros (tomados una sola vez) contenidos en el texto cifrado, componiendo un vector de valores numricos. 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 numricos 0-2

A cada nmero le corresponder una sola letra del texto plano. Pero, no conociendo la tabla4, a cada nmero le podra corresponder cualquiera de las 27 letras del alfabeto. Cmo reducir ese espacio de bsqueda tan amplio -27 letras posibles por nmero-?: 1. Se calcula la frecuencia relativa de cada nmero (de cada homfono) en el texto cifrado y ese valor se multiplica por 1, por 2, por 3, por 4 y por 5, que es el nmero habitual de homfonos por columna de letra en la tabla de cifrado5. 2. Se comparan esos cinco resultados con las frecuencias relativas de aparicin de las letras en un texto de la poca (ver pg. 74), admitiendo un margen de +-20% para aceptar como positiva la comparacin (ver tabla de pg. 32).

3 Rango 10-99 y de 3 a 4 valores numricos en la definicin clsica de finales del siglo XIX (ver [7] y [8]). 4 5

Ver nuestro planteamiento en pgina 3.

Es de suponer que si el cifrador dispone de 3 homfonos (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 aparicin en el texto cifrado de uno de los homfonos, se debera 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).
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 1.- Introduccin.

6/119

3. Con ese margen de error, en las pruebas realizadas se obtiene para cada nmero del vector de valores un conjunto L de letras candidatas con una media de 9 letras por cada homfono en vez de las 27 iniciales. Se ha reducido el espacio de bsqueda en un 65%. Se puede componer, as, una tabla, que llamaremos tabla inversa de homfonos que con alta probabilidad contiene la solucin que estamos buscando:
Homfonos 01 f h q z j u Letras Candidatas 02 03 b a g e v y 86 89 r x i d l j x

Tabla inversa de homfonos 0-3

Se puede ver en detalle este anlisis en aptdo. 2.4.4 Cmo inicializamos el cromosoma del AG? 1. El vector de valores numricos 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 reduccin del espacio de bsqueda explicado en los prrafos anteriores. Cada gen (letra) debe pertenecer al conjunto L de candidatos del homfono. b. No puede repetirse una letra ms de cinco veces en el cromosoma puesto que en la tabla de homfonos a una letra no se le asignan ms de 5 nmeros. Ejemplo: si el homfono 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 homfono 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 numricos 0-4 z g e a o q a e s u o q s e i t c Cromosoma inducido 0-5 g r e s x d

2.- La calidad del cromosoma se evala en funcin 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. Adems, se realiza una bsqueda secuencial en el texto resultante sobre un diccionario buscando palabras de una determinada longitud; el nmero de palabras encontradas incrementa la valoracin del cromosoma de cara al proceso de seleccin (ver funcin objetivo en pg. 52).
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 1.- Introduccin.

7/119

3.- El proceso de reproduccin trata de conseguir un cromosoma con mejor resultado en la funcin objetivo, respetando como genes las letras del conjunto candidato de cada homfono 4.- El proceso de mutacin cambia genes al azar dentro del conjunto candidato y se reitera hasta encontrar un individuo ms ptimo. Cmo definimos el texto final del mensaje descifrado? El AG informa al analista de los cromosomas que evala y de su resultado en la funcin 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 solucin final (ver proceso en detalle desarrollado en cap 4 Casos de Estudio). Con el proceso descrito se completa el criptoanlisis sin necesidad de encontrar la tabla de homfonos. sta, en todo caso, surge como parte de la informacin que resulta del proceso.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 1.- Introduccin.

8/119

Como resumen del enfoque de solucin expuesto se presenta el esquema siguiente:

Texto Texto Cifrado Cifrado Vector de valores Estudio de Frecuencias Tabla Inversa de homfonos

Criptograma del Mtodo Espaol

Algoritmo Gentico

Cromosoma Inicial Cromosoma Inicial Cromosoma Inicial Cromosoma Inicial

Funcin Objetivo

Cromosoma candidato Cromosoma Inicial Cromosoma Inicial Cromosoma Inicial

Utilidad de Anlisis

Analista

Textos Textos planos planos Texto Texto Final Final

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

9/119

Cap 2.- Criptografa y Criptoanlisis


No siendo objeto de este trabajo el estudio de los diferentes sistemas de cifrado o su trayectoria histrica, pero con objeto de enmarcar y clasificar el mtodo de cifrado por cinta mvil y de definir algunos trminos habituales en criptografa, a continuacin se desarrolla un breve estudio sobre la materia y se describen algunos de estos sistemas. Etimolgicamente la palabra criptografa deriva del griego kriptos (oculto) y de graphos (escritura), lo que da una clara idea de su definicin clsica: arte de escribir mensajes en clave secreta o enigmticamente [1]. Fue considerada un arte hasta que Claude Shannon public en 1949 el artculo Teora de los sistemas de comunicacin secretos y poco despus el libro La teora matemtica de la comunicacin, con Warren Weaver. Entonces la criptografa empez a ser considerada una ciencia aplicada, debido a su relacin con otras ciencias, como la estadstica, la teora de nmeros, la teora de la informacin y la teora de la complejidad computacional [1]. La publicacin en el ao 1976 de un artculo por parte de Whitfield Diffie y Martin Hellman en el que proponen una nueva filosofa de cifra, dando lugar a los criptosistemas de clave pblica, se considera el segundo hito significativo en la criptografa moderna [4]. Ahora bien, la criptografa corresponde slo a una parte de la comunicacin secreta. Si se requiere secreto para la comunicacin, 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 tcnicas y mtodos que constituyen una ciencia conocida como criptoanlisis. Al conjunto de ambas ciencias, criptografa y criptoanlisis, se le denomina criptologa [1]. Histricamente la criptologa ha sido una materia exclusiva del mbito militar o diplomtico. Sin embargo en la sociedad actual la criptologa ha extendido sus aplicaciones a todo el mbito civil proporcionando la seguridad de las redes telemticas, incluyendo la identificacin de entidades y autenticacin, el control de acceso a los recursos, la confidencialidad de los mensajes transmitidos, la integridad de los mensajes y su no repudio [1].

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

10/119

2.1.- Mtodos de cifrado clsicos Se llama cifrado (o transformacin criptogrfica) a una transformacin del texto original (texto plano, inicial o texto claro) que lo convierte en el llamado texto cifrado o criptograma. Anlogamente, se llama descifrado a la transformacin que permite recuperar el texto original a partir del cifrado. Cada una de esas transformaciones est determinada por un parmetro llamado clave [1]. 2.1.1.- Clasificacin de los sistemas de cifrado Por ocultacin: Disimulo del mensaje origen dentro de otros textos. Por transposicin: Mtodo 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 sustitucin: Mtodo 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, tros de letras, mezclas de lo anterior, entre otros. El receptor descifra el texto realizando la sustitucin inversa [1]. En la figura siguiente hacemos una clasificacin detallada de esas tres tcnicas de cifrado clsico generales descritas.

Sistemas de cifra clsicos 1

Haremos a lo largo de las siguientes pginas un somero estudio comparativo de los sistemas reflejados en la fila inferior del esquema de arriba (elaboracin propia). Si el cifrado opera sobre caracteres simples, se denomina cifrado por sustitucin simple; un cifrado que opera sobre grupos de letras se denomina poligrfico. Un cifrado monoalfabtico usa una sustitucin fija para
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

11/119

todo el mensaje, mientras que un cifrado polialfabtico usa diferentes sustituciones en diferentes momentos del mensaje, por ejemplo los homfonos, 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 aplicacin iterativa de operaciones de cifrado sobre texto ya cifrado, combinando o no sustitucin y transposicin [1]. En un cifrado por transposicin, las unidades del texto plano son cambiadas usando una ordenacin diferente, pero las unidades en s mismas no son modificadas. Por el contrario, en un cifrado por sustitucin las unidades del texto plano mantienen el mismo orden, lo que se cambia son las propias unidades del texto plano. Segn la relacin existente entre la clave de cifrado y descifrado, los sistemas criptogrficos se pueden dividir en dos grandes grupos: cifrado simtrico 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 asimtrico o de clave pblica [1]. En los sistemas asimtricos 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 pblica de este ltimo, pero slo aquel que conozca la clave privada correspondiente puede descifrarlo correctamente. El criptoanalista que intente averiguar la clave privada a partir de la pblica se encontrar con un problema intratable [1]. Aqu trataremos los sistemas clsicos. El adjetivo de clsico, en contraposicin al de criptosistemas modernos, se debe tanto a las tcnicas utilizadas en las primeras, bsicamente operaciones de sustitucin y transposicin de caracteres unidas al concepto de clave secreta, como al uso de mquinas dedicadas a la cifra. La criptografa clsica abarca, pues, desde tiempos inmemoriales hasta los aos de la postguerra mundial, es decir, hasta la mitad del siglo XX. En el caso de los sistemas modernos, stos hacen uso, adems de lo anterior, de algunas propiedades matemticas como, por ejemplo, la dificultad del clculo del logaritmo discreto o el problema de la factorizacin de grandes nmeros, unido esto a la representacin binaria de la informacin. 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 podramos denominar clsicos como son los de transposicin y sustitucin con una clave privada, si bien en estos sistemas la operacin se realiza sobre una cadena de bits y no sobre caracteres [4]. Cundo un sistema criptogrfico se considera ptimo o eficaz?. En 1883, el francs Auguste Kerckhoffs, en su libro La criptografa militar, enuncia las reglas que, desde entonces, la comunidad criptogrfica considera que debe Auguste Kerckhoffs 1 cumplir un buen sistema criptogrfico [1].

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

12/119

2.1.2.- Reglas de Kerckhoffs:


1.

2.

3. 4. 5.

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 recuperacin del texto original sea suficiente para mantener la seguridad del sistema. Todo sistema criptogrfico debe estar compuesto por dos tipos distintos de informacin. Pblica, como es la familia de algoritmos que lo definen. Privada, como es la clave que se usa en cada cifrado particular. La forma de escoger la clave debe ser fcil de recordar y modificar. Debe ser factible la comunicacin del criptograma por los medios de transmisin habituales. La complejidad del proceso de recuperacin del texto original debe corresponderse con el beneficio obtenido.

Genricamente 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.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

13/119

2.2.- Resea histrica de los sistemas de cifra 2.2.1.- La esctala lacedemonia: Del griego (skytl). 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 idnticas en sus medidas, en especial su grosor. Se basaba nicamente en la alteracin del mensaje mediante la escritura de los smbolos de forma vertical sobre una cinta enrollada en Esctala lacedemonia 1 un rodillo, de manera que al desenrollarla los smbolos del mensaje quedaban desordenados o traspuestos, por lo que slo se poda leer el mensaje tras enrollar la cinta en un rodillo de igual grosor. Es el mtodo de transposicin ms elemental; tambin conocido como transposicin 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 nmero de caras que presenta la esctala y el nmero de filas la cantidad resultante de dividir el largo total del mensaje entre el ancho de fila. (Ver http://es.wikipedia.org/wiki/Esctala) La frase ostentar el bastn de mando" tiene su origen en esta poca. El bastn (la esctala) aseguraba el control del sistema de informacin y por tanto de la seguridad y de la vida poltica en la antigua Grecia [4]. 2.2.2.- Mtodo Csar. Otra de las primeras noticias sobre criptografa proviene de la poca romana (siglo I a.c.). El cifrado en este caso consista en una sustitucin segn 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: Alfabeto Plano Cifrado Texto Plano Cifrado Transmitir: Atacar a las 6 horas del jueves 10
A D B E C D E F G H I J K L M N O P Q R S T U V W X Y F G H I J K L M N O P Q R S T U V W X Y Z A B Z C Z C

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 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 DWDFD UDVHL VKRUD VMXHY HVGLH CXYZM

Matemticamente podemos describir el mtodo usado por Julio Csar como una funcin lineal del tipo E(x)= (x+3) mod 26. Para descifrar emplearamos la funcin 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 an,
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

14/119

capacitados para leer el latn codificado de esta manera. De hecho, el Mtodo Cesar se ha usado durante siglos hasta la poca del Renacimiento. 2.2.3.- Cifra Monoalfabtica. El cifrado Cesar visto, se puede generalizar usando cualquier desplazamiento hasta 26 con la evidente ventaja de que es muy fcil recordar la clave: slo un nmero entre 1 y 26. Pero tambin es fcil de descifrar: hay 26 alfabetos posibles [1]. Podemos anular esta facilidad recordando que si tenemos 26 letras podramos desordenar el alfabeto plano en alguna de las 26! (4x1026) permutaciones. Una tcnica habitual para generar alguno de esos 26! alfabetos posibles desplazados era usar palabra clave: en dicha palabra se eliminan caracteres repetidos y a continuacin se relaciona el resto del alfabeto si repetir caracteres. Veamos un ejemplo:
Mensaje: Alfabeto Plano Clave Cifrado Texto Plano Cifrado Transmitir

Atacar a las 6 horas del jueves 10


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 S A N T I A G O 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 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 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 SESNS CSDIQ DPYCS DRFIH IDTQI LFINE

En la tabla, de elaboracin propia como todas las que seguirn, hemos dispuesto el mensaje a transmitir como tradicionalmente se ha enseado en las escuelas de transmisiones [27]: compartimentndolo en grupos de 5 caracteres, formando una especie de palabras que facilitaran la lectura, emisin, copia del mensaje cifrado o comprobacin en la recepcin, 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 numricos (coordenadas, fechas y horas) y de abreviaturas (H -hora-, PD posicin 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 introducan como nulos; en el ejemplo clave SANTIAGO, grupos nulos 3 y 5, dara este mensaje a transmitir:
Transmitir SESNS CSDIQ XFRWE DPYCS BFTUP DRFIH IDTQI LFINE

Igualmente se instrua en una redaccin a formato telegrama previa al cifrado, pero que mantuviera la esencia de la informacin, con objeto de reducir los recursos requeridos y errores en el proceso de transmisin y descifrado. Es seguro enviar un mensaje con este sistema? Durante siglos esta tcnica se consider segura. En el siglo XI, Al-Kindi encontr un punto dbil en la codificacin monoalfabtica: cada letra del alfabeto plano se sustituye por
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

15/119

otra y siempre la misma. Si el texto cifrado es suficientemente largo, un anlisis de frecuencia de sus caracteres comparado con las frecuencias de uso habituales en el idioma de que se trate permitir deducir la tabla de conversin utilizada [5]. El criptoanlisis acababa de nacer. La idea de la sustitucin se utiliza tambin en la Biblia, donde se pueden encontrar textos cifrados con atbash hebreo: consiste en usar el carcter simtrico en el alfabeto (el de la a es la z), a lo que se llama mtodo espejo, o atbash en hebreo; por ejemplo ayuda ser zbfwz [1]. Es del siglo XIV la obra ms antigua que existe sobre criptografa. 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 criptografa es impulsada por las intrigas entre el papado y las ciudades-estado italianas [5]. En 1466 Len Battista Alberti, msico, pintor, escritor y arquitecto, concibi un sistema de sustitucin polialfabtica 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 posicin relativa de dos crculos concntricos que determinar la correspondencia de Disco de Alberti 1 los signos; son los llamados discos de Alberti. 2.2.4.- Cifrado Vigenre Durante el siglo XVI se generaliza el uso de la criptografa en los ambientes diplomticos y en 1586 Blaise de Vigenre publica una obra titulada Trait des chiffres o secrtes manires d'ecrire, donde rene diferentes mtodos utilizados en la poca. En dicho tratado recoge un mtodo originalmente descrito por Giovan Batista Belaso en 1553. De ah que incorrectamente se le atribuyera en el siglo XIX a Vigenre, conocindose an hoy como el "cifrado Vigenre". El cifrado Vigenre es un cifrado de sustitucin polialfabtico que se puede considerar como la generalizacin del cifrado Csar. La clave est constituida por una secuencia de smbolos del alfabeto K = {k0, k1, ... ,kd-1} de longitud d y donde ki<>kj para todo i,j<d (i<>j). Emplea la siguiente transformacin congruente lineal de cifrado [1]: Ek (mi) = (mi + k (i mod d)) mod n siendo mi el i-simo smbolo del texto claro y n el cardinal del alfabeto (26 sin la ). En el ejemplo que sigue, plano T 20
clave Z 26 (20+26) mod 26= 20S

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

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

16/119

TABLA de VIGENRE
1 1 2 3 4 5 6 7 8 9 Entrada clave 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 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 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

Entrada texto plano 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 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 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 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 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 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 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 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 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 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 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 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 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

16 17 18 19 20 21 22 23 24 25 26

Para cifrados de campo se usaba la llamada Tabla de Vigenre. Veamos un ejemplo de cifrado: Tras relacionar la palabra clave reiteradamente hasta abarcar todo el mensaje, el carcter cifrado se obtena leyendo en la primera fila el carcter plano y en la primera columna el carcter correspondiente de la palabra clave; el carcter cifrado resultaba de la interseccin de las dos entradas en la tabla. Ejemplo:
Mensaje: Clave: Texto: plano clave cifrado Transmitir: Atacar a las 6 horas del jueves 13 A Z U L A T A C A R A S E I S A Z U L A Z U L A Z U A S U N A Q U D E H M ASUNA QUDEH H O R L A Z S O Q MSOQU A S J U E U L A Z U U D J T Y DJTYG ERNCE V E S T R E C E L A Z U L A Z U G E R N C E B Y 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. Segn la forma de entrar a la tabla, este mtodo tuvo variantes:
Vigenre
Clave

Plano

Beaufort
Plano

Cifrado

Alemana
Clave

Cifrado

Cifrado

Clave

Plano

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

17/119

Durante siglos el mtodo Vigenre fue considerado irrompible; si la clave de Vigenre tiene mas de 6 caracteres distintos, se logra una distribucin de frecuencias en el criptograma del tipo normal, es decir ms o menos plana, por lo que se logra difuminar la redundancia del lenguaje. En 1863, Friedrich Kasiski (oficial prusiano) public un libro sobre criptografa, Die Geheimschriften und die Dechiffrierkunst ("La escritura secreta y el arte del descifrado"). sta fue la primera publicacin sobre criptoanlisis aplicado a los cifrados de sustitucin polialfabticos, especialmente el cifrado de Vigenre, desarrollando lo que luego se ha llamado Mtodo Kasiski (ver Anexo B). La importancia del trabajo criptoanaltico de Kasiski no fue valorada entonces o, si lo fue, se mantuvo en secreto. De hecho esta tcnica luego se ha sabido que fue diseada tambin por el britnico Charles Babbage (Gran Bretaa 1791-1871) y usada en campaas militares inglesas, siendo considerada un secreto militar. Como resultado, el mrito por haber descifrado esta clave le fue otorgado a Friedrich Kasiski. 2.2.5.- Cifrado de Playfair. Sustitucin 2-palabras o digrmico Los cifrados anteriores se hacan carcter a carcter, es decir eran monogrmicos. Para aumentar la seguridad de la cifra y romper las estadsticas, podemos cifrar por poligramas o bloques de caracteres. Un sistema inventado a finales del siglo XIX (obra del fsico Charles Wheatstone pero difundido por su amigo Lord Playfair (que acab dndole 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) sern el par respectivo cifrado tras aplicar las siguientes reglas [1]: Si (x,x) estn en la misma fila, (y,y) son los dos caracteres de la derecha. Si (x,x) estn en la misma columna, (y,y) son los dos caracteres de abajo. Si (x,x) estn en filas y columnas distintas, (y,y) son los dos caracteres de la diagonal, desde la fila de x. Si x=x, insertar carcter sin significado entre x y x para evitar su repeticin, despus aplicar reglas 1-3 5.- Si el nmero de letras es impar, aadir 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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

18/119

M E B N V Texto cifrado

Cuadrado Playfair U R C I L A G O D F H K P Q S T W X Y Z

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

Este sistema tambin es criptoanalizable pues en el criptograma persisten algunas propiedades del lenguaje; en este caso la distribucin de digramas tpicos; 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, segn el principio de Kerckhoffs, un sistema criptogrfico 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, disea un dispositivo criptogrfico para comunicaciones telegrficas basado en los 32 cdigos de Baudot (ver anexo C) que usaban los teletipos desarrollados por su compaa. Estos cdigos representan los caracteres del lenguaje con cinco elementos que pueden ser el espacio o la marca (el cero y el uno) diseado para transmisiones telegrficas. Es decir, un sistema binario con 5 dgitos: 2^5= 32 caracteres. Este cifrador, que tuvo una gran aplicacin durante la Primera Guerra Mundial, basa su seguridad en el secreto de una clave aleatoria que se supone tan larga o ms que el mensaje y que luego de usarse debe destruirse [4]. Este sistema por sustitucin polialfabtica es el caso lmite del cifrado Vigenre. 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 sucesin de smbolos (bits o caracteres) llamada serie cifrante, operando o-exclusivo XOR cada smbolo de sta con el correspondiente del texto en claro. Debido a la definicin de la funcin XOR, el descifrado se realiza, igualmente, operando con dicha funcin 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. Adems, es el nico que verifica tal condicin [1]. Cada carcter mi se representa con 5 bits en cdigo Baudot que se suma OR exclusivo (mdulo 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:

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

19/119

C = EK(M) = C1C2C3 ... Cn Donde Ci = (mi + ki) mod 2 para i = 1 ,2 ,..., n; o sea, ci = mi XOR ki
23 caracteres 23 caracteres Cifra 10011 11110 00010 10100 00101 00101 10111 11111 10110 11011 00110 10110 00101 10011 01000 00011 11111 00000 11100 01111 01111 11111 00100 Cifra W V 2 H S S Q 3 P 4 I P S W 1 A 3 6 M K K 3 5 Mensaje: Atacar el jueves trece a las seis horas plano: ATACARJUEVESTRECEASEISH Clave: TCEGIKMOQSUWYBDFVABCDGT Plano A T A C A R J U E V E S T R E C E A S E I S H
6

XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR XOR

Clave T C E G I K M O Q S U W Y B D F V A B C D G T

en cdigo Baudot Plano Clave 00011 XOR 10000 10000 XOR 01110 00011 XOR 00001 01110 XOR 11010 00011 XOR 00110 01010 XOR 01111 01011 XOR 11100 00111 XOR 11000 00001 XOR 10111 11110 XOR 00101 00001 XOR 00111 00101 XOR 10011 10000 XOR 10101 01010 XOR 11001 00001 XOR 01001 01110 XOR 01101 00001 XOR 11110 00011 XOR 00011 00101 XOR 11001 00001 XOR 01110 00110 XOR 01001 00101 XOR 11010 10100 XOR 10000

= = = = = = = = = = = = = = = = = = = = = = =

= = = = = = = = = = = = = = = = = = = = = = =

Cifrado : WV2HS SQ3P4 IPSW1 A36MK K35

Para la operacin de descifrado utilizaremos el mismo algoritmo por la propiedad involutiva de la operacin OR exclusivo. Esto es: ci XOR ki = (mi XOR ki) XOR ki Como ki XOR ki = 0 para ki = 0 y ki = 1 2.2.7.- Cifrado Bazeries: Como hemos visto, sustitucin y transformacin no resultan muy fiables; sin embargo combinados resultan la base de sistemas mucho ms difciles de romper. Un ejemplo de cifrado producto (transposicin ms sustitucin) fue
Como se explica en Anexo C, los caracteres especiales ha sido representados por los dgitos 1 a 6 a efectos de este ejemplo.
6

se obtiene ci XOR ki = mi

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

20/119

ideado por Etienne Bazeries (criptlogo y comandante del Ejrcito francs, 1846 a 1931). En este sistema se fija un nmero clave menor que 1.000.000 y se le expresa en texto eliminando las segundas y siguientes repeticiones del mismo carcter. El texto plano se ordena en grupos de cardinal igual a las cifras que componen el nmero 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 numrica expresada en texto sin repeticiones, relacionados de izquierda a derecha y de arriba abajo, completando los huecos a partir del ltimo carcter de la clave con los caracteres alfabticos que le siguen, siempre sin repeticiones. 1 fase, transposicin: se invierten simtricamente los caracteres en cada uno de los grupos del texto plano. 2 fase, sustitucin: en la matriz 1 se busca el carcter plano; el carcter cifrado es el de su misma posicin en la matriz 2
Mensaje: Clave: Texto: plano Grupos-clave transposicin Atacar a las 6 horas del jueves 13 23267 VEINTITRES MIL DOSCIENTOS SESENTA Y SIETE ATACAR A SEIS HORAS JUEVES TRECE AT ACA RA SEISHO RASJUEV ES REC EZ TA ACA AR OHSIES VEUJSAR SE CER ZE matriz 1 5x5 A F K P B G L Q C H M R D I N S E J O T matriz 2 5x5 V E I N R S M L O C A Y A B C F H J K P
VEINTRSMLDOCAY

U V X Y Z

T D Z G Q

sustitucin PV VOV VY KCFBHF DHTJFVY FH OHY QH transmisin PVVOV VYKCF BHFDH TJFVY FHOHY QHZYX

Para la transmisin se agrupan en grupos de 5 y se completa el ltimo con caracteres nulos.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

21/119

2.3.- Mquinas de cifrar en el siglo XX La rotura de los sistemas tradicionales de cifrado a principios del siglo XX y la masificacin de medios materiales y humanos que permiti la Revolucin Industrial del XIX en los usos de la guerra moderna en todos los niveles, incluido el trfico de mensajes cifrados, deriv en el diseo de mquinas que permitieran automatizar el lento y engorroso sistema manual de cifrado. Algunos de los esquemas de cifrado producto fueron usados en los aos 20 del siglo pasado para el diseo de mquinas de rotor. Las ms conocidas fueron la HAGELIN y la ENIGMA, usadas durante la 2 Guerra Mundial y que fueron criptoanalizadas en su momento destacando tanto por sus caractersticas como por el halo de misterio que las rode. El sistema de rotores daba lugar a un importante nmero de claves secretas que, para aquel entonces, dificultaba in extremis el criptoanlisis. 2.3.1.- La mquina Enigma Inventada por el ingeniero alemn Arthur Scherbius en el ao 1923, la mquina Enigma [4] consiste en un banco de rotores montados sobre un eje, en cuyos permetros haba 26 contactos elctricos, uno por cada letra del alfabeto ingls. En realidad el precursor de este tipo de mquinas con rotores fue Edward Hugh Hebern que algunos aos antes inventa y comercializa los denominados cifradores de cdigos elctricos. Esta mquina debe su fama a su amplia utilizacin durante la Segunda Guerra Mundial, en especial por parte del ejrcito alemn. El imperio japons tambin cifr sus mensajes durante el citado conflicto con una mquina similar denominada Purple. Los rotores se desplazaban como un odmetro. Es decir, al cifrar un carcter el primer rotor avanzaba una posicin (correspondiente a 1/26 de una rotacin) y slo cuando ste haba realizado una rotacin completa (26 letras), el segundo se desplazaba un carcter, y as sucesivamente [4]. Los rotores volvan a su posicin inicial, tras un perodo 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 polialfabtico, porque la misma letra poda ser sustituida por varias letras distintas a lo largo de un mensaje. Por ejemplo, una 'A' poda ser codificada como una 'M' al principio de un mensaje y ms adelante (en el mismo mensaje) ser codificada como una 'T'. La operacin de cifra para estas mquinas sigue la siguiente congruencia [4]:
Enigma K adquirida en Nov-36 1

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


Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

22/119

donde pi es la posicin 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 carcter i-simo mi del mensaje M = m1m2m3... se cifrar como: Eki(mi) = ft ..... f1(M) donde indica la posicin relativa entre dos rotores colindantes y t el nmero de rotores.

Rotores de Enigma. www.simonsingh.net 1

Haba ciertas caractersticas de la Enigma que facilitaban un poco la tarea de decodificacin. Por ejemplo, las sustituciones que se realizaban eran tales que una letra nunca poda ser codificada consigo misma. Es decir, una 'A', nunca poda 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 posicin inicial H, D y X. Por mucho que repitamos A nunca se cifra como A Los anillos movibles alrededor de los rotores tambin incrementaban la complejidad de la mquina. Su objetivo era asignar un nmero a cada posicin del rotor (la cual a su vez corresponda a una letra), de manera que aunque se supiera cul era la posicin inicial de los rotores, el mensaje no podra descifrarse si no se conoca la posicin fsica de los anillos. Cifrar con la mquina Enigma era un proceso lento. Lo operadores trabajaban en grupos de dos, con una persona pulsando las teclas, operacin muy lenta ya que las teclas deban pulsarse con mucha fuerza para hacer girar los rotores, y otro registrando la letra cifrada que se encenda en el panel superior de bombillas. Las primeras mquinas Enigma tenan tres rotores y unos doce kilos de peso. La mayora de los pases compraron maquinas para su evaluacin y todos ellos hicieron sus versiones. La versin britnica era conocida como TYPEX y de ella se construyeron unas 12.000 unidades, siendo adoptada por el ejrcito y la RAF. Incluso los polacos, que fueron de los primeros en romper el cdigo generado por la mquina, tuvieron su versin de la misma que llamaban LACIDA [15]. En Espaa, el Bando Nacional, durante la Guerra Civil del 36, adquiri 10 mquinas, 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 Pennsula una cincuentena de estas mquinas [10].
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

23/119

Quien desee hacer una prueba de funcionamiento de la mquina 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 mquina Hagelin La mquina Hagelin [17] fue inventada por el criptlogo sueco Boris Hagelin, quien adquiri en 1927 la fbrica de mquinas de cifrar de Arvid G. Damm, otro inventor sueco que no tuvo la suerte de sacar un producto competitivo en el mercado. Entre los aos veinte y los treinta, Hagelin disea diversas mquinas (B-21, B-211, C-36, C-38, etc.) en las que a travs de ruedas con piones realiza una cifra similar a la utilizada por el sistema de Beaufort7 [4]. La particularidad de estas mquinas, que a la postre hizo millonario a Hagelin, probablemente ante la desesperacin de Damm, estaba en una Hagelin CX-52 1 periodicidad muy alta puesto que el nmero 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 perodo era igual a su producto, un valor que supera los 100 millones. La ecuacin matemtica 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 carcter correspondiente dentro de dicha palabra, mi el i-simo smbolo del texto claro y n el cardinal del alfabeto. El modelo C-38 de esta mquina fue adquirido por el Ejrcito USA para las comunicaciones militares y diplomticas durante la IIGM con la designacin de M-209. Un diseo compacto y reducido (del tamao de una sandwichera) facilitaba su uso incluso en niveles tcticos inferiores, pero, sobre todo, el disponer de un sistema de impresin era lo que de verdad facilitaba su uso en relacin, por ejemplo, a mquinas como Enigma. Un desarrollo posterior de 1952, el modelo C-52, ha estado operativo en ms de 60 pases hasta inicios de los 80 y durante toda la guerra fra [17]. En Espaa, en los aos cincuenta y a
7

Variante del cifrado Vigenre (ver pg. 13)


Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

24/119

partir de 19548, con las mquinas Enigma ya retiradas por obsoletas, el Ejrcito espaol empez a dotarse con mquinas Hagelin para asegurar sus comunicaciones [10]. Para informacin ms completa y descarga de simulador se recomienda entrar en http://users.telenet.be/d.rijmenants/en/c52tech.htm

Primer Tratado de Amistad y Cooperacin Espaa-USA de 26-sept-1953.


Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

25/119

2.4.- Cifrado por homfonos Qu entendemos por homfonos? [4] La definicin del vocablo puede encontrarse en cualquier diccionario: "palabras de igual pronunciacin o sonido y distinto significado" como por ejemplo hola y ola. En criptografa entenderemos por homfonos a las distintas representaciones que damos al mismo carcter plano sin seguir ninguna relacin o funcin determinada. Por ejemplo, si establecemos una relacin entre los 27 caracteres del alfabeto con los 100 primeros nmeros del 0 al 99, al cifrar podramos sustituir la letra A con cualquiera de los siguientes nmeros: {1, 15, 18, 29, 50, 97}. Luego, el receptor autorizado, que conoce esta correspondencia, simplemente reemplaza dichos nmeros por la letra A para descifrar el mensaje. En trminos matemticos, pues, una sustitucin homofnica es una correspondencia de uno a muchos en lugar de una correspondencia uno a uno tpica de los mtodos de sustitucin monoalfabticos. 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 tcnica descrita da lugar a los denonimados cifradores por homfonos, cuya caracterstica principal es la de suavizar la distribucin de frecuencias tpica del lenguaje, de forma que el criptoanalista no pueda emplear las tcnicas estadsticas aplicables en los mtodos anteriores. Asignamos, para ello, un mayor nmero de homfonos a los caracteres ms frecuentes del lenguaje y un menor nmero a aquellos menos frecuentes, con el objeto de que la distribucin de estos valores se asemeje lo ms posible a una distribucin normal [4]. Observamos en el ejemplo que sigue como con arreglo a la tabla de homfonos definida, el mensaje atacar el jueves diez a las 6 horas quedar cifrado segn caracteres de cifrado 1 o de cifrado 2 o de cualquier otra combinacin 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

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 homfonos

Entrada texto plano


O P Q 00 38 94 05 95 07 54 72 90 99 97 R 29 35 40 42 77 80 69 S 11 19 36 76 86 96 75 T 17 20 30 43 49 U V W X Y Z 08 34 60 28 21 02 61 89 52 63

A B C D E F G H I J K L M N 09 48 13 01 14 10 06 23 32 15 04 26 22 18 12 81 41 03 16 31 25 39 70 37 27 58 33 62 45 24 50 73 51 59 47 79 44 56 83 84 66 53 46 65 88 71 67 55 68 93 91 78 57 85 92 64 82 74 87 98

Cifrado por homfonos 1

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

26/119

En la tabla de arriba se observa como las letras que ms frecuencia de aparicin tienen en un texto son las que presentan ms alternativas de eleccin de homfono. En http://simonsingh.net/The_Black_Chamber/homophoniccipher.htm se puede realizar una prctica de cifra homofnica automtica. El criterio para asignar los homfonos no siempre tiene que ser a travs de una tabla cartesiana. Ms novelesco es el sistema usado en el cifrador homofnico ms conocido de la historia de la criptografa, 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 tcnica aplicada por Beale para formar el conjunto de homfonos del cifrado B2 es sencilla pero ocurrente: asigna nmeros a los caracteres del alfabeto segn la posicin de la palabra en cuestin que comienza con dicha letra dentro del texto de la Declaracin de la Independencia de los Estados Unidos. Se puede ampliar informacin en [20]. 2.4.1.- Cifrado homofnico de orden n>1 La fortaleza del cifrado est, pues, en la tabla o el texto que determina los homfonos. Un cifrador por homfonos de orden n > 1 ser aquel sistema que para cada carcter plano prevea dos o ms conjuntos posibles de caracteres homfonos [1]. Un orden 2 se puede obtener, por ejemplo, a travs de la tabla de homfonos 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 funcin que defina para cada carcter del mensaje plano cmo 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 funcin, junto con la tabla, deber ser conocida por el destinatario del mensaje [27].
A A B C D R C2 W9 Z5 H8 Q5 O8 J2 R1 N6 Z0 S1 B A2 C V1 H0 D X5 T3 S9

Usando la tabla de ejemplo, se puede disear otro cifrador por homfonos de orden 2. Definimos dos Tabla de homfonos 2 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 interseccin 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].

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

27/119

2.4.2.- Criptoanlisis de los cifrados por sustitucin con homfonos Si ningn smbolo aparece con ms frecuencia que ningn otro, un intento de desciframiento usando el anlisis de frecuencia no parece posible. Ofrece, por tanto, una seguridad perfecta el cifrado por homfonos?. No del todo, aunque estos sistemas pueden llegar a ser extremadamente difciles de romper, especialmente si la asignacin de tales valores no sigue una lgica. Con una gran cantidad de texto cifrado es posible encontrar algunas cadenas de nmeros o smbolos 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 homfonos [4]. Y es que un texto cifrado, a pesar de la sustitucin, todava contiene pistas sutiles. Cada letra de un idioma tiene su propia personalidad, determinada por su relacin con todas las dems letras. Por ejemplo [27]: La Q es una letra infrecuente y, por tanto, es probable que est representada slo por un smbolo, y sabemos que la u, que supone aproximadamente el 3 por ciento de todas las letras, probablemente est representada por tres smbolos. Si encontramos un smbolo en el texto cifrado que slo est seguido por tres smbolos particulares, entonces sera razonable asumir que el primer smbolo representa la letra q y los otros tres smbolos representan a la u. Otras letras son ms difciles de localizar, pero tambin las delata su relacin con las dems letras: la K, J, H y V siempre van seguidas de vocal. En espaol, si se divide el texto en grupos de 4 letras, en cada grupo debera aparecer una vocal. En funcin de que se cuente con una gran cantidad de texto cifrado, se pueden asociar los nmeros ms repetidos a letras de alta frecuencia, ir rellenando la matriz de homfonos y, a su vez, buscar digramas, trigramas, palabras, etc., con el objeto de obtener la matriz de cifrado. 2.4.3.- El mtodo de cinta mvil o mtodo espaol Este mtodo consiste en un caso particular del cifrado por sustitucin con homfonos9. Su origen data de mediados del siglo XIX y la primera vez que aparece documentado es en 1894 en el libro Tratado de criptografa con aplicacin especial al ejrcito de Joaqun Garca Carmona [7], donde se le denomina Mtodo Oficial de Guerra (ver Anexo E, pg. 80). Poco despus, en 1898, aparece en un texto de telegrafa militar de Losada con el nombre de mtodo espaol [8]. Segn Carmona el mtodo era utilizado en la poca de su publicacin por todos los Ministerios exceptuando el de Estado; Losada, por su parte, afirma que es el procedimiento adoptado en Espaa para cifrar los escritos oficiales.
El ataque y rotura de mensajes cifrados con este mtodo conociendo slo el texto cifrado es el principal objetivo de este Proyecto de Fin de Carrera.
9

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

28/119

El criptgrafo de cinta mvil consiste en una tabla de homfonos a la que se aaden dos filas, una en la que figura el alfabeto en orden normal y en la otra se introduce una cinta mvil con un alfabeto doble totalmente aleatorio. En el diseo original la cinta pasa a travs 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 homfonos con cinta mvil 1

Para formar la tabla de homfonos se utilizaban nmeros de dos cifras del 10 al 99 distribuidos correlativamente por filas y de manera que a cada carcter le correspondieran 3 4 nmeros [8], sin embargo, en los sistemas usados durante la Guerra Civil del 36 esta limitacin se cambia en algunos casos y se elimina en otros llegndose a representar todos los nmeros del 01 al 99. El alfabeto de la cinta mvil sola generarse mediante la utilizacin de una palabra clave. Por ejemplo, si utilizamos la palabra revolucin el alfabeto generado podra 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 quedara como, RAPEBQVDSOFTLGUHWCJXIKYNMZ Para cifrar ambos comunicantes deban ponerse de acuerdo en la colocacin de la cinta mvil, 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 definicin de la clave completa, siguiendo el ejemplo, se daba con la expresin revolucin N en J. Posteriormente se proceda a cifrar utilizando el alfabeto marcado en la cinta como alfabeto base y escogiendo cualquiera de los nmeros 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 Revolucin 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

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

29/119

Tabla de clave X (caso "Mar Cantbrico")


G H I J K L M N O P Q R S T U V L G V U H W C J X I K Y N M Z R 09 03 08 07 02 05 06 10 14 15 17 13 19 12 18 16 11 29 27 22 20 30 31 35 37 33 34 32 36 38 49 40 48 46 45 42 44 43 47 51 50 53 56 69 67 66 65 63 61 60 62 64 68 79 70 71 72 75 77 74 73 76 78 89 81 A Q B D C S D O 01 E F F T W A X P Y E Z B 04

23 26 25 39 41 58 54

85 87 86 82

El ejemplo se ha confeccionado con la tabla usada en sus comunicaciones por el barco Mar Cantbrico [12] (ver Anexo F, pg. 80) y la clave revolucin N en J. Si bien el secreto depende de ir variando los nmeros usados como cifra, lo cierto es que muy frecuentemente eran empleados los mismos nmeros para representar las letras. Al cifrar el mensaje del ejemplo presentado hemos detectado lo que para textos largos supona, creemos, el Taln de Aquiles de este mtodo: el cifrador, por mucho cuidado que tuviera, acaba repitiendo nmeros porque para cada carcter slo dispone de 3-4 homfonos posibles; las letras de mayor frecuencia de uso acaban por no poder ser encubiertas 10. En el corto mensaje plano usado (26 letras) la a aparece 5 veces y la e 4 veces por lo que alguno de sus homfonos 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 (pg. 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 alfabtico, siendo sustituida ms adelante por un alfabeto en el que las letras aparecan en un orden aleatorio o no estaban todas. Esta modificacin ya aparece en la clave general de 15 de abril de 1910, con lo que no podemos decir que se trate de una innovacin aparecida en la guerra. Otra fue el aadir varias cintas mviles como en la clave aviacin 1931 en la que las cintas eran una la tpica del alfabeto mvil y dos correspondientes a dos de las filas de cdigos. Esto hacia que un mismo nmero representase a varias letras en funcin de su colocacin y permita, tericamente, mejorar la resistencia del cdigo. Adems se solan incluir pequeos repertorios para las claves ms comunes [10]. Lo expuesto junto a otras faltas en disciplina de transmisiones (falta de concienciacin sobre el secreto en las comunicaciones, enviar mensajes cifrados parcialmente, uso reiterado de la misma clave, cifrado del mismo mensaje con distintas claves, etc.) haca que el sistema no proporcionara gran seguridad, sobre todo si la tabla era descubierta por el enemigo. Adems, la compartimentacin de las zonas de operaciones que sufri sobre todo el Bando
Eliminando, de este modo, la distribucin normal que se consigue en los sistemas de sustitucin homofnica puros (ver pg. 23).
10

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

30/119

Rojo (en denominacin de la poca) dificultaba la actualizacin o renovacin de claves y tablas an 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 ms cuando vemos que se utiliz en los niveles ms altos de Mando. Carmona ya avisaba de la poca seguridad del mtodo y daba un ejemplo11 de cmo descifrar un mensaje conocida la tabla pero no la clave [7]. No slo 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 Mrito Militar por el contenido del tratado que ha publicado, y en ese informe se hace eco de la inseguridad del mtodo. Lase en la siguiente imagen extracto de dicho informe [7]

Informe de la Junta Consultiva sobre la seguridad del Mtodo Espaol 1

A pesar de lo dicho, este sistema fue el mtodo ms ampliamente utilizado durante la GC36 por los dos contendientes, si bien la mayor disciplina y coordinacin que se estableci en el Bando Nacional en este rea de las comunicaciones, como en casi todas las dems del esfuerzo blico, le permiti jugar con ventaja durante los 3 aos de contienda. Como ya se ha dicho al tratar las mquinas de rotor, para las comunicaciones el Bando Nacional adquiri diez mquinas Enigma alemanas en noviembre de 1936 que fueron dedicadas al enlace del Alto Mando. El cifrado en escalones operativos altos y medios sigui realizndose con tabla de homfonos y cinta mvil, sistemas de sustitucin o transposicin ms elementales [10] y cdigos de trinchera como el que se muestra en pgina 83. Vase en este sentido, apndice VII de [9]

En pg. 100 de su tratado, para apoyar su crtica, presenta dos ejemplos: en el primero parte de un mensaje que contiene partes sin cifrar, consiguiendo deducir de la relacin entre esas partes y las cifradas la tabla de homfonos; en el segundo ejemplo, totalmente encriptado, se apoya en dicha tabla y en un anlisis de frecuencias de uso para salvar el obstculo de la cinta mvil.
11

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

31/119

Como curiosidad en Anexo F (pg. 80) se muestran algunos ejemplos de claves y tabla de homfonos y documentos reales utilizados durante el conflicto. 2.4.4.- Ataque al mtodo espaol: sus debilidades Hemos visto, pues, que a cada letra del mensaje origen (texto plano) le pueden corresponder hasta 5 nmeros (<= 99) y a cada nmero le corresponde una sola letra. Al cifrar el texto origen cada letra puede ser cifrada al azar usando cualquiera de los nmeros de su columna en la tabla. Adems, mediante el uso de una clave se hace bailar la correspondencia entre las columnas de nmeros y las letras. Atendiendo al objetivo de este proyecto: el criptoanlisis sin conocer la tabla de homfonos Qu debilidades encontramos en el sistema de cinta mvil a efectos de atacar el criptograma?. Veamos: 1. An no habindose 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 nmeros por fila de la tabla, de manera que los homfonos de la columna de una letra estn separados siempre por al menos 10 unidades. 2. En el cifrado por homfonos, la distribucin normal de frecuencias de uso se consigue asignando a cada carcter del alfabeto un nmero de homfonos proporcional a su frecuencia de uso en el idioma. Esto no es posible en el mtodo espaol. 3. En el mtodo espaol la columna de homfonos de cada letra suele tener de 3 a 5 nmeros, lo que en textos largos mantiene informacin indirecta sobre frecuencia de uso de la letra. 4. Dicho problema se incrementa con el uso de la cinta mvil12. 5. La operacin de cifrado obliga a elegir entre una media de 4 homfonos por letra. Si se supone esa eleccin aleatoria, cada homfono tendr una probabilidad del de ser elegido para reemplazar a su letra. 6. Con esa probabilidad de , si multiplicamos la frecuencia de uso del homfono 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 estndar de uso en el idioma o frec Ci. Luego frec Ci 4 x frec Hj Sin considerar los argumentos anteriores, el espacio de bsqueda de la solucin (el alfabeto que encabeza las columnas de la tabla) comprende 27 letras
Por ejemplo, si en la tabla original a la A (frecuencia de uso habitual 13,34%) se le asignan 5 homfonos y a la X (frecuencia de uso habitual 0,10%) 3 homfonos, la aplicacin del alfabeto perturbado por la cinta mvil puede invertir la asignacin, imputndole a la A slo 3 homfonos y a la X, que tal vez no se use en el mensaje plano, 5 homfonos.
12

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

32/119

posibles por homfono dado que a cada nmero le podra corresponder cualquiera de las 27 letras del alfabeto. Cmo reducir ese espacio de bsqueda tan amplio -27 letras posibles por nmero-?: Para abarcar mayor casustica: a) Se estimar el nmero n de homfonos 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 homfono puede estar algo alejada de la habitual de su letra en el idioma, admitimos un margen de fluctuacin o error Me y comparamos (frec Ci) con (n x frec Hj Me). d) De dicha comparacin obtenemos para cada homfono 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 homfono Hj, dado que (9,01%x 0,8) 8,93% (9,01%x 1,2) Cmo definimos Me? Se han hecho pruebas sobre un mensaje plano de 511 caracteres del que conocemos la tabla de homfonos y el texto cifrado; se ha podido comparar los resultados de la tcnica expuesta en los prrafos anteriores con la tabla real, buscando definir un Me eficiente. El resumen est en la tabla siguiente:
Me 10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 110% 120% Acierto 50,68% 84,00% 89,00% 93,00% 93,00% 93,00% 93,00% 93,00% 95,00% 96,00% 96,00% 96,00% Cm 6,31 9,76 12,05 13,23 14,12 15,24 16,52 17,86 19,37 21,03 22,03 22,23 Reduccin 76,60% 63,83% 55,35% 50,99% 47,69% 43,53% 38,81% 33,84% 28,26% 22,12% 18,42% 17,66%

Anlisis de Me y media de letras candidatas 0-1

13 No slo porque la tabla pudiera tener slo 1 nmero en una columna, sino porque aunque la tabla tuviera 5 homfonos en esa columna, el cifrado de un mensaje en particular puede que no requiera escoger ms que un nmero de esa columna.

No ms de 250 caracteres, como se instrua en la poca a los operadores dentro de las normas de seguridad a cumplir.
14

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

33/119

Donde: Me es el margen que admitimos en torno a n x frec Hj para dar positiva la comparacin de frecuencias de uso: 10%, 20%, etc. Acierto indica el porcentaje de letras de la tabla de homfonos real que quedan incluidas correctamente en el conjunto L de candidatos de cada homfono. Para Me= 20%, acierto= 84%. Cm es el cardinal medio de los conjuntos candidatos. Para M e= 20%, Cm es 9,76 en la tabla. Reduccin es el porcentaje medio en que se reduce el espacio de bsqueda. Para Me=20%, Reduccin= ( (27- 9,76) / 27 ) x 100= 63,86 %. La grfica siguiente informa de Cm en funcin de Me

Cm en funcin de Me

25,00 20,00 15,00 10,00 5,00 0,00 Cm

10%

20%

30%

40%

50%

60%

70%

80%

90%

100%

110%

120%

130%

140%

La grfica siguiente cruza Acierto con Reduccin e informa del punto de Me ms eficiente: 20%

Rendimiento en funcin del margen de error Me


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

150%
Acierto Reduccin

10% 20% 30% 40% 50% 60% 70% 80% 90% 100% 110% 120% 130% 140% 150%
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 2.- Criptografa y Criptoanlisis

34/119

Tras lo expuesto, para cada homfono obtenemos un conjunto L de letras candidatas que, pudiendo ser amplio (8-10 caracteres), nunca sern las 27 letras que a priori se nos presentan como posibles para cada homfono. De esta manera podemos componer una tabla inversa de asignacin de letras candidatas a cada homfono como la que sigue:
Homfonos 01 f h q z j u Letras Candidatas 02 03 b a g e v y 86 89 r x i d l j x

Tabla inversa de homfonos 0-2

Con la tcnica descrita hemos reducido, pus, el espacio de bsqueda de 27 a 10 letras de media por homfono, un 65% menos. A partir de esta tabla inversa inicializamos el AG (ver en detalle cap 3.2 pg. 40).

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

35/119

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.


Habiendo estudiado los sistemas de sustitucin por homfonos y analizado en particular el Mtodo de Cinta Mvil, pasamos a plantear y explicar la solucin que proponemos. Sobre el ncleo fundamental que supone el cdigo del Algoritmo Gentico (ver Cap 3.1), se ha diseado un programa que interactuando con el usuario permite definir ciertos parmetros como, por ejemplo, las listas que se usarn para definir un diccionario en el que reconocer las palabras, la longitud mnima de las palabras a buscar. Adems, para permitir que el criptoanalista incorpore su intuicin 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 criptoanlisis, aceptando que hay un nivel a partir del cual el AG no mejora significativamente sus resultados, ya que la posibilidad de falsos positivos que desvirten el resultado es muy alta16. Y ello, porque estamos ante un problema de sustitucin polialfabtica (proyeccin inyectiva); el Sr. Gascn, al dar por conocida la tabla, reduca su problema a una sustitucin monoalfabtica, dado que la misma tabla permite tratar la proyeccin como biyectiva an siendo, aparentemente, inyectiva17.

Parmetros

Nivel Externo

Algoritmo Gentico

Usuario

Men, Cromosomas_candidatos

Nivel externo del Sistema 1

15

Lo lgico ser elegir aquellos cromosomas con mejor resultado en la funcin objetivo.

16 Y al contrario, lo que pueden parecer falsos positivos, para el analista pueden tener todo el sentido lgico: por ejemplo, palabras o caracteres componentes de un cdigo de trinchera. 17

f: AB es inyectiva <=> para todo x1, x2 / x1x2 => f(x1) f(x2)


Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

36/119

El diagrama de flujo interno del programa queda definido segn el siguiente esquema:

Men Opcin

1 Mostrar men

1 Nivel

Opcin = 0

Opcin Opcin = 3

Opcin = 4

Cromosomas candidatos

2 Procesado Automtico

Opcin = 1 3 Cargar texto histrico 5 Analizar texto cifrado 6 Procesar diccionario

4 Analizar frecuencias

Opcin = 5 Opcin = 2

7 Descifrar texto

1er. Nivel interno del Sistema 1

El esquema muestra la estructura lgica del flujo interno dedicando los puntos 3, 4, 5 y 6 a la preparacin 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).

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

37/119

3.1.- Teora general sobre Algoritmos Genticos Los algoritmos genticos (AG) son una familia de mtodos de clculo inspirados en la teora de la evolucin de las especies y la seleccin natural. Como algoritmos en s, se puede decir que son mtodos estocsticos de bsqueda ciega de soluciones cuasi-ptimas [26]. Un AG codifica informacin relativa a un problema concreto en una serie de estructuras de datos denominadas cromosoma o genotipo. Aplicando a estas estructuras sucesivos operadores de recombinacin se puede encontrar una posible solucin al problema planteado. Funcionamiento interno del AG En un AG se genera un conjunto de cromosomas (cromosoma, cada solucin planteada) compuestos por genes (o caractersticas) que representa a un conjunto de posibles soluciones o poblacin. Esa poblacin es sometida a ciertas transformaciones y a un proceso de seleccin sesgado a favor de los mejores candidatos con los que se pretende obtener nuevas soluciones candidatas.
Individuo o cromosoma 1 Individuo o cromosoma 2 Individuo o cromosoma 3 POBLACIN genes

Individuo o cromosoma n

Conceptos bsicos del AG 1

La estrategia del AG parte de una poblacin aleatoria de individuos descritos de diversas formas mediante cromosomas y genes. A partir de esa poblacin y con los operadores de reproduccin y mutacin se genera una nueva poblacin que en general debe ser de mejores caractersticas en relacin a una funcin objetivo o fitness o de adaptacin que gua el proceso de bsqueda de la mejor solucin o individuo. La reproduccin o cruce entre individuos procura obtener nuevos candidatos (soluciones) mejores que sus padres. La mutacin permite realizar cambios aleatorios en individuos para obtener material gentico perdido o no existente.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

38/119

Ventajas del AG No requieren representacin matemtica muy elaborada de los problemas tratados. Dan soluciones a problemas desahuciados mediante otras tcnicas o muy complejos con otros mtodos. Son muy robustos frente a ruido o decisiones puntuales errneas. Son fcilmente hibridables con otras tcnicas de Inteligencia Artificial: Redes neuronales, Lgica Borrosa. Modularidad y portabilidad. Ofrecen un entorno amplio para tratar muy diversos tipos de problemas que requieran optimizacin. 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 Gentico 1. Generacin de una poblacin de individuos totalmente aleatoria. 2. Evaluacin de esta poblacin siguiendo un criterio de distancia al objetivo buscado segn la funcin objetivo. 3. Aplicacin de seleccin de cualidades ms ventajosas de la poblacin. 4. Aplicacin de operadores de cruce y mutacin. 5. Resultado: poblacin siguiente con una generacin ms cercana a la solucin. 6. Repetir desde punto 2 hasta lograr una solucin similar al objetivo buscado.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

39/119

Inicio

Inicio estadstico de la poblacin

Seleccionar individuos para reproduccin

Algoritmo Gentico

Producir descendencia

Mutar descendencia

Evaluacin de la poblacin y bsqueda de palabras con impresin de informes

Fin?

Fin

Estructura del AG 1

Origen del trmino AG La expresin algoritmo gentico 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 teora general y su aplicacin tiene origen en el trabajo de John Henry Holland "Adaptation in natural and artificial Systems" (1975), Profesor de Filosofa, de Ingeniera Elctrica y de Ciencias de la computacin en la Universidad de Mchigan.
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

40/119

Un grupo de investigadores seguidores de Holland en los 80 dan un fuerte empuje (Goldberg, Baker y otros). Hoy da es una tcnica muy extendida para resolver problemas de optimizacin, sobre todo si la funcin a optimizar tiene muchos mximos/mnimos locales. En estos casos se requerirn ms iteraciones del algoritmo para "asegurar" el mximo/mnimo global. Tambin son adecuados si la funcin a optimizar contiene varios puntos muy cercanos en valor al ptimo y solamente podemos "asegurar" que encontraremos uno de ellos (no necesariamente el ptimo).

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

41/119

3.2.- Preparacin de los datos de entrada Como todo sistema de informacin, para el inicio de ejecucin del AG necesitamos unos imputs o datos de entrada. La definicin de dichos imputs se realiza en las siguientes fases: 3.2.1.- Clculo de frecuencias reales. Obtencin de las frecuencias de uso de las letras, bigramas y trigramas que aparecen en un texto que podramos considerar como de la poca (ver en Anexo A pg. 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 TextoClculoFrecuencias.txt 1

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

42/119

3. Cargar texto clculo de frecuencias

Textos

Texto

3.1 Cargar texto

texto_frecuencias

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

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 aparicin del ngrama de manera eficiente se utiliza una funcin HASH que trabaja en base 2718, funcin que evita una bsqueda secuencial dentro del vector para encontrar la posicin de memoria donde almacenar el nuevo valor del contador de iteraciones del n-grama dado.
ndice 0 1 2 726 zx 3 727 Zy 7 728 zz 9

Ejemplo de trabajo de la funcin Hash F:


bi-gramas aa ab ac ba bb bc 23 1 4 Vector V 2 5 6

Aparece el bigrama zx. En base 27 z= 26 y x= 25. F(zx)= 26x271 + 25x270= 726 V(726)= V(726) + 1= 4

27 es el nmero de caracteres del alfabeto aplicado. Usamos un sistema de numeracin en base 27, donde el cero es A y el 26 es Z (comparar con el sistema hexadecimal para comprender).
18

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

43/119

Texto_frecuencias

4. Analizar frecuencias

4.1 Calcular frecuencia letras

4.2 Calcular frecuencia bigramas

4.3 Calcular frecuencia trigramas

fre_letras

fre_bigramas

fre_trigramas

Frecuencias

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

Esquema de anlisis de frecuencias 1

Texto_frecuencias

Inicio

Leer ngrama 7.1.1 Leer ngrama fre_letras

letra

Potencia = 0 Val = 0 Long = long(ngrama) Pos = Long - 1

4.1,2,3 Calcular frecuencia ngramas

7.1.2 Calcular Posicin

Pos >= 0

Letra, pos val += (ngrama[pos] - 'a')*27^ potencia; 7.1.3 Colocar Potencia++ Pos--

Devolver val

Fin Recorre el texto frecuencias letra a letra, cada letra es pasada a una funcin hash que trabajando en base 27 halla la posicin adecuada y es almacenada en el vector.

Procedimiento de clculo de frecuencias 1


Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

44/119

Las frecuencias resultantes sern almacenadas en ficheros independientes en la carpeta Frecuencias\. En Anexo A (pg. 72) se puede observar el resultado de frecuencias obtenido para los n-gramas ms significativos. 3.2.2.- Carga del texto cifrado Se lee el texto cifrado cargando los distintos valores numricos que lo integran y se ordenan de menor a mayor para eliminar los repetidos y facilitar las bsquedas, de manera que obtenemos un vector numrico 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 formarn la base de los cromosomas del algoritmo gentico. (ver apartado 3.3)

Texto cifrado 1 01 12 25 38 51 62 74 85 99 02 13 27 39 52 64 75 86 Vector de Valores 04 05 06 08 09 14 17 18 19 21 28 29 30 32 33 40 42 44 46 47 53 54 56 57 58 65 67 68 69 70 76 77 78 79 80 87 88 89 93 95 10 22 35 48 59 71 81 97 11 24 37 49 61 72 83 98

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

45/119

3.2.3.- Generacin de la tabla inversa. Una vez definido el vector de valores y siguiendo con el proceso explicado en captulo 2.4.4, obtenemos una tabla19, de la que se muestra a continuacin un extracto

Extracto de tabla inversa 1

La primera fila es informativa y no interviene en la confeccin de la tabla; se coloca para visualizar el resultado del proceso. Vemos que el homfono 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 pg. 32), se

Esta tabla corresponde al criptoanlisis realizado sobre el mensaje que estudia el Sr. Gascn en su proyecto, correspondiente al texto plano barco toda confianza en isla Ibiza
19

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

46/119

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 homfono 22 (ver pg. 32). Y, comprobando en la primera fila, que ya decamos, 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 bsqueda en un 65%. En el caso del homfono 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 pequea (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 desvirtan el proceso general pero ya anticipan la necesidad de la intervencin del analista para alcanzar el 100% del criptoanlisis.

Textos Texto Cifrado

5. Analizar texto cifrado

5.1 Cargar texto cifrado fre_letras texto_cifrado Calcular Tabla Inversa

5.2 Ordenar y Eliminar repetidos valores_texto

tabla_inversa

Ilustracin 1 Anlisis del texto cifrado 2

En la figura se observa cmo 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.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

47/119

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 funcin de la mnima 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 contendrn bien listados de palabras, bien textos normales con los que generar un nuevo diccionario y que el analista podr definir a conveniencia. Cargar todas las palabras en memoria eliminando los signos ortogrficos, las ordenar alfabticamente y eliminar las repetidas (ver fig. diccionario completo siguiente). Por ltimo generar el ndice base ndice.txt para acelerar la bsqueda de palabras a partir de su raz, procedimiento explicado en apartado b) siguiente (ver fig. ndice base de bsqueda siguiente)

ii.

iii.

Diccionario completo 1

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

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

48/119

ndice base de bsqueda 1

b) Se intenta cargar de ndice#.txtel ndice correspondiente al grupo de palabras que tienen una longitud mayor o igual a la mnima 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 trmino de bsqueda los primeros cuatro caracteres (ver figura siguiente). ii. Eliminar las repetidas y buscar las posiciones en el diccionario. iii. Para acabar generar el ndice especfico ndice#.txt

ndice para palabras >= 6 caracteres 1

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

49/119

diccionario

El 6.3 a la vez que carga cada palabra, le quita las tildes y dems smbolos.

6.1 Cargar diccionario

Error?

6.3 Cargar listados

listados

diccionario No Listados ndice_filtrado diccionario diccionario Listados

6. Procesar diccionario

ndice 6.2 Cargar ndice longitud 6.4 Ordenar y limpiar longitud diccionario

6.5 Generar ndice

Error?

6.6 Generar ndice filtrado

No

Longitud == 0

longitud

No / ndice_filtrado ndice_filtrado ndice_filtrado S / ndice_filtrado Procedimiento: Intenta cargar el diccionario, si da error genera tanto el diccionario como el ndice bsico. Si consigue cargarlo intenta carga el ndice con el filtro de longitud adecuado y si no lo hay lo genera.

Listados

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.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

50/119

3.3.- Diseo de la estructura de los cromosomas Como ya se ha dicho, para inicializar el AG se realiza una ordenacin previa de todos los nmeros contenidos en el texto cifrado y con ellos se genera el vector de valores numricos. A cada nmero 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

01 12 25 38 51 62 74 85 99

Vector de valores ordenado 02 04 05 06 08 09 10 11 13 14 17 18 19 21 22 24 27 28 29 30 32 33 35 37 39 40 42 44 46 47 48 49 52 53 54 56 57 58 59 61 64 65 67 68 69 70 71 72 75 76 77 78 79 80 81 83 86 87 88 89 93 95 97 98

Cromosoma z m u a u o q s r e s c t d d o n o p n r r p v n y m b m i i e l o e c f v d b q i p u a n f d a t a t a u h e c l s z i g e s g f r u b x l

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

51/119

3.4.- Inicializacin del AG El vector de valores numricos 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 reduccin del espacio de bsqueda explicado en los prrafos anteriores. Cada gen (letra) debe pertenecer al conjunto L de candidatos del homfono (ver pg. 32). b. No puede repetirse una letra ms de cinco veces en el cromosoma puesto que en la tabla de homfonos a una letra no se le asignan ms de 5 nmeros. Ejemplo: si el homfono 22 de la tabla inversa de pg. 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 sera 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 numricos 0-1 z g e a d e l e s t o q s e g c y q u e Cromosoma inducido 0-2 s x a

3.5.- Reproduccin o cruce de los individuos Al reproducir los cromosomas, la funcin de la librera Galib utilizada (ver aptdo. 1.3) responde con dos casos posibles: 1. Que slo 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 funcin objetivo del cromosoma, fijados el resto de los genes, es el menor de los resultados que se obtienen con las dems letras del conjunto candidato a ese gen. Se aade, adems la limitacin de que un mismo gen no puede repetirse ms 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 funcin objetivo es mejor que el del cromosoma padre. Si no, se deshecha el hijo y se continua con los padres en el proceso de mutacin.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

52/119

3.6.- Mutacin de los cromosomas. La mutacin escoge genes (letras) del cromosoma al azar y los cambia por otros asegurndose de que se cumplen las limitaciones seguidas en la reproduccin del cromosoma descritas en los anteriores puntos. Repite este proceso hasta encontrar un cromosoma con resultado de funcin objetivo mejor o alcanzar 500 reiteraciones, en cuyo caso mantiene pasa a la siguiente generacin el cromosoma original.

3.7.- Evaluacin: Funcin Objetivo (Fitness) La calidad del cromosoma se evala en funcin 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. Adems, se realiza una bsqueda secuencial en el texto resultante sobre un diccionario buscando palabras de una determinada longitud; el nmero de palabras encontradas incrementa la valoracin del cromosoma de cara al proceso de seleccin. El error se calcula, como viene siendo comn 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 frmula aplicada es:

Error

frec.LetraTextoCandidato frec.UsoLetraIdioma
letras

bigramas

frec.LetraBigramaCandidato frec.UsoBigramaIdioma * 2
frec.TrigramaTextoCandida to frec.UsotrigramaIdioma * 3
n Palabras Re conocidas ) n Caracteres TextoCandi dato longitudM nimaPalabr a

trigramas

Error Error * (1

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 funcin del nmero de palabras detectadas en el diccionaria: cuanto ms palabras detectadas, ms bajo es Error. Sin embargo este premio se trata de que sea mnimo porque el encontrar muchas palabras en el texto no es garanta de que sean correctas o estn en el lugar correcto. Vemos a continuacin un esquema del proceso:

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

53/119

Cromosoma

7.5 Evaluar

7.5.1 Obtener texto plano asociado

Fre_letras, fre_bigramas, fre_trigramas

7.5.2 Comparar frecuencias

error

Proceso de evaluacin 1

El resultado de esta frmula sobre el texto plano de cada cromosoma indicar la bondad de un cromosoma para pasar a la generacin siguiente: a menor error mayor posibilidad de paso a la siguiente generacin. Si el programa detecta que el AG deja de encontrar mejores individuos, desactiva la condicin de que el cromosoma de salida tiene que tener mejor valoracin en funcin objetivo que el de entrada, con el fin de empeorar la poblacin para buscar otras vas de mejora.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 3.- Mtodo Espaol: criptoanlisis con algoritmo gentico.

54/119

3.8.- Definicin final del texto descifrado. El AG informa al analista de los cromosomas que evala y de su resultado en la funcin 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 hasta 400 hasta 800 Valor fitness 5,2 4,1 Aciertos 35% - 52% 53% - 65%

Aciertos del AG segn longitud del mensaje 0-3

A partir de esos cromosomas, y con la utilidad desarrollada al efecto, el analista evala soluciones que acercan a la solucin final (ver proceso en detalle desarrollado en Cap 4: Casos de Estudio). La intervencin del analista es obligada en esta fase porque si el AG presenta, por ejemplo, como parte de su solucin, la expresin mijarporelhlego, el analista, en funcin del resto del mensaje y de otras informaciones que posea, puede evaluar la expresin fijarporelfuego, usual en el argot de tctica militar. La expresin pablicaazionel, pueden ser acelerada en su solucin si el analista prueba con fabricaaviones22. Adems, la utilidad desarrollada informa de los cambios que se producen en el resto del mensaje plano puesto que el analista acta 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 slo en la expresin mijarporelhlego. Considrese, adems, que las claves solan incorporar abreviaturas y cdigos indicativos de autoridades, organismos o unidades militares, acciones habituales en combate, etc. cuyo significado es muy difcil implementar a priori en una aplicacin (ver al respecto Apndice VII de Soldados sin rostro [9]) pero que el analista interesado en la materia s debe conocer. Con el proceso descrito se completa el criptoanlisis sin necesidad de encontrar la tabla de homfonos. Dicha tabla, en todo caso, surge como parte de la informacin que resulta del proceso.

21 22

Acierto en la letra y en la posicin ocupada en el mensaje.

Ambos ejemplos son muestra real de situaciones que se nos han dado durante el estudio cuyo resumen se presenta en Cap 4.
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

55/119

Cap 4.- Casos de estudio y resultados


Partiendo del caso del Mar Cantbrico (ver Anexo F, pg. 80), se ha trabajado sobre tres telegramas (caso 1, 2 y 3 siguientes) que en su da 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 pg. 82); la tabla de homfonos de dicha clave no comprenda la pero si la CH. Para nuestro trabajo no se ha considerado la CH como letra. Para nuestro estudio, los mensajes planos, extrados 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 histrico pero si es resultado de la clave Bocho real. En el caso 1 no se aplica cinta mvil y no se utiliza alfabeto perturbado; en el caso 2 se aplica como cinta mvil la segunda fila de la tabla Bocho de pgina 82. Se ver con ello que es indiferente el uso de la cinta mvil, puesto que con el procedimiento seguido, en ambos casos se obtiene la tabla de homfonos23. Caso de estudio 1 Clave Bocho. De Valencia para Bilbao. Transmitido da 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 fbrica aviones en que se construira bien el aparato americano "Martin Bombers" y el "Fokker 31". Rugole llame al ingeniero aeronutico Cerro de servicio en Lamiaco y exponindole esta idea nos diga dados los elementos que ah podran reunirse y clase materiales que han de emplearse en uno y otro modelo cual estima preferible para fabricacin ah, o si simultneamente pudieran construirse ambos. Primera condicin es encontrar local adecuado y en condiciones relativa seguridad y con terreno prximo que pueda acondicionarse para aerdromo. Dceme que en caso rena ambas condiciones Zamudio donde instalse fbrica 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 mecnico para producciones referidas y suplico V.E. tome con mximo empeo esta iniciativa y me d cuenta su desarrollo v previamente dme seguridades que espero respecto posibilidad realizar este proyecto. (Fin del comunicado.) Texto cifrado:
La aplicacin de la cinta mvil implica slo un cifrado por sustitucin simple, fcilmente rompible por anlisis de frecuencias.
23

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

56/119

2883 5452 8212 0524 1716 2888 7753 2149 6204 0487 6204 3601 7388 0573 2193 5023 9501 9121 5961 4973 4983 0474 3661 8217 4432 5309 5346 5954 0477 2753 6103 2846

7205 6253 2857 5403 5314 1493 8304 4353 5953 2262 3338 2705 5893 2282 5163 3228 7733 0533 5093 2101 2845 8862 3353 6325 8638 9134 9591 3793 0422 1297 9146 0804

2723 9853 0473 8808 4549 7330 6518 2817 1208 5457 8391 6738 4983 1217 8234 1298 7769 7861 9891 5193 0552 6288 1736 4243 9204 9761 8553 0923 3153 5377 4704 2465

5753 3804 1056 2388 3915 2873 0151 9788 6146 9127 5334 9185 4246 7265 5346 2334 7861 1250 2704 4973 3801 5205 0050 0177 1251 5953 6593 0484 7308 9127 2236 4969

6405 7325 0457 5991 5365 4204 0182 0177 9956 3372 5634 9103 0109 3142 2873 7763 3472 4278 1000 0417 5105 9173 6305 3377 4205 9888 2105 6791 5457 9146 6167 9178

2742 9314 0478 3863 3603 6561 0434 9105 2833 0403 2369 9325 0062 6546 9823 2201 5338 4282 0491 2605 2846 8454 3801 0304 5188 1293 8316 1282 3121 2802 2317 9723

3488 5288 2334 7854 9183 5453 4354 3482 1363 4254 4936 4328 3605 5354 7336 8273 9504 3405 7398 2700 9028 6529 3427 3134 8349 5182 4686 9183 5317 0095 0125

3477 6131 5736 1249 8634 3823 2793 1750 6723 6291 0323 6733 3453 0952 6505 2857 3423 9517 5446 5001 3833 3193 9121 4238 3804 6788 4762 0833 0595 0177 6362

8262 1205 6531 2788 8203 1288 5478 0130 7795 4699 2761 3888 5459 8246 3843 6553 9003 5367 2338 8250 3444 1233 6354 5441 8156 6588 6378 9312 0382 8821 9321

8801 4588 6365 9572 5653 5697 2316 3377 6333 3104 7728 4505 2834 6795 6198 4333 2394 8803 5356 2334 0510 3261 9733 4278 4228 4703 4975 0198 6214 5317 5421

2104 5203 6333 0112 3023 6398 9194 8850 7395 1333 6249 5238 0853 6327 8814 9701 0159 3333 3488 5028 3153 7265 0953 8234 9591 2321 9136 9305 4975 8100 3891

5421 9322 1901 1961 4353 2351 2449 4983 9100 7377 2200 0178 4731 2865 8850 1888 6155 9138 3309 0173 0534 4988 1297 0354 3623 8651 4909 9742 4738 5353 3343

0453 5433 2873 2719 1462 0495 1293 4382 3493 0453 3343 8878 2163 5422 9122 4653 5691 2350 1988 5736 7204 5767 0428 9093 2149 9801 2822 4888 0418 4647 6326

4608 4893 0443 2838 8827 9549 9112 5791 6557 8447 5346 6349 2865 6173 3133 0256 2486 6523 8322 5443 4646 9151 1747 7728 0414 6134 4973 3227 9388 0438 5465

Vector de valores ordenado:


00 27 52 83 01 28 53 84 02 29 54 85 03 30 55 86 04 31 56 87 05 32 57 88 08 33 58 90 09 34 59 91 10 36 61 92 12 37 62 93 13 38 63 94 14 39 64 95 15 41 65 97 16 42 67 98 17 18 19 21 22 23 24 25 26 43 44 45 46 47 48 49 50 51 69 72 73 74 75 77 78 81 82 99

Tabla inversa (conjunto de candidatos para cada homfono):


00: 01: 02: 03: 04: 05: 08: 09: 10: 12: 13: 14: 15: 16: 17: 18: 19: 21: 22: 23: 24: b a f b a a b b b c f b j b b b b b c a b c c g c c c c c f d g c q f c f f c d c f f d h d e d f f g i h f x g d g g d g d g g e q i i e h h h l q h z h i h h i i e h h i v l n i m m j n v m j l j m l l i m m l y m o l p p q o y p q m q p n m l p p m z n r m t t v p z t v n v v o n m v t u v y n o r s t o s n u u y r r s t u t u o p r s t y y s t u

u y y r y y r p n y s t u z s t u r s t u v o r s z
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

57/119

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:

b f b a j b c b a a b j a j j b b f b c b f a c c b a a j c c j b c b c j c c b b a j f b c f c c b f b j a b a j a f b c

f g c d q f d f c c c q c q q c c g f d c g c d d c c c q d d q c d c d q d d f c c q g c d g d d f g g q d f e q c g c d

g h d e x g g g d d d x d x x d d h g i f h d g g f e d x f g x f i d i x i f g f d x h d g h i g g h m x e g i x d h d f

h q i i z h i h e e i z e z z i i q h l g q e i i h n e z g i z h l i l z l g h h e z q i i q l i h q p z i h n z e q i g

m v l l j l m i i l

p y n m q m p l l m

v y z z o p r s t u n o r s v n v m m n y p y n n r r z o o s s t u v r s t r s t u

i l m n o p r s t l l v m n h v i l l m o i m m y p o m y l m m p s l n n z v p p z m n p t t m o r s t u r s t u y z r s t u t u v y n p t u u n o p r s t r s t u v u v y y o p r s t

h l m p t u v y l m n p r s t u v m n l n n h j m i v l l v n l j v q p o m o o l q p l y n m y o m q y v t p n p p m v t m z o n z p n v z y u r o r r p y u n y s t u r s t u s t u s t u t u v y y o p r s t

p r s t u p r s t u v r s t u p r s t u v y

n o r s u j q v y o r s u i v l h l y m l m n o p r s t z n o r s t u m p t u v y

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

58/119

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 homfono es 9,35. El porcentaje medio de reduccin del espacio de bsqueda 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 funcin 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 anlisis 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
1 1.1 2 2.1 3 3.1 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 4 4.1 4,232578 4,206555 4,255658

Fitness del cromosoma


4,255964

N Aciertos en cromosoma
38 44 37 44 40 45 55 61 70 83 84 38 43

% Aciertos en cromosoma
45,24% 52,38% 44,05% 52,38% 47,62% 53,57% 65,48% 72,62% 83,33% 98.81% 100% 45,24% 51,19%

N Aciertos en texto plano


516 668 515 691 547 664 750 809 847 879 880 543 660

% Aciertos en texto plano


58,64% 75,91% 58,52% 78,52% 62,16% 75,45% 85,23% 91,93% 96,25% 99,89% 100% 61,70% 75,00%

Eficiencia de los cromosomas candidatos 1

El comportamiento del AG permite enunciar la siguiente regla emprica: 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.
24

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

59/119

El analista usar los cromosomas candidatos para analizar los mensajes planos que de ellos se derivan. Como ejemplo, se muestra a continuacin 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 solucin final. Texto solucin del AG (Cromosoma 3):
estodelejodinanloraideadeestabreterengimbaounopablicaazionelenquelesenltruoroa pienedogalateacarosanadactinpodpershempajjertlasynoluevedemradeaminvenieroaere naudotececcaleservicioendadiasehafganiandadeesdailaonossivalasasdolarecentosqu eahomelcoancaunirlexcraladateliarasquehanleevprearsaenunebatledoleracuadestido mrafaligdemarapobrisasoanaziasisimurtoneacentepudoeronconstruirseambosmcoderac ondicoonesententrordotamasacuaseyentenlocionelredadivasegucilalbsonterceneblef icojuagyadoasonsisionocsemalaaaresrecositadequeantasereunaampascandicianeshodu siosenseinltadasepobricoesberanfoqueontessezarraboanvarquinayotraalmactoaestus oorindadoadamendeesposogidilalleuniraxisonlabilefyyrzenciocasarefuiecatedaemem andocetanicomarapledyctionescaferidoshsyprosavatamecancaqimeevmanoastainitiodi zaydelecuentaludesoclormavpreviadendeladaseguciladesfueesperolaspectomesigorid adraadoharestegrabasde

Texto solucin del analista (Cromosoma 3.1):


estadolejadinanloraideadeestabreterengimbaounapablicaazionelenquelesonltruiria pienedagalatoacerisanodactinpodpershempojjertlesynoluevodemradeaminvenieroaero nauditoceccoleservicioendadiasohefgoniendodeesdaileanossivalasosdolerecentosqu eahimolcianceunirlexcraledateliaresquehanleevprearseenunobotlodolerocuadestida mrefeligdemarapabrisasionaziosisimurtaneacentepudieranconstruirseambosmciderac ondicionesentontrardotamasecuasoyentonlicionelredadivasegucilalbsontercenoblof icojuegyedaasonsisionacsemalaaerosrocositedequeentasoreunaampascondicioneshadu siosonseinltadosepabricaesberanfaqueantessezarrabaenvarquinayotroalmectoaestus iarindediadamendeesposigidilalleuniraxisonlabilefyyrzenciacasorefuiecetodoemem endocetanicomaraplodyctionesceferidashsyprisovetomeconcaqimoevmenoestainitiadi zaydelecuentaludesaclormovpreviadendeledeseguciladesfueesperolespectomosigirid adreadiharestegrobesdo

En el Cc3.1 se ven palabras fcilmente 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 expresin se indica que al homfono 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 probabilstico de este estudio, podra ocurrir que L no hubiera pertenecido.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

60/119

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 exponindole 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 expresin se quiere indicar que al homfono 30 le debe corresponder la G.


Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

61/119

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 aerdromo 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

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

62/119

Ta bla de homfonos 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 c 22 c 51 c 78 i i i i 01 p 47 u 31 42 p 67 u 56 63 p 90 u 86 93 q 10 v 18

c 98 k 15 q 29 v 48 d 21 k 39 q 55 v 75 d 50 d 77 e 04 l l l 14 q 81 x 37 43 q 99 x 64 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 f 45 m 84 s 17 y 87 85 n 12 s 46 z 26

g 02 n 34 s 57 z 44

Tabla de homfonos resultado del criptoanlisis 0-1

Se obtiene una tabla casi idntica al original dado que en el proceso de cifrado no tienen porque haberse utilizado todos los nmeros de la tabla original.

Caso de estudio 2 Clave Bocho. De Valencia para Bilbao. Transmitido da 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 Espaa Pars fechado ayer que dice lo siguiente: Gobierno Mxico en vista bloqueo y para evitar situaciones diplomticas desairadas ha dado rdenes representantes en extranjero para que no se despachen de puertos en que se encuentran actualmente barcos matriculados Mxico a nuestros servicios, por tanto barcos en esta situacin que se hallen en Espaa no deben salir ya bajo pabelln mexicano y debern ser tomadas medidas con respecto a los que se encuentren en extranjero.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

63/119

Texto cifrado:
5290 5976 5233 2402 0244 4777 6154 5876 7723 0626 4820 3377 0285 1788 0577 4424 5011 3418 8461 5054 5901 5414 4592 8224 3454 6019 2254 4127 4424 6688 1488 3060 3332 8534 2750 9026 2588 9809 3247 4927 6734 7711 2220 6975 9490 4333 3287 4024 7344 4792 2424 5970 4516 7359 2021 2822 2569 2345 8512 7376 8577 5450 7394 4550 1954 6748 0478 4420 8593 0272 7685 6067 4718 2185 2452 4770 4460 7845 9002 2077 6245 3361 6070 7327 3454 2064 4267 4619 5444 0234 8873 4550 1405 0244 8550 2030 6932 8802 2020 4785 8988 0705 6259 8873 5964 4519 5491 0478 7364 1247 4530 5205 6777 1845 7706 3076 6145 6147 4573 8860 3302 7385 2220 6002 6792 0202 2633 5054 1860 6109 5160 8861 3220 5446 2190 2909 2385 7060 2147 6085 4888 4512 3084 2167 7427 4988 7744 9002 4843 6073 8960 7654 7088 2176 3060 5037 7612 2927 2622 4920 6488 7094 3445 8518 3311 5351 1359 1202 5973 8877 8245 7885 0937 0627 5437 1460 7747 9021 5020 6035 8823 4523 3767 5944 0549 7645 3019 2144 9816 2402 0967 5030 4661 3420 7785 0534 6712 2794 4521 9888 0592 0285 8894 3488 0561 5290 7753 8869 6014 9252 4144 4518 4592 2069 2927 9427 8033 7745 6685 7754 9030 7344 7845 2773 6073 4537 7354

Vector de valores ordenado:


01 28 58 89 02 29 59 90 04 30 60 91 05 32 61 92 06 33 62 93 07 34 64 94 09 11 12 13 14 16 17 18 19 20 21 22 23 24 25 26 27 35 37 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 66 67 69 70 72 73 74 75 76 77 78 80 82 84 85 87 88 98

Tabla inversa (conjunto de candidatos para cada homfono):


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: f a b b b f c b b f c b f b c a c c c c b b a f b c c c c f c f b f g d f c g g d g c g d f g c d d d d d d f c c g g d d d d g d g f g h e g d m h g m d h g g h d g e i g g i g f d h m i g i i h g h g h q i h i p q i p g q i h q g i i l i i l h h e q p l i l l q i q h q v n p l q v l q i v l p v i l l n l l n p m i v q n l n n v l v p v y o v n u y m u l y m v y l m m o m m o v p l y u o m o o y m y v y z r s u y z o r s t u z p t u v y m z p y z m p n p p p p y t m z p p p p z p z y z n p r s t u t u v y z n t o r t t r z u n r t r r p u r s u u s r v s t v v t s t u y u u y y u

v y o p r s t s u s s t v t t u y u u

t u v y z

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

64/119

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:

b a a b c b b a b b b a f c a c b b b c c b f a f f c a c f b b a f a b c f b f b b

f c c g d c c c f c f d g d c d f c f d d c g d g g d d d g f f e g c f d g c g c g

g d d m i f f d g d g e h i e i g f g i g d h e h h i e g h g g i h e g i h d h d m

h e e p l h h e h g h i q l i l h h h l i g q i q q l i i q h h n q n h l q g q g p

p i l q n m m i p i p n v n n n p m p n l i v n v v n n l v p p o v o p n v i v i q

v l o u o p p l v l v o y o o o v p v o m l y o y y o o m y v v r y s v o y l y l u

y z m n o r s t p t t m y m y r z p r p y t y p p m z r z z p r p z y y s z t y p z m z m r u u n z n z s r s r z u z r t n s v v o t u y y p r s t

p r s t u u s t u t u s t u v y s t u u v y p r s t u

s u r s t u s u t u v y z z u u z r s t u n p r s t u n p r s t u

La media de letras posibles asignadas a cada homfono es 9,26. El porcentaje medio de reduccin del espacio de bsqueda 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

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

65/119

Leyenda: Cromosoma candidato es aquel con un resultado de funcin 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 anlisis del criptoanalista a partir de dichos cromosomas. # Cromosoma resultante del AG. #.1 cromosoma tras el estudio del analista.
Cromosoma Cc
1 2 3 4 5 6 7 8 9 10 11 11.1.1 11.1.2 11.1.3 11.1.4 11.1.5 11.1.6 11.1.7 11.1.8 11.1.9 11.1.10 12 4,9894 (22 palabras)

Fitness del cromosoma


5,1554 (23 palabras) 5,1068 (27 palabras) 5,1184 (29 palabras) 5,1897 (30 palabras) 5,2014 (21 palabras) 5,0167 (20 palabras) 5,0180 (20 palabras) 5,0138 (17 palabras) 4,9688 (23 palabras) 4,9741 (20 palabras) 4,9509 (25 palabras)

N Aciertos en cromosoma
23 16 17 17 18 26 26 25 26 27 25 29 31 34 38 40 44 54 60 70 76 26

% Aciertos en cromosoma
30,26% 21,05% 22,37% 22,37% 23,68% 34,21% 34,21% 32,89% 34,21% 35,53% 32,89% 38,16% 40,79% 44,74% 50,00% 52,63% 57,89% 71,05% 78,95% 92,11% 100% 34,21%

N Aciertos en texto plano


233 159 164 164 177 232 232 227 211 212 212 242 259 271 295 303 332 402 425 446 453 237

% Aciertos en texto plano


51,43% 35,10% 36,20% 36,20% 39,07% 51,21% 51,21% 50,11% 46,58% 46,80% 46,80% 53,42% 57,17% 59,82% 65,12% 66,89% 73,29% 88,74% 93,82% 98,45% 100% 52,32%

Eficiencia de los cromosomas candidatos 2

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

66/119

Se observa como para cromosomas con la misma puntuacin en la funcin objetivo los que tienen ms 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 continuacin 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 solucin final. Para que sea ms realista, en esta ocasin no aplicamos la regla emprica enunciada en pi de pgina 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 homfono 83 la e (83,e), ha resultado ser uno de los ms inteligibles. Texto solucin 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)}

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

67/119

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 -> espaa (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)}
porministerioestadosemeharemitidotelegramadelempajalorespaaparisfechadoayerpp elicelosiguientegobiernomexicoenvistabloqueoyparaevitarsituacionesdiplomaticas lesairadasfadagoorlenesrepresentanteseneftranjeroparafuenosegespacbenlepuertos engueseencuentranamtualhentebarcosmatriculadosmexicoanuestrosservimiosportanto parcosenestasituacionpuesebalyenenespaanodebensalirzabayopabellonmevicanoydeb 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 {(91,q);(82,d);(23,d)} le-> para que no se despachen de->

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 4.- Casos de estudio y resultados

68/119

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 espaa 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 espaa 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 espaa 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 situacin que se hallen en espaa no deben salir ya bajo pabelln mexicano y deberan ser tomadas medidas con respecto a los que se encuentren en extranjero

Ta bla de homfonos derivada del cromosoma 11.1.10


a 05 e 85 a 33 f l 87 q 91 x 58 r r r s s s s t t t 12 x 74 34 y 17 73 y 46 02 30 70 92 26 44 76

72 m 18

a 54 g 01 m 48 a 88 g 42 m 75 b 14 g 93 m 89 b 43 h 07 n 21 b 62 h 35 n 50 c 06 h 66 n 77 c 37 h 80 o 24 c 64 c 94 d 23 d 49 d 61 d 82 e 20 e 45 e 60 i i i i j j l l l 09 o 47 27 o 67

59 o 90 u 22 84 p 19 u 51 11 p 25 u 78 40 p 52 u 98 16 q 04 v 29 32 q 28 x 13 69 q 53 x 41

Tabla de homfonos resultado del criptoanlisis 0-2

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 5.- Conclusiones y futuros desarrollos

69/119

Cap 5.- Conclusiones y futuros desarrollos


Se ha diseado un procedimiento que permite el descifrado de mensajes cifrados con cinta mvil sin conocer la tabla de homfonos y con resultados ptimos. Dicho procedimiento combina resultados de un Algoritmo Gentico (aciertos hasta el 65%) con el criterio de un analista en la proporcin de 8 a 2. El mtodo de la cinta mvil se puede considerar un sistema criptogrfico seguro?. Es obvio que no alcanza el nivel de fortaleza del mtodo de sustitucin por tabla de homfonos convencional (ver cap. 2.4, pg 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 captulo 2.4.2 Criptoanlisis de los cifrados por sustitucin con homfonos. El estudio de sistemas clsicos presentado en Captulo 2, ha tenido como objetivo secundario el analizar los mecanismos de criptoanlisis que los rompan por si se encontraba algo aplicable al Mtodo Espaol. De todos hemos encontrado alguna tcnica de rotura menos de los sistemas de sustitucin por tabla de homfonos, de los que hay en Internet en general, y en la bibliografa en particular, un silencio absoluto al respecto. Si seguimos las Reglas de Kerckhoffs (ver cap. 2) es evidente que el Mtodo Espaol las cumple parcialmente: la regla 3 relativa a la facilidad de escoger, recordar o modificar la clave (en este mtodo consideramos a la tabla de homfonos 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 captulos 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 trminos conceptuales, pus, no es un mtodo seguro. Pero es que, adems, desde las primeras referencias bibliogrficas (1894, ver pg. 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 aplicacin de las normas de seguridad. Conocida la tabla, el mecanismo de la cinta mvil no incorpora seguridad adicional dado que en los mensajes se especificaba en abierto la clave que generaba la cinta mvil (sector X en B); en el supuesto de no conocer la clave, el criptoanlisis, conociendo la tabla, se reduce a un simple ataque por anlisis de frecuencias, dado que el criptograma se deriva, en este caso, de una sustitucin simple. La verdadera seguridad viene dada, por tanto, por el desconocimiento de la tabla de homfonos. Pero esta tabla, al tener limitado el nmero de homfonos a un mximo de cinco por carcter (a veces slo dos) reduce la eficiencia de la sustitucin y en textos largos denuncia la frecuencia de uso habitual en el idioma por mucho que el cifrador elija aleatoriamente los nmeros asignados al carcter plano en su columna de la tabla de homfonos. Adems, la costumbre de relacionar los homfonos por filas respetando las decenas (una fila, una decena), crea otra debilidad.
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 5.- Conclusiones y futuros desarrollos

70/119

Una vez hecho el anlisis 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 implementacin no incrementaba la eficiencia pero retardaba la ejecucin del algoritmo. Conclusiones de los casos de estudio La inicializacin del AG programada con las limitaciones expuestas en cap. 2.4.4 produce un inmediato acercamiento a valores prximos al ptimo (en 10 reiteraciones), para luego realizar mejoras inapreciables y estancarse a partir de la reiteracin 50. El grfico siguiente plasma este comportamiento mostrando en el eje de abcisas el nmero de iteraciones y en ordenadas el valor de la funcin objetivo.

Valor fitness
8,8 8,3 7,8 7,3 6,8 6,3 5,8 5,3 4,8 Valor fitness

No se han apreciado mejoras en el rendimiento del AG a partir de una poblacin de 30 individuos porque las limitaciones impuestas al proceso de reproduccin, al tratar de aprovechar las debilidades encontradas en el mtodo espaol, obligan a definir individuos muy similares. Valores en el parmetro del AG probabilidad de mutacin superiores al 5% dejan de producir mejoras en el cromosoma. Cromosomas con mejor valor fitness no tienen porque ser los que generen mayor nmero 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 adverta en la definicin de la funcin objetivo (cap. 3.7). En el caso 2 se ha usado cinta mvil para el cifrado previo pero ello ha sido indiferente para el proceso de criptoanlisis, que es el mismo seguido en el Caso 1 en el cual no se us cinta mvil para el cifrado previo. La tabla de homfonos 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

0 8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144

Comportamiento del AG 1

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Cap 5.- Conclusiones y futuros desarrollos

71/119

homfonos 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 continuacin (descrito en los dos casos de estudio as como el efectuado en dos ms 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 anlisis complementaria desarrollada lo ha sido sin ms pretensiones que el que funcione; no es operativa an cuando resuelve. Esta utilidad de anlisis debera ser capaz de automatizar parte del 35% restante an considerando que siempre tendr que intervenir el analista, implementando, por ejemplo: La debilidad de la decena: los homfonos de la columna de una letra estn separados siempre por al menos 10 unidades. La regla emprica de que si en el gen de un cromosoma candidato hay vocal en el cromosoma final tambin lo habr. El reconocimiento de palabras incompletas para sugerir solucin al analista. La separacin de palabras conforme van siendo reconocidas. Se propone como modo de coordinar el AG con esa utilidad de manera eficiente, la aplicacin futura de tcnicas de backtraking27.

Backtracking (o bsqueda atrs) es una tcnica de programacin para hacer bsqueda sistemtica a travs de todas las configuraciones posibles dentro de un espacio de bsqueda. Para lograr esto, los algoritmos de tipo backtracking construyen posibles soluciones candidatas de manera sistemtica. En general, dado una solucin candidata S: 1. Verican si S es solucin. 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.
27

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo A: Tabla de frecuencias de uso aplicada.

72/119

Anexo A: Tabla de frecuencias de uso aplicada.


An pareciendo sencillo el asunto (basta examinar un tratado de lingstica o de criptologa para extraer un tabla de frecuencias), la definicin de frecuencias de uso de caracteres en espaol, 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 ms frecuente es la a (14,02%) seguida de la e (9,55%), pero en cualquier texto castellano, la frecuencia de las partculas "que", "el", "se", "me", etc. hace que la "e" sea ms frecuente. En la lengua hablada el fonema /e/ aparece un 14,67%, seguido de /a/ 12,19% 2. Influyen tambin la poca, la materia, el entorno profesional o social, la regin, 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 redaccin en formato telegrama previa al cifrado, lo que implica primar la r de los infinitivos. El grfico, extrado de un estudio de los profesores Antonio Moren, *Doroteo T. Toledano, *Ral de la Torre, *Marta Garrote, **Jos M. Guirao, muestra la relacin entre el uso hablado y el escrito. Las primeras 100 slabas ms usadas en espaol 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 pg. 74). 2. Calculando frecuencias sobre textos militares de la poca: Reglamento tctico de Caballera 1926, Reglamento de Intendencia 1952, Reglamento tctico de Infantera 1909. 3. Haciendo el clculo de frecuencias en tiempo real al inicio de la aplicacin. La aplicacin lee ese fichero previamente. El usuario puede indicar de esta manera sobre qu texto quiere hacer el clculo de las frecuencias. En la tabla que sigue se relacionan los porcentajes que obtenemos con el mtodo expuesto (que son los que usa el algoritmo de la aplicacin) analizando letras, digramas y trigramas y, como complemento a la discusin expuesta, se compara con los porcentajes deducidos sobre La Regenta de Leopoldo Alias Clarn, novela escrita en 1884, a partir de estudio y discusin descritos en

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo A: Tabla de frecuencias de uso aplicada.

73/119

http://www.kriptopolis.org/frecuencia-letras-castellano donde, adems, se aade un anlisis de frecuencias sobre el Quijote.


Anlisis de frecuencias sobre TextoCalculoFrecuencias.txt
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 13,341% 13,227% 8,707% 7,403% 7,260% 6,832% 6,575% 5,719% 5,462% 4,596% 4,520% 3,549% 2,693% 2,122% 1,513% 1,075% 1,018% 0,923% 0,856% 0,828% 0,628% 0,447% 0,295% 0,247% 0,105% 0,057% 0,000% de en as er es os la ad on el al se ar do an re nt ra te ca ci ue ta co ro ne ri in na or ia st ac nd ma lo ec to ie da sd sa io un od tr nc le 2,731% 2,465% 2,151% 2,008% 1,979% 1,751% 1,694% 1,684% 1,646% 1,532% 1,513% 1,427% 1,408% 1,389% 1,370% 1,266% 1,247% 1,209% 1,171% 1,152% 1,104% 1,085% 1,075% 1,037% 1,018% 0,990% 0,980% 0,971% 0,961% 0,961% 0,952% 0,923% 0,914% 0,904% 0,847% 0,837% 0,799% 0,790% 0,771% 0,752% 0,752% 0,742% 0,733% 0,723% 0,704% 0,695% 0,638% 0,628% ent sde ade del con ien ode que cio ela nte ria ter dos ene eri ado ada ero ese ion est ndo los sen sta ido one ose por des ase era cas esd nto las nde res aci ala ias and das ede nes asa enc 0,657% 0,657% 0,647% 0,647% 0,552% 0,495% 0,476% 0,476% 0,466% 0,466% 0,466% 0,466% 0,457% 0,438% 0,438% 0,428% 0,419% 0,409% 0,409% 0,409% 0,409% 0,400% 0,390% 0,371% 0,362% 0,352% 0,343% 0,343% 0,343% 0,343% 0,324% 0,314% 0,314% 0,305% 0,305% 0,305% 0,295% 0,295% 0,295% 0,286% 0,286% 0,286% 0,276% 0,276% 0,276% 0,276% 0,266% 0,266%

La Regenta
a e o s r n i l d u t c m p b q v g h y f j z x k w 13,994% 12,829% 9,317% 7,374% 6,496% 6,375% 6,280% 6,079% 4,892% 4,197% 3,926% 3,810% 2,657% 2,473% 1,940% 1,294% 1,128% 1,106% 1,004% 0,991% 0,615% 0,468% 0,404% 0,255% 0,089% 0,004% 0,001%

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo A: Tabla de frecuencias de uso aplicada.

74/119

Anlisis de Frecuencias
14,000% 12,000% 10,000% 8,000% 6,000% 4,000% 2,000% 0,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

TextoCalculoFrecuencias.txt

La Regenta

Extracto del texto de la poca sobre el que se realiza el anlisis de frecuencias (fichero TextoCalculoFrecuencias.txt). Usado en la inicializacin por defecto del AG y extrado del proyecto del Sr. Gascn (2009-10) que ya lo usaba con la misma finalidad: tiene 10.509 caracteres y est compuesto por el texto de varios telegramas.
Loscuatrobatallonesdelabrigadaefectuaranmaanaunejercicioconsusp uestotacticosaliendodespuesdelafuerzadeldesayunoyregresandoasusb asesantesdelahoradelasegundacomidalaprimerasedistribuiraenelcamp oelsegundoycuartobatallonsaldrandelacinetatomandodireccionesdist intasyelprimeroytercerbatallonesdesdestalinmartaenlamismaformato dosellosefectuaranunrecorridodeveinticincokilometroscomprendidoe lregresoestableciendodurantelamarchalosserviciosdefranqueoexplor acionyseguridadqueseindiquenenlosreglamentostacticosydecampaalo sjefesdebatallonterminadoelsupuestoharanunabrevememoriahaciendoc onstarenellaeltiempoinvertidoenlamarchayenelejerciciotacticopunt odondesehadesarrolladoasicomotambiencualquierdeficienciaobservad adurantesucursolafuerza
(siguen 4 pginas de texto)

dedicadasalafabricaciondematerialdeguerraentreotrasdespuesdelas masconocidasestanlafabricaderadiadoresrocaencastelldefelalacasas bampyunafabricadebombasdemanoenarenyademartambiensetrabajamuchoe nelparquedeartilleriadondetrabajanunosquinientosobrerosyenlaanti guacasadaviddedicadatambienadepositosdematerialbelicoplanamayor.

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo B: Mtodo Kasiski (ataque a un cifrado polialfabtico)

75/119

Anexo B: Mtodo Kasiski (ataque a un cifrado polialfabtico)


En 1863, Friedrich Kasiski (oficial prusiano) public un libro sobre criptografa, Die Geheimschriften und die Dechiffrierkunst ("La escritura secreta y el arte del descifrado"). sta fue la primera publicacin sobre criptoanlisis aplicado a los cifrados de sustitucin polialfabticos, especialmente el cifrado de Vigenre, desarrollando lo que luego se ha llamado Mtodo Kasiski. Dado que el criptoanlisis estadstico directo no funciona porque la distribucin 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 Vigenre tienen las correspondientes secuencias de letras cifradas tambin muy repetidas. 2. La distancia entre las cadenas ms repetidas en el texto cifrado debe ser un mltiplo de la longitud de la clave K y un buen candidato a longitud ser el mximo comn divisor de los valores ms 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 estadstico monoalfabtico. 4. La idea es buscar ahora a travs de los tres caracteres ms frecuentes en cada subcriptograma las posiciones relativas de las letras A, E y O que en castellano estn separadas por 4 y 11 espacios. La letra de la posicin que ocupe la letra A (A = 0) ser entonces la letra clave correspondiente. 5. Si la posicin 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 ms frecuentes y que cumplan adems con esa distribucin: 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 ms el ataque si tomamos en cuenta la siguiente letra frecuente en castellano S, en la posicin (m+19) mod 26. Veamos un ejemplo de esta metodologa [3]: Sea el criptograma C de 404 caracteres que vamos a criptoanalizar el siguiente:
PBVRQ UBZVS LBHGU ANSJA INQRS OTGR NUEJI VICAD FNVRD ESOM MTJOK JEUEM RYVLP BCHAS SKAS MTIPW EHLBX MDODS GGRBD WJIFW EHEUE DETSJ UEQVV VAEEP ELPWI GNNIL XOTGG UOTIE PSIED CBOVN UELI UFOZM AGSJI RPQRR FFGYA BGGMP UEDIF SEVEF QMVNF DSVSU JSKET TGGMP SLRPW QLONM WHUNM OHASE EEINT XRNBL IKTBW RPWY WNUVR CLPQP SRJWR GRUEE ZETGG UEEN EDSDE SEIKA MBRRN SFQCO TFGGM NEMUO IEEU. DRDP ZYEAC BPVI TWVMB PORDF TXJAT CRCPQ EYEDS MTIBV JGRPW OGTSS ORVJH MNPWK ETFPH VEID VSUEX TOSEQ RSFHV

Se observan las siguientes cadenas (subrayadas) en el criptograma:


Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo B: Mtodo Kasiski (ataque a un cifrado polialfabtico)

76/119

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 perodo 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 carcter 1, el 5, el 9, etc. para formar el primer subcriptograma CA; luego el 2, el 6, el 10, etc. para formar el subcriptograma C B, y lo mismo para subcriptogramas CC y CD. Tenemos ahora 4 subcriptogramas de slo 101 letras c/u (muy importante tenerlo en cuenta en las estadsticas) que han sido cifrados con la misma letra de la clave:
CA = PQAAEPDMREEDCNUSRIECNIONSAAETLUOLAUIEULMNIIEAAOOLU MNARSOMRSISERNAISIRTMDTOORLIORRENENOAVSNIAEOFAMTEI CB = BVDTSBPPPDPPPBFDPQBUFNUEZCDFBMBESFNPBBBNMKDPF QFSJFTBPUNJMBNGDUNUFPFSSRPFTPJTBTETTJFUBSUTFTPBE 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 CB 0 14 1 6 4 12 1 CC 0 0 2 2 18 0 7 CD 0 0 3 5 7 0 12

0 11 0 0 5 0 0 4 1 0 3 7 1 0 1 6 1 7 5 4

6 3 7 1

9 6 1 1

1 10 2 1 9 7 4 8 0 14 2 1 6 9 0 6 2 6 1 12 3 0 0 2 1 13 2 3

5 1 0 0 7 1 0 0 0 4 12 3 6 14 1 2

0 0 2 3

0 1 1 2

Luego, la letra ms frecuente del subcriptograma debera 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 posicin 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 ms frecuentes y que cumplan adems con esa distribucin: 0 +4 +11 mod 27. 3. Es suficiente contar con estas tres letras para que el ataque prospere. No obstante, podemos afinar un poco ms el ataque si tomamos en cuenta la siguiente letra frecuente en castellano S, en la posicin (m+19) mod 27 En el ejemplo para CA se observa que la nica solucin que cumple con esto es la que coincide la AEO (12, 12, 10) luego la letra clave sera la A. Para C B elegimos BFP (14, 12, 14) por lo que la letra clave sera B. Para C C elegimos EIS (18, 7, 12) por lo que la letra clave sera E. Para CD elegimos RVG (13, 14, 12) por lo que la letra clave sera R.
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo B: Mtodo Kasiski (ataque a un cifrado polialfabtico)

77/119

Con la clave K = ABER obtenemos el texto plano siguiente:


PARAQ UNOSS AHECO AMEIN SENLO ORTAN TANAH SCOMO UELAC UAVES NTEMP ICIAR SSEMA TECOM IESCO ESTAS OSANO EJERC LADOU EENEM FOROS OLADE NDIDO DENAV MESOR ICIOS NABOL AMORA ESTAG LOTRO STRAS IDAD PREND DEPRE APLAT LPROJ IMNAS CORAZ LAVID ACOMO CALEN EADAY IMOCO IADEL ONPOR ASEDE OTROS TAMIE UNATI NLOSQ CORAZ QUELO NTARI AOSH NTOMI RAEEE UELIM ONMET SRIES AYPAR ECOME FNTRA SPUMI PIENE AFORI GOSCO APETA NZADO SDESA LLONY LPARA COEST RONAR DOSEN YACON YUNAB MAAN BRISA ANIMP IOSES FECHA

Para que la cosa no me sorprenda como otros aos he comenzado ya con unos suaves ejercicios....

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo C: Cdigos de Baudot

78/119

Anexo C: Cdigos de Baudot El cdigo Baudot fue inventado por Emile Baudot en 1874 y se utiliz en las primeras transmisiones telegrficas y radioelctricas como Alfabeto Internacional de Telegrafa N 1. Se trata de un cdigo 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 puntuacin y caracteres especiales hasta un total de 26. Total 58 caracteres. La siguiente tabla muestra el cdigo Baudot y la operacin XOR que utiliza el sistema de cifrado Vernam:
Signos ? : $ 3 ! & # 8 ( ) . , 9 0 1 4 ` 5 7 ;o= 2 / 6 +o" Cdigo de Baudot Secuencia letras Bit 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 ret. carro cambio linea cambio a letras cambio a signos espacio blanco 00011 11001 01110 01001 00001 01101 11010 10100 00110 01011 01111 10010 11100 01100 11000 10110 10111 01010 00101 10000 00111 11110 10011 11101 10101 10001 01000 00010 11111 11011 00100 00000 XOR letras* 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 2 3 4 5 6 Para el ejemplo desarrollado en cap 2.2.6 cifrado Vernam hemos representado los caracteres especiales de la izquierda con los dgitos 1 a 6, usando para el cifrado la columna adjunta letras* Mensaje 0 0 1 1 Clave 0 1 0 1 Bit de salida 0 1 1 0

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo D: Cifra con ENIGMA

79/119

Anexo D: Cifra con ENIGMA


Entrando en http://www.enigmaco.de/enigma/enigma.swf encontramos una aplicacin 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 carcter del siguiente mensaje (entrada O salida K: Difcil parece romper el cifrado homofnico con cinta mvil pero mas difcil 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

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo E: El Mtodo Espaol segn Carmona: ao 1894.

80/119

Anexo E: El Mtodo Espaol segn Carmona: ao 1894.


Por la dificultad de encontrar el Tratado de Criptografa de J. G. Carmona del ao 1894 referido en [7], una vez localizado en la Biblioteca Nacional, adjuntamos algunas imgenes de la publicacin que se refieren al Mtodo de la cinta mvil.

Mtodo Oficial de Guerra segn Carmona 1

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo E: El Mtodo Espaol segn Carmona: ao 1894.

81/119

Portadilla del Tratado de Carmona 1

Carmona: crticas al mtodo 1

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo F: Claves y tablas de homfonos de la GC36; ejemplos.

82/119

Anexo F: Claves y tablas de homfonos 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
A 05 X P U N Q 04

Ministro de Marina y Aire con Gobierno Vasco y Delegado en Santander


R E K S 02 X 13 30 G 01 B J 11 H C F T I R D O 09 15 14 12 27 23 24 39 34 43 49 47 59 62 61 67 71 73 84 82 96 90 K L B V 10 29 38 55 65 46 57 Z 03 Y

REPUBLICANA Febrero-Mayo 37
M D Q F CH M H C L 08 00 07 06 17 18 16 36 31 48 56 72 66 64 69 75 76 89 80 87 94 35 37 32 44 T

19 25 22 21 28 20 33 45 54 52 51 50 53

26

88

41 42 40 58 60 63 68 78 77 70 74 79 85 98 91 92 93

81 83 99 95 97

86

Clave Bocho 0-1

La primera fila indica el alfabeto fijo y la segunda la cinta mvil. Clave X [12] El 8 de marzo de 1937, el carguero republicano Mar Cantbrico fue apresado por el crucero nacional Canarias. El Mar Cantbrico, procedente de Amrica, se diriga a Santander desde Mjico cargado con gran cantidad de material blico. Su captura no slo signific una gran prdida desde el punto de vista meramente militar, sino tambin un fuerte golpe a la moral de los gobiernos autnomos del Norte. El Mar Cantbrico llevaba instrucciones para el uso de la radio, lo que inclua una clave (clave X) para comunicarse con Madrid. Algunos autores afirman que el desciframiento de dicha clave por parte de los servicios criptoanalticos franquistas, jug un papel fundamental en el desenlace de este caso.
Clave X (caso "Mar Cantbrico")
C D E F G H I J K L M N O 01 09 03 08 07 10 14 15 17 13 19 12 18 29 27 30 31 35 37 33 34 49 40 48 46 45 42 44 51 50 69 67 66 65 63 61 60 79 70 71 72 75 77 74 73 A B P Q 02 U V W X Y Z 06 04 16 11 22 20 23 26 25 32 36 38 39 43 47 41 53 56 58 54 62 64 68 76 78 89 81 85 87 86 82 R S T 05

Clave X 1

Santuario de la Virgen de la Cabeza [11]

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo F: Claves y tablas de homfonos de la GC36; ejemplos.

83/119

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 43 F G H Y 59 J L M N O 66 39 P Q R S T U 44 53 13 49 31 27 24 16 11 40 22 13 15 96 84 75 71 32 28 19 74 91 70 96 33 54

Servicio de Estudios Histricos de la Guardia Civil Clave LEALTAD [11]


Clave LEALTAD
A B 08 11 28 32 44 50 64 70 92 91 C D 10 20 36 41 55 61 77 83 E F 09 16 24 31 48 53 65 73 89 90

Sustitucin HOMOFNICA 17 de marzo de 1939


L M N O 07 19 17 14 13 29 25 27 28 37 33 30 46 47 42 51 54 52 58 66 69 62 71 76 72 84 86 85 87 99 96 93 G H I 04 J K P Q R S 05 12 16 25 34 35 43 49 57 63 62 75 78 88 82 98 T

Republicana XIV Divisin


U V W X Y Z 06 01 02 03 15 23 39 38 40 45 56 60 67 74 80 81 97 94

21

59 79 95

Clave Lealtad 1

Archivo General Militar de vila. Clave LUNA con cdigo de trinchera


Clave LUNA
B C D E F 09 11 25 28 39 31 49 47 54 57 69 73 70 76 86 96 99 A

SUSTITUCIN HOMOFNICA con Cdigo de Trinchera [11]


G H I 01 00 18 13 30 42 51 62 61 72 77 92 59 50 63 66 80 J K L 19 24 27 M N 08 O P Q R S T 07 U 17 26 29 34 48 41 45 58 53 60 78 81 84 98 94 87 82 43

Republicana IV C. de Ejrc.
V X Y Z 06 03 * 12 21 20 35 38 37 56 67 68 85 91

91

Clave Luna 1

Cdigo de trinchera Grupo Valor 02 04 10 22 32 33 40 44 Avanzo sin encontrar resistencia Avanzo venciendo resistencia Me encuentro detenido en He conseguido el objetivo Me repliego sobre Me encuentro en situacin comprometida en El enemigo se hace fuerte en El enemigo contraataca sobre
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo F: Claves y tablas de homfonos de la GC36; ejemplos.

84/119

46 71 74 79 83

El enemigo se retira a Necesito refuerzos Necesito municiones Necesito tiro de artillera sobre Recibo fuego de artillera propia

Archivo General Militar de vila. Facilitada por: Julin Dueas Mndez. 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 X Q T V R U S Z P
08 12 24 31 30 40 50 66 76 80 88 94 96 77 78 89 87 86 98 59 51 60 62 69 71 48 03 15 20 39 41 58 05 19 26 38 37 18 07

J L M N O P Q R S T U V X Y Z Y L I O M H N A D C F J B G E
01 17 21 32 43 56 68 75 84 92 85 90 61 70 83 93 91 49 57 28 36 46 55 67 74 73 82 99 97 16 23 35 42 54 47 53 65 63 64 79 81 72 02 00 11 25 29 34 33 44 52 45 04 06 13 09 14 22 27 10

Clave General 1

Fuente : Fundacin Francisco Largo Caballero

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo F: Claves y tablas de homfonos de la GC36; ejemplos.

85/119

Ejemplo de parte de envo de telegrama cifrado

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo G- Planificacin y Presupuesto

86/119

Anexo G- Planificacin y Presupuesto

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo G- Planificacin y Presupuesto

87/119

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

88/119

Anexo H.- Cdigo fuente


Main
// SCD4.cpp: define el punto de entrada de la aplicacin 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 numricos 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());

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

89/119

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 nmeros 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 bsqueda:\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 homfono es: %5.2f\ n", media); printf("El porcentaje de recduccin del espacio de bsqueda 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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

90/119

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 nmeros 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 bsqueda:\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 homfono es: %5.2f\ n", media); printf("El porcentaje de recduccin del espacio de bsqueda es: %0.2f\n", 1-media/27); //4 longitud = 5;
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

91/119

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(); }
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

92/119

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 nmero y de las posibles letras asociadas a dicho nmero 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 nmero con las de las letras for(unsigned short i = 0; i < vector_valores.size(); i++) //Cogemos un nmero { 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,

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

93/119

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; }

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

94/119

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 nmero de veces que aparece un ngrama en un texto. El objetivo de esta funcin es ser usado para almacenar sus estadsticas */ 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("Tamao del ngrama: %d\n", ncant); printf("Tamao del vector: %d\n", long_vector); printf("Tamao 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 opcin del constructor es automtico /*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 posicin 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 funcin de evaluar del AG //printf("Frecuencias guardadas.\n"); return frec_ngramas; } //Definir tambien el mismo mtodo 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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

95/119

vector<CNgramas> ngramas(fre_ngramas.capacity()); //Rellenar calculando los ngramas y aadir 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("[Tamao: %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] = '';
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

96/119

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("[Tamao: %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; }
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

97/119

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");
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

98/119

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 versin sin acentos, ordenada y limpiada ofstream f0("Diccionarios\\diccionario_completo.txt"); if (!f0.fail()) { for(unsigned int i = 0; i < diccionario.size(); i++)
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

99/119

{ indice_str.push_back(diccionario[i].substr(0,4)); //1 opcin: aadir valores tras la limpieza //2 opcin: aadir 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 _ % ) . . .
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

100/119

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 tamao 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])
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

101/119

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 tamao 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);
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

102/119

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 tamao int CClave::equal(const GAGenome & c) const { ... } /* ... */ CClave& CClave::operator= (const GAGenome& orig) { ... } //Rellena cada elemento del genoma con letras realizando un anlisis previo del texto a descifrar. void CClave::Iniciar(GAGenome& c) { ... } void CClave::IniciarIngInv(GAGenome& c) { ... } void CClave::IniciarIngInvFreBri(GAGenome& c) { CClave & genoma = (CClave &)c;

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

103/119

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_extraa = 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_extraa = tabla_homofonos_inversa_estatica; for(unsigned int i = 0; i < valores_texto_estatico.size() && ok; i++) { cuenta = 0; do{ repetido = false; //Aadir condicin 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])
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

104/119

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 ms 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 nmero anterior busca en el texto sus siguientes nmeros 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 nmero posterior al que nos interesa { k = 0; //Localizamos la columna del nmero 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_extraa[k].size() && ok) { //Preguntamos si la frecuencia para ese ngrama es mayor que 0 y si no eliminamos la letra bigrama[1] = tabla_extraa[k][l]; bigrama[2] = '\0'; aux = analiza_ngramas.PosNgramas(bigrama); frec = fre_bigramas_estaticos[aux].getFrecuencia(); if(frec == 0) { tabla_extraa[k].erase(tabla_extraa[k].begin() + l); if(tabla_extraa[k].size() == 0) ok = 0; } else l++; } } } } }while(!ok); genoma.ConstruyePoblacion(poblacion_inicial); /* Si el siguiente bucle en el proyecto anterior pasaba: 1 parmetro: los valores de la columna de la tabla 2 parmetro: el alfabeto de ordenacin Entonces este bucle tendr que pasar: 1 parmetro: valor del texto 2 parmetro: 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++) {
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

105/119

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;
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

106/119

else repeticiones[26]++; //Modulo que tiene en cuenta la distribucin de los nmeros dentro de la tabla, no repitiendo dos nmeros 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 lnea 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- Mutacin 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);
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

107/119

dejar_seguro = true; } hijo.ConstruyePoblacion(poblacion_individual); /* Si el siguiente bucle en el proyecto anterior pasaba: 1 parmetro: los valores de la columna de la tabla 2 parmetro: el alfabeto individual Entonces este bucle tendr que pasar: 1 parmetro: valor del texto 2 parmetro: 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 cmo 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 algn mecanismo que busque las palabras y en lugar de hacerlas estticas las considere positivamente if(longitud != 0) { //1 Recorrer todo el texto //2 Buscar segn la longitud del filtro en el indice y obtener valores //3 Buscar segn 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; //Conversin 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;
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

108/119

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 da 20/08/2011 con una poblacin de 1000 cromosomas y de repente a da 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; // Divisin entera: se trunca la fraccin 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)
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

109/119

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; // Divisin entera: se trunca la fraccin 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]);
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

110/119

/*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; //Situacin 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;
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

111/119

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 distribucin de los nmeros dentro de la tabla, no repitiendo dos nmeros 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]--;
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

112/119

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 distribucin de los nmeros dentro de la tabla, no repitiendo dos nmeros 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) {
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

113/119

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 (%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 (%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 (%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 (%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)

con exito...

sin exito...

con exito...

sin exito...

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

114/119

{ 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 posicin que ocupa en el vector de valores 3 Hallamos la correspondiente letra y la aadimos 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) { ... }
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Anexo H.- Cdigo fuente

115/119

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

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

116/119

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

ndice de Figuras

117/119

ndice de Figuras
Pgina
Resumen de cifrado por cinta mvil 0-1 ................................................................................................... 5 Vector de valores numricos 0-2 ............................................................................................................... 5 Tabla inversa de homfonos 0-3................................................................................................................ 6 Vector de valores numricos 0-4 ............................................................................................................... 6 Cromosoma inducido 0-5 ........................................................................................................................... 6 Auguste Kerckhoffs 1 ............................................................................................................................... 11 Esctala 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 homfonos 1 ......................................................................................................................... 25 Tabla de homfonos 2 .............................................................................................................................. 26 Tabla de homfonos con cinta mvil 1 ................................................................................................... 28 Informe de la Junta Consultiva sobre la seguridad del Mtodo Espaol 1 ......................................... 30 Anlisis de Me y media de letras candidatas 0-1 .................................................................................... 32 Tabla inversa de homfonos 0-2.............................................................................................................. 34 Nivel externo del Sistema 1 ...................................................................................................................... 35 Conceptos bsicos del AG 1 ..................................................................................................................... 37 Estructura del AG 1 ................................................................................................................................. 39 Muestra de TextoClculoFrecuencias.txt 1 ............................................................................................ 41 Carga del texto de la poca 1 ................................................................................................................... 42 Esquema de anlisis de frecuencias 1 ..................................................................................................... 43 Procedimiento de clculo de frecuencias 1 ............................................................................................. 43 Texto cifrado 1 .......................................................................................................................................... 44 Extracto de tabla inversa 1 ...................................................................................................................... 45 Ilustracin 1 .............................................................................................................................................. 46 Anlisis del texto cifrado 2....................................................................................................................... 46 Diccionario completo 1............................................................................................................................. 47 ndice base de bsqueda 1 ....................................................................................................................... 48 ndice para palabras >= 6 caracteres 1 .................................................................................................. 48 Mensaje cifrado 1 ..................................................................................................................................... 50 Vector de valores numricos 0-1 ............................................................................................................. 51 Cromosoma inducido 0-2 ......................................................................................................................... 51 Proceso de evaluacin 1 ........................................................................................................................... 53 Aciertos del AG segn longitud del mensaje 0-3 ................................................................................... 54 Eficiencia de los cromosomas candidatos 1 ............................................................................................ 58 Tabla de homfonos resultado del criptoanlisis 0-1 ............................................................................ 62 Eficiencia de los cromosomas candidatos 2 ............................................................................................ 65 Tabla de homfonos resultado del criptoanlisis 0-2 ............................................................................ 68 Comportamiento del AG 1 ...................................................................................................................... 70 Mtodo Oficial de Guerra segn Carmona 1 ......................................................................................... 80 Portadilla del Tratado de Carmona 1 ..................................................................................................... 81 Carmona: crticas al mtodo 1 ................................................................................................................ 81 Clave Bocho 0-1 ........................................................................................................................................ 82 Clave X 1 ................................................................................................................................................... 82 Clave Lealtad 1 ......................................................................................................................................... 83 Clave Luna 1 ............................................................................................................................................. 83 Clave General 1 ........................................................................................................................................ 84

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Bibliografa

118/119

Bibliografa
[1]. Introduccin a la criptografa. Pino Caballero. RA-MA 2002 [2]. http://www.dma.fi.upm.es/ Departamento de Matemtica Aplicada. Facultad de Informtica Universidad Politcnica de Madrid [3]. Libro electrnico de seguridad informtica y criptografa. Ver. 4.1 1/03/2006. Jorge Rami Aguirre. Escuela Universitaria de Informtica - Universidad Politcnica de Madrid, Espaa. Escuela Universitaria Politcnica - Universidad de Lrida, Espaa
[4].

Aplicaciones Criptogrficas, 1999. Jorge Rami Aguirre. Departamento de Publicaciones de la Escuela Universitaria de Informtica de la Universidad Politcnica de Madrid, Espaa.

[5]. Criptografa, historia de la escritura cifrada. Juan Carlos Galende Daz. Ed. Complutense [6]. Una introduccin a la Criptografa Clsica. Jos Ramn Soler Fuensanta. http://www.criptohistoria.es/files/cifras.pdf [7]. Tratado de Criptografa con aplicacin especial al Ejrcito. J. G. Carmona. 1894. Ejemplar digitalizado, adquirido en la Biblioteca Nacional. [8]. Manual Militar de Telegrafa. Apndice Compendio de Criptografa. 1898. Fernando de Lossada y Sada. Librera de Hernando y Compaa. Descarga de http://www.coit.es/foro [9]. Soldados sin rostro: los servicios de informacin, espionaje y criptografa en la Guerra Civil espaola. Jos Ramn Soler y Francisco Lpez-Brea. Indita Editores 2008 [10]. La Criptologa Espaola hasta el final de la Guerra Civil. Jos Ramn Soler Fuensanta.
[11]. http://www.criptohistoria.es/criptografia_real.html. Web dedicada a la historia

de la criptografa espaola. Jos Ramn Soler Fuensanta.


[12]. La captura del Mar Cantbrico. 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. Mquina 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. Mquina 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 sustitucin homofnica. La geb de Joaqun. [21]. Genetic algorithm for finding the keys length and cryptanalysis of the permutation cipher. Aleksey Gorodilov, Vladimir Morozenko. International Journal "Information Theories & Applications" Vol.15 / 2008

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

Bibliografa

119/119

[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, *Ral de la Torre, *Marta Garrote, **Jos M. Guirao. *Universidad Autnoma de Madrid, **Universidad de Granada, Spain [23]. Manual de ortografa de la lengua espaola. Manuel Alvar, Antonia Medina. VOX 1995 [24]. Libro de estilo de ABC. Ariel S.A. 1993 [25]. Apuntes de la asignatura Seguridad Informtica, 5 curso Ingeniera Informtica 2010-11. Prof. Don Javier Jaruta. ICAI Universidad Pontificia de Comillas. [26]. Apuntes de la asignatura Inteligencia Artificial, 5 curso Ingeniera Informtica 2010-11. Prof. Don Miguel A. Sanz Bobi. ICAI Universidad Pontificia de Comillas. [27]. Apuntes de Transmisiones y Criptografa.Escuela Militar de Montaa y Operaciones Especiales. 1985

Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil

You might also like