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:
Letra | Frecuencia % |
---|---|
E | 16,78 |
A | 11,96 |
O | 8,69 |
L | 8,37 |
S | 7,88 |
N | 7,01 |
D | 6,87 |
Letra | Frecuencia % |
---|---|
R | 4,94 |
U | 4,80 |
I | 4,15 |
T | 3,31 |
C | 2,92 |
P | 2,76 |
M | 2,12 |
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%)
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 |
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 |
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 |
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