elparaiso.mat.uned.es

¡Pulsa Aquí!

LO DIJO...

Albert Einstein  
 
No podemos resolver problemas usando el mismo tipo de pensamiento que usamos cuando los creamos.
 
El Paraíso de las Matemáticas - Criptotaller ~ Cifrados Poligráficos II
.: Criptotaller :.
Cifrados Poligráficos (II)
"­Por el contrario! -continuó Tweedeldum Si hubiese sido así, entonces lo sería; y siéndolo, quizá lo fuera; pero como no fue así tampoco lo es asá. ­Es lógico! " (Lewis Carrol, Alicia a través del espejo)

    Tal y como prometimos, en este artículo acabaremos el tratamiento de los cifrados poligráficos (de Hill). En la primera parte de esta serie que te ofrecemos, vimos como realizar estos cifrados para el caso n=2, esto es bloques de 2 bytes (caracteres).

    Generalizando lo tratado en dicho artículo, un cifrado de Hill se obtiene al transformar bloques de n caracteres en un texto cifrado a través de la relación

C=A.P(mod 26)

donde A es una matriz nxn que debe ser invertible módulo 26, (recuerda que el 26 proviene de que solo estamos usando las letras A-Z que son justamente 26) es decir que el m.c.d del determinante de A y 26 sea 1 - dicho de otro modo que el determinante de A no divida a 26 ni sea un múltiplo de 26 -, C es la matriz columna resultante del cifrado de P (un bloque de n caracteres).

    Podéis encontrar la teoría de determinantes en cualquier libro de COU o de álgebra lineal aunque si alguien me escribe porque no lo entiende, trataré de explicarlo en otro artículo.

    Bien, supongamos que hemos elegido nuestra matriz A, posiblemente a partir de una clave. Dividimos nuestro texto en bloques de n caracteres y a cada uno de ellos le aplicamos la transformación antes citada. ¿Como debemos hacer para descifrar el texto?

    Según la teoría de matrices, y como ya se explico en el anterior artículo, tenemos que aplicar la transformación

P=A'C(mod 26)

donde A' es la inversa de A módulo 26, pero ¿como calcular la inversa módulo 26 de una matriz cualquiera?

    Pues bien, si A es una matriz tal que m.c.d(det (A), 26)=1 y llamamos d=det(A) entonces A'=d'.B donde d' es el inverso de d módulo 26 y B es la traspuesta de la matriz adjunta de A.

    ¿Suena muy complicado? Sigue leyendo, no lo es tanto. Veamos un ejemplo:

    Vamos a cifrar la frase MAXIMA SEGURIDAD utilizando un cifrado poligráfico de tamaño 3. Para no alargarlo innecesariamente codificaremos solo los tres primeros caracteres , tomemos sus equivalentes numéricos:

M  A  X
12 0 23

    Vale, ahora escogemos:

cuyo determinante es d=3 entonces tendremos que d'=9 pues 3.9=27=1 (mod 26) ; esta matriz nos sirve. Por otro lado

así que (módulo 26 como siempre) y así tenemos la inversa que nos servirá para descifrar.

    Para cifrar

el resultado es [57 58 -11] es decir [5 6 15] tomándolo módulo 26. Así que el bloque que corresponde a MAX es FGP.

    Probemos con el descifrado:

el resultado es como era de prever [12 0 23], es decir el bloque MAX original.

    En este ejemplo hemos utilizado bloques de tamaño 3 pero espero que quede claro como generalizarlo a bloques de cualquier tamaño.

    Dijimos que estos métodos son inmunes al análisis de frecuencia de letras, a diferencia de los cifrados monoalfabéticos de los que se trató en el primer artículo, la razón es que por la A que aparece en el bloque A F (suponiendo que estemos en el caso n=2) no resultará cifrada de la misma forma que la A que aparece en un bloque como A S.

    Sin embargo alguien pensará que podíamos hacer un análisis de PARES de letras. Bien, apúntate una por chico listo. Efectivamente hay estadísticas y sabemos cual es el par de letras más frecuente en estañol (no tengo los datos a mano pero posiblemente sean E L o una preposición como D E ).

    Entonces sólo tenemos que suponer que el par de letras más frecuente en el mensaje cifrado corresponde a DE y a partir de ahí unas cuantas operaciones con matrices nos darán la matriz que se empleo para cifrar.

    Hay 26x26 = 676 pares posibles de letras (cuando empleemos los 256 caracteres posibles en un fichero de tipo binario tendremos 256x256=65536 combinaciones, bastante más difícil para el criptoanalista), 676 pares son bastantes pero es manejable porque unos pares destacan bastante en su frecuencia de aparición sobre los otros.

    Pasemos al caso n=3, ahora tenemos 26x26x26=17576 casos, son bastantes pero aún tenemos estadísticas para combinaciones de tres letras en español. Ahora bien, hagamos las cosas en serio empleando bloques de tamaño 10, el número de bloques posibles es 26^10 es decir aproximadamente 1.4E14 o si te gustan los ceros: 140.000.000.000.000; un análisis de frecuencias de bloques de 10 caracteres es muy improbable por no decir imposible.

    Pues bien, ahí tenemos un reto: escribe un programa que a partir de una clave genere una matriz invertible de orden 10 (módulo 256), que divida el texto en bloques de dicho tamaño y con unas cuantas operaciones elementales obtenga el texto cifrado. Además el mismo programa debe ser capaz de dada la clave construir la matriz de cifrado, invertirla y con las mismas operaciones de antes descifrar el fichero propuesto.

    Para terminar incluyo para que os animéis a hacer algo mejor, el código fuente en C de un programa que cifra o descifra una cadena de texto. Utiliza el método de Hill para una matriz 2x2. Ni que decir tiene que no es un método seguro sino educa-ware :-)

Area On-Line
  Todo tipo de material, para disfrutar de él completamente On-Line, sin necesidad de descargar archivos ni tener que andar descomprimiendo estos. No te olvides de pasar por el Diccionario, y las secciones Origami y Geointeractiva. Son de lo más interesante.

Criptotaller

Criptografía (clásica y moderna), criptoanálisis (primos, primos de Mersenne, etc.) y otras técnicas.

Material para descargar

Código Fuente C

Método Hill
Método Jefferson
Exponenciación Modular
Cálculo números primos
Test de Lucas-Lehmer
Factores num. Mersenne
Verificación FIPS 140.2
Teorema chino del resto
+ Códigos Fuente C

Código Fuente Python

Generación de claves

Artículos

La máquina Enigma
Criptografía y seguridad
    M. J. Lucena
Seguridad Informática
   y Criptografía PDF PPT
    J. Ramió
Criptografía clásica PDF
    J. Ramió

Programas
Cripto1 ZIP 2391 KB
    J. L. Rubio

Enlaces

Página personal de Jaime Suárez Martínez, colaborador de esta sección.

Munitions, colección de programas para Linux.

Kriptopolis, toda una referencia en castellano.

Ciphersaber

Criptonomicón: la página de Gonzalo Alvarez Marañón.

Página de Chris Caldwell, una página bien elaborada sobre números primos.

Colección de links de Peter Gutmann.

www.gnupg.org es la página original de GPG, un programa libre alternativo a PGP.

Sábado, 2 / 04 / 2022
   BUSCADOR
 

   TU CORREO
Usuario
Contraseña

   MATRACAS
Lista de correo gratuita
.: Chismes de Adán y Eva :.
Adios a Elisenda Fo...
WolframAlpha: El mo...
WIRIS para Mac...
Third CEU Summersch...
¡Más y más actualiz...
Cerca de 500 MB de ...
Ha llegado el momen...
WIRIS, matemáticas ...
El Universo Matemát...
Segundas Jornadas d...
Los Elementos de Eu...
VI Semana de la Cie...
Tras varios meses d...
¡Chiflados por los ...
Otro verano más, to...

 

Todos los derechos reservados. El Paraíso de las Matemáticas 2015Información Legal Política de PrivacidadAyudaEmail