Implementación del algoritmo A.E.S. (Advanced Encryption Standard) - Maizel, Patricia V. (2004)
El presente trabajo describe el funcionamiento y los detalles de implementación en software del algoritmo de encriptado Rijndael, recientemente elegido como estándar A.E.S.(Advanced Encryption Standard). Se propuso implementar un código apropiado para encriptado/ desencriptado Rijndael de tal manera de concentrar el esfuerzo en la obtención de una interfaz sencilla con soporte para procesamiento rápido y portabilidad. Con este propósito se eligió el tamaño de bloque de procesamiento apropiado, pudiéndose elegir entre varias opciones, tanto para los datos a encriptar como para la clave a utilizar. Por motivos de velocidad de procesamiento, también se investigó como implementar las funciones de encriptado y desencriptado en el mismo código o por separado y cómo se generaron las subclaves necesarias para cada round. El propósito de aumentar la velocidad condujo a la indagación de la posibilidad de efectuar operaciones en paralelo. El cifrador Rijndael resultó ser el finalista elegido entre cinco candidatos para la implementación del algoritmo de encriptamiento simétrico estándar, AES, para protección de información sensible, en reemplazo del DES a partir del 26 de mayo del 2002. Se trata de un cifrador tipo bloque que puede usar claves de 128, 192 o 256 bits de longitud. Varias operaciones se definen a nivel de bytes, que representan elementos en el campo finito GF(28). Otras operaciones se definen en términos de palabras de 4 bytes, que se tratan como polinomios de grado cuatro y coeficientes en GF(28). El A.E.S. (Advanced Encryption Standard), será probablemente el algoritmo de encriptación más utilizado en el presente siglo. El crecimiento explosivo de la informática y la convergencia entre ordenadores y comunicaciones, hacen pensar que los algoritmos de encriptación corresponderán al código ejecutable de más aplicación en el futuro. Como se dijo anteriormente, el algoritmo A.E.S. encripta bloques de 128, 192, o 256 bits usando claves de 128, 192 ó 256 bits. El proceso consiste en una serie de cuatro transformaciones matemáticas, las cuales se repiten 10, 12 o 14 veces, dependiendo de la longitud del bloque y de la longitud de la clave. Las sucesivas transformaciones se pueden imaginar como aplicadas a una matriz de cuatro filas por cuatro columnas. Los sucesivos elementos de la matriz, son los 16 caracteres del texto del bloque de 128 bits a ser encriptado. Este valor para el tamaño del bloque corresponde al caso de elegir trabajar con una clave de 128 bits. En el caso de utilizar 192 bits para la clave, la matriz constaría de dos columnas más y en el caso de utilizar 256 bits habría cuatro columnas más. Uno de los procesamientos más importantes en el desarrollo del algoritmo es lo que se denomina Expansión de la clave. La misma consiste en la generación de diez claves distintas, ya que el proceso de encriptado mencionado previamente se repetirá diez veces o, como se describe en el algoritmo, a lo largo de diez round. De esta manera se genera una clave diferente para cada round. En el proceso de desencriptado, se utilizan las transformaciones inversas a las utilizadas en el proceso de encriptado, y la primer clave a emplear en el primer round, es la última clave generada en la Expansión de la clave. El software fue realizado en C++Builder, por ser el lenguaje C uno de los lenguajes más potentes y poseer más capacidad en el manejo de memoria y de interrupciones que otros programas. Se lo puede dividir en dos partes: Un archivo de extensión.h, que contiene todas las funciones de encriptado y desencriptado a utilizar. Los llamados de las funciones de encriptado y desencriptado se encuentran agrupados a su vez, en dos funciones denominadas EncriptarVector y Desencriptar Vector, que realizan los procesos de encriptado y desencriptado, respectivamente. El otro archivo, es un archivo de extensión.cpp, que contiene en su cabecera el llamado del archivo de extensión.h, mencionado anteriormente, y la programación de la interfaz gráfica, donde en la programación del botón Encriptar archivo y del botón Desencriptar archivo, se encuentran los llamados a las funciones EncriptarVector y DesencriptarVector, respectivamente. La interfaz gráfica puede dividirse en dos partes, una correspondiente al panel de encriptado y la otra al panel de desencriptado, en los cuales se encuentran los botones Encriptar archivo y Desencriptar archivo, respectivamente. En la cabecera del archivo encriptado, también figuran encriptados el tamaño del archivo a encriptar, el tamaño y nombre de la extensión, para que el usuario pueda decodificarlos y desencriptar al archivo con la misma extensión original. Respecto a las mediciones de velocidades de encriptado y desencriptado que se realizaron en el software, se puede decir que la calidad del sistema es óptima en velocidad en los diferentes sistemas operativos, y velocidades de microprocesadores utilizados en las distintas pruebas. También se pudo comprobar que al comparar dichas velocidades promedio con otras implementaciones del A.E.S., en estas últimas, las velocidades fueron más rápidas, pero hay que tener en cuenta, que la velocidad depende tanto del algoritmo, como de la implementación, el lenguaje de programación, etc. De hecho se pudo comprobar que el software realizado varía en velocidad en la misma máquina con diferentes sistemas operativos.