En criptografía , el modo Galois/Counter ( GCM ) [1] es un modo de operación para cifrados de bloques criptográficos de clave simétrica que se adopta ampliamente por su rendimiento. Las tasas de rendimiento del GCM para canales de comunicación de alta velocidad y de última generación se pueden lograr con recursos de hardware económicos. [2]
El algoritmo GCM proporciona tanto autenticidad (integridad) como confidencialidad de los datos y pertenece a la clase de métodos de cifrado autenticado con datos asociados (AEAD) . Esto significa que toma como entrada una clave K, un texto simple P y algunos datos asociados AD; luego cifra el texto simple utilizando la clave para producir el texto cifrado C y calcula una etiqueta de autenticación T a partir del texto cifrado y los datos asociados (que permanecen sin cifrar). Un receptor con conocimiento de K, al recibir AD, C y T, puede descifrar el texto cifrado para recuperar el texto simple P y puede verificar la etiqueta T para asegurarse de que ni el texto cifrado ni los datos asociados fueron alterados.
GCM utiliza un cifrador de bloques con un tamaño de bloque de 128 bits (comúnmente AES-128 ) operado en modo contador para el cifrado, y utiliza aritmética en el campo de Galois GF(2 128 ) para calcular la etiqueta de autenticación; de ahí el nombre.
El código de autenticación de mensajes de Galois ( GMAC ) es una variante de autenticación exclusiva del GCM que puede formar un código de autenticación de mensajes incremental . Tanto el GCM como el GMAC pueden aceptar vectores de inicialización de longitud arbitraria.
Los distintos modos de funcionamiento de cifrado de bloques pueden tener características de rendimiento y eficiencia significativamente diferentes, incluso cuando se utilizan con el mismo cifrado de bloques. GCM puede aprovechar al máximo el procesamiento paralelo y la implementación de GCM puede hacer un uso eficiente de una secuencia de instrucciones o una secuencia de hardware. Por el contrario, el modo de funcionamiento de encadenamiento de bloques de cifrado (CBC) genera bloqueos en la secuencia de comandos que obstaculizan su eficiencia y rendimiento.
Al igual que en el modo de contador normal , los bloques se numeran secuencialmente y, a continuación, este número de bloque se combina con un vector de inicialización (IV) y se cifra con un cifrado de bloque E , normalmente AES . El resultado de este cifrado se combina con el texto sin formato para generar el texto cifrado . Al igual que todos los modos de contador, este es esencialmente un cifrado de flujo , por lo que es esencial que se utilice un IV diferente para cada flujo que se cifra.
Los bloques de texto cifrado se consideran coeficientes de un polinomio que luego se evalúa en un punto dependiente de la clave H , utilizando aritmética de campo finito . Luego, el resultado se cifra, lo que produce una etiqueta de autenticación que se puede utilizar para verificar la integridad de los datos. El texto cifrado contiene entonces el IV, el texto cifrado y la etiqueta de autenticación.
GCM combina el conocido modo de cifrado de contador con el nuevo modo Galois de autenticación. La característica clave es la facilidad de cálculo paralelo de la multiplicación del campo Galois utilizada para la autenticación. Esta característica permite un mayor rendimiento que los algoritmos de cifrado, como CBC , que utilizan modos de encadenamiento. El campo GF(2 128 ) utilizado se define mediante el polinomio
La etiqueta de autenticación se construye introduciendo bloques de datos en la función GHASH y cifrando el resultado. Esta función GHASH está definida por
donde H = E k (0 128 ) es la clave hash , una cadena de 128 bits cero cifrada utilizando el cifrado de bloque , A son datos que solo se autentican (no se cifran), C es el texto cifrado , m es el número de bloques de 128 bits en A (redondeado hacia arriba), n es el número de bloques de 128 bits en C (redondeado hacia arriba), y la variable Xi para i = 0 , ... , m + n + 1 se define a continuación . [3]
En primer lugar, el texto autenticado y el texto cifrado se rellenan con ceros por separado hasta múltiplos de 128 bits y se combinan en un único mensaje S i :
donde len( A ) y len( C ) son las representaciones de 64 bits de las longitudes de bits de A y C , respectivamente, v = len( A ) mod 128 es la longitud de bits del bloque final de A , u = len( C ) mod 128 es la longitud de bits del bloque final de C , y denota la concatenación de cadenas de bits.
Entonces Xi se define como:
La segunda forma es un algoritmo iterativo eficiente (cada X i depende de X i −1 ) que se obtiene aplicando el método de Horner a la primera. Solo el X m + n +1 final sigue siendo un resultado.
Si es necesario paralelizar el cálculo del hash, esto se puede hacer intercalando k veces:
Si la longitud del IV no es 96, se utiliza la función GHASH para calcular el Contador 0 :
El GCM fue diseñado por John Viega y David A. McGrew para ser una mejora del modo contador Carter-Wegman (modo CWC). [4]
En noviembre de 2007, el NIST anunció el lanzamiento de la Publicación Especial NIST 800-38D Recomendación para modos de operación de cifrado de bloques: modo Galois/Contador (GCM) y GMAC, convirtiendo a GCM y GMAC en estándares oficiales. [5]
El modo GCM se utiliza en la seguridad Ethernet IEEE 802.1AE (MACsec), el protocolo de seguridad Wifi empresarial WPA3 , IEEE 802.11ad (también denominado WiGig ), los protocolos de seguridad de canal de fibra ANSI ( INCITS ) (FC-SP), el almacenamiento en cinta IEEE P1619.1 , los estándares IPsec de IETF , [6] [7] SSH , [8] TLS 1.2 [9] [10] y TLS 1.3. [11] AES-GCM está incluido en la criptografía NSA Suite B y su último reemplazo en la suite Commercial National Security Algorithm (CNSA) de 2018. [12] El modo GCM se utiliza en el servidor y cliente VPN SoftEther , [13] así como en OpenVPN desde la versión 2.4.
GCM requiere una operación de cifrado de bloque y una multiplicación de 128 bits en el campo de Galois por cada bloque (128 bits) de datos cifrados y autenticados. Las operaciones de cifrado de bloque se pueden canalizar o paralelizar fácilmente; las operaciones de multiplicación se pueden canalizar fácilmente y paralelizar con un esfuerzo modesto (ya sea paralelizando la operación real, adaptando el método de Horner según la presentación original al NIST, o ambas cosas).
Intel ha añadido la instrucción PCLMULQDQ , destacando su uso para GCM. [14] En 2011, SPARC añadió las instrucciones XMULX y XMULXHI, que también realizan una multiplicación sin acarreo de 64 × 64 bits . En 2015, SPARC añadió la instrucción XMPMUL, que realiza la multiplicación XOR de valores mucho más grandes, hasta valores de entrada de 2048 × 2048 bits produciendo un resultado de 4096 bits. Estas instrucciones permiten una multiplicación rápida sobre GF(2 n ), y se pueden utilizar con cualquier representación de campo.
Se han publicado resultados de rendimiento impresionantes para GCM en varias plataformas. Käsper y Schwabe describieron un " AES-GCM más rápido y resistente a ataques de tiempo " [15] que logra un cifrado autenticado AES-GCM de 10,68 ciclos por byte en procesadores Intel de 64 bits. Dai et al. informan de 3,5 ciclos por byte para el mismo algoritmo al utilizar las instrucciones AES-NI y PCLMULQDQ de Intel. Shay Gueron y Vlad Krasnov lograron 2,47 ciclos por byte en los procesadores Intel de tercera generación. Se prepararon parches adecuados para las bibliotecas OpenSSL y NSS . [16]
Cuando es necesario realizar tanto la autenticación como el cifrado en un mensaje, una implementación de software puede lograr ganancias de velocidad superponiendo la ejecución de esas operaciones. El rendimiento se incrementa explotando el paralelismo a nivel de instrucción mediante el entrelazado de operaciones. Este proceso se denomina unión de funciones [17] y, si bien en principio se puede aplicar a cualquier combinación de algoritmos criptográficos, GCM es especialmente adecuado. Manley y Gregg [18] muestran la facilidad de optimización al utilizar la unión de funciones con GCM. Presentan un generador de programas que toma una versión C anotada de un algoritmo criptográfico y genera código que se ejecuta bien en el procesador de destino.
El GCM ha sido criticado en el mundo de los sistemas integrados (por ejemplo, por Silicon Labs) porque el procesamiento paralelo no es adecuado para el uso eficiente de los motores de hardware criptográficos. Como resultado, el GCM reduce el rendimiento del cifrado para algunos de los dispositivos más sensibles al rendimiento. [19] Los aceleradores de hardware especializados para ChaCha20-Poly1305 son menos complejos en comparación con los aceleradores AES. [20]
Según la declaración de los autores, el GCM no está sujeto a patentes. [21]
Se ha demostrado que GCM es seguro en el modelo de seguridad concreto . [22] Es seguro cuando se utiliza con un cifrado de bloque que es indistinguible de una permutación aleatoria; sin embargo, la seguridad depende de la elección de un vector de inicialización único para cada cifrado realizado con la misma clave ( ver ataque de cifrado de flujo ). Para cualquier clave dada, GCM está limitado a cifrar 2 39 − 256 bits de texto sin formato (64 GiB). La Publicación Especial 800-38D del NIST [5] incluye pautas para la selección del vector de inicialización.
La fuerza de la autenticación depende de la longitud de la etiqueta de autenticación, como ocurre con todos los códigos de autenticación de mensajes simétricos. No se recomienda el uso de etiquetas de autenticación más cortas con GCM. La longitud en bits de la etiqueta, denominada t , es un parámetro de seguridad. En general, t puede ser cualquiera de los siguientes cinco valores: 128, 120, 112, 104 o 96. Para ciertas aplicaciones, t puede ser 64 o 32, pero el uso de estas dos longitudes de etiqueta limita la longitud de los datos de entrada y la duración de la clave. El Apéndice C en NIST SP 800-38D proporciona orientación para estas restricciones (por ejemplo, si t = 32 y el tamaño máximo del paquete es de 2 a 10 bytes, la función de descifrado de autenticación no debe invocarse más de 2 a 11 veces; si t = 64 y el tamaño máximo del paquete es de 2 a 15 bytes, la función de descifrado de autenticación no debe invocarse más de 2 a 32 veces).
Al igual que con cualquier código de autenticación de mensajes, si el adversario elige una etiqueta de t bits al azar, se espera que sea correcta para datos dados con una medida de probabilidad de 2 − t . Sin embargo, con GCM, un adversario puede aumentar su probabilidad de éxito al elegir etiquetas con n palabras (la longitud total del texto cifrado más cualquier dato autenticado adicional [AAD]) con una medida de probabilidad de 2 − t por un factor de n . Aunque hay que tener en cuenta que estas etiquetas óptimas siguen estando dominadas por la medida de supervivencia del algoritmo 1 − n ⋅2 − t para un t arbitrariamente grande . Además, GCM no es adecuado para su uso con longitudes de etiqueta muy cortas ni con mensajes muy largos.
Ferguson y Saarinen describieron de forma independiente cómo un atacante puede realizar ataques óptimos contra la autenticación GCM, que cumplen con el límite inferior de su seguridad. Ferguson demostró que, si n denota el número total de bloques en la codificación (la entrada a la función GHASH), entonces existe un método para construir una falsificación de texto cifrado dirigida que se espera que tenga éxito con una probabilidad de aproximadamente n ⋅2 − t . Si la longitud de la etiqueta t es menor que 128, entonces cada falsificación exitosa en este ataque aumenta la probabilidad de que las falsificaciones dirigidas posteriores tengan éxito y filtra información sobre la subclave hash, H . Finalmente, H puede verse comprometida por completo y la seguridad de la autenticación se pierde por completo. [23]
Independientemente de este ataque, un adversario puede intentar adivinar sistemáticamente muchas etiquetas diferentes para una entrada dada para descifrarla de forma autenticada y, de ese modo, aumentar la probabilidad de que una (o más) de ellas, finalmente, se consideren válidas. Por este motivo, el sistema o protocolo que implementa GCM debe supervisar y, si es necesario, limitar el número de intentos de verificación fallidos para cada clave.
Saarinen describió las claves débiles del GCM . [24] Este trabajo proporciona algunas ideas valiosas sobre cómo funciona la autenticación basada en hash polinomial. Más precisamente, este trabajo describe una forma particular de falsificar un mensaje GCM, dado un mensaje GCM válido, que funciona con una probabilidad de aproximadamente n ⋅2 −128 para mensajes que tienen una longitud de n × 128 bits. Sin embargo, este trabajo no muestra un ataque más efectivo que el que se conocía anteriormente; la probabilidad de éxito en la observación 1 de este artículo coincide con la del lema 2 del análisis de INDOCRYPT 2004 (estableciendo w = 128 y l = n × 128 ). Saarinen también describió una variante del GCM, el modo contador de Sophie Germain (SGCM), basado en primos de Sophie Germain .
{{cite journal}}
: Requiere citar revista |journal=
( ayuda )