Método Kasiski

El Método Kasiski es un método de ataque a cifrados por sustitución poli-alfabética que no pueden ser atacados por el análisis de frecuencias, fue desarrollado por Friedrich Wilhelm Kasiski en 1.863 contra el cifrado Vigenère. Su libro “Die Geheimschriften und die Dechiffrir-Kunst”, la escritura secreta y el arte de descifrar, describe el procedimiento basado en el análisis de las distancias entre fragmentos repetidos en el texto cifrado, para obtener la longitud de la clave utilizada. Este explota la debilidad de que la clave se repite. Ver: Conceptos básicos de seguridad.Friedrich Wilhelm Kasiski Die Geheimschriften und die Dechiffrir-Kunst criptoanálisis

 

Para que podamos estar seguros de que las palabras repetidas coinciden en una posición, las cadenas deben tener un mínimo de dos ó tres caracteres (Kasiski lo plantea con tres), de tal manera que si dos trigramas en el texto plano aparecen a una distancia de separación que es un múltiplo de la longitud de la clave, entonces se encontrarán en el mismo trigrama en el texto cifrado.

 

El método que utiliza es observar y almacenar los tri-gramas que aparecen más de una vez en el texto cifrado, pensando que la distancia de separación puede ser múltiplo de la longitud de la clave. Para cada tri-grama que aparece más de una vez, se calcula el máximo común divisor (MCD) de todas sus distancias. Si el MCD es  > 1, guardamos el trigrama y el MCD asociado. Suponemos que, de todos los trigramas almacenados, la palabra clave es un divisor de al menos uno de esos divisores.

 

Podemos encontrarnos algunos problemas en función del tamaño del texto cifrado:

  • Si es pequeño, es probable que el mismo trigrama se produzca dos o más veces a una distancia que sea un múltiplo de la clave.
  • Si es demasiado grande existe una mayor probabilidad, por otras razones, de que aparezcan trigramas idénticos.

 

Como ejemplo tomamos un párrafo de “Don Quijote de la Mancha”, lo ciframos con Vigenère y comenzamos a trabajar con el criptograma. He escrito un programa en Java para que nos ayude en las tareas más tediosas, obtener las ocurrencias, posición, distancia y MCD. Con ellos se obtiene la entrada de longitud n con el mayor nº de ocurrencias.

 

Criptoanalisis Friedrich W. Kasiski en java

 

Una vez obtenida la longitud de la supuesta palabra clave (en el ejemplo aparece la longitud 8 muy destacada de las demás), se alinea el texto cifrado en bloques de, n columnas, del mismo tamaño que la longitud de la supuesta clave. Luego, cada columna se trata como el texto cifrado de una sustitución mono-alfabética, de esta forma las columnas se atacan con un método estadístico o el análisis de frecuencias. (←En esta página se encuentra un modelo de programa que obtiene las frecuencias).

 

Bloques de texto cifrado en tamaños de la longitud de la supuesta clave
TQMNVYYT HHVLLPSG RLRDOGNR EQGMMVWG EUMIOVHT RSJDLVEX CSYAWYUA EXZEWTHK
KINIGENG WMUAVKHW TOGSÑIDT CDREXELN XOCECSSW PVXALQMB VYRRZGFY AETOJKSE
VSTOCVWW EVMNLSDE PHVAVKHF IZRCLUNX REJNOVHM POHINQDT IPKNZGZX IHMEVSLR
GYVBCEFN EWCODWTT SSKLLQMX YEKLZWÑB TVEEDEDZ CTRLZPAG EHVAYEVB SYJAVSLW
EPZNQSLV EQKUWEFE PWLROWIT HXVSÑILÑ WETIOQVT TOJEDXHW TOCANSFV AYRNDEQI
SINEVEKN TGRLKELW TZVLVYVI FEJAVELY XIKTLWUI CWMSAEFN KJCODHWE EPVSWSQE
EWUADHWX CXJEDIET CEKERSFL PFRCZQLÑ LICLZVVX ASDSPMFI JIEAOQLÑ REKAFQST
BEIUOTSM PFRDOOHM RYRROQMT ÑYEADSTL XQRQFIFI AOVGLFST ASKVOMFN TCMNWSRI
SITAWTHR FORZLUNX PWVNDMDE PFREVVHV CGGMZXHF PFRLLTHW PHVRLJKB IESAVEWW
PHUEXYWM JVGHSHSE VSTOXOHM RMECFIFN PEFODIKT SITOWTDX NMEROGAT IITOÑIUT
HQVSOQBÑ JSUECSLN HSXRLQET SVMGLHHL ÑEDIQSVX AETAKEJÑ XIJEXHWV XVIUOXWG
PICSZFKX CSDBCIVX GYZJLHSI GYVSLHSK KIVNOWMI WEPAVKNG PHZFOVWG RMREXOHM
PYLOCILK KIUEDXWV PWGEDGKB QIEAFQJÑ TTGRNSFC TXMRLWÑX HSKMSOWM IIUETEWG
JIEDOVJÑ TWVLVEET QEIUSNSG PTVRZILN EMDPZVMT FSTOLQNX IXJONYWG JSSADXSK
KIVNVEFT HVRCSQVE CSKEDEDZ PYEPFQMI SICAGIKW PH

 

Sabemos que la primera letra de cada bloque se ha cifrado con el primer carácter de la clave, el segundo con el segundo carácter de la clave y así sucesivamente. Sabiendo esto, obtenemos las frecuencias de cada caracter por cada una de las columnas de los bloques de 8 caracteres.

 

 

Frecuencias por carácter y por cada una de las columnas de los bloques
Frecuencias en Español
e 13,270
a 12,781
o 9,485
s 7,594
r 6,690
n 6,548
l 5,606
i 5,181
d 5,057
u 4,782
t 3,971
c 3,678
m 3,114
p 2,546
b 1,617
q 1,498
v 1,240
y 1,192
g 1,187
h 1,179
j 0,581
f 0,509
z 0,403
ñ 0,208
x 0,079
k 0,002
w 0,001
Columna 0 Columna 1 Columna 2 Columna 3 Columna 4 Columna 5 Columna 6 Columna 7
P 19 I 17 V 16 A 19 L 17 E 17 H 14 T 18
E 11 E 14 R 16 E 18 O 16 S 13 W 13 X 13
T 11 S 14 K 10 O 11 D 14 V 10 L 12 W 9
C 9 Y 10 T 9 N 10 V 13 H 7 F 12 I 9
I 7 H 8 E 8 R 9 Z 10 W 6 S 11 E 8
R 7 V 7 J 8 L 9 W 7 G 5 D 7 M 7
S 7 W 7 M 8 S 8 C 6 K 4 V 7 K 4
A 6 O 7 C 7 I 5 F 5 O 4 K 6 L 3
H 6 Q 5 U 6 D 4 X 5 M 3 M 6 Y 2
J 5 M 5 G 6 C 4 S 4 U 2 N 6 C 1
K 5 X 5 D 4 U 4 N 4 N 1 E 4 A 1
X 5 F 4 Z 4 M 3 Ñ 3 U 3
F 3 T 3 I 3 P 2 Q 2 I 11 J 3 F 2
G 3 P 3 S 2 G 2 K 2 J 1 Q 2 G 10
V 3 G 2 L 2 B 2 G 2 X 5 T 2 Z 2
W 3 Z 2 X 2 H 1 T 1 Y 5 A 2 Ñ 7
Q 2 J 1 N 2 Q 1 A 1 T 5 Ñ 2 V 5
Ñ 2 U 1 P 1 J 1 M 1 I 1
B 1 C 1 F 1 F 1 Y 1 F 2 Y 1 B 5
L 1 L 1 Y 1 T 1 J 1 P 2 R 1 N 8
N 1 D 1 H 1 Z 1 R 1 Q 14 B 1 R 3
Y 1 V 1 P 1 Z 1

 

 

 

 

 

Sólo tenemos que tomar los caracteres más representativos de cada una de las columnas, en teoría ya tendríamos la clave del texto cifrado, PIVALEHT. A partir de aquí desciframos el texto y, sorpresa, es ininteligible. La primera impresión es repetir el proceso para estudiar posibles errores, pero no es así. La solución a esta problemática pasa por discriminar los primeros candidatos de los caracteres obtenidos de las columnas en función de las frecuencias de las letras de idioma que tratamos, en este caso el español.

 

Tomamos el ejemplo y estudiamos las letras candidatas por cada columna:

El primer carácter de la columna 0 tiene una diferencia sustancial con el segundo. Tomamos P como letra válida.

La columna 1 tiene los caracteres I, E, S con cifras similares, en este caso recurrimos a la tabla de frecuencias y discriminamos por ella. Con mucha diferencia tenemos a la letra E como candidata.

La columna 2 tiene dos candidatas V y R, tomamos la frecuencia del idioma y vemos que la R es la idónea.

Las columnas 3 y 4 tienen diferencias mínimas en sus dos primeras candidatas (A y E) (L y O) y la frecuencia del idioma no nos aclara nada. Deberemos probar el descifrado con ambas letras.

La columna 5 está clara, es la letra E.

La columna 6 parece compleja, pero cotejando con la tabla de frecuencias tomamos la S.

La columna 7 también está clara, es la letra T.

 

Nos quedan las siguientes posibles contraseñas:

PERALEST

PERELEST

PERAOEST

PEREOEST

 

Probamos con cada una de ellas y damos con la correcta: PERALEST