En criptografía, un modo de operación de cifrado en bloque es un algoritmo que utiliza un cifrado en bloque para proporcionar seguridad a la información , como confidencialidad o autenticidad . [1] Un cifrado de bloque por sí solo es adecuado para la transformación criptográfica segura (cifrado o descifrado) de un grupo de bits de longitud fija llamado bloque . [2] Un modo de operación describe cómo aplicar repetidamente la operación de un solo bloque de un cifrado para transformar de forma segura cantidades de datos más grandes que un bloque. [3] [4] [5]
La mayoría de los modos requieren una secuencia binaria única, a menudo denominada vector de inicialización (IV), para cada operación de cifrado. El IV tiene que ser no repetitivo y, para algunos modos, también aleatorio. El vector de inicialización se utiliza para asegurar distintos textos cifrados se producen incluso cuando el mismo texto plano se encripta múltiples veces independientemente con la misma clave . [6] Los cifrados de bloque pueden funcionar en más de un tamaño de bloque , pero durante la transformación el tamaño de bloque siempre es fijo. Los modos de cifrado de bloques operan en bloques completos y requieren que la última parte de los datos se rellene en un bloque completo si es más pequeño que el tamaño del bloque actual. [2] Sin embargo, existen modos que no requieren relleno porque efectivamente usan un cifrado de bloque como cifrado de flujo .
Históricamente, los modos de cifrado se han estudiado ampliamente con respecto a sus propiedades de propagación de errores en varios escenarios de modificación de datos. El desarrollo posterior consideró la protección de la integridad como un objetivo criptográfico completamente separado. Algunos modos de funcionamiento modernos combinan la confidencialidad y la autenticidad de forma eficiente y se conocen como modos de cifrado autenticado . [7]
Historia y estandarización
Los primeros modos de operación, ECB, CBC, OFB y CFB (ver más abajo para todos), se remontan a 1981 y se especificaron en FIPS 81 , Modos de operación DES . En 2001, el Instituto Nacional de Estándares y Tecnología de EE. UU. (NIST) revisó su lista de modos de operación aprobados al incluir AES como un cifrado en bloque y agregar el modo CTR en SP800-38A , Recomendación para los modos de operación del cifrado en bloque . Finalmente, en enero de 2010, NIST agregó XTS-AES en SP800-38E , Recomendación para modos de operación de cifrado en bloque: el modo XTS-AES para la confidencialidad en dispositivos de almacenamiento . Existen otros modos de confidencialidad que no han sido aprobados por NIST. Por ejemplo, CTS es un modo de robo de texto cifrado y está disponible en muchas bibliotecas criptográficas populares.
Los modos de cifrado en bloque ECB, CBC, OFB, CFB, CTR y XTS brindan confidencialidad, pero no protegen contra modificaciones accidentales o manipulaciones maliciosas. La modificación o manipulación se puede detectar con un código de autenticación de mensaje separado , como CBC-MAC , o una firma digital . La comunidad criptográfica reconoció la necesidad de garantías de integridad dedicadas y NIST respondió con HMAC, CMAC y GMAC. HMAC fue aprobado en 2002 como FIPS 198 , el código de autenticación de mensajes con clave hash (HMAC) , CMAC se lanzó en 2005 bajo SP800-38B , Recomendación para modos de operación de cifrado en bloque: el modo CMAC para autenticación , y GMAC se formalizó en 2007 bajo SP800-38D , Recomendación para modos de operación de cifrado en bloque: Modo Galois / Contador (GCM) y GMAC .
La comunidad criptográfica observó que componer (combinar) un modo de confidencialidad con un modo de autenticidad podría ser difícil y propenso a errores. Por lo tanto, comenzaron a suministrar modos que combinaban la confidencialidad y la integridad de los datos en una sola primitiva criptográfica (un algoritmo de cifrado). Estos modos combinados se denominan cifrado autenticado , AE o "authenc". Ejemplos de modos AE son CCM ( SP800-38C ), GCM ( SP800-38D ), CWC , EAX , IAPM y OCB .
Los modos de funcionamiento están definidos por una serie de organismos de normalización reconocidos a nivel nacional e internacional. Las organizaciones de estándares notables incluyen NIST , ISO (con ISO / IEC 10116 [5] ), IEC , IEEE , ANSI e IETF .
Vector de inicialización (IV)
Un vector de inicialización (IV) o variable de inicio (SV) [5] es un bloque de bits que se utiliza en varios modos para aleatorizar el cifrado y, por lo tanto, producir textos cifrados distintos incluso si el mismo texto plano se cifra varias veces, sin necesidad de un proceso de cambio de clave más lento. [ cita requerida ]
Un vector de inicialización tiene requisitos de seguridad diferentes a los de una clave, por lo que el IV generalmente no necesita ser secreto. Para la mayoría de los modos de cifrado de bloques, es importante que un vector de inicialización nunca se reutilice bajo la misma clave, es decir, debe ser un nonce criptográfico . Muchos modos de cifrado de bloques tienen requisitos más estrictos, como el IV debe ser aleatorio o pseudoaleatorio . Algunos cifrados de bloque tienen problemas particulares con ciertos vectores de inicialización, como todo cero IV que no genera cifrado (para algunas claves).
Se recomienda revisar los requisitos IV relevantes para el modo de cifrado de bloques en particular en la especificación relevante, por ejemplo, SP800-38A .
Para CBC y CFB, la reutilización de un IV filtra información sobre el primer bloque de texto sin formato y sobre cualquier prefijo común compartido por los dos mensajes.
Para OFB y CTR, la reutilización de un IV provoca la reutilización del flujo de bits clave, lo que rompe la seguridad. [8] Esto se puede ver porque ambos modos crean efectivamente un flujo de bits que se XORed con el texto plano, y este flujo de bits depende de la clave y del IV solamente.
En el modo CBC, el IV debe ser impredecible ( aleatorio o pseudoaleatorio ) en el momento del cifrado; en particular, la práctica común (anteriormente) de reutilizar el último bloque de texto cifrado de un mensaje como IV para el siguiente mensaje es insegura (por ejemplo, este método fue utilizado por SSL 2.0). Si un atacante conoce el IV (o el bloque anterior de texto cifrado) antes de que se especifique el siguiente texto sin formato, puede verificar su conjetura sobre el texto sin formato de algún bloque que fue cifrado con la misma clave antes (esto se conoce como el ataque TLS CBC IV) . [9]
Para algunas claves, un vector de inicialización todo cero puede generar algunos modos de cifrado de bloque (CFB-8, OFB-8) para que el estado interno se atasque en todo cero. Para CFB-8, un IV de cero y un texto sin formato de cero, hace que 1/256 de las claves no generen cifrado, el texto sin formato se devuelve como texto cifrado. [10] Para OFB-8, el uso de todos los vectores de inicialización cero no generará cifrado para 1/256 de las claves. [11] El cifrado OFB-8 devuelve el texto sin cifrar de las claves afectadas.
Algunos modos (como AES-SIV y AES-GCM-SIV) están diseñados para ser más resistentes al uso indebido, es decir, resistentes a escenarios en los que la generación de aleatoriedad es defectuosa o está bajo el control del atacante.
- El vector de inicialización sintético (SIV) sintetiza un IV interno ejecutando una construcción de función pseudoaleatoria (PRF) llamada S2V en la entrada (datos adicionales y texto sin formato), lo que evita que los datos externos controlen directamente el IV. Los nonces / IV externos pueden introducirse en S2V como un campo de datos adicional.
- AES-GCM-SIV sintetiza un IV interno ejecutando el modo de autenticación POLYVAL Galois en la entrada (datos adicionales y texto sin formato), seguido de una operación AES.
Relleno
Un cifrado de bloque funciona en unidades de un tamaño fijo (conocido como tamaño de bloque ), pero los mensajes vienen en una variedad de longitudes. Por lo tanto, algunos modos (a saber, ECB y CBC ) requieren que el bloque final se rellene antes del cifrado. Existen varios esquemas de relleno . La más simple es agregar bytes nulos al texto sin formato para llevar su longitud a un múltiplo del tamaño del bloque, pero se debe tener cuidado de que se pueda recuperar la longitud original del texto sin formato; esto es trivial, por ejemplo, si el texto sin formato es una cadena de estilo C que no contiene bytes nulos excepto al final. Un poco más complejo es el método DES original , que consiste en agregar un solo bit , seguido de suficientes bits cero para completar el bloque; si el mensaje termina en un límite de bloque, se agregará un bloque de relleno completo. Los más sofisticados son los esquemas específicos de CBC, como el robo de texto cifrado o la terminación de bloque residual , que no causan ningún texto cifrado adicional, a expensas de cierta complejidad adicional. Schneier y Ferguson sugieren dos posibilidades, ambas simples: agregar un byte con valor 128 (hexadecimal 80), seguido de tantos cero bytes como sea necesario para llenar el último bloque, o rellenar el último bloque con n bytes, todos con valor n .
Los modos CFB, OFB y CTR no requieren ninguna medida especial para manejar mensajes cuyas longitudes no son múltiplos del tamaño del bloque, ya que los modos funcionan haciendo XOR del texto sin formato con la salida del cifrado del bloque. El último bloque parcial de texto sin formato se XOR con los primeros bytes del último bloque de flujo de claves , produciendo un bloque de texto cifrado final que es del mismo tamaño que el bloque de texto sin formato parcial final. Esta característica de los cifrados de flujo los hace adecuados para aplicaciones que requieren que los datos de texto cifrado tengan el mismo tamaño que los datos de texto sin formato originales, y para aplicaciones que transmiten datos en forma de flujo continuo donde no es conveniente agregar bytes de relleno.
Modos comunes
Modos de cifrado autenticado con datos adicionales (AEAD)
Se han diseñado varios modos de funcionamiento para combinar el secreto y la autenticación en una sola primitiva criptográfica. Ejemplos de tales modos son el encadenamiento de bloques de cifrado extendido (XCBC) [se necesita aclaración ] , [12] el encadenamiento de bloques de cifrado consciente de la integridad (IACBC) [se necesita aclaración ] , el modo paralelizable consciente de la integridad (IAPM), [13] OCB , EAX , CWC , CCM y GCM . Los modos de cifrado autenticados se clasifican como modos de paso único o modos de paso doble. Algunos algoritmos de encriptación autenticados de un solo paso , como el modo OCB , están gravados por patentes, mientras que otros fueron diseñados y liberados específicamente para evitar tal gravamen.
Además, algunos modos también permiten la autenticación de datos asociados no cifrados, y estos se denominan esquemas AEAD (cifrado autenticado con datos asociados). Por ejemplo, el modo EAX es un esquema AEAD de doble paso, mientras que el modo OCB es de un solo paso.
Galois / contador (GCM)
GCM | |
---|---|
Galois / contador | |
Cifrado paralelizable | sí |
Descifrado paralelizable | sí |
Acceso de lectura aleatorio | sí |
El modo Galois / contador (GCM) combina el conocido modo contador de cifrado con el nuevo modo de autenticación Galois. La característica clave es la facilidad de cálculo paralelo de la multiplicación de campo de Galois utilizada para la autenticación. Esta característica permite un mayor rendimiento que los algoritmos de cifrado.
GCM se define para cifrados de bloque con un tamaño de bloque de 128 bits. El código de autenticación de mensajes de Galois (GMAC) es una variante de solo autenticación del GCM que puede formar un código de autenticación de mensajes incremental. Tanto GCM como GMAC pueden aceptar vectores de inicialización de longitud arbitraria. GCM puede aprovechar al máximo el procesamiento paralelo y la implementación de GCM puede hacer un uso eficiente de una canalización de instrucciones o una canalización de hardware. El modo de operación CBC incurre en paradas en la tubería que obstaculizan su eficiencia y rendimiento.
Al igual que en CTR, los bloques se numeran secuencialmente, y luego este número de bloque se combina con un IV y se cifra con un cifrado de bloque E , generalmente AES. El resultado de esta encriptación luego se XOR con el texto sin formato para producir el texto cifrado. Como 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 cifrado.
Los bloques de texto cifrado se consideran coeficientes de un polinomio que luego se evalúa en un punto dependiente de clave H , usando aritmética de campo finito . Luego, el resultado se encripta, produciendo una etiqueta de autenticación que se puede utilizar para verificar la integridad de los datos. El texto cifrado contiene el IV, el texto cifrado y la etiqueta de autenticación.
Contador con código de autenticación de mensajes de encadenamiento de bloques de cifrado (CCM)
El contador con código de autenticación de mensajes de encadenamiento de bloques de cifrado (contador con CBC-MAC; CCM) es unalgoritmo de cifrado autenticado diseñado para proporcionar tanto autenticación como confidencialidad . El modo CCM solo se define para cifrados de bloque con una longitud de bloque de 128 bits. [14] [15]
Vector de inicialización sintético (SIV)
El vector de inicialización sintético (SIV) es un modo de cifrado de bloque resistente al uso indebido.
SIV sintetiza un IV interno utilizando la función pseudoaleatoria S2V. S2V es un hash con clave que se basa en CMAC y la entrada a la función es:
- Datos autenticados adicionales (se admiten cero, uno o muchos campos AAD)
- Texto sin formato
- Clave de autenticación (K 1 ).
SIV cifra la salida S2V y el texto sin formato utilizando AES-CTR, codificado con la clave de cifrado (K 2 ).
SIV puede admitir cifrado autenticado externo basado en nonce, en cuyo caso uno de los campos de datos autenticados se utiliza para este propósito. RFC5297 [16] especifica que, para fines de interoperabilidad, el último campo de datos autenticado debe utilizarse nonce externo.
Debido al uso de dos claves, la clave de autenticación K 1 y la clave de cifrado K 2 , los esquemas de denominación para las variantes SIV AEAD pueden generar cierta confusión; por ejemplo AEAD_AES_SIV_CMAC_256 se refiere a AES-SIV con dos claves AES-128 y no AES-256.
AES-GCM-SIV
AES-GCM-SIV es un modo de funcionamiento para el Estándar de cifrado avanzado que proporciona un rendimiento similar al modo Galois / contador, así como resistencia al uso indebido en caso de reutilización de un nonce criptográfico . La construcción se define en RFC 8452. [17]
AES-GCM-SIV sintetiza el IV interno. Deriva un hash de los datos autenticados adicionales y el texto sin formato utilizando la función hash POLYVAL Galois. Luego, el hash se encripta con una clave AES y se usa como etiqueta de autenticación y vector de inicialización AES-CTR.
AES-GCM-SIV es una mejora con respecto al algoritmo GCM-SIV con un nombre muy similar , con algunos cambios muy pequeños (por ejemplo, cómo se inicializa AES-CTR), pero que ofrece beneficios prácticos para su seguridad "Esta adición permite cifrar hasta 2 50 mensajes con la misma clave, en comparación con la limitación significativa de solo 2 32 mensajes permitidos con GCM-SIV ". [18]
Modos solo de confidencialidad
Se han definido muchos modos de funcionamiento. Algunos de ellos se describen a continuación. El propósito de los modos de cifrado es enmascarar los patrones que existen en los datos cifrados, como se ilustra en la descripción de la debilidad de ECB .
Los diferentes modos de cifrado enmascaran los patrones conectando en cascada las salidas del bloque de cifrado u otras variables deterministas globalmente en el bloque de cifrado posterior. Las entradas de los modos enumerados se resumen en la siguiente tabla:
Modo | Fórmulas | Texto cifrado | |
---|---|---|---|
Libro de códigos electrónico | (BCE) | Y i = F (Texto llano i , Clave) | Y yo |
Encadenamiento de bloques de cifrado | (CBC) | Y i = PlainText i XOR texto cifrado i -1 | F (Y, tecla); Texto cifrado 0 = IV |
Propagación de CBC | (PCBC) | Y i = Texto sin formato i XOR (Texto cifrado i −1 XOR Texto sin formato i −1 ) | F (Y, tecla); Texto cifrado 0 = IV |
Comentarios de cifrado | (CFB) | Y i = Texto cifrado i −1 | Texto sin formato XOR F (Y, clave); Texto cifrado 0 = IV |
Comentarios de salida | (DE B) | Y i = F (Y i −1 , Clave); Y 0 = F (IV, clave) | Texto sin formato XOR Y i |
Encimera | (CTR) | Y i = F (IV + g ( i ), clave); IV = token () | Texto sin formato XOR Y i |
Nota: g ( i ) es cualquier función determinista, a menudo la función de identidad .
Libro de códigos electrónico (ECB)
ECB | |
---|---|
Libro de códigos electrónico | |
Cifrado paralelizable | sí |
Descifrado paralelizable | sí |
Acceso de lectura aleatorio | sí |
El más simple de los modos de cifrado es el modo de libro de códigos electrónico (ECB) (llamado así por los libros de códigos físicos convencionales [19] ). El mensaje se divide en bloques y cada bloque se cifra por separado.
La desventaja de este método es la falta de difusión . Debido a que ECB encripta bloques de texto sin formato idénticos en bloques de texto cifrado idénticos , no oculta bien los patrones de datos. No se recomienda el uso de ECB en protocolos criptográficos. [20] [21] [22]
Un ejemplo sorprendente del grado en que ECB puede dejar patrones de datos de texto sin formato en el texto cifrado se puede ver cuando se usa el modo ECB para encriptar una imagen de mapa de bits que usa grandes áreas de color uniforme. Si bien el color de cada píxel individual está encriptado, la imagen general aún se puede discernir, ya que el patrón de píxeles de colores idénticos en el original permanece en la versión encriptada.
El modo ECB también puede hacer que los protocolos sin protección de integridad sean aún más susceptibles a los ataques de repetición , ya que cada bloque se descifra exactamente de la misma manera. [ cita requerida ]
Encadenamiento de bloques de cifrado (CBC)
CBC | |
---|---|
Encadenamiento de bloques de cifrado | |
Cifrado paralelizable | No |
Descifrado paralelizable | sí |
Acceso de lectura aleatorio | sí |
Ehrsam, Meyer, Smith y Tuchman inventaron el modo de operación de encadenamiento de bloques de cifrado (CBC) en 1976. [23] En el modo CBC, cada bloque de texto plano se XOR con el bloque de texto cifrado anterior antes de ser cifrado. De esta forma, cada bloque de texto cifrado depende de todos los bloques de texto plano procesados hasta ese momento. Para que cada mensaje sea único, se debe utilizar un vector de inicialización en el primer bloque.
Si el primer bloque tiene índice 1, la fórmula matemática para el cifrado CBC es
mientras que la fórmula matemática para el descifrado CBC es
Ejemplo
CBC ha sido el modo de funcionamiento más utilizado. Sus principales inconvenientes son que el cifrado es secuencial (es decir, no se puede paralelizar) y que el mensaje debe rellenarse a un múltiplo del tamaño del bloque de cifrado. Una forma de manejar este último problema es mediante el método conocido como robo de texto cifrado . Tenga en cuenta que un cambio de un bit en un texto plano o vector de inicialización (IV) afecta a todos los siguientes bloques de texto cifrado.
El descifrado con el IV incorrecto hace que el primer bloque de texto sin formato esté dañado, pero los siguientes bloques de texto sin formato serán correctos. Esto se debe a que a cada bloque se le aplica XOR con el texto cifrado del bloque anterior, no el texto plano, por lo que no es necesario descifrar el bloque anterior antes de usarlo como IV para descifrar el actual. Esto significa que un bloque de texto sin formato se puede recuperar de dos bloques adyacentes de texto cifrado. Como consecuencia, el descifrado se puede paralelizar. Tenga en cuenta que un cambio de un bit en el texto cifrado provoca una corrupción completa del bloque correspondiente de texto sin formato e invierte el bit correspondiente en el siguiente bloque de texto sin formato, pero el resto de los bloques permanecen intactos. Esta peculiaridad se explota en diferentes ataques de oráculo de relleno , como POODLE .
Los vectores de inicialización explícitos [24] aprovechan esta propiedad anteponiendo un solo bloque aleatorio al texto sin formato. El cifrado se realiza normalmente, excepto que no es necesario comunicar el IV a la rutina de descifrado. Cualquiera que sea el uso de descifrado IV, sólo el bloque aleatorio está "dañado". Se puede descartar de forma segura y el resto del descifrado es el texto sin formato original.
Propagación del encadenamiento de bloques de cifrado (PCBC)
PCBC | |
---|---|
Propagación del encadenamiento de bloques de cifrado | |
Cifrado paralelizable | No |
Descifrado paralelizable | No |
Acceso de lectura aleatorio | No |
El modo de encadenamiento de bloques de cifrado de propagación [25] o de encadenamiento de bloques de cifrado de texto plano [26] fue diseñado para provocar que pequeños cambios en el texto cifrado se propaguen indefinidamente al descifrar, así como al cifrar. En el modo PCBC, a cada bloque de texto sin formato se le aplica XOR tanto con el bloque de texto sin formato anterior como con el bloque de texto cifrado anterior antes de ser cifrado. Al igual que con el modo CBC, se utiliza un vector de inicialización en el primer bloque.
Los algoritmos de cifrado y descifrado son los siguientes:
PCBC se usa en Kerberos v4 y WASTE , sobre todo, pero por lo demás no es común. En un mensaje cifrado en modo PCBC, si se intercambian dos bloques de texto cifrado adyacentes, esto no afecta al descifrado de los bloques subsiguientes. [27] Por esta razón, PCBC no se utiliza en Kerberos v5.
Retroalimentación de cifrado (CFB)
CFB de bloque completo
CFB | |
---|---|
Comentarios de cifrado | |
Cifrado paralelizable | No |
Descifrado paralelizable | sí |
Acceso de lectura aleatorio | sí |
El modo de retroalimentación de cifrado (CFB), en su forma más simple, utiliza la salida completa del cifrado de bloque. En esta variación, es muy similar a CBC, convierte un cifrado de bloque en un cifrado de flujo de sincronización automática . El descifrado de CFB en esta variación es casi idéntico al cifrado de CBC realizado a la inversa:
CFB-1, CFB-8, CFB-64, CFB-128, etc.
NIST SP800-38A define CFB con un ancho de bits. [28] El modo CFB también requiere un parámetro entero, denotado s, tal que 1 ≤ s ≤ b. En la especificación del modo CFB a continuación, cada segmento de texto plano (Pj) y segmento de texto cifrado (Cj) consta de s bits. El valor de s a veces se incorpora al nombre del modo, por ejemplo, el modo CFB de 1 bit, el modo CFB de 8 bits, el modo CFB de 64 bits o el modo CFB de 128 bits.
Estos modos truncarán la salida del cifrado de bloque subyacente.
CFB-1 se considera que se sincroniza automáticamente y es resistente a la pérdida de texto cifrado; "Cuando se utiliza el modo CFB de 1 bit, la sincronización se restaura automáticamente b + 1 posiciones después del bit insertado o eliminado. Para otros valores de s en el modo CFB, y para los otros modos de confidencialidad en esta recomendación, la sincronización debe ser restaurado externamente ". (NIST SP800-38A). Es decir, la pérdida de 1 bit en un cifrado de bloque de 128 bits de ancho como AES hará que 129 bits no sean válidos antes de emitir bits válidos.
CFB también puede auto sincronizarse en algunos casos especiales distintos a los especificados. Por ejemplo, un cambio de un bit en CFB-128 con un cifrado de bloque de 128 bits subyacente, se volverá a sincronizar después de dos bloques. (Sin embargo, CFB-128, etc.no manejará la pérdida de bits con elegancia; una pérdida de un bit hará que el descifrador pierda la alineación con el cifrador)
CFB en comparación con otros modos
Al igual que el modo CBC, los cambios en el texto sin formato se propagan para siempre en el texto cifrado y el cifrado no se puede paralelizar. También como CBC, el descifrado se puede paralelizar.
CFB, OFB y CTR comparten dos ventajas sobre el modo CBC: el cifrado de bloque solo se usa en la dirección de cifrado, y el mensaje no necesita rellenarse a un múltiplo del tamaño del bloque de cifrado (aunque el robo de texto cifrado también se puede usar para Modo CBC para hacer innecesario el relleno).
Comentarios de salida (OFB)
DE B | |
---|---|
Comentarios de salida | |
Cifrado paralelizable | No |
Descifrado paralelizable | No |
Acceso de lectura aleatorio | No |
El modo de retroalimentación de salida (OFB) convierte un cifrado de bloque en un cifrado de flujo síncrono . Genera bloques de flujo de claves , que luego se XORed con los bloques de texto plano para obtener el texto cifrado. Al igual que con otros cifrados de flujo, invertir un poco en el texto cifrado produce un bit invertido en el texto sin formato en la misma ubicación. Esta propiedad permite que muchos códigos de corrección de errores funcionen normalmente incluso cuando se aplican antes del cifrado.
Debido a la simetría de la operación XOR, el cifrado y el descifrado son exactamente iguales:
Cada operación de cifrado de bloque de retroalimentación de salida depende de todas las anteriores, por lo que no se puede realizar en paralelo. Sin embargo, debido a que el texto sin formato o el texto cifrado solo se usa para el XOR final, las operaciones de cifrado en bloque se pueden realizar por adelantado, lo que permite que el paso final se realice en paralelo una vez que el texto sin formato o el texto cifrado están disponibles.
Es posible obtener un flujo de claves en modo OFB utilizando el modo CBC con una cadena constante de ceros como entrada. Esto puede ser útil porque permite el uso de implementaciones de hardware rápidas del modo CBC para el cifrado del modo OFB.
El uso del modo OFB con un bloque parcial como retroalimentación como el modo CFB reduce la duración promedio del ciclo en un factor de 2 32 o más. Un modelo matemático propuesto por Davies y Parkin y corroborado por resultados experimentales mostró que solo con una retroalimentación completa se puede lograr una duración de ciclo promedio cercana al máximo obtenible. Por esta razón, el soporte para comentarios truncados se eliminó de la especificación de OFB. [29]
Contador (CTR)
CTR | |
---|---|
Encimera | |
Cifrado paralelizable | sí |
Descifrado paralelizable | sí |
Acceso de lectura aleatorio | sí |
- Nota: El modo CTR (CM) también se conoce como modo de contador de enteros (ICM) y modo de contador de enteros segmentados (SIC).
Como OFB, el modo contador convierte un cifrado de bloque en un cifrado de flujo . Genera el siguiente bloque de flujo de claves cifrando valores sucesivos de un "contador". El contador puede ser cualquier función que produzca una secuencia de la que se garantiza que no se repetirá durante mucho tiempo, aunque un contador real de incremento en uno es el más simple y el más popular. El uso de una función de entrada determinista simple solía ser controvertido; los críticos argumentaron que "exponer deliberadamente un criptosistema a una entrada sistemática conocida representa un riesgo innecesario". [30] Sin embargo, hoy en día el modo CTR es ampliamente aceptado y cualquier problema se considera una debilidad del cifrado de bloque subyacente, que se espera que sea seguro independientemente del sesgo sistémico en su entrada. [31] Junto con CBC, el modo CTR es uno de los dos modos de cifrado de bloques recomendados por Niels Ferguson y Bruce Schneier. [32]
El modo CTR fue introducido por Whitfield Diffie y Martin Hellman en 1979. [31]
El modo CTR tiene características similares a OFB, pero también permite una propiedad de acceso aleatorio durante el descifrado. El modo CTR es adecuado para operar en una máquina multiprocesador donde los bloques se pueden cifrar en paralelo. Además, no sufre el problema de ciclo corto que puede afectar a OFB. [33]
Si el IV / nonce es aleatorio, entonces se pueden combinar con el contador usando cualquier operación invertible (concatenación, adición o XOR) para producir el bloque de contador único real para el cifrado. En caso de un nonce no aleatorio (como un contador de paquetes), el nonce y el contador deben concatenarse (por ejemplo, almacenar el nonce en los 64 bits superiores y el contador en los 64 bits inferiores de un bloque contador de 128 bits) . El simple hecho de agregar o XORing el nonce y el contador en un solo valor rompería la seguridad bajo un ataque de texto plano elegido en muchos casos, ya que el atacante puede manipular todo el par IV-contador para causar una colisión. Una vez que un atacante controla el par IV-contador y el texto plano, XOR del texto cifrado con el texto plano conocido produciría un valor que, cuando se aplicara XOR con el texto cifrado del otro bloque que comparte el mismo par IV-contador, descifraría ese bloque. [34]
Tenga en cuenta que el nonce en este diagrama es equivalente al vector de inicialización (IV) en los otros diagramas. Sin embargo, si la información de desplazamiento / ubicación está dañada, será imposible recuperar parcialmente dichos datos debido a la dependencia del desplazamiento de bytes.
Propagación de errores
Las propiedades de "propagación de errores" describen cómo se comporta un descifrado durante los errores de bit, es decir, cómo el error en un bit cae en cascada a diferentes bits descifrados.
Los errores de bits pueden ocurrir aleatoriamente debido a errores de transmisión.
Los errores de bits pueden ocurrir intencionalmente en los ataques.
- Los errores de bits específicos en los modos de cifrado de flujo (OFB, CTR, etc.) es trivial y afectan solo al bit específico previsto.
- Errores de bits específicos en modos más complejos como (por ejemplo, CBC): el ataque de texto cifrado elegido adaptativo puede combinar inteligentemente muchos errores de bits específicos diferentes para romper el modo de cifrado. En el ataque Padding Oracle , CBC se puede descifrar en el ataque adivinando secretos de cifrado basados en respuestas de error. La variante de ataque Padding Oracle "CBC-R" (CBC Reverse) permite al atacante construir cualquier mensaje válido.
Para el cifrado autenticado moderno (AEAD) o los protocolos con códigos de autenticación de mensajes encadenados en el orden MAC-Then-Encrypt, cualquier error de bit debe anular completamente el descifrado y no debe generar ningún error de bit específico para el descifrador. Es decir, si el descifrado se realizó correctamente, no debería haber ningún error de bit. Como tal, la propagación de errores es un tema menos importante en los modos de cifrado modernos que en los modos tradicionales de solo confidencialidad.
Modo | Efecto de los errores de bits en C i | Efecto de los errores de bits en el IV |
---|---|---|
ECB | Errores de bits aleatorios en P i | No aplica |
CBC | Errores de bit aleatorios en P i Errores de bit específicos en P i + 1 | Errores de bit específicos en el descifrado de C 1 |
CFB | Errores de bits específicos en P i Errores de bits aleatorios en P i + 1 | Errores de bits aleatorios en el descifrado de C 1 |
DE B | Errores de bit específicos en P i | Errores de bits aleatorios en el descifrado de C 1 , C 2 , .., C n |
CTR | Errores de bit específicos en P i | No aplicable (los errores de bit en el j-ésimo bloque contador, T j , dan como resultado errores de bit aleatorios en el descifrado de C j ) |
(Fuente: SP800-38A Tabla D.2: Resumen del efecto de los errores de bits en el descifrado)
Se podría observar, por ejemplo, que un error de un bloque en el texto cifrado transmitido daría como resultado un error de un bloque en el texto plano reconstruido para el cifrado en modo ECB, mientras que en el modo CBC tal error afectaría a dos bloques. Algunos sintieron que tal capacidad de recuperación era deseable frente a errores aleatorios (por ejemplo, ruido de línea), mientras que otros argumentaron que la corrección de errores aumentaba las posibilidades de que los atacantes manipularan maliciosamente un mensaje.
Sin embargo, cuando se usa la protección de integridad adecuada, tal error resultará (con alta probabilidad) en el rechazo de todo el mensaje. Si se desea resistencia a errores aleatorios, se deben aplicar códigos de corrección de errores al texto cifrado antes de la transmisión.
Otros modos y otras primitivas criptográficas
Se han sugerido muchos más modos de operación para cifrados en bloque. Algunos han sido aceptados, descritos completamente (incluso estandarizados) y están en uso. Otros se han encontrado inseguros y nunca deben usarse. Otros no se clasifican como confidencialidad, autenticidad o cifrado autenticado, por ejemplo , el modo de retroalimentación de clave y el hash Davies-Meyer .
NIST mantiene una lista de modos propuestos para cifrado de bloques en Modes Development . [28] [35]
El cifrado de disco a menudo utiliza modos de propósito especial diseñados específicamente para la aplicación. Los modos de cifrado de bloque estrecho modificables ( LRW , XEX y XTS ) y los modos de cifrado de bloque ancho ( CMC y EME ) están diseñados para cifrar de forma segura sectores de un disco (consulte la teoría de cifrado de disco ).
Muchos modos usan un vector de inicialización (IV) que, dependiendo del modo, puede tener requisitos como ser usado solo una vez (un nonce) o ser impredecible antes de su publicación, etc. Reutilizar un IV con la misma clave en CTR, GCM o el modo OFB da como resultado XORing el mismo flujo de claves con dos o más textos sin formato, un claro uso indebido de un flujo, con una pérdida catastrófica de seguridad. Los modos de cifrado autenticados deterministas, como el algoritmo de ajuste de clave NIST y el modo AEAD de SIV (RFC 5297), no requieren un IV como entrada y devuelven el mismo texto cifrado y etiqueta de autenticación cada vez para un texto sin formato y una clave determinados. Otros modos IV resistentes al mal uso, como AES-GCM-SIV, se benefician de una entrada IV, por ejemplo, en la cantidad máxima de datos que se pueden cifrar de forma segura con una clave, sin fallar catastróficamente si el mismo IV se usa varias veces.
Los cifrados en bloque también se pueden utilizar en otros protocolos criptográficos . Por lo general, se utilizan en modos de funcionamiento similares a los modos de bloque descritos aquí. Como ocurre con todos los protocolos, para ser criptográficamente seguro, se debe tener cuidado de diseñar estos modos de operación correctamente.
Hay varios esquemas que usan un cifrado de bloque para construir una función hash criptográfica . Consulte la función de compresión unidireccional para obtener descripciones de varios de estos métodos.
También se pueden construir generadores de números pseudoaleatorios criptográficamente seguros (CSPRNG) utilizando cifrados en bloque.
Los códigos de autenticación de mensajes (MAC) a menudo se crean a partir de cifrados en bloque. CBC-MAC , OMAC y PMAC son ejemplos.
Ver también
|
|
Referencias
- ^ Grupo de tecnología de seguridad (STG) de la División de seguridad informática del NIST (CSD) (2013). "Bloquear modos de cifrado" . Kit de herramientas criptográficas . NIST. Archivado desde el original el 6 de noviembre de 2012 . Consultado el 12 de abril de 2013 .
- ^ a b Ferguson, N .; Schneier, B .; Kohno, T. (2010). Ingeniería criptográfica: principios de diseño y aplicaciones prácticas . Indianápolis: Wiley Publishing, Inc. págs. 63, 64. ISBN 978-0-470-47424-2.
- ^ Grupo de tecnología de seguridad (STG) de la División de seguridad informática del NIST (CSD) (2013). "Modos propuestos" . Kit de herramientas criptográficas . NIST. Archivado desde el original el 2 de abril de 2013 . Consultado el 14 de abril de 2013 .
- ^ Alfred J. Menezes; Paul C. van Oorschot; Scott A. Vanstone (1996). Manual de criptografía aplicada . Prensa CRC. págs. 228-233 . ISBN 0-8493-8523-7.
- ^ a b c "ISO / CEI 10116: 2006 - Tecnología de la información - Técnicas de seguridad - Modos de funcionamiento para un cifrado en bloque de n bits" . Catálogo de normas ISO . 2006. Archivado desde el original el 17 de marzo de 2012.
- ^ Conrad, Eric; Misenar, Seth; Feldman, Joshua (1 de enero de 2017), Conrad, Eric; Misenar, Seth; Feldman, Joshua (eds.), "Capítulo 3 - Dominio 3: Ingeniería de seguridad" , Onceava hora CISSP® (tercera edición) , Syngress, págs. 47–93, doi : 10.1016 / b978-0-12-811248-9.00003- 6 , ISBN 978-0-12-811248-9, consultado el 1 de noviembre de 2020
- ^ Grupo de tecnología de seguridad (STG) de la División de seguridad informática del NIST (CSD) (2013). "Modos actuales" . Kit de herramientas criptográficas . NIST. Archivado desde el original el 2 de abril de 2013 . Consultado el 12 de abril de 2013 .
- ^ "Reutilización de cifrado de flujo: un ejemplo gráfico" . Cryptosmith LLC. 31 de mayo de 2008. Archivado desde el original el 25 de enero de 2015 . Consultado el 7 de enero de 2015 .
- ^ B. Moeller (20 de mayo de 2004), Security of CBC Ciphersuites en SSL / TLS: Problemas y contramedidas , archivado desde el original el 30 de junio de 2012
- ^ Tervoort, Tom. "Zerologon: compromiso del controlador de dominio no autenticado subvirtiendo la criptografía Netlogon (CVE-2020-1472)" . Secura . Consultado el 14 de octubre de 2020 .
- ^ Blaufish. "Netlogon CFB8 considerado perjudicial. OFB8 también" . Consultado el 14 de octubre de 2020 .
- ^ Gligor, Virgil D .; Donescu, Pompiliu (2002). Matsui, M. (ed.). Autenticación y encriptación rápida: Modos de encriptación XCBC y Autenticación XECB (PDF) . Cifrado rápido de software 2001. Apuntes de conferencias en Ciencias de la Computación. 2355 . Berlín: Springer. págs. 92-108. doi : 10.1007 / 3-540-45473-X_8 . ISBN 978-3-540-43869-4.
- ^ Jutla, Charanjit S. (mayo de 2001). Modos de cifrado con integridad de mensajes casi gratuita (PDF) . Eurocrypt 2001. Lecture Notes in Computer Science. 2045 . Saltador. doi : 10.1007 / 3-540-44987-6_32 .
- ^ Dworkin, Morris (mayo de 2004). Recomendación para los modos de operación de cifrado en bloque: el modo CCM para autenticación y confidencialidad (PDF) (informe técnico). Publicaciones especiales del NIST. NIST . doi : 10.6028 / NIST.SP.800-38C . 800-38C.
- ^ Whiting, D .; Housley, R .; Ferguson, N. (septiembre de 2003). Contador con CBC-MAC (CCM) . IETF . doi : 10.17487 / RFC3610 . RFC 3610 .
- ^ Harkins, Dan. "Cifrado autenticado por vector de inicialización sintética (SIV) mediante el estándar de cifrado avanzado (AES)" . Consultado el 21 de octubre de 2020 .
- ^ Gueron, S. (abril de 2019). AES-GCM-SIV: cifrado autenticado resistente al uso indebido de Nonce . IETF . doi : 10.17487 / RFC8452 . RFC 8452 . Consultado el 14 de agosto de 2019 .
- ^ Gueron, Shay; Langley, Adam; Lindell, Yehuda (14 de diciembre de 2018). "AES-GCM-SIV: Especificación y análisis" . Archivo ePrint de criptología . Informe (2017/168) . Consultado el 19 de octubre de 2020 .
- ^ "Recomendación para modos de operación de cifrado en bloque" (PDF) . NIST.gov . NIST. pag. 9. Archivado (PDF) desde el original el 29 de marzo de 2017 . Consultado el 1 de abril de 2017 .
- ^ Menezes, Alfred J .; van Oorschot, Paul C .; Vanstone, Scott A. (2018). Manual de criptografía aplicada . pag. 228.
- ^ Dam, Kenneth W .; Lin, Herbert S. (1996). El papel de la criptografía en la protección de la sociedad de la información . pag. 132.
- ^ Schneier, Bruce (2015). Criptografía Aplicada: Protocolos, Algoritmos y Código Fuente en C . pag. 208.
- ^ William F. Ehrsam, Carl HW Meyer, John L. Smith, Walter L. Tuchman, "Detección de errores de transmisión y verificación de mensajes por encadenamiento de bloques", Patente estadounidense 4074066, 1976.
- ^ "El Protocolo de Seguridad de la Capa de Transporte (TLS) Versión 1.1" . pag. 20. Archivado desde el original el 7 de enero de 2015 . Consultado el 7 de enero de 2015 .
- ^ "Preguntas frecuentes de Kryptographie: Frage 84: ¿Qué son los modos Contador y PCBC?" . www.iks-jena.de . Archivado desde el original el 16 de julio de 2012 . Consultado el 28 de abril de 2018 .
- ^ Kaufman, C .; Perlman, R .; Speciner, M. (2002). Seguridad de la red (2ª ed.). Upper Saddle River, Nueva Jersey: Prentice Hall. pag. 319. ISBN 0130460192.
- ^ Kohl, J. (1990). "El uso de cifrado en Kerberos para la autenticación de red" (PDF) . Actas, Crypto '89 . Berlín: Springer. ISBN 0387973176. Archivado desde el original (PDF) el 12 de junio de 2009.
- ^ a b (NIST), Autor: Morris Dworkin (2001). "SP 800-38A, Recomendación para modos de operación de cifrado de bloques: métodos y técnicas" (PDF) . csrc.nist.gov . doi : 10.6028 / NIST.SP.800-38A . Archivado (PDF) desde el original el 28 de agosto de 2017 . Consultado el 28 de abril de 2018 .
- ^ Davies, DW; Parkin, GIP (1983). "El tamaño de ciclo promedio del flujo de claves en el cifrado de retroalimentación de salida". Avances en criptología, Actas de CRYPTO 82 . Nueva York: Plenum Press. págs. 263-282. ISBN 0306413663.
- ^ Jueneman, Robert R. (1983). "Análisis de ciertos aspectos del modo de retroalimentación de salida". Avances en criptología, Actas de CRYPTO 82 . Nueva York: Plenum Press. págs. 99-127. ISBN 0306413663.
- ^ a b Lipmaa, Helger; Wagner, David; Rogaway, Phillip (2000). "Comentarios al NIST sobre los modos de funcionamiento AES: cifrado en modo CTR" (PDF) . Archivado (PDF) desde el original el 26 de febrero de 2015.
- ^ Ferguson, Niels; Schneier, Bruce; Kohno, Tadayoshi (2010). Ingeniería de Criptografía . pag. 71.
- ^ "Modos de cifrado de bloques básicos" . www.quadibloc.com . Archivado desde el original el 24 de octubre de 2017 . Consultado el 28 de abril de 2018 .
- ^ "Criptografía I" . Coursera . Archivado desde el original el 23 de marzo de 2018 . Consultado el 28 de abril de 2018 .
- ^ "Desarrollo de modos - Técnicas de cifrado de bloques - CSRC" . División de Seguridad Informática, Laboratorio de Tecnología de la Información, Instituto Nacional de Estándares y Tecnología, Departamento de Comercio de EE. UU. 4 de enero de 2017. Archivado desde el original el 4 de septiembre de 2017 . Consultado el 28 de abril de 2018 .