En criptografía, un modo de operación de cifrado de bloques es un algoritmo que utiliza un cifrado de bloques para proporcionar seguridad de la información, como confidencialidad o autenticidad . [1] Un cifrado de bloques por sí solo 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 mayores que un bloque. [3] [4] [5]
La mayoría de los modos requieren una secuencia binaria única, a menudo llamada vector de inicialización (IV), para cada operación de cifrado. El IV no debe repetirse y, en algunos modos, también debe ser aleatorio. El vector de inicialización se utiliza para garantizar que se produzcan textos cifrados distintos incluso cuando el mismo texto sin formato se cifra varias veces de forma independiente con la misma clave . [6] Los cifrados de bloque pueden ser capaces de operar 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 bloque operan en bloques completos y requieren que el fragmento de datos final se rellene hasta un bloque completo si es más pequeño que el tamaño de bloque actual. [2] Sin embargo, existen modos que no requieren relleno porque utilizan efectivamente un cifrado de bloque como un cifrado de flujo .
Históricamente, los modos de cifrado se han estudiado ampliamente en relación con sus propiedades de propagación de errores en diversos escenarios de modificación de datos. Los desarrollos posteriores consideraron la protección de la integridad como un objetivo criptográfico completamente independiente. Algunos modos de operación modernos combinan la confidencialidad y la autenticidad de una manera eficiente y se conocen como modos de cifrado autenticados . [7]
Los primeros modos de operación, ECB, CBC, OFB y CFB (ver más abajo para todos), datan de 1981 y fueron especificados en FIPS 81, DES Modes of Operation . En 2001, el Instituto Nacional de Estándares y Tecnología de EE. UU. (NIST) revisó su lista de modos de operación aprobados incluyendo AES como un cifrado de bloque y agregando el modo CTR en SP800-38A, Recommendation for Block Cipher Modes of Operation . Finalmente, en enero de 2010, NIST agregó XTS-AES en SP800-38E, Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on Storage Devices . 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 de bloques ECB, CBC, OFB, CFB, CTR y XTS proporcionan 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 mensajes independiente, como CBC-MAC , o una firma digital . La comunidad criptográfica reconoció la necesidad de garantías de integridad dedicadas y el NIST respondió con HMAC, CMAC y GMAC. HMAC se aprobó en 2002 como FIPS 198, el Código de autenticación de mensajes con clave hash (HMAC) , CMAC se publicó en 2005 bajo SP800-38B, Recomendación para modos de operación de cifrado de bloques: el modo CMAC para autenticación , y GMAC se formalizó en 2007 bajo SP800-38D, Recomendación para modos de operación de cifrado de bloques: modo Galois/Contador (GCM) y GMAC .
La comunidad criptográfica observó que la composición (combinación) de un modo de confidencialidad con un modo de autenticidad podía ser difícil y propensa a errores. Por lo tanto, comenzaron a proporcionar modos que combinaban la confidencialidad y la integridad de los datos en una única primitiva criptográfica (un algoritmo de cifrado). Estos modos combinados se denominan cifrado autenticado , AE o "authenc". Algunos 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. Entre las organizaciones de normalización más destacadas se incluyen NIST , ISO (con ISO/IEC 10116 [5] ), IEC , IEEE , ANSI y IETF .
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 simple se cifra varias veces, sin la necesidad de un proceso de reingreso 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 normalmente 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 que el IV debe ser aleatorio o pseudoaleatorio . Algunos cifrados de bloques tienen problemas particulares con ciertos vectores de inicialización, como que todos los IV sean cero y no generen cifrado (para algunas claves).
Se recomienda revisar los requisitos IV relevantes para el modo de cifrado de bloque particular en la especificación correspondiente, por ejemplo SP800-38A.
En el caso de CBC y CFB, la reutilización de un IV filtra cierta información sobre el primer bloque de texto sin formato y sobre cualquier prefijo común compartido por los dos mensajes.
En el caso de OFB y CTR, la reutilización de un IV provoca la reutilización del flujo de bits de la clave, lo que viola la seguridad. [8] Esto se puede observar porque ambos modos crean efectivamente un flujo de bits que se combina con el texto sin formato mediante XOR, y este flujo de bits depende solo de la clave y del IV.
En el modo CBC, el IV debe ser impredecible (aleatorio o pseudoaleatorio) en el momento del cifrado; en particular, la práctica (anteriormente) común 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 simple, puede verificar su suposición sobre el texto simple de algún bloque que fue cifrado con la misma clave anteriormente (esto se conoce como el ataque TLS CBC IV). [9]
Para algunas claves, un vector de inicialización de todos ceros puede generar algunos modos de cifrado de bloque (CFB-8, OFB-8) para que el estado interno quede bloqueado en todos ceros. Para CFB-8, un IV de todos ceros y un texto simple de todos ceros hacen que 1/256 de las claves no generen cifrado; el texto simple se devuelve como texto cifrado. [10] Para OFB-8, el uso de un vector de inicialización de todos ceros no generará cifrado para 1/256 de las claves. [11] El cifrado OFB-8 devuelve el texto simple sin cifrar para las claves afectadas.
Algunos modos (como AES-SIV y AES-GCM-SIV) están diseñados para ser más resistentes al uso indebido de nonce, es decir, resilientes a escenarios en los que la generación de aleatoriedad es defectuosa o está bajo el control del atacante.
Un cifrado de bloques 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 . El más simple es agregar bytes nulos al texto simple para aumentar 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 simple; esto es trivial, por ejemplo, si el texto simple 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 uno, 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 (hex 80), seguido de tantos bytes cero como sean necesarios 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 sean múltiplos del tamaño del bloque, ya que los modos funcionan mediante la operación XOR del texto simple con la salida del cifrado de bloque. El último bloque parcial de texto simple se somete a la operación XOR con los primeros bytes del último bloque de flujo de claves , lo que produce un bloque de texto cifrado final que tiene el mismo tamaño que el bloque parcial final de texto simple. Esta característica de los cifrados de flujo los hace adecuados para aplicaciones que requieren que los datos de texto cifrado cifrados tengan el mismo tamaño que los datos de texto simple originales, y para aplicaciones que transmiten datos en forma de transmisión en las que resulta inconveniente agregar bytes de relleno.
Se han diseñado varios modos de funcionamiento para combinar el secreto y la autenticación en un único primitivo criptográfico. Algunos ejemplos de estos modos son [12] el encadenamiento de bloques de cifrado con reconocimiento de integridad (IACBC) [ aclaración necesaria ] , el modo paralelizable con reconocimiento de integridad (IAPM), [13] OCB , EAX , CWC , CCM y GCM . Los modos de cifrado autenticados se clasifican como modos de una sola pasada o modos de doble pasada.
Además, algunos modos también permiten la autenticación de datos asociados no cifrados, y se denominan esquemas AEAD (cifrado autenticado con datos asociados). Por ejemplo, el modo EAX es un esquema AEAD de doble pasada, mientras que el modo OCB es de una sola pasada.
MCG | |
---|---|
Galois/contra | |
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 Galois de autenticación. La característica principal es la facilidad de cálculo paralelo de la multiplicación de campos 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 secuencia de instrucciones o una secuencia de hardware. El modo de operación CBC genera bloqueos de secuencia 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 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.
El contador con código de autenticación de mensajes en cadena de bloques de cifrado (contador con CBC-MAC; CCM) es un algoritmo de cifrado autenticado diseñado para proporcionar tanto autenticación como confidencialidad. El modo CCM solo está definido para cifrados de bloques con una longitud de bloque de 128 bits. [14] [15]
El vector de inicialización sintética (SIV) es un modo de cifrado de bloque resistente al uso indebido de nonce.
SIV sintetiza un IV interno utilizando la función pseudoaleatoria S2V. S2V es un hash con clave basado en CMAC y la entrada a la función es:
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 basado en nonce externo, en cuyo caso se utiliza uno de los campos de datos autenticados para este propósito. RFC5297 [16] especifica que, para fines de interoperabilidad, el último campo de datos autenticado debe ser un 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 nombres 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 es un modo de funcionamiento del Estándar de cifrado avanzado que ofrece 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 de Galois de POLYVAL. Luego, el hash se cifra en una clave AES y se utiliza como etiqueta de autenticación y vector de inicialización AES-CTR.
AES-GCM-SIV es una mejora sobre el algoritmo de nombre muy similar GCM-SIV , con unos pocos cambios muy pequeños (por ejemplo, cómo se inicializa AES-CTR), pero que produce 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 que se permitían con GCM-SIV". [18]
Se han definido muchos modos de funcionamiento. Algunos de ellos se describen a continuación. El objetivo 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 del ECB.
Los distintos modos de cifrado enmascaran patrones mediante la transmisión en cascada de las salidas del bloque de cifrado u otras variables deterministas globales al bloque de cifrado subsiguiente. 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 sin formato i , Clave) | Yo yo |
Encadenamiento de bloques cifrados | (CBC) | Y i = Texto simple i XOR Texto cifrado i −1 | F(Y, Clave); Texto cifrado 0 = IV |
Propagación del CBC | (PCB) | Y i = Texto simple i XOR (Texto cifrado i −1 XOR Texto simple i −1 ) | F(Y, Clave); Texto cifrado 0 = IV |
Retroalimentación cifrada | (CFB) | Y i = Texto cifrado i −1 | Texto simple XOR F(Y, Clave); Texto cifrado 0 = IV |
Retroalimentación de salida | (OFB) | 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 identidad .
BCE | |
---|---|
Libro de códigos electrónico | |
Cifrado paralelizable | Sí |
Descifrado paralelizable | Sí |
Acceso de lectura aleatorio | Sí |
El modo de cifrado más simple es el modo de libro de códigos electrónico (ECB, por sus siglas en inglés) (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. No se recomienda el uso de ECB en protocolos criptográficos: la desventaja de este método es la falta de difusión , ya que no oculta los patrones de datos cuando cifra bloques de texto simple idénticos en bloques de texto cifrado idénticos . [20] [21] [22]
Un ejemplo sorprendente del grado en que el ECB puede dejar patrones de datos de texto simple en el texto cifrado se puede ver cuando se utiliza el modo ECB para cifrar una imagen de mapa de bits que contiene grandes áreas de color uniforme. Si bien se supone que el color de cada píxel individual ha sido cifrado, la imagen general aún se puede distinguir, ya que el patrón de píxeles de color idéntico en el original sigue siendo visible en la versión cifrada.
El modo ECB también puede hacer que los protocolos sin protección de integridad sean aún más susceptibles a ataques de repetición , ya que cada bloque se descifra exactamente de la misma manera. [ cita requerida ]
CBC | |
---|---|
Encadenamiento de bloques cifrados | |
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 cifrados (CBC) en 1976. [23] En el modo CBC, cada bloque de texto simple se combina con el bloque de texto cifrado anterior antes de ser cifrado. De esta manera, cada bloque de texto cifrado depende de todos los bloques de texto simple 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 de CBC es
El CBC ha sido el modo de operación más comúnmente utilizado. Sus principales desventajas son que el cifrado es secuencial (es decir, no se puede paralelizar) y que el mensaje debe rellenarse hasta 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 simple o vector de inicialización (IV) afecta a todos los bloques de texto cifrado siguientes.
Descifrar con el IV incorrecto hace que el primer bloque de texto simple esté corrupto, pero los bloques de texto simple subsiguientes serán correctos. Esto se debe a que cada bloque se combina con el texto cifrado del bloque anterior, no con el texto simple, por lo que no es necesario descifrar el bloque anterior antes de usarlo como IV para descifrar el actual. Esto significa que se puede recuperar un bloque de texto simple de dos bloques adyacentes de texto cifrado. Como consecuencia, se puede paralelizar el descifrado. Tenga en cuenta que un cambio de un bit en el texto cifrado causa una corrupción completa del bloque correspondiente de texto simple e invierte el bit correspondiente en el siguiente bloque de texto simple, 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 al anteponer un único bloque aleatorio al texto simple. El cifrado se realiza de forma normal, excepto que no es necesario comunicar el IV a la rutina de descifrado. Cualquiera que sea el IV que se utilice para el descifrado, solo el bloque aleatorio se "corrompe". Se puede descartar de forma segura y el resto del descifrado es el texto simple original.
PCBC | |
---|---|
Propagación de encadenamiento de bloques de cifrado | |
Cifrado paralelizable | No |
Descifrado paralelizable | No |
Acceso de lectura aleatorio | No |
El modo de encadenamiento de bloques de cifrado propagado [25] o encadenamiento de bloques de cifrado de texto simple [26] fue diseñado para hacer que pequeños cambios en el texto cifrado se propaguen indefinidamente al descifrar, así como al cifrar. En el modo PCBC, cada bloque de texto simple se combina con el bloque de texto simple anterior y el bloque de texto cifrado anterior antes de cifrarse. Al igual que con el modo CBC, se utiliza un vector de inicialización en el primer bloque. A diferencia de CBC, descifrar PCBC con el IV (vector de inicialización) incorrecto hace que todos los bloques de texto simple se corrompan.
Los algoritmos de cifrado y descifrado son los siguientes:
PCBC se utiliza 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 el descifrado de los bloques subsiguientes. [27] Por este motivo, PCBC no se utiliza en Kerberos v5.
Banco de la Bahía de Córcega | |
---|---|
Retroalimentación cifrada | |
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 toda la salida del cifrado de bloque. En esta variación, es muy similar al CBC, ya que convierte un cifrado de bloque en un cifrado de flujo autosincronizado . El descifrado CFB en esta variación es casi idéntico al cifrado CBC realizado a la inversa:
NIST SP800-38A define CFB con un ancho de bits. [28] El modo CFB también requiere un parámetro entero, denotado s, de modo que 1 ≤ s ≤ b. En la especificación del modo CFB que se muestra a continuación, cada segmento de texto simple (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.
Se considera que el CFB-1 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 de esta recomendación, la sincronización debe restaurarse externamente". (NIST SP800-38A). Es decir, la pérdida de 1 bit en un cifrador de bloques de 128 bits de ancho como AES generará 129 bits no válidos antes de emitir bits válidos.
CFB también puede autosincronizarse en algunos casos especiales distintos de los especificados. Por ejemplo, un cambio de un bit en CFB-128 con un cifrado de bloque subyacente de 128 bits se volverá a sincronizar después de dos bloques. (Sin embargo, CFB-128, etc. no manejará la pérdida de bits de manera elegante; una pérdida de un bit hará que el descifrador pierda la alineación con el cifrador)
Al igual que en el modo CBC, los cambios en el texto sin formato se propagan indefinidamente en el texto cifrado y el cifrado no se puede paralelizar. También, al igual que en el modo CBC, el descifrado se puede paralelizar.
CFB, OFB y CTR comparten dos ventajas sobre el modo CBC: el cifrado de bloque solo se utiliza en la dirección de cifrado y no es necesario rellenar el mensaje hasta un múltiplo del tamaño del bloque de cifrado (aunque el robo de texto cifrado también se puede utilizar para el modo CBC para hacer que el relleno sea innecesario).
OBI | |
---|---|
Retroalimentación 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 bloques en un cifrado de flujo sincrónico . Genera bloques de flujo de claves , que luego se combinan con los bloques de texto simple para obtener el texto cifrado. Al igual que con otros cifrados de flujo, al invertir un bit en el texto cifrado se produce un bit invertido en el texto simple 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 y, por lo tanto, no se puede realizar en paralelo. Sin embargo, debido a que el texto simple o el texto cifrado solo se utilizan para el XOR final, las operaciones de cifrado de bloque se pueden realizar con anticipación, lo que permite que el paso final se realice en paralelo una vez que el texto simple 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 resultar útil, ya que permite el uso de implementaciones rápidas de hardware del modo CBC para el cifrado en modo OFB.
El uso del modo OFB con un bloqueo parcial como retroalimentación, como en el caso del modo CFB, reduce la longitud media 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 demostró que solo con una retroalimentación completa se puede lograr una longitud media del ciclo cercana al máximo obtenible. Por este motivo, se eliminó de la especificación de OFB el soporte para la retroalimentación truncada. [29]
CTR | |
---|---|
Encimera | |
Cifrado paralelizable | Sí |
Descifrado paralelizable | Sí |
Acceso de lectura aleatorio | Sí |
Al igual que OFB, el modo contador convierte un cifrador de bloques en un cifrador de flujo . Genera el siguiente bloque de flujo de claves cifrando los valores sucesivos de un "contador". El contador puede ser cualquier función que produzca una secuencia que se garantice que no se repetirá durante mucho tiempo, aunque un contador de incremento en uno real es el más simple y popular. El uso de una función de entrada determinista simple solía ser controvertido; los críticos argumentaban 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 cifrador de bloques 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 al 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 al OFB. [33]
Si el IV/nonce es aleatorio, entonces pueden combinarse con el contador usando cualquier operación invertible (concatenación, suma o XOR) para producir el bloque de contador único real para el cifrado. En el caso de un nonce no aleatorio (como un contador de paquetes), el nonce y el contador deben concatenarse (por ejemplo, almacenando el nonce en los 64 bits superiores y el contador en los 64 bits inferiores de un bloque de contador de 128 bits). Simplemente agregar o XORizar el nonce y el contador en un solo valor rompería la seguridad bajo un ataque de texto simple elegido en muchos casos, ya que el atacante puede ser capaz de manipular todo el par IV-contador para causar una colisión. Una vez que un atacante controla el par IV-contador y el texto simple, XOR del texto cifrado con el texto simple conocido produciría un valor que, cuando se XORiza 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.
Las propiedades de "propagación de errores" describen cómo se comporta un descifrado durante errores de bits, es decir, cómo el error en un bit se propaga a diferentes bits descifrados.
Los errores de bits pueden ocurrir intencionalmente en ataques o aleatoriamente debido a errores de transmisión.
En el caso de los protocolos de cifrado autenticados modernos (AEAD) o con códigos de autenticación de mensajes encadenados en el orden MAC-Then-Encrypt, cualquier error de bit debería abortar por completo el descifrado y no debería 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. Por lo tanto, 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 bit en C i | Efecto de los errores de bit en el IV o nonce |
---|---|---|
BCE | Errores de bits aleatorios en P i | — |
CBC | Errores de bits aleatorios en P i Errores de bits específicos en P i+1 | Errores de bit específicos en P 1 |
Banco de la Bahía de Córcega | Errores de bits específicos en P i Errores de bits aleatorios en P i+1 , …, hasta que se restablezca la sincronización | Errores de bits aleatorios en P 1 , …, hasta que se restablezca la sincronización |
OBI | Errores de bits específicos en P i | Errores de bits aleatorios en P 1 , P 2 , …, P n |
CTR | Errores de bits específicos en P i | Errores de bit aleatorios en P i para error de bit en el bloque de contador T i |
(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 simple reconstruido para el cifrado en modo ECB, mientras que en el modo CBC un error de este tipo afectaría a dos bloques. Algunos consideraron que esa resistencia era deseable ante errores aleatorios (por ejemplo, ruido en la línea), mientras que otros argumentaron que la corrección de errores aumentaba el alcance para que los atacantes manipularan maliciosamente un mensaje.
Sin embargo, cuando se utiliza una protección de integridad adecuada, un error de este tipo provocará (con una alta probabilidad) el rechazo de todo el mensaje. Si se desea resistencia a los errores aleatorios, se deben aplicar códigos de corrección de errores al texto cifrado antes de la transmisión.
Se han sugerido muchos más modos de funcionamiento para los cifrados de bloques. Algunos han sido aceptados, descritos en detalle (e incluso estandarizados) y se encuentran en uso. Otros se han considerado inseguros y nunca deberían utilizarse. Y otros no se clasifican como cifrados de confidencialidad, autenticidad o autenticación, por ejemplo, el modo de retroalimentación de clave y el algoritmo hash de Davies-Meyer .
El NIST mantiene una lista de modos propuestos para cifrados de bloques en Desarrollo de modos . [28] [35]
El cifrado de discos suele utilizar 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 del cifrado de discos ).
Muchos modos utilizan un vector de inicialización (IV) que, según el modo, puede tener requisitos como que solo se use una vez (un nonce) o que sea impredecible antes de su publicación, etc. Reutilizar un IV con la misma clave en modo CTR, GCM u OFB da como resultado la combinación XOR del mismo flujo de claves con dos o más textos sin formato, un claro mal uso de un flujo, con una pérdida catastrófica de seguridad. Los modos de cifrado autenticado determinista, como el algoritmo NIST Key Wrap y el modo SIV (RFC 5297) AEAD, 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 resistentes al mal uso de IV, como AES-GCM-SIV, se benefician de una entrada de 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 en bloque descritos aquí. Como ocurre con todos los protocolos, para que sean criptográficamente seguros, se debe tener cuidado de diseñar estos modos de funcionamiento correctamente.
Existen varios esquemas que utilizan un cifrado de bloques para crear 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 de bloques.
Los códigos de autenticación de mensajes (MAC) suelen construirse a partir de cifrados de bloques. Algunos ejemplos son CBC-MAC , OMAC y PMAC .
{{cite journal}}
: |first=
tiene nombre genérico ( ayuda )