El Estándar de cifrado avanzado ( AES ), también conocido por su nombre original Rijndael ( pronunciación holandesa: [ˈrɛindaːl] ), [5] es una especificación para el cifrado de datos electrónicos establecida por el Instituto Nacional de Estándares y Tecnología (NIST) de Estados Unidos en 2001. [6]
AES es una variante del cifrado de bloques Rijndael [5] desarrollado por dos criptógrafos belgas , Joan Daemen y Vincent Rijmen , quienes presentaron una propuesta [7] al NIST durante el proceso de selección de AES . [8] Rijndael es una familia de cifrados con diferentes tamaños de clave y bloque. Para AES, NIST seleccionó tres miembros de la familia Rijndael, cada uno con un tamaño de bloque de 128 bits, pero tres longitudes de clave diferentes: 128, 192 y 256 bits.
El gobierno de los EE. UU . adoptó el AES y reemplaza al Estándar de cifrado de datos (DES), [9] que se publicó en 1977. El algoritmo descrito por el AES es un algoritmo de clave simétrica , lo que significa que se utiliza la misma clave tanto para cifrar como para descifrar los datos.
En Estados Unidos, el NIST anunció el AES como US FIPS PUB 197 (FIPS 197) el 26 de noviembre de 2001. [6] Este anuncio siguió a un proceso de estandarización de cinco años en el que se presentaron y evaluaron quince diseños en competencia, antes de que el cifrado Rijndael fuera seleccionado como el más adecuado. [nota 3]
AES está incluido en el estándar ISO / IEC 18033-3 . AES entró en vigencia como estándar del gobierno federal de los EE. UU. el 26 de mayo de 2002, después de la aprobación del Secretario de Comercio de los EE. UU. Donald Evans . AES está disponible en muchos paquetes de cifrado diferentes y es el primer (y único) cifrado de acceso público aprobado por la Agencia de Seguridad Nacional de los EE. UU. (NSA) para información de alto secreto cuando se usa en un módulo criptográfico aprobado por la NSA. [nota 4]
El estándar de cifrado avanzado (AES) se define en cada uno de:
AES se basa en un principio de diseño conocido como red de sustitución-permutación , y es eficiente tanto en software como en hardware. [11] A diferencia de su predecesor DES, AES no utiliza una red Feistel . AES es una variante de Rijndael, con un tamaño de bloque fijo de 128 bits y un tamaño de clave de 128, 192 o 256 bits. Por el contrario, Rijndael per se se especifica con tamaños de bloque y clave que pueden ser cualquier múltiplo de 32 bits, con un mínimo de 128 y un máximo de 256 bits. La mayoría de los cálculos de AES se realizan en un campo finito particular .
AES opera en una matriz de orden mayor de columnas de 4 × 4 de 16 bytes b 0 , b 1 , ..., b 15 denominada estado : [nota 5]
El tamaño de clave utilizado para un cifrado AES especifica la cantidad de rondas de transformación que convierten la entrada, denominada texto simple , en la salida final, denominada texto cifrado . La cantidad de rondas es la siguiente:
Cada ronda consta de varios pasos de procesamiento, incluido uno que depende de la clave de cifrado en sí. Se aplica una serie de rondas inversas para transformar el texto cifrado nuevamente en el texto sin formato original utilizando la misma clave de cifrado.
En el paso SubBytes , cada byte en la matriz de estado se reemplaza con un SubByte usando una caja de sustitución de 8 bits . Antes de la ronda 0, la matriz de estado es simplemente el texto sin formato/entrada. Esta operación proporciona la no linealidad en el cifrado . La caja S utilizada se deriva de la inversa multiplicativa sobre GF (2 8 ) , conocida por tener buenas propiedades de no linealidad. Para evitar ataques basados en propiedades algebraicas simples, la caja S se construye combinando la función inversa con una transformación afín invertible . La caja S también se elige para evitar cualquier punto fijo (y por lo tanto un desarreglo ), es decir, , y también cualquier punto fijo opuesto, es decir, . Mientras se realiza el descifrado, se usa el paso InvSubBytes (la inversa de SubBytes ), que requiere primero tomar la inversa de la transformación afín y luego encontrar la inversa multiplicativa.
El paso ShiftRows opera sobre las filas del estado; desplaza cíclicamente los bytes de cada fila en un cierto desplazamiento . Para AES, la primera fila se deja sin cambios. Cada byte de la segunda fila se desplaza un byte hacia la izquierda. De manera similar, la tercera y cuarta filas se desplazan en desplazamientos de dos y tres respectivamente. [nota 6] De esta manera, cada columna del estado de salida del paso ShiftRows está compuesta por bytes de cada columna del estado de entrada. La importancia de este paso es evitar que las columnas se cifren de forma independiente, en cuyo caso AES degeneraría en cuatro cifrados de bloque independientes.
En el paso MixColumns , los cuatro bytes de cada columna del estado se combinan mediante una transformación lineal invertible . La función MixColumns toma cuatro bytes como entrada y genera cuatro bytes como salida, donde cada byte de entrada afecta a los cuatro bytes de salida. Junto con ShiftRows , MixColumns proporciona difusión en el cifrado.
Durante esta operación, cada columna se transforma utilizando una matriz fija (la matriz multiplicada por la izquierda por la columna da como resultado un nuevo valor de la columna en el estado):
La multiplicación de matrices se compone de la multiplicación y la suma de las entradas. Las entradas son bytes tratados como coeficientes de un polinomio de orden . La suma es simplemente XOR. La multiplicación es un polinomio irreducible módulo . Si se procesa bit a bit, entonces, después del desplazamiento, se debe realizar un XOR condicional con 1B 16 si el valor desplazado es mayor que FF 16 (el desbordamiento se debe corregir mediante la resta del polinomio generador). Estos son casos especiales de la multiplicación habitual en .
En un sentido más general, cada columna se trata como un polinomio sobre y luego se multiplica por módulo con un polinomio fijo . Los coeficientes se muestran en su equivalente hexadecimal de la representación binaria de polinomios de bits de . El paso MixColumns también se puede ver como una multiplicación por la matriz MDS particular mostrada en el campo finito . Este proceso se describe con más detalle en el artículo MixColumns de Rijndael .
En el paso AddRoundKey , la subclave se combina con el estado. Para cada ronda, se deriva una subclave de la clave principal utilizando el esquema de claves de Rijndael ; cada subclave tiene el mismo tamaño que el estado. La subclave se agrega combinando el estado con el byte correspondiente de la subclave utilizando XOR bit a bit .
En sistemas con palabras de 32 bits o más, es posible acelerar la ejecución de este cifrado combinando los pasos SubBytes y ShiftRows con el paso MixColumns transformándolos en una secuencia de búsquedas de tabla. Esto requiere cuatro tablas de 32 bits con 256 entradas (que juntas ocupan 4096 bytes). Luego se puede realizar una ronda con 16 operaciones de búsqueda de tabla y 12 operaciones de "o" exclusivas de 32 bits, seguidas de cuatro operaciones de "o" exclusivas de 32 bits en el paso AddRoundKey . [12] Alternativamente, la operación de búsqueda de tabla se puede realizar con una sola tabla de 32 bits con 256 entradas (que ocupa 1024 bytes) seguida de operaciones de rotación circular.
Utilizando un enfoque orientado a bytes, es posible combinar los pasos SubBytes , ShiftRows y MixColumns en una sola operación de ronda. [13]
La Agencia de Seguridad Nacional (NSA) revisó todos los finalistas del AES, incluido el de Rijndael, y declaró que todos ellos eran lo suficientemente seguros para los datos no clasificados del gobierno de los EE. UU. En junio de 2003, el gobierno de los EE. UU. anunció que el AES podría utilizarse para proteger la información clasificada :
El diseño y la solidez de todas las longitudes de clave del algoritmo AES (es decir, 128, 192 y 256) son suficientes para proteger la información clasificada hasta el nivel SECRETO. La información TOP SECRET requerirá el uso de longitudes de clave de 192 o 256. La implementación de AES en productos destinados a proteger sistemas y/o información de seguridad nacional debe ser revisada y certificada por la NSA antes de su adquisición y uso. [14]
AES tiene 10 rondas para claves de 128 bits, 12 rondas para claves de 192 bits y 14 rondas para claves de 256 bits.
En 2006, los ataques más conocidos fueron de 7 rondas para claves de 128 bits, 8 rondas para claves de 192 bits y 9 rondas para claves de 256 bits. [15]
Para los criptógrafos, una "ruptura" criptográfica es cualquier cosa más rápida que un ataque de fuerza bruta , es decir, realizar un descifrado de prueba para cada clave posible en secuencia RC5 de 64 bits por distributed.net en 2006. [16]
El espacio de claves aumenta en un factor de 2 por cada bit adicional de longitud de clave, y si cada valor posible de la clave es equiprobable, esto se traduce en una duplicación del tiempo promedio de búsqueda de claves por fuerza bruta con cada bit adicional de longitud de clave. Esto implica que el esfuerzo de una búsqueda por fuerza bruta aumenta exponencialmente con la longitud de la clave. La longitud de la clave en sí no implica seguridad contra ataques, ya que hay cifrados con claves muy largas que se han encontrado vulnerables.
AES tiene un marco algebraico bastante simple. [17] En 2002, Nicolas Courtois y Josef Pieprzyk anunciaron un ataque teórico, llamado " ataque XSL ", que pretendía mostrar una debilidad en el algoritmo AES, parcialmente debido a la baja complejidad de sus componentes no lineales. [18] Desde entonces, otros artículos han demostrado que el ataque, tal como se presentó originalmente, es inviable; consulte Ataque XSL a cifrados de bloque .
Durante el proceso de selección de AES, los desarrolladores de algoritmos competidores escribieron sobre el algoritmo de Rijndael: "estamos preocupados por [su] uso ... en aplicaciones críticas para la seguridad". [19] Sin embargo, en octubre de 2000, al final del proceso de selección de AES, Bruce Schneier , un desarrollador del algoritmo competidor Twofish , escribió que si bien pensaba que algún día se desarrollarían ataques académicos exitosos contra Rijndael, "no creía que alguien alguna vez descubriría un ataque que permitiera a alguien leer el tráfico de Rijndael". [20]
Hasta mayo de 2009, los únicos ataques publicados con éxito contra el AES completo eran ataques de canal lateral en algunas implementaciones específicas. En 2009, se descubrió un nuevo ataque de clave relacionada que explota la simplicidad del programa de claves de AES y tiene una complejidad de 2 119 . En diciembre de 2009 se mejoró a 2 99,5 . [2] Este es un seguimiento de un ataque descubierto anteriormente en 2009 por Alex Biryukov , Dmitry Khovratovich e Ivica Nikolić, con una complejidad de 2 96 para una de cada 2 35 claves. [21] Sin embargo, los ataques de clave relacionada no son motivo de preocupación en ningún protocolo criptográfico diseñado adecuadamente, ya que un protocolo diseñado adecuadamente (es decir, software de implementación) se encargará de no permitir claves relacionadas, esencialmente restringiendo los medios de un atacante para seleccionar claves por relación.
Otro ataque fue publicado en su blog por Bruce Schneier [3] el 30 de julio de 2009 y publicado como preimpresión [22] el 3 de agosto de 2009. Este nuevo ataque, de Alex Biryukov, Orr Dunkelman , Nathan Keller, Dmitry Khovratovich y Adi Shamir , es contra AES-256 que usa solo dos claves relacionadas y 2 39 tiempo para recuperar la clave completa de 256 bits de una versión de 9 rondas, o 2 45 tiempo para una versión de 10 rondas con un tipo más fuerte de ataque de subclave relacionada, o 2 70 tiempo para una versión de 11 rondas. AES de 256 bits usa 14 rondas, por lo que estos ataques no son efectivos contra AES completo.
La viabilidad de estos ataques con claves relacionadas más fuertes ha sido criticada, [23] por ejemplo, en el artículo sobre ataques de relaciones de clave elegida en el medio en AES-128 escrito por Vincent Rijmen en 2010. [24]
En noviembre de 2009, se publicó como preimpresión el primer ataque de distinción de clave conocida contra una versión reducida de 8 rondas de AES-128. [25] Este ataque de distinción de clave conocida es una mejora del ataque de rebote, o de inicio desde el medio, contra permutaciones similares a AES, que consideran dos rondas consecutivas de permutación como la aplicación de una denominada Super-S-box. Funciona en la versión de 8 rondas de AES-128, con una complejidad de tiempo de 2 48 y una complejidad de memoria de 2 32. AES de 128 bits utiliza 10 rondas, por lo que este ataque no es efectivo contra AES-128 completo.
Los primeros ataques de recuperación de claves en AES completos fueron realizados por Andrey Bogdanov, Dmitry Khovratovich y Christian Rechberger, y se publicaron en 2011. [26] El ataque es un ataque biclicuo y es más rápido que la fuerza bruta por un factor de aproximadamente cuatro. Requiere 2 126,2 operaciones para recuperar una clave AES-128. Para AES-192 y AES-256, se necesitan 2 190,2 y 2 254,6 operaciones, respectivamente. Este resultado se ha mejorado aún más a 2 126,0 para AES-128, 2 189,9 para AES-192 y 2 254,3 para AES-256, [27] que son los mejores resultados actuales en ataques de recuperación de claves contra AES.
Esta es una ganancia muy pequeña, ya que una clave de 126 bits (en lugar de 128 bits) aún tardaría miles de millones de años en ser atacada por fuerza bruta en el hardware actual y previsible. Además, los autores calculan que el mejor ataque utilizando su técnica en AES con una clave de 128 bits requiere almacenar 2,88 bits de datos. Eso equivale a unos 38 billones de terabytes de datos, que era más que todos los datos almacenados en todas las computadoras del planeta en 2016. [28] Un artículo de 2015 mejoró posteriormente la complejidad espacial a 2,56 bits , [27] que son 9007 terabytes (manteniendo una complejidad temporal de 2126,2 ) .
Según los documentos de Snowden , la NSA está investigando si un ataque criptográfico basado en la estadística tau puede ayudar a romper el AES. [29]
En la actualidad, no se conoce ningún ataque práctico que permita a alguien sin conocimiento de la clave leer datos cifrados por AES cuando se implementa correctamente. [ cita requerida ]
Los ataques de canal lateral no atacan al cifrado como una caja negra y, por lo tanto, no están relacionados con la seguridad del cifrado según se define en el contexto clásico, pero son importantes en la práctica. Atacan implementaciones del cifrado en sistemas de hardware o software que filtran datos inadvertidamente. Existen varios ataques conocidos de este tipo en varias implementaciones de AES.
En abril de 2005, D. J. Bernstein anunció un ataque de sincronización de caché que utilizó para romper un servidor personalizado que utilizaba el cifrado AES de OpenSSL . [30] El ataque requirió más de 200 millones de textos simples seleccionados. [31] El servidor personalizado fue diseñado para proporcionar la mayor cantidad posible de información de sincronización (el servidor informa el número de ciclos de máquina que toma la operación de cifrado). Sin embargo, como señaló Bernstein, "reducir la precisión de las marcas de tiempo del servidor, o eliminarlas de las respuestas del servidor, no detiene el ataque: el cliente simplemente utiliza tiempos de ida y vuelta basados en su reloj local y compensa el aumento de ruido promediando sobre un mayor número de muestras". [30]
En octubre de 2005, Dag Arne Osvik, Adi Shamir y Eran Tromer presentaron un artículo que demostraba varios ataques de sincronización de caché contra las implementaciones de AES que se encuentran en OpenSSL y dm-crypt
la función de cifrado de particiones de Linux. [32] Un ataque pudo obtener una clave AES completa después de solo 800 operaciones que activaron cifrados, en un total de 65 milisegundos. Este ataque requiere que el atacante pueda ejecutar programas en el mismo sistema o plataforma que está ejecutando AES.
En diciembre de 2009 se publicó un ataque a algunas implementaciones de hardware que utilizaba análisis de fallas diferenciales y permitía recuperar una clave con una complejidad de 2 32 . [33]
En noviembre de 2010, Endre Bangerter, David Gullasch y Stephan Krenn publicaron un artículo que describía un enfoque práctico para la recuperación "casi en tiempo real" de claves secretas de AES-128 sin necesidad de texto cifrado o texto sin formato. El enfoque también funciona en implementaciones de AES-128 que utilizan tablas de compresión, como OpenSSL. [34] Al igual que algunos ataques anteriores, este requiere la capacidad de ejecutar código sin privilegios en el sistema que realiza el cifrado AES, lo que se puede lograr mediante una infección de malware mucho más fácilmente que tomando el control de la cuenta raíz. [35]
En marzo de 2016, Ashokkumar C., Ravi Prakash Giri y Bernard Menezes presentaron un ataque de canal lateral a las implementaciones de AES que puede recuperar la clave AES completa de 128 bits en solo 6 o 7 bloques de texto simple o cifrado, lo que representa una mejora sustancial con respecto a trabajos anteriores que requieren entre 100 y un millón de cifrados. [36] El ataque propuesto requiere privilegios de usuario estándar y algoritmos de recuperación de clave que se ejecutan en menos de un minuto.
Muchas CPU modernas tienen instrucciones de hardware integradas para AES , que protegen contra ataques de canal lateral relacionados con el tiempo. [37] [38]
Se considera que el AES-256 es resistente a los ataques cuánticos , ya que tiene una resistencia cuántica similar a la del AES-128 contra ataques tradicionales no cuánticos con 128 bits de seguridad . El AES-192 y el AES-128 no se consideran resistentes a los ataques cuánticos debido a sus tamaños de clave más pequeños. El AES-192 tiene una resistencia de 96 bits contra ataques cuánticos y el AES-128 tiene 64 bits de resistencia contra ataques cuánticos, lo que los hace inseguros. [39] [40]
El Programa de Validación de Módulos Criptográficos (CMVP, por sus siglas en inglés) es operado conjuntamente por la División de Seguridad Informática del Instituto Nacional de Estándares y Tecnología (NIST, por sus siglas en inglés) del Gobierno de los Estados Unidos y el Establecimiento de Seguridad de las Comunicaciones (CSE, por sus siglas en inglés) del Gobierno de Canadá. El Gobierno de los Estados Unidos exige el uso de módulos criptográficos validados según la norma FIPS 140-2 del NIST para el cifrado de todos los datos que tengan una clasificación de Sensible pero No Clasificado (SBU, por sus siglas en inglés) o superior. Según el NSTISSP #11, Política Nacional que Rige la Adquisición de Garantía de la Información: "Los productos de cifrado para proteger información clasificada serán certificados por la NSA, y los productos de cifrado destinados a proteger información sensible serán certificados de acuerdo con la norma FIPS 140-2 del NIST". [41]
El Gobierno de Canadá también recomienda el uso de módulos criptográficos validados FIPS 140 en aplicaciones no clasificadas de sus departamentos.
Aunque la publicación NIST 197 ("FIPS 197") es el único documento que cubre el algoritmo AES, los proveedores normalmente se acercan al CMVP bajo FIPS 140 y piden que se validen varios algoritmos (como Triple DES o SHA1 ) al mismo tiempo. Por lo tanto, es raro encontrar módulos criptográficos que estén validados exclusivamente por FIPS 197 y el propio NIST no suele tomarse el tiempo de enumerar los módulos validados por FIPS 197 por separado en su sitio web público. En cambio, la validación por FIPS 197 normalmente se enumera simplemente como una notación "aprobado por FIPS: AES" (con un número de certificado FIPS 197 específico) en la lista actual de módulos criptográficos validados por FIPS 140.
El Programa de Validación de Algoritmos Criptográficos (CAVP) [42] permite la validación independiente de la correcta implementación del algoritmo AES. La validación exitosa da como resultado la inclusión en la página de validaciones del NIST. [43] Esta prueba es un requisito previo para la validación del módulo FIPS 140-2. Sin embargo, la validación exitosa del CAVP no implica de ninguna manera que el módulo criptográfico que implementa el algoritmo sea seguro. Un módulo criptográfico que carece de validación FIPS 140-2 o aprobación específica por parte de la NSA no es considerado seguro por el Gobierno de los EE. UU. y no puede usarse para proteger datos gubernamentales. [41]
La validación FIPS 140-2 es un desafío tanto técnico como fiscal. [44] Existe una batería estandarizada de pruebas, así como un elemento de revisión del código fuente que debe aprobarse en un período de unas pocas semanas. El costo de realizar estas pruebas a través de un laboratorio aprobado puede ser significativo (por ejemplo, más de $30,000 USD) [44] y no incluye el tiempo que lleva escribir, probar, documentar y preparar un módulo para la validación. Después de la validación, los módulos deben volver a enviarse y evaluarse si se modifican de alguna manera. Esto puede variar desde simples actualizaciones de papeleo si la funcionalidad de seguridad no cambió hasta un conjunto más sustancial de nuevas pruebas si la funcionalidad de seguridad se vio afectada por el cambio.
Los vectores de prueba son un conjunto de cifras conocidas para una entrada y una clave determinadas. El NIST distribuye la referencia de los vectores de prueba AES como vectores de prueba de respuesta conocida (KAT) de AES. [nota 7]
La alta velocidad y los bajos requisitos de memoria RAM fueron algunos de los criterios del proceso de selección de AES. Como algoritmo elegido, AES tuvo un buen desempeño en una amplia variedad de hardware, desde tarjetas inteligentes de 8 bits hasta computadoras de alto rendimiento.
En un Pentium Pro , el cifrado AES requiere 18 ciclos de reloj por byte (cpb), [45] equivalente a un rendimiento de aproximadamente 11 MiB/s para un procesador de 200 MHz.
En las CPU Intel Core y AMD Ryzen que admiten extensiones de conjuntos de instrucciones AES-NI , el rendimiento puede ser de varios GiB/s. [46] En una CPU Intel Westmere , el cifrado AES mediante AES-NI requiere aproximadamente 1,3 cpb para AES-128 y 1,8 cpb para AES-256. [47]