Archivo de la categoría: Criptografía

La criptografía se ocupa de las técnicas de cifrado y posterior descifrado, destinadas a alterar las representaciones lingüísticas de ciertos mensajes con el fin de hacerlos ininteligibles a receptores no autorizados

Criptografía

Criptografía

La historia de la criptografía es larga. Ya las primeras civilizaciones desarrollaron técnicas para enviar mensajes durante las campañas militares, de forma que si el mensajero era interceptado la información que portaba no corriera el peligro de caer en manos del enemigo

Desde los tiempos del Antiguo Egipto hasta hoy en día ha pasado mucho tiempo, pero hay algo que no ha cambiado: el anhelo del ser humano por esconder sus secretos

Antigüedad

Personajes como Cleopatra o El César ya aprendieron a valorar la importancia de esconder de ojos indiscretos sus mensajes. La Scilata que los espartanos usaban allá por el año 400 B. C. , o el propio código César (un simple desplazamiento alfabético) fueron los inicios

Con el desarrollo de las ciencias, y más concretamente de las matemáticas, la criptografía creció como un hermano menor, de la mano. En la Edad Media comenzó a adquirir una gran importancia cuando un siervo del Papa Clemente VII escribió el primer manual sobre el tema de la historia en el viejo continente

En 1466 León Battista Alberti ideó el sistema polialfabético basado en la rotación de unos rodillos. Un siglo más tarde, Giovanni Battista Belaso inventó la clave criptográfica basada en una palabra o texto que se transcribía letra a letra sobre el mensaje original

Siglo XX

Ya a principios del pasado siglo XX se idearon los denominados “traductores mecánicos”, basados en el concepto ideado en el siglo XV por Alberti de las ruedas concéntricas, y el sistema comenzó a tornarse sumamente complejo, ya no bastaba con analizarlo concienzudamente para comprenderlo. Y eso nos llevó a la Segunda Guerra Mundial, a los años 30 and 40 y a la máquina Enigma

Aunque mucha gente no lo sepa, la criptografía fue uno de los principales motivos para que los aliados ganaran la guerra, pues los alemanes creían el código de su máquina Enigma inviolable, y de hecho sí que era extremadamente complejo. Pero al igual que antes comentaba que el anhelo humano de esconder secretos es eterno, también lo es su anhelo por desenterrar secretos ajenos

Un equipo de criptoanalistas, matemáticos y otras mentes privilegiadas (entre ellos Alan Mathison Turing, uno de los padres de la informática) logró en 1942 lo que parecía imposible: romper el cifrado de Enigma

Para ello diseñaron las llamadas “bombas navales” (la bombe de Turing), aparatos de cálculo mecánicos que se encargaban de romper el cifrado alemán y entregar todos los secretos a los aliados

Igualmente, el Purple (versión japonesa de Enigma) fue roto en Midway por un equipo dirigido por el comandante Joseph J. Rochefort. El hecho de conocer los secretos, de tener todas las llaves (nunca mejor dicho), dio la vuelta a la guerra y cambió el curso de la historia. Y el mundo nunca volvió a ser el mismo

Criptografía en la actualidad

El nacimiento de la informática y de los criptosistemas informáticos supuso un cambio radical del concepto de criptografía, y también del criptoanálisis. Los criptosistemas y los algoritmos aumentaron repentinamente y de forma descomunal su complejidad

Desde el DES hace ya mucho, hasta los criptosistemas asimétricos de curvas elípticas actuales todo ha cambiado también mucho, pero uno de esos cambios ha supuesto el segundo gran punto de inflexión de la criptografía: PGP

Hasta entonces, el privilegio de guardar secretos estaba exclusivamente en manos de los gobiernos o los poderosos, y hoy día, seguramente gracias a PGP, es un derecho de cualquier ciudadano por humilde que sea (aunque en algunos países no sea así). Arriesgando mucho, Arthur Zimmermann nos abrió las puertas a la criptografía, y a la libertad de comunicarnos de forma segura

Por supuesto hay otros nombres que son capitales en el desarrollo de los criptosistemas informáticos, aparte de Zimmermann: Rivest, Shamir, Adleman, Diffie, Hellman, ElGamal, Rijmen, Daemen, Massey, Miller, Goldwaser… Todos ellos son padres de lo que hoy se llama criptografía

Conceptos básicos

Criptología

Criptografía arte de ocultar. La palabra tiene su origen en el griego: kryptos (oculto, escondido) y graphein (escribir). El arte de ocultar un mensaje mediante signos convencionales es muy antiguo, casi tanto como la escritura

Y efectivamente siempre ha sido considerado un arte hasta hace relativamente poco, cuando Claude Elwood Shannon publicó en dos años dos documentos que supusieron la fundación de la moderna Teoría de la Información. Esos documentos son:

  • A mathematical theory of communication
  • Communication theory of secrecy systems

Criptografía arte de escribir con clave secreta o de un modo enigmático

Criptoanálisis arte de descifrar criptogramas

Texto en claro y criptogramas

En el ámbito criptográfico, entendemos por texto en claro cualquier información que resulta legible y comprensible per se. Un texto en claro sería cualquier información antes de ser encriptada o después de ser desencriptada. Se considera que cualquier información es vulnerable si se encuentra en este estado

Así mismo, denominamos criptograma a cualquier información que se encuentre convenientemente cifrada y no resulte legible ni comprensible más que para el destinatario legítimo de la misma

El mecanismo de transformar un texto en claro en un criptograma lo denominamos encriptación o cifrado, y al proceso de recuperación de la información a partir de un criptograma lo denominamos desencriptación o descifrado

Es muy importante no confundir estos términos con codificación o decodificación

Codificación es el acto de representar la información de distintas formas, pero no necesariamente encriptadas. Por ejemplo, un número decimal puede codificarse como hexadecimal, y no por ello se convierte en un criptograma

Flujo de información

En un criptosistema la información sigue un flujo siempre fijo:

Flujo de información

El emisor cifra el texto en claro para obtener el criptograma, que viaja por un canal ruidoso. El receptor descifra el criptograma y obtiene de nuevo el texto en claro que el emisor le envió. Durante toda la transmisión, el mensaje es ilegible

Criptosistemas

Antes de nada, es conveniente definir qué entendemos «matemáticamente» por criptosistema. Un criptosistema es una cuaterna de elementos formada por:

  • Un conjunto finito llamado alfabeto, que según unas normas sintácticas y semánticas, permite emitir un mensaje en claro así como su correspondiente criptograma
  • Un conjunto finito denominado espacio de claves formado por todas las posibles claves, tanto de encriptación como de desencriptación, del criptosistema
  • Una familia de aplicaciones del alfabeto en sí mismo que denominamos transformaciones de cifrado
  • Una familia de aplicaciones del alfabeto en sí mismo que denominamos transformaciones de descifrado

Ya sabemos qué es un criptosistema, pero ¿qué es un criptosistema informático? Un criptosistema informático se definiría por los siguientes cuatro elementos:

  • Un conjunto finito denominado alfabeto, que permite representar tanto el texto en claro como el criptograma. A bajo nivel hablaríamos de bits, y a más alto nivel podríamos hablar de caracteres ASCII o MIME
  • Un conjunto finito denominado espacio de claves. Estaría constituido por la totalidad de las claves posibles del criptosistema
  • Una familia de transformaciones aritmético-lógicas que denominamos transformaciones de cifrado
  • Una familia de transformaciones aritmético-lógicas que denominamos transformaciones de descifrado

Se trata simplemente de un criptosistema adaptado a las posibilidades y limitaciones de una máquina. El alfabeto o espacio de caracteres suele ser un estándar de representación de información (típicamente MIME o UNICODE por motivos de compatibilidad) y a más bajo nivel, por bits. Las transformaciones de cifrado y descifrado se ciñen a las normas de programación de los ordenadores actuales

En realidad, a efectos prácticos no existe mucha diferencia entre criptosistema matemático e informático, pues los matemáticos suelen diseñarlos pensando en su programación en una máquina (pues solamente los ordenadores tienen la potencia necesaria para soportar los complejos algoritmos) y los informáticos se desarrollan siempre con una base matemática

Algoritmo criptográfico

Un algoritmo debe describir de forma unívoca y sin dar lugar a interpretaciones, la solución a un problema en un número finito de pasos concreto

Algoritmo de encriptación, es una descripción unívoca y concreta de cómo funciona un criptosistema determinado

Clave criptográfica

El concepto de clave criptográfica surge con el propio concepto de la criptografía, y es el alma de un algoritmo de encriptación

Obviamente un algoritmo tiene que poseer la capacidad de ser usado muchas veces sin que su mecanismo sea idéntico, pues de lo contrario cada persona debería tener su propio algoritmo de encriptación

Para implementar esta funcionalidad, se usan las claves. La clave es un dato que interviene de forma activa en la ejecución del algoritmo y lo personaliza

Atendiendo únicamente al tipo de clave, podemos distinguir dos criptosistemas:

  • Sistemas de clave única o criptosistemas simétricos
    Son aquellos en los que los procesos de cifrado y descifrado son llevados a cabo por una única clave
  • Sistemas de clave pública o criptosistemas asimétricos
    Son aquellos en los que los procesos de cifrado y descifrado son llevados a cabo por dos claves distintas y complementarias

Longitud de clave

A día de hoy, gracias a los ordenadores es posible realizar complejos cómputos matemáticos en un espacio de tiempo relativamente corto. Así pues, el campo del criptoanálisis está íntimamente ligado a esta potencia de cálculo

Para que un algoritmo se considere seguro, su criptoanálisis sin la clave necesaria debe ser computacionalmente imposible de resolver

Consideramos “imposible” de resolver un sistema cuya vulneración necesite mayores recursos (económicos o en tiempo) que el beneficio reportado. Por ejemplo, se consideraría seguro un criptosistema que requiriera miles de años para ser descifrado

Para lograr semejante complejidad, se tratan números o conjuntos de números enormes. Es obvio que a mayor tamaño de estos números, existe un mayor número de claves posibles, y la posibilidad de éxito del criptoanálisis es menor

Hoy en día este tamaño se denomina longitud de clave, y se mide típicamente en los bits que ocupa la clave. Así, una clave de un número de 1024 bits sería un número cualquiera desde el 0 hasta el 1,8\cdot 10^{308} (2^{1024})

Al representar las longitudes de clave como potencias de dos, es importante darse cuenta de la relación existente entre las longitudes de clave. Una clave de 1025 bits es el doble de larga que una de 1024 (2^{1025} frente a 2^{1024})

A día de hoy se usan claves que oscilan entre los 512 bits y los 4096 bits de longitud

Cifrado por sustitución

Cifrado por sustitución

Un cifrado por sustitución es aquel que sustituye cada carácter del texto en claro por otro carácter en el texto cifrado o criptograma

Se basa en aplicar el principio de confusión propuesto por Shannon, ocultando el texto en claro para los intrusos mediante sustituciones, excepto para su destinatario, que conocerá el algoritmo y la clave para recuperar el mensaje

Los cifradores por sustitución se pueden clasificar en tres grupos:

  • Sustitución monográmica monoalfabeto El cifrado se realiza mediante un algoritmo que hace corresponder una letra del texto en claro a una única letra del criptograma, es decir, cifra monogramas

    De ahí su denominación de cifrado monográmico

    En cuanto al término monoalfabeto, quiere decir que se utiliza un único alfabeto de cifrado, el mismo que el del texto en claro o uno mixto, pero distribuido bien de forma aleatoria o bien a través de una transformación matemática

    Luego, si a la letra M del texto en claro le corresponde la letra V o el símbolo # del alfabeto de cifrado, se cifrará siempre igual pues existe una única equivalencia o, lo que es lo mismo, un único alfabeto de cifrado

  • Sustitución monográmica polialfabeto la operación de cifrado también se realiza carácter a carácter, es decir por monogramas

    En cuanto al término polialfabeto, quiere decir que se utiliza varios alfabetos de cifrado, aplicados al mismo carácter del texto en claro o uno mixto, pero distribuido bien de forma aleatoria o bien a través de una transformación matemática

    No obstante, a través de una clave, algoritmo o mecanismo, se obtienen varios alfabetos de cifrado de forma que una misma letra puede cifrarse con caracteres distintos, dependiendo de su posición dentro del texto en claro

  • Sustitución poligrámica tratan el mensaje en bloques de dos o más caracteres sobre los que se aplica la transformación del criptosistema en cuestión, sustituyendo n-gramas del mensaje por n-gramas de texto cifrado

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

Cifrado del César

Cifrado del César

En el siglo I A. C. aparece un cifrador básico conocido con el nombre genérico de cifrado del César en honor al emperador Julio César y en el que ya se aplica una transformación al texto en claro de tipo monoalfabética

El cifrador del César aplica un desplazamiento constante de b caracteres al texto en claro

Ejemplo de cifrado del César

Tomamos b igual a 3, de forma que el alfabeto de cifrado es el mismo que el alfabeto del texto en claro pero desplazado 3 espacios hacia la derecha módulo n, con n el número de letras del mismo

Para cifrar usaremos:

C_i\equiv(M_i+b)\pmod{n}

Para descifrar usaremos:

M_i\equiv(C_i+n-b)\pmod{n}

En el alfabeto castellano, como hay 27 letras, n será 27

Tenemos el siguiente mensaje que queremos cifrar:

C=MENSAJE ENVIADO AYER

Sus caracteres en claro corresponden a la siguiente matriz:

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

\tiny\begin{pmatrix} 12& 4& 13& 19& 0& 9& 4& 4& 13& 22& 8& 0& 3& 15& 0& 25& 4& 18 \\ M& E& N& S& A& J& E& E& N& V& I& A& D& O& A& Y& E& R \\ \end{pmatrix}

Obtenemos los siguientes resultados:

\begin{array}{l} (12+3)\pmod{27}\equiv 15 \\ (4+3)\pmod{27}\equiv 7 \\ (13+3)\pmod{27}\equiv 16 \\ (19+3)\pmod{27}\equiv 22 \\ (0+3)\pmod{27}\equiv 3 \\ (9+3)\pmod{27}\equiv 12 \\ (4+3)\pmod{27}\equiv 7 \\ (4+3)\pmod{27}\equiv 7 \\ (13+3)\pmod{27}\equiv 16 \\ (22+3)\pmod{27}\equiv 25 \\ (8+3)\pmod{27}\equiv 11 \\ (0+3)\pmod{27}\equiv 3 \\ (3+3)\pmod{27}\equiv 6 \\ (15+3)\pmod{27}\equiv 18 \\ (0+3)\pmod{27}\equiv 3 \\ (25+3)\pmod{27}\equiv 1 \\ (4+3)\pmod{27}\equiv 7 \\ (18+3)\pmod{27}\equiv 21 \end{array}

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

\tiny\begin{pmatrix} 15& 7& 16& 22& 3& 12& 7& 7& 16& 25& 11& 3& 6& 18& 3& 1& 7& 21 \\ O& H& P& V& D& M& H& H& P& Y& L& D& G& R& D& B& H& U \\ \end{pmatrix}

Así el mensaje cifrado es: M=OHPVDMHHPYLDGRDBHU

Desciframos el M anterior:

\begin{array}{l} (15+27-3)\pmod{27}\equiv 12 \\ (7+27-3)\pmod{27}\equiv 4 \\ (16+27-3)\pmod{27}\equiv 13 \\ (22+27-3)\pmod{27}\equiv 19 \\ (3+27-3)\pmod{27}\equiv 0 \\ (12+27-3)\pmod{27}\equiv 9 \\ (7+27-3)\pmod{27}\equiv 4 \\ (7+27-3)\pmod{27}\equiv 4 \\ (16+27-3)\pmod{27}\equiv 13 \\ (25+27-3)\pmod{27}\equiv 22 \\ (11+27-3)\pmod{27}\equiv 8 \\ (3+27-3)\pmod{27}\equiv 0 \\ (6+27-3)\pmod{27}\equiv 3 \\ (18+27-3)\pmod{27}\equiv 15 \\ (3+27-3)\pmod{27}\equiv 0 \\ (1+27-3)\pmod{27}\equiv 25 \\ (7+27-3)\pmod{27}\equiv 4 \\ (21+27-3)\pmod{27}\equiv 18 \end{array}

Obteniendo el c original: C=MENSAJEENVIADOAYER

Este sistema de cifrado sencillo, apropiado e incluso bastante ingenioso para la época, presenta un nivel de seguridad muy débil

Criptoanálisis del cifrado del César

Al producirse una sustitución fija de cada carácter del alfabeto en claro por un único carácter del alfabeto de cifrado, el criptograma podrá romperse fácilmente aplicando técnicas de estadística del lenguaje, siempre y cuando contemos con una cantidad suficiente de texto cifrado

La distancia de unicidad viene dada por la relación entre la entropía de la clave H(K) y la redundancia del lenguaje D. Por tanto, si n = 27, existirán sólo 26 posibles combinaciones de alfabetos, por lo tanto H(K)=\log_2{26}=4,70

Como la redundancia D era igual a 3,4 entonces se tiene que N=\frac{H(K)}{D}\approx\frac{4,70}{3,4}\approx 1,38. Por lo tanto, necesitamos como mínimo 2 caracteres

Una forma elemental de criptoanálisis consiste en escribir bajo el texto cifrado todas las combinaciones de frases, con o sin sentido, que se obtienen al aplicar a dicho criptograma desplazamientos de 1, \cdots, n-1 caracteres, siendo n el número de caracteres del alfabeto utilizado. Una de estas combinaciones dará con el texto en claro y esto será válido independientemente del valor asignado a la constante de desplazamiento

b Cifrado
1 PIQWENIIQZMEHSECIV
2 QJRXFÑJJRANFITFDJW
3 RKSYGOKKSBÑGJUGEKX
4 SLTZHPLLTCOHKVHFLY
5 TMUAIQMMUDPILWIGMZ
6 UNVBJRNNVEQJMXJHNA
7 VÑWCKSÑÑWFRKNYKIÑB
8 WOXDLTOOXGSLÑZLJOC
9 XPYEMUPPYHTMOAMKPD
10  YQZFNVQQZIUNPBNLQE
11 ZRAGÑWRRAJVÑQCÑMRF
12 ASBHOXSSBKWORDONSG
13 BTCIPYTTCLXPSEPÑTH
14 CUDJQZUUDMYQTFQOUI
15 DVEKRAVVENZRUGRPVJ
16 EWFLSBWWFÑASVHSQWK
17 FXGMTCXXGOBTWITRXL
18 GYHNUDYYHPCUXJUSYM
19 HZIÑVEZZIQDVYKVTZN
20 IAJOWFAAJREWZLWUAÑ
21 JBKPXGBBKSFXAMXVBO
22 KCLQYHCCLTGYBNYWCP
23 LDMRZIDDMUHZCÑZXDQ
24 MENSAJEENVIADOAYER
25 NFÑTBKFFÑWJBEPBZFS
26 ÑGOUCLGGOXKCFQCAGT

Es fácil deducir que un sistema de cifrado por sustitución monoalfabética como el del César presenta un nivel de seguridad mínimo en tanto que para romperlo nos ha bastado con un lápiz, papel y un poco de paciencia para confeccionar el cuadro anterior, nada del otro mundo

Esta debilidad se debe a que el número de desplazamientos posibles es muy pequeño, al contar sólo con los 26 valores que corresponden a los caracteres del alfabeto; esto es, se cumple que 1\leq b\leq 26, pues un desplazamiento igual a cero o bien múltiplo de veintisiete sería igual que transmitir en claro

Se cumplirá por tanto la siguiente operación de descifrado D a partir de un cifrado E en el anillo n:

D_b=E_{n-b}\Rightarrow D_3=E_{27-3}=E_{24}

Cifrado del César con clave

Cifrado del César con clave

El cifrado del César con clave surge para aumentar la seguridad del cifrado del César, es decir, la distancia de unicidad, incluimos en el alfabeto de cifrado una clave k que consiste en una palabra o frase que se escribe a partir de una posición p_0 del alfabeto en claro

Los caracteres repetidos de la clave no se utilizan. Una vez posicionada la clave en la posición indicada, se añaden las demás letras del alfabeto en orden y de forma modular, para obtener así el alfabeto de cifrado

En este tipo de cifrado se deja de cumplir la condición de desplazamiento constante

Ejemplo de cifrado del César con clave

Tomamos p_0 = 3 y la clave va a ser:

k = ESTOY ABURRIDO

Para cifrar usaremos:

C_i\equiv(M_i+b)\pmod{n}

Para descifrar usaremos:

M_i\equiv(C_i+n-b)\pmod{n}

En el alfabeto castellano, como hay 27 letras, n será 27

Tenemos el siguiente mensaje que queremos cifrar:

C=MENSAJE ENVIADO AYER

Sus caracteres en claro corresponden a la siguiente matriz:

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

A la matriz anterior le añadimos la clave, teniendo en cuenta que hay que eliminar los repetidos

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

Ahora le añadimos las demás letras del alfabeto en orden y de forma modular, para obtener así el alfabeto de cifrado completo

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

Obtenemos los siguientes resultados:

\begin{array}{l} (12+3)\pmod{27}\equiv 15 \\ (4+3)\pmod{27}\equiv 7 \\ (13+3)\pmod{27}\equiv 16 \\ (19+3)\pmod{27}\equiv 22 \\ (0+3)\pmod{27}\equiv 3 \\ (9+3)\pmod{27}\equiv 12 \\ (4+3)\pmod{27}\equiv 7 \\ (4+3)\pmod{27}\equiv 7 \\ (13+3)\pmod{27}\equiv 16 \\ (22+3)\pmod{27}\equiv 25 \\ (8+3)\pmod{27}\equiv 11 \\ (0+3)\pmod{27}\equiv 3 \\ (3+3)\pmod{27}\equiv 6 \\ (15+3)\pmod{27}\equiv 18 \\ (0+3)\pmod{27}\equiv 3 \\ (25+3)\pmod{27}\equiv 1 \\ (4+3)\pmod{27}\equiv 7 \\ (18+3)\pmod{27}\equiv 21 \end{array}

aplicando la transformación P+3\pmod{27} y consultando la segunda parte de la matriz se convierten en

\tiny\begin{pmatrix} 15& 7& 16& 22& 3& 12& 7& 7& 16& 25& 11& 3& 6& 18& 3& 1& 7& 21 \\ F& Y& G& N& E& I& Y& Y& G& Q& R& E& O& J& E& X& Y& M \\ \end{pmatrix}

Así nos queda que el mensaje cifrado es:

M=FYGNEIYYGQREOJEXYM

Desciframos el M anterior:

\begin{array}{l} (15+27-3)\pmod{27}\equiv 12 \\ (7+27-3)\pmod{27}\equiv 4 \\ (16+27-3)\pmod{27}\equiv 13 \\ (22+27-3)\pmod{27}\equiv 19 \\ (3+27-3)\pmod{27}\equiv 0 \\ (12+27-3)\pmod{27}\equiv 9 \\ (7+27-3)\pmod{27}\equiv 4 \\ (7+27-3)\pmod{27}\equiv 4 \\ (16+27-3)\pmod{27}\equiv 13 \\ (25+27-3)\pmod{27}\equiv 22 \\ (11+27-3)\pmod{27}\equiv 8 \\ (3+27-3)\pmod{27}\equiv 0 \\ (6+27-3)\pmod{27}\equiv 3 \\ (18+27-3)\pmod{27}\equiv 15 \\ (3+27-3)\pmod{27}\equiv 0 \\ (1+27-3)\pmod{27}\equiv 25 \\ (7+27-3)\pmod{27}\equiv 4 \\ (21+27-3)\pmod{27}\equiv 18 \end{array}

Consultamos la primera parte de la matriz

\tiny\begin{pmatrix} 12& 4& 13& 19& 0& 9& 4& 4& 13& 22& 8& 0& 3& 15& 0& 25& 4& 18 \\ M& E& N& S& A& J& E& E& N& V& I& A& D& O& A& Y& E& R \\ \end{pmatrix}

Obteniendo el C original:

C=MENSAJEENVIADOAYER

Al tener un mayor número de combinaciones de alfabetos, existe una mayor incertidumbre respecto de la clave. La distancia de unicidad de este cifrador será mayor y, por consiguiente, el sistema presentará una mayor fortaleza

Criptoanálisis del cifrado del César con clave

Es imposible establecer una relación matemática única y directa entre el alfabeto en claro y el alfabeto de cifrado. El único camino que nos queda consiste en llevar las estadísticas del lenguaje al criptograma, observando por ejemplo la frecuencia relativa de aparición de los caracteres en el texto cifrado

Este tipo de ataque estadístico será válido tanto para los cifrados de tipo monoalfabético con clave como para aquellos que no la tienen. Ahora bien, en la gran mayoría de los casos será necesario contar con una cantidad de criptograma bastante mayor que la del ejemplo anterior, una pizca de intuición y un poco de suerte

La distancia de unicidad viene dada por la relación entre la entropía de la clave H(K) y la redundancia del lenguaje D. Por tanto, si el alfabeto tiene n caracteres, existirán n! combinaciones de elementos de n, por tanto N=\frac{H(K)}{D}=\frac{\log_2{n!}}{D}

Si utilizamos la aproximación de Sterling tenemos que \log_2{n!}\approx n\cdot\log_2{\frac{n}{e}} por lo tanto, la distancia de unicidad será N=\frac{n\cdot\log_2{\frac{n}{e}}}{D}. Como la redundancia D era igual a 3,4 y n = 27 se tiene que N=\frac{27\cdot\log_2{\frac{27}{e}}}{3,4}\approx 26,3. Por lo tanto, necesitamos como mínimo 27 caracteres

Al establecerse en la operación de cifrado una correspondencia directa entre los caracteres del texto en claro y del alfabeto de cifrado, se mantiene la misma relación de frecuencia relativa característica del lenguaje. Por lo tanto, es muy probable que la letra C_i del texto cifrado con mayor frecuencia relativa se corresponda con la letra M_i de mayor frecuencia relativa del lenguaje.

Por tanto, si la letra W es la de mayor frecuencia en el criptograma, podemos suponer con muy buenas expectativas de éxito, que sea la letra E del texto en claro y que, por lo tanto, el desplazamiento aplicado haya sido igual a 19, la distancia que separa ambas letras en el alfabeto

Estas suposiciones sólo tendrán cierta validez si la cantidad de texto cifrado es grande y por tanto se cumplen las propiedades estadísticas del lenguaje. En el fondo se está realizando una comparación de la distribución de frecuencias de todos los elementos del criptograma con la característica del lenguaje, con el objeto de encontrar ese desplazamiento constante

Cifrado de Polibio

Cifrado de Polibio

El historiador griego Polibio (203-120 A. C.), creó un sistema de enviar mensajes por medio de antorchas encendidas

El método consistía básicamente en la creación de una matriz cuadrada de 5 \times 5 tal como la siguiente

\begin{pmatrix}&1&2&3&4&5\\1&A&B&C&D&E\\2&F&G&H&I/J&K\\3&L&M&N&O&P\\4&Q&R&S&T&U\\5&V&W&X&Y&Z\end{pmatrix}

El mensaje es representado por los números que forman la fila y columna cuya intersección da como resultado la letra que se quiere enviar

Si bien el método de Polibio no tenía inicialmente un propósito criptográfico, sí que es la base de sistemas posteriores y el primer caso conocido de sustitución monoalfabética multiliteral

Una variante del cifrado de Polibio, utilizado por los comunistas en la guerra civil española consistía en generar una tabla con tres filas de diez columnas

La primera fila no tenía numeración y la segunda y tercera filas se numeraban respectivamente con dos de los números no utilizados en las columnas de la primera fila

Las columnas se numeraban con una permutación de los dígitos del cero al nueve

El proceso de cifrado consistía en poner una palabra de ocho o menos letras diferentes en la primera fila

En esta palabra se eliminaban las letras repetidas y el resto, hasta completar el alfabeto, se disponían en las dos filas siguientes

El cifrado es similar al de Polibio, pero aquí las letras pueden codificarse como uno o dos números

Ejemplo de la variante comunista del cifrado de Polibio

Los comunistas españoles tenían que enviar el siguiente mensaje que no querían que las tropas franquistas interceptasen

C=EN PIE FAMELICA LEGION

Tomando como clave:

K=FUSIL

Usando la siguiente tabla

\tiny\begin{pmatrix}&8&3&0&2&4&6&1&7&5&9\\&F&U&S&I&L\\5&A&B&C&D&E&G&H&J&K&M\\1&N/\widetilde{N}&O&P&Q&R&T&V&X&Y&Z \end{pmatrix}

Así nos queda que el mensaje cifrado es:

M=54 18 10 2 54 8 58 59 54 4 2 50 58 4 54 56 2 13 18

Desciframos el M anterior

Vamos a la tabla de cifrado, si tenemos dos cifras, comprobamos cual es su fila y la segunda corresponde a la columna

La fila de la intersección de ambas será la letra que se usará en el mensaje descifrado

Si tenemos una cifra, es la correspondiente a la columna y la fila es la correspondiente a la clave

Puede haber confusión en el caso del 18, ya que comparten posición la N y la Ñ, todo dependerá del contexto del mensaje (en este caso se toma la N)

Repetiremos el proceso hasta obtener el mensaje en claro

Obteniendo el C original:

C=ENPIEFAMELICALEGION

Cifrado de Vigenère

Cifrado de Vigenère

El cifrado Vigenère es un cifrado basado en diferentes series de caracteres o letras del cifrado del César formando estos caracteres una tabla, llamada tabla de Vigenère, que se usa como clave

El cifrado de Vigenère es un cifrado de sustitución simple polialfabético

El primer cifrado polialfabético fue el llamado cifrado de Alberti, creado por Leone Battista Alberti hacia 1467

Para facilitar los cálculos se aprovechaba de un disco de metal que permitía cambiar fácilmente entre los diferentes alfabetos disponibles

El sistema de Alberti sólo cambiaba entre alfabetos después de muchas palabras, y los cambios se indicaban escribiendo la letra del correspondiente alfabeto en el mensaje cifrado

Más tarde, en 1508, Johannes Trithemius, en su trabajo Poligraphia, inventó la tabula recta, que es básicamente la tabla de Vigenère

Trithemius, sin embargo, sólo proporcionó un progresivo, rígido y predecible sistema de cambio entre alfabetos

Lo que ahora se conoce como el cifrado de Vigenère fue originalmente descrito en 1533 por Giovan Battista Belasso en su libro La cifra del Sig. quien construyó el cifrado basándose en la tabula recta de Trithemius, pero añadió una clave repetida para cambiar cada carácter entre los diferentes alfabetos

Blaise de Vigenère publicó su descripción de un cifrado de autoclave parecido, pero más robusto, antes del reinado de Enrique III de Francia, en 1586

Más tarde, en el siglo XIX, la invención del cifrado dejó de atribuirse a Vigenère

El cifrado Vigenère ganó una gran reputación por ser excepcionalmente robusto

Incluso el escritor y matemático Charles Lutwidge Dodgson (más conocido como Lewis Carroll) dijo que el cifrado Vigenère era irrompible en el artículo The Alphabet Cipher para una revista de niños

En 1917, Scientific American describió el cifrado Vigenère como imposible de romper

Esta reputación fue mantenida hasta que el método Kasiski resolvió el cifrado en el siglo XIX y algunos criptoanalistas habilidosos pudieron romperlo en varias ocasiones en el siglo XVI

El cifrado Vigenère es lo suficientemente simple si se usa con discos de cifrado. Los Estados confederados de América, por ejemplo, utilizaron un disco de cifrado para implementar el cifrado Vigenère durante la Guerra Civil estadounidense

Los mensajes confederados fueron poco secretos, ya que los miembros de la Unión solían descifrar los mensajes

Gilbert Vernam trató de arreglar el cifrado (creando el cifrado Vernam-Vigenère en 1918), pero no importa lo que hiciera, el cifrado sigue siendo vulnerable al criptoanálisis (No hay que confundirlo con el cifrado de Vernam)

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}

Y el siguiente cuadro correspondiente al cifrado de Vigenère

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

El cifrado puede expresarse con la siguiente fórmula:

M(X_i)=(X_i+K_i-1)\pmod{L}

Donde X_i es la letra en la posición i del texto a cifrar, K_i es el carácter de la clave correspondiente a X_i, pues se encuentran en la misma posición, y L es el tamaño del alfabeto. En este caso L = 26

Para descifrar realizaremos la operación inversa:

D(C_i)=(C_i-K_i+1)\pmod{L}

Donde C_i es el carácter en la posición i del texto cifrado, K_i viene siendo el carácter de la clave correspondiente a C_i, y L el tamaño del alfabeto

Hay que tener en cuenta que a una misma letra en el texto en claro le pueden corresponder diferentes letras en el texto cifrado

Ejemplo de cifrado de Vigenère

Tenemos el siguiente mensaje que queremos cifrar:

C=MENSAJE ENVIADO AYER

L = 26 porque vamos a usar el alfabeto inglés

Tomamos como clave:

K = ESTOY ABURRIDO

Es aconsejable que la clave sea de tamaño inferior al mensaje. Juntamos mensaje y clave, repitiendo tantas veces como sea necesaria la clave

\tiny\begin{pmatrix} M& E& N& S& A& J& E& E& N& V& I& A& D& O& A& Y& E& R \\ E& S& T& O& Y& A& B& U& R& R& I& D& O& E& S& T& O& Y \\ \end{pmatrix}

Vamos a la tabla de cifrado y tomamos la fila de la primera letra de la palabra clave en la tabla de Vigénere y la columna de la primera letra del mensaje

La intersección de ambas será la letra que se usará para cifrado

Repetiremos el proceso hasta obtener el mensaje cifrado

Así nos queda que el mensaje cifrado es:

M=QWGGYJFYEMQDRSSRSP

Desciframos el M anterior

Vamos a la tabla de cifrado y tomamos la columna de la primera letra de la palabra clave en la tabla de Vigénere y buscamos la primera letra del mensaje

La fila de la intersección de ambas será la letra que se usará en el mensaje descifrado

Repetiremos el proceso hasta obtener el mensaje en claro

\tiny\begin{pmatrix} E& S& T& O& Y& A& B& U& R& R& I& D& O& E& S& T& O& Y \\ Q& W& G& G& Y& J& F& Y& E& M& Q& D& R& S& S& R& S& P \\ \end{pmatrix}

Obteniendo el C original:

C=MENSAJEENVIADOAYER

Cifrado de Gronsfeld

Cifrado de Gronsfeld

El cifrado de Gronsfeld surgió como una mejora al cifrado Vigenère, ya que era susceptible a un análisis críptico con ciertas condiciones previstas. Al evaluar algunas características, era posible definir la longitud de la clave, y luego, al analizar las filas de letras, cifradas por la misma fila de la tabla, uno podía emplear un método estándar basado en la frecuencia de ciertas letras del lenguaje

El primero en efectuar un ataque exitoso en la modificación del cifrado Vigenère en 1854, fue Charles Babbage, un pionero de la informática, pero el análisis fue publicado nueve meses después por otro investigador, Friedrich Kasiski

Por más extraño que parezca, esto ayudó a fortalecerlo, dando lugar al cifrado de Gronsfeld. Una de las mejoras fue el uso de la palabra clave, el cual es igual a la longitud del propio mensaje, eliminando de este modo, la posibilidad de un análisis de frecuencia

Sin embargo, esta actualización trajo otra vulnerabilidad: el uso de texto sensible como frase clave, aportaba al criptoanalista información estadística sobre la clave, sirviendo como una pista al momento de querer descifrar el texto

Como está basado en el cifrado Vigenère, es también un cifrado de sustitución simple polialfabético. Esto significa que se usa más de un alfabeto cifrado para poner en clave el mensaje y que se cambia de uno a otro según se pasa de una letra del texto en claro a otra. Es decir que deben tenerse un conjunto de alfabetos cifrados y una forma de hacer corresponder cada letra del texto original con uno de ellos

El número de alfabetos cifrado está limitado a 10, codificados del 0 al 9 y la clave se genera con una combinación de esos dígitos, sin repeticiones. Altera la frecuencia de las letras del texto, pues por ejemplo la letra más corriente en castellano, la E, se cifra de forma diferente según su posición en el texto original

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}

Y el siguiente cuadro correspondiente al cifrado de Gronsfeld

\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\\0&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B\\1&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C\\2&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E\\3&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G\\4&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K\\5&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K&L&M\\6&R&S&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q\\7&T&U&V&W&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S\\8&X&Y&Z&A&B&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W\\9&C&D&E&F&G&H&I&J&K&L&M&N&O&P&Q&R&S&T&U&V&W&X&Y&Z&A&B\end{pmatrix}

este cuadro no es el único posible, se ha usado como desplazamiento los 9 primeros números primos, pudiendo usar otro método para crear los 10 alfabetos

Ejemplo de cifrado de Gronsfeld

Tenemos el siguiente mensaje que queremos cifrar:

C=MENSAJE ENVIADO AYER

Tomamos como clave:

K = 1203456987

Es aconsejable que la clave sea de tamaño inferior al mensaje. Juntamos mensaje y clave, repitiendo tantas veces como sea necesaria la clave

\tiny\begin{pmatrix} M& E& N& S& A& J& E& E& N& V& I& A& D& O& A& Y& E& R \\ 1& 2& 0& 3& 4& 5& 6& 9& 8& 7& 1& 2& 0& 3& 4& 5& 6& 9 \\ \end{pmatrix}

Vamos a la tabla de cifrado y tomamos la fila del primer número de la clave en la tabla de Gronsfeld y la columna de la primera letra del mensaje. La intersección de ambas será la letra que se usará para cifrado. Repetiremos el proceso hasta obtener el mensaje cifrado

Así nos queda que el mensaje cifrado es:

M=PJPZLWVGKOLFFVLLVT

Desciframos el M anterior

Vamos a la tabla de cifrado y tomamos la fila del primer número de la clave en la tabla de Gronsfeld y buscamos la primera letra del mensaje. La fila de la intersección de ambas será la letra que se usará en el mensaje descifrado. Repetiremos el proceso hasta obtener el mensaje en claro

\tiny\begin{pmatrix} 1& 2& 0& 3& 4& 5& 6& 9& 8& 7& 1& 2& 0& 3& 4& 5& 6& 9 \\ P& J& P& Z& L& W& V& G& K& O& L& F& F& V& L& L& V& T \end{pmatrix}

Obteniendo el C original:

C=MENSAJEENVIADOAYER

Cifrado de Hill

Cifrado de Hill

Este sistema está basado en el álgebra lineal y es muy importante en la historia de la criptografía. Fue Inventado por Lester S. Hill en 1929, y fue el primer sistema criptográfico polialfabético que trabajaba con más de tres símbolos simultáneamente

Este sistema es polialfabético pues puede darse que un mismo carácter en un mensaje a enviar se cifra en dos caracteres distintos en el mensaje encriptado

Quisiera empezar con un sistema muy sencillo que puede explicarse matemáticamente hablando mediante aritmética modular. 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}

Se elige un entero d que determina bloques de d elementos que serán tratados como un vector de d dimensiones. De forma aleatoria, se elige una matriz de d × d elementos los cuales serán la clave a utilizar. Los elementos de la matriz d × d serán enteros entre 0 y 25, además la matriz M debe ser invertible en \mathbb{Z}^n_{26}

Para la encriptación, el texto es dividido en bloques de d elementos los cuales se multiplican por la matriz d × d. Así M\cdot P_i \equiv C \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 % ) M es la matriz d x d, C es el texto cifrado y P el original

Ejemplo de cifrado de Hill

CODIGO rompemos la estructura en bloques de 3 caracteres cada uno (en este caso d = 3), eliminando signos ortográficos si los hubiera y obtenemos los equivalentes numéricos de estas letras

P_1=COD=\begin{pmatrix} 2 \\ 14 \\ 3 \end{pmatrix}, P_2=IGO=\begin{pmatrix} 8 \\ 6 \\ 14 \end{pmatrix}

Elegimos M=\begin{pmatrix} 5& 17& 20 \\ 9& 23& 3& \\ 2& 11& 13 \end{pmatrix} como matriz de claves

Antes de aplicar el cifrado debemos asegurarnos de que M es invertible \mod{26}. Hay una forma relativamente sencilla de averiguar esto a través del cálculo del determinante. Si el determinante de la matriz es 0 o tiene factores comunes con el módulo (en el caso de 26 los factores son 2 y 13), entonces la matriz no puede utilizarse. Al ser 2 uno de los factores de 26 muchas matrices no podrán utilizarse (no servirán todas en las que su determinante sea 0, un múltiplo de 2 o un múltiplo de 13)

\det(M) = \begin{vmatrix} 5& 17& 20 \\ 9& 23& 3& \\ 2& 11& 13 \end{vmatrix} = 5 \cdot(23 \cdot 13 - 3 \cdot 11) - 17 \cdot (9 \cdot 13 - 3 \cdot 2) + 20 \cdot (9 \cdot 11 - 23 \cdot 2) =
= 1215 - 1734 + 1060 = 503

Ahora comprobamos \pmod{26}:

503 = 9\pmod{26}

La matriz A es invertible en \mod{26}, ya que 26 y 9 son coprimos

Calculamos el primer bloque:

M\cdot P_1=\begin{pmatrix} 5& 17& 20 \\ 9& 23& 3& \\ 2& 11& 13 \end{pmatrix}\cdot \begin{pmatrix} 2 \\ 14 \\ 3 \end{pmatrix} = \begin{pmatrix} 308 \\ 349 \\ 197 \end{pmatrix}

\begin{pmatrix} 308 \\ 349 \\ 197 \end{pmatrix} = \begin{pmatrix} 22 \\ 11 \\ 15 \end{pmatrix}\pmod{26}

\begin{pmatrix} 22 \\ 11 \\ 15 \end{pmatrix} = WLP

Así el mensaje cifrado del bloque uno es:

C_1=WLP

Calculamos el segundo bloque:

M\cdot P_2=\begin{pmatrix} 5& 17& 20 \\ 9& 23& 3& \\ 2& 11& 13 \end{pmatrix}\cdot \begin{pmatrix} 8 \\ 6 \\ 14 \end{pmatrix} = \begin{pmatrix} 422 \\ 252 \\ 264 \end{pmatrix}

\begin{pmatrix} 422 \\ 252 \\ 264 \end{pmatrix} = \begin{pmatrix} 6 \\ 18 \\ 4 \end{pmatrix}\pmod{26}

\begin{pmatrix} 6 \\ 18 \\ 4 \end{pmatrix} = GSE

Así el mensaje cifrado del bloque uno es:

C_2=GSE

Unimos ambos mensajes cifrados para obtener el mensaje cifrado C:

C=WLPGSE

Desciframos el C anterior, el método es el mismo, pero necesitamos calcular M^{-1}. Para ello lo calculamos a partir de esta fórmula:

M^{-1}=C^t\cdot (\det(M))^{-1}

Donde C^t es la matriz de cofactores de M transpuesta y (\det(M))^{-1} debe realizarse como \mod{26}, que en este caso es 3 ya que:

9\pmod{26} \cdot 3\pmod{26}=27 \pmod{26}=1 \pmod{26}

Calculamos los cofactores de M

C_{1 1}= + \begin{vmatrix} 23& 3 \\ 11& 13 \end{vmatrix} C_{1 2}= - \begin{vmatrix} 9& 3 \\ 2& 13 \end{vmatrix} C_{1 3}= + \begin{vmatrix} 9& 23 \\ 2& 11 \end{vmatrix}

C_{2 1}= - \begin{vmatrix} 17& 20 \\ 11& 13 \end{vmatrix} C_{2 2}= + \begin{vmatrix} 5& 20 \\ 2& 13 \end{vmatrix} C_{2 3}= - \begin{vmatrix} 5& 17 \\ 2& 11 \end{vmatrix}

C_{3 1}= + \begin{vmatrix} 17& 20 \\ 23& 3 \end{vmatrix} C_{3 2}= - \begin{vmatrix} 5& 20 \\ 9& 3 \end{vmatrix} C_{3 3}= + \begin{vmatrix} 5& 17 \\ 9& 23 \end{vmatrix}

C=\begin{pmatrix} 266& -111& 53 \\ -1& 25& -21& \\ -409& 165& -38 \end{pmatrix} C^t= \begin{pmatrix} 266& -1& -409 \\ -111& 25& 165 \\ 53& -21& -38 \end{pmatrix}

Ahora aplicamos la fórmula de la inversa:

M^{-1}=C^t\cdot (\det(M))^{-1}=\begin{pmatrix} 266& -1& -409 \\ -111& 25& 165 \\ 53& -21& -38 \end{pmatrix} \cdot 3=\begin{pmatrix} 798& -3& -1227 \\ -333& 75& 495 \\ 159& -63& -114 \end{pmatrix}

M^{-1}\pmod{26}=\begin{pmatrix} 798& -3& -1227 \\ -333& 75& 495 \\ 159& -63& -114 \end{pmatrix} \pmod{26} =\begin{pmatrix} 18& 23& 21 \\ 5& 23& 1 \\ 3& 15& 16 \end{pmatrix}

Calculamos el primer bloque:

M\cdot P_1=\begin{pmatrix} 18& 23& 21 \\ 5& 23& 1& \\ 3& 15& 16 \end{pmatrix}\cdot \begin{pmatrix} 22 \\ 11 \\ 15 \end{pmatrix} = \begin{pmatrix} 964 \\ 378 \\ 471 \end{pmatrix}

\begin{pmatrix} 964 \\ 378 \\ 471 \end{pmatrix} = \begin{pmatrix} 2 \\ 14 \\ 3 \end{pmatrix}\pmod{26}

\begin{pmatrix} 2 \\ 14 \\ 3 \end{pmatrix} = COD

Así el mensaje cifrado del bloque uno es:

P_1=COD

Calculamos el segundo bloque:

M\cdot P_2=\begin{pmatrix} 18& 23& 21 \\ 5& 23& 1& \\ 3& 15& 16 \end{pmatrix}\cdot \begin{pmatrix} 6 \\ 18 \\ 4 \end{pmatrix} = \begin{pmatrix} 606 \\ 448 \\ 352 \end{pmatrix}

\begin{pmatrix} 606 \\ 448 \\ 352 \end{pmatrix} = \begin{pmatrix} 8 \\ 6 \\ 14 \end{pmatrix}\pmod{26}

\begin{pmatrix} 8 \\ 6 \\ 14 \end{pmatrix} = IGO

Así el mensaje cifrado del bloque uno es:

P_2=IGO

Unimos ambos mensajes cifrados para obtener el mensaje cifrado C:

P=CODIGO