Professional Documents
Culture Documents
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
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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
3/119
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
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.
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
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
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
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
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
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
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
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
8/119
Texto Texto Cifrado Cifrado Vector de valores Estudio de Frecuencias Tabla Inversa de homfonos
Algoritmo Gentico
Funcin Objetivo
Utilidad de Anlisis
Analista
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
9/119
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
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.
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
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
12/119
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
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
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
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
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
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
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
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
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
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
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
= = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = = =
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
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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
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
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.
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
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
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
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
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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
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
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
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]
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
29/119
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
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]
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
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
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%
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
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
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%
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
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
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
35/119
Parmetros
Nivel Externo
Algoritmo Gentico
Usuario
Men, Cromosomas_candidatos
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
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
4 Analizar frecuencias
Opcin = 5 Opcin = 2
7 Descifrar texto
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
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
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
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
39/119
Inicio
Algoritmo Gentico
Producir descendencia
Mutar descendencia
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
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
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
42/119
Textos
Texto
texto_frecuencias
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
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
43/119
Texto_frecuencias
4. Analizar frecuencias
fre_letras
fre_bigramas
fre_trigramas
Frecuencias
Texto_frecuencias
Inicio
letra
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.
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)
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
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
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
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.
tabla_inversa
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
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
48/119
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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
49/119
diccionario
El 6.3 a la vez que carga cada palabra, le quita las tildes y dems smbolos.
Error?
listados
6. Procesar diccionario
ndice 6.2 Cargar ndice longitud 6.4 Ordenar y limpiar longitud diccionario
Error?
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
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
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
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
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
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
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
53/119
Cromosoma
7.5 Evaluar
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
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%
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
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
55/119
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
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
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
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
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
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%
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
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
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
60/119
agaratoacericano -> aparatoamericano -> {(24,p);(59,m)} elecentos -> elementos -> {(59,m)} ceunirse -> reunirse -> {(95,r)} dateriales -> materiales -> {(27,m)} leevplearse -> deemplearse -> {(77,d);(84,m)}
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
26
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)}
x -> {(87,y)}
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
62/119
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
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
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
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
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
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)
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%
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
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
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
67/119
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
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
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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
69/119
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
Comportamiento del AG 1
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
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
72/119
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
73/119
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
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)
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
75/119
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
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
77/119
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
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
79/119
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
80/119
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
81/119
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
82/119
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
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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
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
21
59 79 95
Clave Lealtad 1
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
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
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
85/119
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
86/119
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
87/119
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
88/119
Criptoanlisis, mediante algoritmos genticos, de textos cifrados en la Guerra Civil Espaola con la tcnica de cinta mvil
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
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
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
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
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
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
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
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
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(<); 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(<); 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
98/119
SYSTEMTIME lt; GetLocalTime(<); 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(<); 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(<); 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(<); 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
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(<); 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
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(<); 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(<); 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
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(<); 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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