Estándar de cifrado avanzado
El Estándar de cifrado avanzado (AES), también conocido por su nombre original Rijndael (pronunciación holandesa: [ˈrɛindaːl]), es una especificación para el cifrado de datos electrónicos establecida por el Instituto Nacional de Estándares y Tecnología de los Estados Unidos (NIST) en 2001.
AES es una variante del cifrado de bloques Rijndael desarrollado por dos criptógrafos belgas, Joan Daemen y Vincent Rijmen, quienes presentaron una propuesta al NIST durante el proceso de selección de AES. 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 con tres longitudes de clave diferentes: 128, 192 y 256 bits.
AES ha sido adoptado por el gobierno de EE. UU. Reemplaza el Estándar de cifrado de datos (DES), que se publicó en 1977. El algoritmo descrito por AES es un algoritmo de clave simétrica, lo que significa que se utiliza la misma clave para cifrar y descifrar los datos.
En los Estados Unidos, el NIST anunció AES como U.S. FIPS PUB 197 (FIPS 197) el 26 de noviembre de 2001. Este anuncio siguió a un proceso de estandarización de cinco años en el que se presentaron y evaluaron quince diseños competitivos, antes de la Se seleccionó el cifrado Rijndael como el más adecuado.
AES está incluido en el estándar ISO/IEC 18033-3. AES entró en vigor como estándar del gobierno federal de EE. UU. el 26 de mayo de 2002, luego de la aprobación del Secretario de Comercio de EE. UU. 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 (NSA) de EE. UU. para información de alto secreto cuando se usa en un módulo criptográfico aprobado por la NSA.
Estándares definitivos
El estándar de cifrado avanzado (AES) se define en cada uno de:
- FIPS PUB 197: Advanced Encryption Standard (AES)
- ISO/IEC 18033-3: Cifras de bloques
Descripción de los cifrados
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. 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 AES se realizan en un campo finito particular.
AES opera en un 4 × 4 columna-major orden array de 16 bytes denominado el estado:
El tamaño de clave utilizado para un cifrado AES especifica el número de rondas de transformación que convierten la entrada, denominada texto sin formato, en la salida final, denominada texto cifrado. El número de rondas es el siguiente:
- 10 rondas para llaves de 128 bits.
- 12 rondas para llaves de 192 bits.
- 14 rondas para llaves de 256 bits.
Cada ronda consta de varios pasos de procesamiento, incluido uno que depende de la propia clave de cifrado. Se aplica un conjunto de rondas inversas para transformar el texto cifrado nuevamente en el texto sin formato original utilizando la misma clave de cifrado.
Descripción de alto nivel del algoritmo
- KeyExpansion– Las teclas redondas se derivan de la clave del cifrado utilizando el programa clave AES. AES requiere un bloque redondo de 128 bits para cada ronda más uno más.
- Adiciones iniciales de la llave redonda:
- AddRound Clave– cada byte del estado se combina con un byte de la llave redonda usando xor bitwise.
- 9, 11 o 13 rondas:
- SubBytes– un paso de sustitución no lineal donde cada byte es reemplazado por otro según una tabla de búsqueda.
- ShiftRows– un paso de transposición donde las tres últimas filas del estado se desplazan cíclicamente un cierto número de pasos.
- MixColumns– una operación de mezcla lineal que opera en las columnas del estado, combinando los cuatro bytes en cada columna.
- AddRound Clave
- Ronda final (haciendo 10, 12 o 14 rondas en total):
- SubBytes
- ShiftRows
- AddRound Clave
El paso SubBytes
En el SubBytes paso, cada byte en el estado array es reemplazado por un SubByte usando una caja de sustitución de 8 bits. Note que antes de la ronda 0, el estado array es simplemente el texto / entrada. Esta operación proporciona la no linealidad en el cifrado. El S-box utilizado se deriva del inverso multiplicativo GF(28), conocido por tener buenas propiedades no linealidad. Para evitar ataques basados en simples propiedades algebraicas, el S-box se construye combinando la función inversa con una transformación invertible de afina. El S-box también es elegido para evitar cualquier punto fijo (y así es un desrangement), es decir, , y también cualquier punto fijo opuesto, es decir, . Mientras realiza el descifrado, el InvSubBytes paso (el inverso de SubBytes) se utiliza, que requiere primero tomar el inverso de la transformación de afine y luego encontrar el inverso multiplicativo.
El paso ShiftRows
El paso ShiftRows opera en las filas del estado; desplaza cíclicamente los bytes de cada fila en un cierto desplazamiento. Para AES, la primera fila no se modifica. Cada byte de la segunda fila se desplaza uno a la izquierda. De manera similar, las filas tercera y cuarta se desplazan con compensaciones de dos y tres respectivamente. De esta forma, cada columna del estado de salida del paso ShiftRows se compone de 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.
El paso MixColumns
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, 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 usando una matriz fija (la matriz multiplicada por la izquierda por columna da un nuevo valor de columna en el estado):
La multiplicación de matriz se compone de multiplicación y adición de las entradas. Los certificados son tratados como coeficientes de polinomio de orden . La adición es simplemente XOR. Multiplicación es polinomial modulo irreducible . Si se procesa poco a poco, después de cambiar, un XOR condicional con 1B16 debe realizarse si el valor desplazado es mayor que FF16 (la reflujo debe ser corregido por la resta de generación de polinomio). Estos son casos especiales de la multiplicación habitual .
En sentido más general, cada columna es tratada como un polinomio sobre y entonces se multiplica modulo con un polinomio fijo . Los coeficientes se muestran en su equivalente hexadecimal de la representación binaria de polinomios bits de . El MixColumns paso también se puede ver como una multiplicación por la matriz MDS mostrada en particular en el campo finito . Este proceso se describe más adelante en el artículo Rijndael MixColumns.
La AddRoundKey
(feminine)En el paso AddRoundKey, la subclave se combina con el estado. Para cada ronda, se deriva una subclave de la clave principal mediante el programa de claves de Rijndael; cada subclave tiene el mismo tamaño que el estado. La subclave se agrega combinando cada byte del estado con el byte correspondiente de la subclave usando XOR bit a bit.
Optimización del cifrado
En sistemas con palabras de 32 bits o más, es posible acelerar la ejecución de este cifrado combinando SubBytes y ShiftRows< /span> pasos con el paso MixColumns transformándolos en una secuencia de búsquedas en tablas. Esto requiere cuatro tablas de 32 bits de 256 entradas (juntas que ocupan 4096 bytes). A continuación, se puede realizar una ronda con 16 operaciones de búsqueda de tabla y 12 operaciones OR exclusivas de 32 bits, seguidas de cuatro operaciones OR exclusivas de 32 bits en el paso AddRoundKey. Alternativamente, la operación de búsqueda de tabla se puede realizar con una sola tabla de 32 bits de 256 entradas (que ocupa 1024 bytes) seguida de operaciones de rotación circular.
Usando un enfoque orientado a bytes, es posible combinar SubBytes, ShiftRows y MixColumns pasos en una sola operación de ronda.
Seguridad
La Agencia de Seguridad Nacional (NSA) revisó a todos los finalistas de AES, incluido Rijndael, y afirmó que todos eran lo suficientemente seguros para los datos no clasificados del gobierno de EE. UU. En junio de 2003, el gobierno de EE. UU. anunció que AES podría usarse para proteger información clasificada:
El diseño y la fuerza de todas las longitudes clave del algoritmo AES (es decir, 128, 192 y 256) son suficientes para proteger la información clasificada hasta el nivel SECRET. La información TOP SECRET requerirá el uso de las longitudes clave 192 o 256. The implementation of AES in products intended to protect national security systems and/or information must be reviewed and certified by NSA prior to their acquisition and use.
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 se produjeron en 7 rondas para claves de 128 bits, 8 rondas para claves de 192 bits y 9 rondas para claves de 256 bits.
Ataques conocidos
Para los criptógrafos, una "ruptura" criptográfica; es algo más rápido que un ataque de fuerza bruta, es decir, realizar un descifrado de prueba para cada clave posible en secuencia. Por lo tanto, una ruptura puede incluir resultados que no son factibles con la tecnología actual. A pesar de ser poco prácticos, los quiebres teóricos a veces pueden proporcionar información sobre los patrones de vulnerabilidad. El mayor ataque exitoso de fuerza bruta conocido públicamente contra un algoritmo de encriptación de cifrado de bloque ampliamente implementado fue contra una clave RC5 de 64 bits por Distributed.net en 2006.
El espacio de claves aumenta en un factor de 2 por cada bit adicional de longitud de clave, y si todos los valores posibles de la clave son equiprobables, esto se traduce en una duplicación del tiempo promedio de búsqueda de clave de fuerza bruta. Esto implica que el esfuerzo de una búsqueda de fuerza bruta aumenta exponencialmente con la longitud de la clave. La longitud de la clave en sí misma 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. En 2002, Nicolas Courtois y Josef Pieprzyk anunciaron un ataque teórico, denominado 'ataque XSL', que pretendía mostrar una debilidad en el algoritmo AES, en parte debido a la baja complejidad de sus componentes no lineales. Desde entonces, otros documentos han demostrado que el ataque, tal como se presentó originalmente, es inviable; ver Ataque XSL en cifrados de bloque.
Durante el proceso de selección de AES, los desarrolladores de algoritmos de la competencia escribieron sobre el algoritmo de Rijndael "nos preocupa [su] uso... en aplicaciones críticas para la seguridad." Sin embargo, en octubre de 2000, al final del proceso de selección de AES, Bruce Schneier, 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 cualquiera descubrirá un ataque que le permita a alguien leer el tráfico de Rijndael."
Hasta mayo de 2009, los únicos ataques exitosos publicados contra AES completo fueron ataques de canal lateral en algunas implementaciones específicas. En 2009, se descubrió un nuevo ataque de clave relacionada que explota la simplicidad de la programación de claves de AES y tiene una complejidad de 2119. En diciembre de 2009 se mejoró a 299,5. Este es un seguimiento de un ataque descubierto a principios de 2009 por Alex Biryukov, Dmitry Khovratovich e Ivica Nikolić, con una complejidad de 296 para uno de cada 235 llaves. Sin embargo, los ataques de claves relacionadas no son motivo de preocupación en ningún protocolo criptográfico diseñado correctamente, ya que un protocolo diseñado correctamente (es decir, software de implementación) se encargará de no permitir claves relacionadas, esencialmente restringiendo los medios de un atacante para seleccionar claves. por parentesco.
Bruce Schneier escribió otro ataque en su blog el 30 de julio de 2009 y publicado como preimpresión 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 239 tiempo para recuperar la clave completa de 256 bits de una versión de 9 rondas, o 245 vez para una versión de 10 rondas con un tipo más fuerte de ataque de subclave relacionado, o 270 tiempo para una versión de 11 asaltos. AES de 256 bits usa 14 rondas, por lo que estos ataques no son efectivos contra AES completo.
La practicidad de estos ataques con claves relacionadas más fuertes ha sido criticada, por ejemplo, por el documento sobre ataques de relaciones clave elegidas en el medio en AES-128 escrito por Vincent Rijmen en 2010.
En noviembre de 2009, se lanzó como preimpresión el primer ataque distintivo de clave conocida contra una versión reducida de 8 rondas de AES-128. Este ataque de distinción de clave conocida es una mejora del rebote, o el ataque de inicio desde el medio, contra permutaciones similares a AES, que ven dos rondas consecutivas de permutación como la aplicación de un llamado Super-S-box.. Funciona en la versión de 8 rondas de AES-128, con una complejidad de tiempo de 248 y una complejidad de memoria de 232. AES de 128 bits usa 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. El ataque es un ataque biclique y es más rápido que la fuerza bruta por un factor de aproximadamente cuatro. Requiere 2126.2 operaciones para recuperar una clave AES-128. Para AES-192 y AES-256, se necesitan 2190.2 y 2254.6 operaciones, respectivamente. Este resultado se ha mejorado aún más a 2126,0 para AES-128, 2189,9 para AES-192 y 2254,3 para AES-256, 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) tardaría miles de millones de años en aplicar fuerza bruta en el hardware actual y previsible. Además, los autores calculan el mejor ataque utilizando su técnica en AES con una clave de 128 bits que requiere almacenar 288 bits de datos. Eso equivale a alrededor de 38 billones de terabytes de datos, que es más que todos los datos almacenados en todas las computadoras del planeta en 2016. Como tal, no hay implicaciones prácticas en la seguridad de AES. Posteriormente, la complejidad del espacio se mejoró a 256 bits, que son 9007 terabytes (manteniendo una complejidad de tiempo 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 AES.
Actualmente, 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.
Ataques de canal lateral
Los ataques de canal lateral no atacan el cifrado como una caja negra y, por lo tanto, no están relacionados con la seguridad del cifrado tal como se define en el contexto clásico, pero son importantes en la práctica. Atacan las implementaciones del cifrado en sistemas de hardware o software que filtran datos sin darse cuenta. Hay varios ataques conocidos de este tipo en varias implementaciones de AES.
En abril de 2005, D. J. Bernstein anunció un ataque de tiempo de caché que usó para romper un servidor personalizado que usaba el cifrado AES de OpenSSL. El ataque requirió más de 200 millones de textos sin formato elegidos. El servidor personalizado fue diseñado para brindar la mayor cantidad de información de tiempo posible (el servidor informa la cantidad de ciclos de la máquina necesarios para 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 usa tiempos de ida y vuelta basados en en su reloj local y compensa el aumento del ruido promediando un mayor número de muestras.
En octubre de 2005, Dag Arne Osvik, Adi Shamir y Eran Tromer presentaron un documento que demostraba varios ataques de temporización de caché contra las implementaciones en AES que se encuentran en OpenSSL y la partición dm-crypt
de Linux. función de cifrado. Un ataque pudo obtener una clave AES completa después de solo 800 operaciones que desencadenaron encriptaciones, en un total de 65 milisegundos. Este ataque requiere que el atacante pueda ejecutar programas en el mismo sistema o plataforma que está realizando AES.
En diciembre de 2009 se publicó un ataque a algunas implementaciones de hardware que usaban análisis diferencial de fallas y permitían recuperar una clave con una complejidad de 232.
En noviembre de 2010, Endre Bangerter, David Gullasch y Stephan Krenn publicaron un artículo que describía un enfoque práctico para un "tiempo casi real" recuperación de claves secretas de AES-128 sin necesidad de texto cifrado o sin formato. El enfoque también funciona en implementaciones AES-128 que usan tablas de compresión, como OpenSSL. 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 puede lograrse mediante una infección de malware mucho más fácilmente que apoderarse de la cuenta raíz.
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 sin formato/cifrado, que es un mejora sustancial respecto a trabajos anteriores que requieren entre 100 y un millón de cifrados. El ataque propuesto requiere privilegios de usuario estándar y algoritmos de recuperación de claves 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.
Validación NIST/CSEC
El Programa de Validación de Módulo Criptográfico (CMVP) es operado conjuntamente por la División de Seguridad Informática del Instituto Nacional de Estándares y Tecnología (NIST) del Gobierno de los Estados Unidos y el Establecimiento de Seguridad de las Comunicaciones (CSE) del Gobierno de Canadá. El gobierno de los Estados Unidos exige el uso de módulos criptográficos validados según NIST FIPS 140-2 para el cifrado de todos los datos clasificados como Sensible pero sin clasificar (SBU) o superior. De NSTISSP #11, Política Nacional que Gobierna la Adquisición de Garantía de la Información: “Los productos de encriptación para proteger información clasificada serán certificados por la NSA, y los productos de encriptación destinados a proteger información confidencial serán certificados de acuerdo con NIST FIPS 140-2”.
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 solicitan 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 únicamente validados por FIPS 197 y el NIST por sí mismo generalmente no se toma el tiempo de enumerar los módulos validados por FIPS 197 por separado en su sitio web público. En su lugar, la validación de FIPS 197 suele aparecer como "Aprobado por FIPS: AES" (con un número de certificado FIPS 197 específico) en la lista actual de módulos criptográficos validados FIPS 140.
El programa de validación de algoritmos criptográficos (CAVP) permite una validación independiente de la implementación correcta del algoritmo AES. La validación exitosa da como resultado que se incluya en la página de validaciones de NIST. Esta prueba es un requisito previo para la validación del módulo FIPS 140-2. Sin embargo, la validación exitosa de CAVP de ninguna manera implica que el módulo criptográfico que implementa el algoritmo sea seguro. El gobierno de los EE. UU. no considera seguro un módulo criptográfico que carece de la validación FIPS 140-2 o la aprobación específica de la NSA y no se puede usar para proteger los datos del gobierno.
La validación de FIPS 140-2 es un desafío tanto desde el punto de vista técnico como fiscal. Hay una batería estandarizada de pruebas, así como un elemento de revisión del código fuente que se debe pasar en un período de unas pocas semanas. El costo de realizar estas pruebas a través de un laboratorio aprobado puede ser significativo (p. ej., más de $30 000 USD) 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 volver a 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.
Vectores de prueba
Los vectores de prueba son un conjunto de cifrados conocidos para una entrada y clave determinadas. NIST distribuye la referencia de los vectores de prueba AES como vectores de prueba de respuesta conocida (KAT) de AES.
Rendimiento
Los requisitos de alta velocidad y poca memoria RAM fueron algunos de los criterios del proceso de selección de AES. Como algoritmo elegido, AES se desempeñó bien 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, lo que equivale a un rendimiento de aproximadamente 11 MiB/s para un procesador de 200 MHz.
En las CPU Intel Core y AMD Ryzen compatibles con las extensiones del conjunto de instrucciones AES-NI, el rendimiento puede ser de varios GiB/s (incluso más de 15 GiB/s en un i7-12700k).
Implementaciones
Contenido relacionado
Rastra (herramienta)
AppleScript
Obús M198