Ir al contenido principal

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

Ya he escrito algunas entradas en este blog (ver
primer post) sobre cifrados de sustitución polialfabética, entre otros sobre el cifrado de Vigenère, y también sobre el método Kasiski para atacar cifrados de este tipo, y en este post me propongo explicar lo que he entendido sobre el criptoanálisis basado en el Índice de Coincidencia (IC).

Este método de criptoanálisis fue desarrollado en 1920 por William Friedman para atacar cifrados de sustitución polialfabética con claves periódicas, sistemas criptograficos de los que el cifrado de Vigenère es un ejemplo.

Para explicar este método de criptoanálisis seguiré los siguientes puntos:

1.- Cifrados de sustitución polialfabética con claves periódicas.
2.- ¿Qué es el Índice de Coincidencia (IC)?.
3.- ¿Cómo se utiliza el Índice de Coincidencia (IC) para atacar este tipo de cifrados?.
4.- Ejemplo de ataque a un criptograma basado en el Índice de Coincidencia (IC), en un próximo post.

1.- Cifrados de sustitución polialfabética con claves periódicas:

Como ya sabemos, en estos sistemas de cifrado, de los que como digo el cifrado de Vigenère es un ejemplo, para cifrar un texto o mensaje en claro se utiliza una clave donde cada carácter de la misma se corresponde con un alfabeto, de tal forma que el primer carácter del texto en claro se cifra con el alfabeto correspondiente al primer carácter de la clave, el segundo carácter del texto en claro con el correspondiente al segundo y así hasta agotar todos los caracteres de la clave, momento en el cual el siguiente carácter del texto en claro se cifra nuevamente con el alfabeto correspondiente al primer carácter de la clave, y así sucesivamente, es decir:
Donde:
K: clave.
ki: carácter i-ésimo de la clave (i  t).
t: periodo o longitud de la clave o, lo que es lo mismo, número de alfabetos.
E: función de cifrado.
mi: carácter i-ésimo del mensaje o texto en claro a cifrar.
D: función de descifrado.
ci: carácter i-ésimo del criptograma o texto cifrado.
n: tamaño del alfabeto.

Veamos esto cifrando un texto en claro en español con el cifrado de Vigenère.

1.1.- En primer lugar establezcamos una relación entre las letras del alfabeto español y la posición que ocupa cada una de ellas en el mismo:
1.2.- Tamaño del alfabeto (n) = 27

1.3.- Texto en claro a cifrar: EJEMPLO.

1.4.- Clave (K): CLAVE.

1.5.- Longitud de la clave (t) = 5.

1.6.- Cifrado:

Ek(m1) = (mk1) mod n = (E + C) mod 27 = (4 + 2) mod 27 = 6 = G
Ek(m2) = (mk2) mod n = (J + L) mod 27 = (9 + 11) mod 27 = 20 = T
Ek(m3) = (mk3) mod n = (E + A) mod 27 = (4 + 0) mod 27 = 4 = E
Ek(m4) = (mk4) mod n = (M + V) mod 27 = (12 + 22) mod 27 = 7 = H
Ek(m5) = (mk5) mod n = (P + E) mod 27 = (16 + 4) mod 27 = 20 = T
Ek(m6) = (mk1) mod n = (L + C) mod 27 = (11 + 2) mod 27 = 13 = N
Ek(m7) = (mk2) mod n = (O + L) mod 27 = (15 + 11) mod 27 = 26 = Z

Texto cifrado o criptograma: GTEHTNZ.

1.7.- Descifrado:

Dk(c1) = (c1 k1) mod n = (G - C) mod 27 = (6 - 2) mod 27 = 4 = E
Dk(c2) = (ck2) mod n = (T - L) mod 27 = (20 - 11) mod 27 = 9 = J
Dk(c3) = (ck3) mod n = (E - A) mod 27 = (4 - 0) mod 27 = 4 = E
Dk(c4) = (ck4) mod n = (H - V) mod 27 = (7 - 22) mod 27 = 12 = M
Dk(c5) = (ck5) mod n = (T - E) mod 27 = (20 - 4) mod 27 = 16 = P
Dk(c6) = (ck1) mod n = (N - C) mod 27 = (13 - 2) mod 27 = 11 = L
Dk(c7) = (ck2) mod n = (Z - L) mod 27 = (26 - 11) mod 27 = 15 = O

Texto en claro: EJEMPLO.

En este tipo de cifrados su vulnerabilidad residía en su naturaleza cíclica, es decir, en la aplicación cíclica de t cifrados de sustitución monoalfabética y, por tanto, como en el método Kasiski (ver primer post al que he hecho referencia al principio), lo primero que hay que hacer para atacarlos es averiguar la longitud de la clave, para más tarde realizar un análisis de frecuencias sobre los caracteres del criptograma que han sido cifrados con el mismo carácter de la clave (mismo alfabeto) con objeto de obtener la clave y descifrarlo.

2.- ¿Qué es el Índice de Coincidencia (IC)?:

El Índice de Coincidencia (IC) es la probabilidad de que dos letras tomadas al azar de un texto sean iguales.

Para obtener la fórmula con la que calcularlo, consideremos lo siguiente:

2.1.- El número de pares de letras “AA” que podemos obtener tomando 2 letras al azar de un texto es:
Donde: fA es la frecuencia o número de ocurrencias del carácter “A” en el texto.

Por tanto, el número de pares de letras iguales que podemos obtener tomando 2 letras al azar de un texto es:
2.2.- Por otra parte, el número de pares de letras tomadas al azar que podemos obtener de un total de N letras (tamaño del texto) es:
2.3.- Por lo que la probabilidad de que dos letras tomadas al azar de un texto con un tamaño de N letras sean iguales (IC) es:
3.- ¿Cómo se utiliza el Índice de Coincidencia (IC) para atacar cifrados de sustitución polialfabética con claves periódicas?:

Como ya he comentado, lo primero que hay que hacer para atacar este tipo de cifrados es averiguar la longitud de la clave, y para eso precisamente se utiliza el Índice de Coincidencia (IC).

Me explico: tal y como he leído por ahí, el IC obtenido a partir de un texto en el idioma español estará próximo a 0,0775 (lógicamente siempre y cuando el texto sea lo suficientemente grande, aunque ni siquiera hace falta que sea muy extenso para que el IC se aproxime a ese valor).

Cuando se cifra un texto empleando un sistema de sustitución monoalfabética el IC del idioma en el que está escrito el texto en claro se mantiene en el texto cifrado, mientras que si se utiliza un sistema de sustitución polialfabética el IC en el texto cifrado será significativamente menor que el del texto en claro, ya que las frecuencias más altas de las letras del texto en claro se reparten entre varias letras del criptograma.

De lo anterior se deduce que si calculamos el IC para las letras del criptograma que conforme a cada una de las posible longitudes de la clave hayan sido cifradas con el alfabeto correspondiente al mismo carácter de la clave sólo obtendremos valores próximo a 0,0775 para la longitud de la clave realmente usada en el cifrado. Es decir:

- Longitud de la clave (t) = 1: calculamos el IC de todo el texto cifrado. En este caso todos los caracteres del texto en claro habrían sido cifrados por el alfabeto correspondiente al único carácter de la clave y, por tanto, se habría utilizado un único alfabeto, es decir, se trataría realmente de una sustitución monoalfabética. Si el IC calculado está próximo a 0,0775 la clave empleada en el cifrado podría tener una longitud de 1.

- Longitud de la clave (t) = 2: formamos dos subcriptogramas (Cy C2), el primero compuesto por los caracteres del criptograma 1º, 3º, 5º, 7º, 9º,... y el segundo por 2º, 4º, 6º, 8º, 10º,..., ya que los caracteres de C1 habrían sido cifrados con el alfabeto correspondiente a la primera letra de la clave y los de C2 con el alfabeto correspondiente a la segunda, y calculamos el IC de cada uno de estos dos subcriptogramas. Si ambos IC calculados están próximos a 0,0775 la clave empleada en el cifrado podría tener una longitud de 2.

- Longitud de la clave (t) = 3: formamos tres subcriptogramas (C1, C2, y C3) el primero compuesto por los caracteres del criptograma 1º, 4º, 7º, 10º, 13º,..., el segundo por 2º, 5º, 8º, 11º, 14º,... y el tercero por 3º, 6º, 9º, 12º, 15º..., ya que los caracteres de C1 habrían sido cifrados con el alfabeto correspondiente a la primera letra de la clave, los de C2 con el alfabeto correspondiente a la segunda y los de C3 con el alfabeto correspondiente a la tercera, y calculamos el IC de cada uno de estos tres subcriptogramas. Si los IC calculados están próximos a 0,0775 la clave empleada en el cifrado podría tener una longitud de 3.
...

Una vez averiguada la longitud de la clave, mediante el análisis de frecuencias de los caracteres de los subcriptogramas correspondientes a esa longitud, obtendríamos la clave utilizada y descifraríamos el mensaje.

En resumen y en mi opinión, un elegante método el propuesto por William Friedman, en 1920, para atacar cifrados de sustitución polialfabética con claves periódicas, pero que recomiendo utilizar en combinación con el método Kasiski, para una vez averiguada la longitud de la clave conforme a este último método confirmar que efectivamente es así, por los siguientes motivos principales:

- En textos pequeños el IC no es muy confiable.
- A medida que el tamaño de la clave aumenta llega un momento en el que el IC se aproxima al de una distribución uniforme, es decir, aquella en la que cada letra del alfabeto ocurre con la misma frecuencia (1/27), y por tanto el IC se aproxima a 0,0370, con lo que la información que este método nos aporta pierde valor.

4.- Ejemplo de ataque a un criptograma basado en el Índice de Coincidencia (IC):


Quizás también te interese:

Comentarios

  1. Para calcular el sumatorio hay que introducir manualmente cada una de las frecuencias?

    ResponderEliminar
  2. Sí, aunque siempre puedes automatizar el proceso mediante un pequeño programa o utilizar alguna herramienta online para calcularlo (por ejemplo: http://practicalcryptography.com/cryptanalysis/text-characterisation/index-coincidence/)

    ResponderEliminar
  3. He intentado hacerlo manualmente y me dan valores minimos de 0.002
    No entiendo que he hecho mal en la formula.

    ResponderEliminar
  4. Que significan las Ns en la fórmula. si utilizo las letras totales del texto me da 0.002.

    ResponderEliminar
    Respuestas
    1. La N es el tamaño, longitud o número de letras del texto. Déjame un poco de tiempo e intento ponerte un ejemplo detallado del cálculo.

      Eliminar
  5. Buenas Juan F-M:

    Pongo un ejemplo de cálculo del Índice de coincidencia (IC) de un texto en claro, aunque lo habitual es que lo calculemos con respecto a criptogramas.

    Supongamos el siguiente texto en claro: EJEMPLO DE CALCULO DEL INDICE DE COINCIDENCIA DE UN TEXTO

    Quitamos los espacios:
    EJEMPLODECALCULODELINDICEDECOINCIDENCIADEUNTEXTO

    Longitud o tamaño del texto en claro (N) = 48

    Ahora, para cada carácter (de 'A' a 'Z') del texto en claro se hace lo siguiente:

    'A' --> Nº de caracteres 'A' (FA) = 2; Número de pares de letras 'AA' que podemos obtener tomando 2 letras del texto en claro = FA * (FA-1) / 2 = 2 * 1 / 2 = 1; Número de pares de letras posibles tomando 2 letras de un texto de 48 caracteres = N * (N-1) / 2 = 48 * 47 / 2 = 1.128; Por tanto, la probabilidad de que tomadas dos letras al azar del texto en claro éstas resulten ser 'AA' (caso favorables / casos posibles) = 1 / 1.128 = 0,00088652

    'B' --> Nº de caracteres 'B' (FB) = 0; Número de pares de letras 'BB' que podemos obtener tomando 2 letras del texto en claro = FB * (FB-1) / 2 = 0 * (-1) / 2 = 0; Número de pares de letras posibles tomando 2 letras de un texto de 48 caracteres = N * (N-1) / 2 = 48 * 47 / 2 = 1.128; Por tanto, la probabilidad de que tomadas dos letras al azar del texto en claro éstas resulten ser 'BB' (caso favorables / casos posibles) = 0 / 1.128 = 0

    'C' --> Nº de caracteres 'C' (FC) = 6; Número de pares de letras 'CC' que podemos obtener tomando 2 letras del texto en claro = FC * (FC-1) / 2 = 6 * 5 / 2 = 15; Número de pares de letras posibles tomando 2 letras de un texto de 48 caracteres = N * (N-1) / 2 = 48 * 47 / 2 = 1.128; Por tanto, la probabilidad de que tomadas dos letras al azar del texto en claro éstas resulten ser 'CC' (caso favorables / casos posibles) = 15 / 1.128 = 0,01329787

    Y así hasta la letra 'Z'.

    Y, finalmente, el Índice de Coincidencia (IC) correspondiente al texto en claro (la probabilidad de que dos letras tomadas al azar del texto en claro resulten ser iguales) es el sumatorio de todos los resultados obtenidos: IC = 0,00088652 + 0 + 0,01329787 + ... = 0,08599291

    ResponderEliminar

Publicar un comentario

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

¿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

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