Ir al contenido principal

Criptografía (CCLXVI): Criptoanálisis mediante análisis de frecuencias (I)

Allá por el siglo IX, Al-Kindi, un filósofo y matemático árabe, fue el primero que se dio cuenta, o al menos que lo documentó, de que se podía atacar un texto cifrado mediante la estadística del lenguaje en el que estuviera escrito el texto en claro, ya que ciertas características del mismo se trasladaban al criptograma. Por ello, entiendo que podría ser considerado como el padre del criptoanálisis e incluso como el primer 'hacker' de la historia.

El análisis de frecuencias consiste, básicamente, en estudiar la frecuencia de aparición en el criptograma de caracteres o símbolos y de grupos de ellos (monogramas: un carácter o símbolo; bigramas o digramas: dos caracteres o símbolos consecutivos; trigramas: secuencias de tres caracteres o símbolos, tetragramas: cuatro caracteres o símbolos consecutivos, etc.) con relación a la frecuencia de las letras y grupos de éstas en el idioma en el que está escrito el texto en claro.

La técnica del análisis de frecuencias es muy eficaz en el criptoanálisis de criptogramas cifrados por sustitución simple monoalfabética, en los que una letra del texto en claro se cifra siempre como una misma letra en el criptograma, y en los que, por tanto, podemos mapear los caracteres o símbolos del criptograma con aquellos que les correspondería a cada uno de ellos en el texto en claro en función de la frecuencia de aparición de los primeros en el criptograma con relación a la frecuencia relativa de aparición de los caracteres en un texto escrito en el idioma en el que se escribió el texto en claro.

Es decir, en un criptograma lo suficientemente largo, aunque no hace falta que sea muy extenso, es posible inferir, sin mucho riesgo a equivocarse, que, en aquellos mensajes cifrados correspondientes a textos en español o inglés, la letra que más aparezca en el criptograma se corresponde con la "E" en el texto en claro, ya que dicha letra es la significativamente más frecuente en ambos idiomas, y que la segunda que más aparezca se corresponde con la "A", si el idioma en el que está escrito el mensaje original es el español, o la "T", si se trata del inglés, y así sucesivamente.

Sin embargo, esto no es tan fácil como lo dicho anteriormente, ya que la estadística del lenguaje no es una ciencia exacta cuando se aplica a mensajes concretos, e incluso nos puede llevar a equívocos con las letras más frecuentes si el criptograma es de poca longitud, por lo que será necesario ir refinando la primera aproximación obtenida hasta lograr dar con el alfabeto de sustitución (la clave) empleada en el cifrado.

Para ciertos tipos de cifrados por sustitución simple monoalfabética, tales como el cifrado César y el cifrado afín, como el cifrado y el descifrado se realizan mediante una función definida por una expresión matemática, ni siquiera se precisa mapear todos los caracteres del criptograma con los del texto en claro, sino que bastará con establecer las correspondencias del más frecuente o de los dos más frecuentes, respectivamente (ver posts: "Ataque mediante análisis de frecuencias al cifrado César en python" y "Ataque mediante análisis de frecuencias al cifrado afín en python").

En el caso de los dos cifrados indicados anteriormente, ni siquiera es necesario realizar un ataque por análisis de frecuencias, ya que basta con uno de fuerza bruta porque en ambos casos el espacio de claves es muy pequeño (ver posts: "Ataque de fuerza bruta al cifrado César en python" y "Ataque de fuerza bruta al cifrado afín en python", respectivamente).

Pero, la cosa se complica cuando el alfabeto de sustitución es aleatorio, ya que, por ejemplo, para el caso del alfabeto español con letras mayúsculas (27 caracteres) nos encontramos con que el tamaño del espacio de claves o alfabetos de sustitución posibles es de 27! (1 x 2 x 3 x... x 27), lo que asciende a la bonita cifra de más de diez mil cuatrilllones, algo así como un número mayor que la unidad seguida de 28 ceros, por lo que el ataque de fuerza bruta no es nada aconsejable, y, salvo que se conozcan o puedan inferir fragmentos de texto claro correspondientes a partes del mensaje cifrado o el alfabeto de sustitución se forme de acuerdo a una clave previamente acordada por el emisor y receptor, en cuyo caso el criptograma podría ser vulnerable a un ataque de texto claro conocido (en inglés: 'Known plaintext attack') o de diccionario (en inglés, 'dictionary attack'), respectivamente, es ahí donde juega un papel fundamental la redundancia del lenguaje para atacar este tipo de cifrados. 

Esta técnica también se puede emplear, junto con otras más modernas, para el criptoanálisis, por ejemplo, de mensajes cifrados con la máquina Enigma utilizada por el ejército alemán en la WWII. Tal es el caso del algoritmo 'Hill Climbing', en el que se puede utilizar el análisis de frecuencias de n-gramas junto con el Índice de Coincidencia (IC) para atacar mensajes cifrados utilizando esta máquina. Lo que se ha hecho con éxito contra mensajes originales del ejército alemán de la Segunda Guerra Mundial, incluidos mensajes con no más de 80 caracteres y para los que han fallado otros métodos más modernos.

Y hasta aquí este primer post de introducción al criptoanálisis mediante el análisis de frecuencias. En posteriores entradas iré poniendo más información sobre esta técnica de criptoanálisis, ejemplos y código en python para llevar a cabo este tipo de ataques.

Quizás también te interese:

Comentarios

Entradas populares de este blog

Criptografía (I): cifrado Vigenère y criptoanálisis Kasiski

Hace unos días mi amigo Iñaki Regidor ( @Inaki_Regidor ), a quien dedico esta entrada :), compartió en las redes sociales un post titulado "Criptografía: el arte de esconder mensajes"  publicado en uno de los blogs de EiTB . En ese post se explican ciertos métodos clásicos para cifrar mensajes , entre ellos el cifrado de Vigenère , y , al final del mismo, se propone un reto consistente en descifrar un mensaje , lo que me ha animado a escribir este post sobre el método Kasiski  para atacar un cifrado polialfabético ( conociendo la clave descifrar el mensaje es muy fácil, pero lo que contaré en este post es la forma de hacerlo sin saberla ). El mensaje a descifrar es el siguiente: LNUDVMUYRMUDVLLPXAFZUEFAIOVWVMUOVMUEVMUEZCUDVSYWCIVCFGUCUNYCGALLGRCYTIJTRNNPJQOPJEMZITYLIAYYKRYEFDUDCAMAVRMZEAMBLEXPJCCQIEHPJTYXVNMLAEZTIMUOFRUFC Como ya he dicho el método de Vigenère es un sistema de sustitución polialfabético , lo que significa que, al contrario que en un sistema de

Criptografía (XXIII): cifrado de Hill (I)

En este post me propongo explicar de forma comprensible lo que he entendido sobre el cifrado de Hill , propuesto por el matemático Lester S. Hill , en 1929, y que se basa en emplear una matriz como clave  para cifrar un texto en claro y su inversa para descifrar el criptograma correspondiente . Hay tres cosas que me gustan de la criptografía clásica, además de que considero que ésta es muy didáctica a la hora de comprender los sistemas criptográficos modernos: la primera de ellas es que me "obliga" a repasar conceptos de matemáticas aprendidos hace mucho tiempo y, desgraciadamente, olvidados también hace demasiado tiempo, y, por consiguiente, que, como dice  Dani , amigo y coautor de este blog, me "obliga" a hacer "gimnasia mental"; la segunda es que, en la mayoría de las ocasiones, pueden cifrarse y descifrase los mensajes, e incluso realizarse el criptoanálisis de los criptogramas, sin más que un simple lápiz y papel, es decir, para mi es como un pasat

¿Qué significa el emblema de la profesión informática? (I)

Todas o muchas profesiones tienen un emblema que las representa simbólicamente y en el caso de la  informática: " es el establecido en la resolución de 11 de noviembre de 1977  para las titulaciones universitarias superiores de informática, y  está constituido por una figura representando en su parte central  un  núcleo toroidal de ferrita , atravesado por  hilos de lectura,  escritura e inhibición . El núcleo está rodeado por  dos ramas : una  de  laurel , como símbolo de recompensa, y la otra, de  olivo , como  símbolo de sabiduría. La  corona  será la  de la casa real  española,  y bajo el escudo se inscribirá el acrónimo de la organización. ". Veamos los diferentes elementos tomando como ejemplo el emblema del COIIE/EIIEO (Colegio Oficial de Ingenieros en Informática del País Vasco/ Euskadiko Informatikako Ingeniarien Elkargo Ofiziala ) . Pero no sólo el COIIE/EIIEO adopta el emblema establecido en dicha resolución, sino que éste se adopta también como im