Está en la página 1de 3

Taller No.

3
Universidad Nacional de Colombia
Criptografía

José Franklyn Moreano Medina


Andrés Botía Carreño

1. Ejercicio slide 146 (AES)

El mensaje obtenido al descifrar mediante AES las salidas dadas fue

Paranoia is our profession

Para la obtención de la respuesta se construyó un programa en Python que facilitara la realización


de las diferentes operaciones del algoritmo AES. Se tomaron como parámetros las llaves ya
obtenidas en el ejemplo del libro y las matrices output1 y output2. Se construyeron además las
tablas E_TABLE, L_TABLE e INV_SBOX.

Se definieron los métodos addRoundKey, invSubBytes, invShiftRow, invMixColumn cada uno de


ellos representa un paso del algoritmo AES y se creó un método auxiliar multGaloisField el cual
recibe como parámetro dos números en hexadecimal y devuelve el resultado de multiplicar los
dos números en GF(28) .

addRoundKey: Este método recibe como parámetro dos matrices de 4x4 y retorna una matriz
cuyos elementos son el resultado de aplicar la operación XOR entre el correspondiente elemento
de la matriz 1 con su correspondiente elemento de la matriz 2.

invShiftRow: Recibe como parámetro una matriz y aplica un corrimiento de los elemento de las
filas de las matrices de acuerdo al número de fila. Para la fila 0 no hay corrimiento, en la fila 1
mueve los elementos una posición hacia la derecha, en la fila 2 mueve dos posiciones a la derecha
y en la fila 3 mueve tres posiciones a la derecha. Retorna la matriz resultante.

invSubBytes: Recibe como parámetro una matriz y retorna una matriz cuyos elementos son el
correspondiente valor de cada elemento en la tabla InvSBox. Para ello divide cada elemento en sus
dos componentes hexadecimales para obtener los índices de la tabla y luego obtiene el valor en la
matriz INV_SBOX.

multGaloisField: Recibe como parámetro dos numero enteros. Para cada numero calcula los
índices a buscar en la L_TABLE de la siguiente manera: aplica un corrimiento de 4 bits a la derecha
con ello obtiene el nible mas significativo del número el cual representa la fila, luego se le agrega
un cero a la derecha y se aplica un XOR con el número inicial y se obtiene el nible menos
significativo el cual representa la columna. Una vez se obtienen los índices para cada uno de los
parámetros se obtiene su valor correspondiente en la L_TABLE se suman estos valores en modulo
255 y al resultado obtenido se le calculan los índices de la misma forma descrita anteriormente y
se obtiene el valor correspondiente del numero en la E_TABLE. Se retorna dicho valor.

invMixColumn: Recibe como parámetro una matriz y define la matriz constante con la cual se
realiza la multiplicación en GF(28). Realiza el algoritmo tradicional de multiplicación de matrices
pero reemplaza las multiplicaciones por la función multGaloisField y remplaza las sumas por
operaciones XOR. De esta manera obtiene una matriz la cual hay que transponer y así se obtiene el
resultado de multiplicar la matriz parámetro por la matriz constante en GF( 28). Retorna dicha
matriz.

Una vez definidas estas funciones el método aes_decryption ejecuta los pasos para descifrar el
mensaje.

aes_decryption: Recibe como parámetro el conjunto de matrices que representan el texto cifrado
y el conjunto de llaves. Para cada matriz del conjunto de texto cifrado realiza el siguiente
procedimiento:
1. Aplica el método addRoundKey con la matriz del texto cifrado y la llave 10
2. Método invShiftRow con la matriz obtenida en al paso 1
3. Método invSubBytes con la matriz obtenida en el paso 2
4. Realiza un ciclo de 9 rondas donde realiza lo siguiente
5. Método addRoundKey con la matriz obtenida en el paso inmediatamente anterior y la
respectiva llave empezando desde la llave 9
6. Método invMixColumn con la matriz obtenida en el paso 5
7. Método invShiftRow con la matriz obtenida en el paso 6
8. Método invSubBytes con la matriz obtenida en el paso 7
9. Una vez finalizan las nueve rondas aplica el método addRoundKey con la ultima matriz
obtenida en el ciclo y la llave original y se obtiene la matriz que representa el mensaje.

Adicionalmente se tienen dos métodos auxiliares que imprimen en pantalla la matriz con su
representación en hexadecimal y los mensajes obtenidos para cada matriz del texto cifrado.

Se adjunta en el archivo comprimido el código fuente del programa y el pantallazo de las salidas
en consola.

2. Ejercicios slide 176

1) Para encontrar los números a y b se utilizo el algoritmo extendido de Euclides


encontrando que estos eran a=-46368 y b=75025.
2) Para calcular 196418121393mod777 se utilizo el método PowerMod encontrando como
respuesta 614.
3) La solución del sistema linear de congruencias se encontró con el teorema del residuo
chino, las inversas Ni-1 se calcularon con el algoritmo extendido de Euclides.
4) Para mira cuales elementos de Z 18 eran invertibles se calculo el mcd, luego por cada
numero cuyo mcd era 1 se calculo el algoritmo extendido de Euclides para encontrar la
inversa.
5) El cálculo de la función φ (955) se realizo descomponiendo 955 en factores primos
(5*191) como estos son coprimos se utiliza la propiedad φ ( n∗m )=φ ( n )∗φ (m) y el
hecho que φ ( p )= p−1 cuando p es primo, lo cual da como resultado φ ( 955 )=4∗190
.
6) Para calcular el orden de 17 en modulo 77 se calculo 17 tmodulo77 hasta que se hallo
el 1, esto fue cuando t=30.
Se adjunta en el comprimido el archivo en Excel con el desarrollo detallado de los puntos

También podría gustarte