Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3
Universidad Nacional de Colombia
Criptografía
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.