martes, 23 de abril de 2013

Advanced Encryption Standard (AES)



  • Se basa en un algoritmo llamado Rijndael
  • Es un esquema de cifrado por bloques
§  Cifrado en bloques: La información a cifrar se divide en bloques de longitud fija (8,16, ... bytes) y luego se aplica el algoritmo de cifrado a cada bloque utilizando una clave secreta.
§  AES es uno de los algoritmos más populares usados en criptografía simétrica(sistemas de clave secreta o de clave privada)
§  Los sistemas simétricos utilizan la misma clave para encriptar y desencriptar.
AES toma como elemento básico al byte (8 bits) y ve a los bytes como elementos del campo finito de Galois o GF(28).

Es un algoritmo de cifrado por bloques, los datos se dividen en segmentos de 16 bytes (128 bits) y cada segmento se puede ver como un bloque o matriz de 4x4 bytes al que se le llama estado.

AES vs Rijndael
0        Rijndael permite un mayor rango de tamaño de bloques   y longitud de claves además de que  Rijndael puede ser especificado por una clave que sea múltiplo de 32 bits, con un mínimo de 128 bits y un máximo de 256 bits.
0        AES tiene un tamaño de bloque fijo de 128 bits y tamaños de llave de 128, 192 o 256 bits.




El número de  rondas  de AES  depende  de los bits que  quieran utilizar como  muestra la sigueinte  tabla:




Por ejemplo:

Si tenemos una clave  de  128 bit  , en el cifrado  AES se  realizaran  10  rondas  incluyendo la  ronda inicial y la  ronda  final y se  realizara  lo siguiente:
1)      Tenemos un  bloque  de  128 bits  y una  clave  K
2)      Con el  bloque  se  realizara  la  matriz llamada  estado  y se aplicara  un XOR  con la clave k, celda  a celda.
3)      La  matriz  resultante del paso 2)  nos  servirá  para  aplicarle  la  operación de SubBytes
4)      La  matriz  resultante  de  aplicar  SubBytes será  necesaria  para aplicarle  al operación ShiftRows y esta  misma servirá  para  aplicarle  al  operación MixColumns.
5)      Una  vez  que  tengamos  la  matriz  resultante de los pasos  anteriores  será  necesario obtener  una  subclase, la  cual se obtendrá  como sigue: 

  ¿Cuál es  la subclave?
 Para calcular la primera columna de la subclave se toma la última columna de la subclave anterior (en este caso la clave inicial) y se aplica una operación llamada Rotword que consiste en realizar una rotación del primer byte hacia el último lugar en la columna. 

A la columna resultante, se aplica una operación llamada SubBytes que remplaza cada byte de la columna ya rotada por un byte almacenado en una tabla llamada S-Box, para obtener la transformación S-Box de un byte se toman los primeros 4 bits como el índice de la fila de la tabla y los segundos 4 como índice de la columna de la tabla.


 Al resultado se le aplica un XOR byte a byte con la columna 4 posiciones atrás (en este caso la primer columna de la clave inicial) y un XOR byte a byte con una columna de una tabla RCON, por ser la primer subclave la que estamos calculando se toma la primer columna de la tabla RCON, para las siguientes subclaves se toma la próxima columna no utilizada de esta tabla.

Para calcular las tres columnas siguientes se hace un XOR entre la columna anterior y la columna de cuatro posiciones atrás.

Y se procede de la misma forma para calcular las siguientes subclaves. Al finalizar se tendrán 10 subclaves, cada una de estas subclaves se aplica en una de las rondas de operaciones. 

6)  Ya  que  obtuvimos la  subclave  se  realiza  un XOR  de la  matriz MixColumn con la  subclave y se  realizan las  siguientes  rondas  desde la  operación de  subytes  nuevamente .

7)       Al llegar  a la  Ronda fina  la matriz  resultante del paso 6) se le  aplica  nuevamente la operación SubBytes .
8)      A la matriz  resultante del paso 7) se le  aplica la operación ShiftRows  y finalmente  a la resultante de este paso se le  aplica  un XOR con la  subclave  final.
 
 

Operaciones: 

SubBytes: Cada byte de la matriz de estado se remplaza por otro valor de acuerdo a la tabla de sustitución de bytes  S-Box.


     ShiftRows: En cada fila de la matriz SubBytes, a excepción de la primera, se rotan circularmente hacia la izquierda los bytes, en la segunda fila se rotan una posición, en la tercera dos posiciones y en la cuarta tres posiciones.
 
MixColumns: A cada columna de la matriz ShiftRows se le aplica una transformación lineal, esto es multiplicarlo por una matriz predeterminada en el campo GF.

c1= (d4 * 02) XOR (bf * 03) XOR (5d) XOR (30)
      
          Se debe realizar la suma hexadecimal de los operadores una vez           sustituidos por sus valores correspondientes en la tabla L.

El resultado de la suma debe ser sustituido por su valor correspondiente en la tabla llamada "tabla E", ese será el resultado final. Si la suma hexadecimal fuera mayor a FF, hay que restarle FF tantas veces hasta que el resultado sea menor o igual a FF.



Algoritmo de descifrado
El proceso de descifrado aplica las mismas operaciones que el cifrado pero de forma inversa utilizando las mismas subclaves generadas en orden inverso, además se utiliza una matriz distinta en la operación MixColumns que es la inversa de la transformación lineal aplicada en el proceso de cifrado.
 


Referencias:
http://es.wikipedia.org/wiki/Advanced_Encryption_Standard
http://www.fup.edu.co/investigacion/fupcric/images/pdf/aes.pdf
http://sedici.unlp.edu.ar/bitstream/handle/10915/4210/Documento_completo.pdf?sequence=1
http://redyseguridad.fi-p.unam.mx/proyectos/criptografia/criptografia/index.php/4-criptografia-simetrica-o-de-clave-secreta/43-aes-advanced-encryption-standard/434-aplicacion-del-algoritmo-caso-practico


No hay comentarios:

Publicar un comentario