Programa de encriptación simétrica con el método matricial hecho en Java 4 de agosto de 2010 | Autor: admin
Este es un programa que hicimos en la universidad. Está hecho en un applet de Java en Netbeans Netbeans.. Primero les explico cómo funciona este método de encriptación y desencriptación y luego el funcionamiento del programa. El método de encriptación simétrica se llama así porque usa la misma clave para encriptar y desencriptar. La clave es un valor numérico. Para entender cómo funciona vamos a usar un ejemplo. El mensaje a encriptar será: HOLA MUNDO ES UNA FRASE COMUN y la clave va a ser 4. Lo que hacemos es agrupar el texto en número de caracteres según la clave y formar una matriz. Así con esa frase y esa clave nos quedaría: H _ D S A A C N _
O M O _ _ S O _
L U _ U F E M
A N E N R _ U
_
Para el ejemplo reemplacé los espacios con guiones bajos. Viendo esa frase en una línea sería: HOLA | _MUN |DO_E | S_UN |A_FR | ASE_ | COMU | N_ _ _ | Al último puse 3 guiones bajos para completar los 4 caracteres finales. Para encriptar la frase viendo la matriz vamos cogiendo los caracteres de la primera columna, luego de la segunda, etc, la frase nos queda: H_DSAACN OMO__SO_ LU_UFEM_ ANENR_U_ -> Cuarta columna
-> -> ->
Primera Primera Segunda Se gunda Tercera
columna columna columna
La frase encriptada completa nos queda: H_DSAACNOMO__SO_LU_UFEM_ANENR_U_ Tomando en cuenta que los guiones bajos son en realidad espacios. Ahora analizando el número de caracteres tenemos que la frase original tiene 29 caracteres incluyendo los espacios, mientras que la frase encriptada tiene 31 caracteres (no se toma en cuenta el último espacio). Este dato necesitamos para el proceso de desencriptación. Para eso se parte de la frase encriptada y se divide el número de caracteres para la clave. Si el residuo es cero, la respuesta de la división es el
número de filas de la matriz, si no es cero el número de filas de la matriz es la respuesta d ela división más uno. Si dividimos 31 para 4 la respuesta es 7 con residuo 3, como no es exacta entonces el número de filas será 7 + 1 = 8. Quiere decir que debemos agrupar la frase encriptada en grupo de 8 caracteres así: H_DSAACNOMO__SO_LU_UFEM_ANENR_U
-> Frase encriptada
H_DSAACN | OMO__SO_ | LU_UFEM_ | ANENR_U Para formar la matriz cada grupo de caracteres es una columna de la matriz, nos queda por tanto: H _ D S A A C N _
O M O _ _ S O
L U _ U F E M
A N E N R _ U
_
Nuevamente volvemos a la matriz original y ya es cuestión de leer las filas en orden y se obtiene el mensaje desencriptado. Esto es lo que haremos en el programa hecho en Java.
7.3.4.- Cifrado Matricial o cifrado Hill
En 1929, Lester S. Hill, un joven matemático, publica un artículo en el que propone el uso del álgebra y, en particular de las matrices, en la operación de cifrado. La importancia del método de cifrado propuesto por Hill está en el uso de transformaciones lineales matriciales operando en módulo 26 (las letras del alfabeto inglés). Sin embargo, en el momento de su publicación, el método de Hill aunque resultó muy interesante para los científicos, no era fácil de implantar (no se había inventado el ordenador) y por eso no pudo competir con otros métodos como fue la máquina Enigma de los alemanes.
Actualmente este sistema presenta una cierta seguridad, se puede implementar fácilmente en los ordenadores a nuestro alcance y hace uso de conceptos de aritmética modular y matrices, por lo que vamos a explicarlo con detalle.
El método consiste en dividir el texto original en bloques de longitud igual a n y considerar cada uno de esos bloques como un vector y a cada vector aplicarle la tr ansformación:
v M.v + w
donde M es una matriz de orden n x n, con elementos en Z 30 y tal que el mcd(det(M), 30) = 1 y w es un vector fijo de n componentes en Z30.
Las matrices que se suelen usar son matrices autoinversas, es decir matrices que coincidan con su inversa, de esta forma eliminamos a la hora de descifrar el mensaje el cálculo de una matriz inversa, pero esto no es obligatorio.
1.
A
= Zm (como ya hemos indicado vamos a considerar m = 30).
2.
K
está formado por la matriz M y el vector W, ambos con elementos e n Z30.
3.
E
formado solamente por la aplicación
4.
D
formado solamente por la aplicación
(x) = Mnxnxnx1 + wnx1
–1
(y) = Mnxn (xnx1 – wnx1), teniendo en cuenta que -1
trabajamos en Z30 y que en caso de considerar matrices autoinversas, M = M
Ejemplo 7:
Utilizando la matriz M =
yw=
cifrar el mensaje: vacaciones
1º paso: Descomponemos el mensaje en bloques de dos, por ser la matriz de orden 2x2. En caso de tener el último bloque con menos de “n” elementos, añadimos espacios en blanco
va
ca
ci
on
es
2º paso: Pasamos a elementos de Z 30
22 0
20
28
15 13 4 19
3º paso: Aplicamos la transformación a cada uno de los 5 bloques que tenemos, teniendo en cuenta que se trabaja en Z30
=
=
+
+
=
=
=
+
=
=
+
+
=
=
=
4º paso: Volvemos a sustituir los números por letras y agrupamos, obte niendo el mensaje:
e v ñ v v a k f f l
Ejemplo 8:
Sabiendo que se ha usado la matriz M =
yW=
, descifrar el mensaje:
.esbrdvx. (los puntos son del mensaje)
1º paso: Separemos en bloques de tres y pasamos a números:
28 4 19
1 18 3
22 24 28
-1
2º paso. la inversa de la matriz M es M =
, por lo tanto para descifrar el mensaje
hacemos (en Z30):
.
=
.
=
per
Haciendo lo mismo con el segundo bloque y con el tercero, obtenemos el mensaje: