Cifrado monoalfabético

Cifrado monoalfabético

Un sistema de cifrado es monoalfabético cuando cada carácter se sustituye siempre por un determinado carácter del alfabeto del texto cifrado

Desde la antigüedad hasta nuestros días se han mandado mensajes secretos

La necesidad de comunicarse secretamente ha ocurrido en la diplomacia y entre militares

Con la llegada de las comunicaciones electrónicas el interés por mantener mensajes ininteligibles para todos salvo el receptor no ha hecho sino aumentar

Para introducir unos términos antes de entrar en materia, diremos que criptología es la disciplina dedicada a comunicarse secretamente

Criptografía es la parte de la criptología que trata del diseño e implementación de sistemas secretos y criptoanálisis la que se dedica a romper dichos sistemas

Quisiera empezar con un sistema muy sencillo que puede explicarse matemáticamente hablando mediante aritmética modular

Quizás el primero de estos sistemas tuvo su origen con Julio César, su cifrado consistía simplemente en sustituir una letra por la situada tres lugares más allá en el alfabeto esto es la A se transformaba en D, la B en E y así sucesivamente hasta que la Z se convertía en C

A lo largo de este articulo usaré por simplicidad el alfabeto inglés estándar de 26 letras:

\tiny\begin{pmatrix} 0& 1& 2& 3& 4& 5& 6& 7& 8& 9& 10& 11& 12& 13& 14& 15& 16& 17& 18& 19& 20& 21& 22& 23& 24& 25 \\ 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 \\ \end{pmatrix}

Lo cual es suficiente para la mayoría de los cifrados basados en texto y tiene la ventaja de que ocupan posiciones sucesivas en el código ASCII lo que lo hace muy ventajoso para programar

Pues bien, el cifrado de Julio César podría expresarse así C\equiv P+3\pmod{26} donde hemos asignado a la A el número 0 a la B el 1, … , a la Z el 25, y \pmod{26} indica que debemos tomar el resto de dividir por 26 (en lenguaje C utilizamos el operador % ) C es el texto cifrado y P el original

Frecuencia de letras

En el criptoanálisis de algunos métodos clásicos es interesante conocer la frecuencia de letras, pares de letras y palabras en el idioma en que suponemos que está escrito dicho mensaje

He aquí algunos datos útiles para el idioma español:

Letras de alta frecuencia
Letra Frecuencia %
E 16,78
A 11,96
O 8,69
L 8,37
S 7,88
N 7,01
D 6,87

 

Letras de frecuencia media
Letra Frecuencia %
R 4,94
U 4,80
I 4,15
T 3,31
C 2,92
P 2,76
M 2,12

 

Letras de frecuencia baja
Letra Frecuencia %
Y 1,54
Q 1,53
N 0,92
H 0,89

El resto de las letras G, F, V, W, J, Z, X, K y Ñ tienen frecuencias inferiores a 0,5% y se pueden considerar por tanto «raras»

Resumiendo los datos anteriores y aplicándolos por grupos de letras podríamos decir que:

  • Las vocales ocupan alrededor del 47% del texto
  • Sólo la E y la A se identifican con relativa fiabilidad porque destacan mucho sobre las demás
  • Las letras de frecuencia alta suponen un 68% del total
  • Las consonantes más frecuentes son L, S, N, D (alrededor del 30%)
  • Las letras menos frecuentes son G, F, V, W, J, Z, X, K y Ñ (poco más del 1%)
Palabras más frecuentes
Palabra Frecuencia (por diez mil)
DE 778
LA 460
EL 339
EN 302
QUE 289
Y 226
A 213
LOS 196
DEL 156
SE 119
LAS 114

 

Palabras de dos letras
Palabra Frecuencia (por diez mil)
DE 778
LA 460
EL 339
EN 302
SE 119
UN 98
NO 74
SU 64
AL 63
ES 47

 

Palabras de tres letras
Palabra Frecuencia (por diez mil)
QUE 289
LOS 196
DEL 156
LAS 114
PAR 110
CON 82
UNA 78
MAS 36
SUS 27
HAN 19

 

Palabras de cuatro letras
Palabra Frecuencia (por diez mil)
PARA 67
COMO 36
AYER (*) 25
ESTE 23
PERO 18
ESTA 17
AÑOS (*) 14
TODO 11
SIDO 11
SOLO 10

(*) Estas palabras parecen exageradamente frecuentes, lo que se debe al tipo de textos elegidos para la estadística

Ejemplo de cifrado monoalfabético

MENSAJE ENVIADO AYER rompemos la estructura en palabras del mensaje eliminando signos ortográficos si los hubiera, poniendo por ejemplo MENSAJEENVIADOAYER y obtenemos los equivalentes numéricos de estas letras:

\tiny\begin{pmatrix} 12& 4& 13& 18& 0& 9& 4& 4& 13& 21& 8& 0& 3& 14& 0& 24& 4& 17 \\ M& E& N& S& A& J& E& E& N& V& I& A& D& O& A& Y& E& R \\ \end{pmatrix}

aplicando la transformación P+3\pmod{26} se convierten en

\tiny\begin{pmatrix} 15& 7& 16& 21& 3& 12& 7& 7& 16& 24& 11& 3& 6& 17& 3& 1& 7& 20 \\ P& H& Q& V& D& M& H& H& Q& Y& L& D& G& R& D& B& H& U \\ \end{pmatrix}

es decir el mensaje cifrado es ahora PHQVDMHHQYLDGRDBHU

Un cifrado de este tipo es ridículamente fácil de romper (pero recordad que también fue muy fácil de hacer), basta con probar los 25 posibles desplazamientos desde P + 1 hasta P + 25 y con una ojeada sabremos cual es el mensaje

Hemos utilizado en este caso un criptoanálisis llamado de «fuerza bruta» porque probamos todas las claves (en este caso desplazamientos) posibles

Hay algunas formas de mejorar este método sin complicarlo demasiado, la primera se basa en elegir una palabra clave con todas sus letras diferentes, supongamos que elegimos VIRTUAL ZONE

Escribimos entonces el alfabeto normal junto con el transformado siguiente:

\tiny\begin{pmatrix} 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 \\ V& I& R& T& U& A& L& Z& O& N& E& B& C& D& F& G& H& J& K& M& P& Q& S& W& X& Y \\ \end{pmatrix}

y ahora el mensaje junto con el cifrado sería

\tiny\begin{pmatrix} M& E& N& S& A& J& E& E& N& V& I& A& D& O& A& Y& E& R \\ C& U& D& K& V& N& U& U& D& Q& O& V& T& F& V& X& U& J \\ \end{pmatrix}

ahora un ataque de fuerza bruta es «algo» más costoso pues se debería intentar con todos los alfabetos de sustitución posibles que son 26!=403291461126605635584000000 o sea unos cuantos más que los 25 de antes

Este método tiene la siguiente debilidad: con ciertas claves, las letras finales del alfabeto quedan sin modificar y esto facilita mucho la labor del criptoanalista

La clave en nuestro ejemplo está escogida de modo que aparezcan en ella letras como V, U, Z cercanas al final del alfabeto y que producen un mayor «desorden» en el alfabeto transformado

En todo caso en un cifrado como este se utiliza lo que se llama un análisis de frecuencias. Consiste en: sabiendo la frecuencia de las letras en español (si no sabes en qué idioma en que está escrito el original te puede costar más trabajo) intentar adivinar a que letra corresponde cada una de ellas

Por ejemplo en el último mensaje cifrado CUDKVNUUDQOVTFVXUJ se observa que la letra más repetida es la U, como la letra más frecuente en español es la E podríamos conjeturar que U se corresponde con la E como en efecto así es, siguiendo con las demás letras pueden averiguarse las suficientes como para poder leer el mensaje original