Modo de operación de cifrado en bloque
En criptografía, un modo de operación de cifrado en bloque es un algoritmo que utiliza un cifrado en bloque para brindar seguridad a la información, como confidencialidad o autenticidad. Un cifrado de bloque en sí solo es adecuado para la transformación criptográfica segura (cifrado o descifrado) de un grupo de bits de longitud fija llamado bloque. Un modo de operación describe cómo aplicar repetidamente una operación de bloque único de cifrado para transformar de forma segura cantidades de datos mayores que un bloque.
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 garantizar que se produzcan distintos textos cifrados incluso cuando el mismo texto sin formato se cifra varias veces de forma independiente con la misma clave. Los cifrados de bloque pueden operar en más de un tamaño de bloque, pero durante la transformación, el tamaño del bloque siempre es fijo. Los modos de cifrado de bloques funcionan en bloques completos y requieren que la última parte de los datos se rellene a un bloque completo si es más pequeño que el tamaño del bloque actual. Sin embargo, hay modos que no requieren relleno porque utilizan efectivamente un cifrado de bloque como un cifrado de flujo.
Históricamente, los modos de encriptación 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 operación modernos combinan confidencialidad y autenticidad de manera eficiente y se conocen como modos de cifrado autenticado.
Historia y estandarización
Los primeros modos de operación, ECB, CBC, OFB y CFB (consulte a continuación para ver 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 de bloque y agregar el modo CTR en SP800-38A, Recomendación para modos de operación de cifrado de bloque. Finalmente, en enero de 2010, NIST agregó XTS-AES en SP800-38E, Recomendación para modos de operación de cifrado de bloque: el modo XTS-AES para 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 de 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 independiente, 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 hash con clave (HMAC), CMAC fue lanzado en 2005 bajo SP800-38B, Recomendación para modos de operación de cifrado de bloques: El CMAC Modo de autenticación, y GMAC se formalizó en 2007 bajo SP800-38D, Recomendación para modos de operación de cifrado de 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 ofrecer 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 "autenticación". 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), IEC, IEEE, ANSI e IETF.
Vector de inicialización (IV)
Un vector de inicialización (IV) o variable de inicio (SV) es un bloque de bits que utilizan varios modos para aleatorizar el cifrado y, por lo tanto, producir distintos textos cifrados incluso si el mismo texto sin formato se cifra varias veces, sin necesidad de un proceso de cambio de clave más lento.
Un vector de inicialización tiene requisitos de seguridad diferentes a los de una clave, por lo que, por lo general, no es necesario que el IV sea secreto. Para la mayoría de los modos de cifrado de bloques, es importante que un vector de inicialización nunca se reutilice con 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 bloque tienen problemas particulares con ciertos vectores de inicialización, como todos los IV cero que no generan cifrado (para algunas claves).
Se recomienda revisar los requisitos IV relevantes para el modo de cifrado de bloques en particular en la especificación correspondiente, por ejemplo, SP800-38A.
Para 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.
Para OFB y CTR, la reutilización de un IV provoca la reutilización del flujo de bits clave, lo que rompe la seguridad. Esto se puede ver porque ambos modos crean efectivamente un flujo de bits que es XOR con el texto sin formato, y este flujo de bits depende solo de la clave y el IV.
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 se haya cifrado con la misma clave antes (esto se conoce como el ataque TLS CBC IV).
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 quede atascado en todo cero. Para CFB-8, un IV todo cero y un texto sin formato todo cero, hace que 1/256 de las claves no generen cifrado, el texto sin formato se devuelve como texto cifrado. Para OFB-8, el uso de todos los vectores de inicialización cero no generará cifrado para 1/256 de las claves. El cifrado OFB-8 devuelve el texto sin formato 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 mal uso, es decir, resistentes a escenarios en los que la generación de aleatoriedad es defectuosa o está bajo el control del atacante.
- Los vectores de inicialización sintéticos (SIV) sintetizan un IV interno mediante la ejecución de una construcción de función pseudo-aleatoria (PRF) llamada S2V sobre la entrada (datos adicionales y texto simple), evitando que los datos externos controlen directamente la IV. Los noces externos / IV pueden ser introducidos en S2V como un campo de datos adicional.
- AES-GCM-SIVs sintetiza un IV interno ejecutando el modo POLYVAL Galois de autenticación con entrada (datos adicionales y texto), 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. Entonces, 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 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 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. Ligeramente 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 generan 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 (80 hexadecimal), seguido de tantos bytes cero como sea necesario para completar 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 mediante XORing del texto sin formato con la salida del cifrado de bloque. El último bloque parcial de texto sin formato se somete a 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 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 cifrados tengan el mismo tamaño que los datos de texto sin formato originales, y para aplicaciones que transmiten datos en forma de flujo donde es inconveniente agregar bytes de relleno.
Modos comunes
Cifrado autenticado con modos de datos adicionales (AEAD)
Se han diseñado varios modos de funcionamiento para combinar el secreto y la autenticación en una única primitiva criptográfica. Ejemplos de tales modos son integrity-aware encadenamiento de bloques de cifrado (IACBC), modo paralelizable consciente de la integridad (IAPM), OCB, EAX, CWC, CCM y GCM. Los modos de cifrado autenticado 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 lanzados específicamente para evitar tal gravamen.
Además, algunos modos también permiten la autenticación de datos asociados sin cifrar, y estos se denominan esquemas AEAD (cifrado autenticado con datos asociados). Por ejemplo, el modo EAX es un esquema AEAD de paso doble, mientras que el modo OCB es de paso único.
Galois/contador (MCG)
Galois/modo contador (GCM) combina el conocido modo contador de encriptación con el nuevo modo de autenticación Galois. La característica clave 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 canalización de instrucciones o una canalización de hardware. El modo de operación CBC incurre en paradas de tuberías que dificultan 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 luego se somete a 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 use 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, usando aritmética de campos finitos. Luego, el resultado se cifra, produciendo una etiqueta de autenticación que se puede usar para verificar la integridad de los datos. El texto cifrado contiene entonces el IV, el texto cifrado y la etiqueta de autenticación.
Contador con código de autenticación de mensaje de encadenamiento de bloque de cifrado (CCM)
Contador con código de autenticación de mensaje de encadenamiento de bloques de cifrado (contador con CBC-MAC; CCM) es un algoritmo de cifrado autenticado diseñado para proporcionar autenticación y confidencialidad. El modo CCM solo se define para cifrados de bloque con una longitud de bloque de 128 bits.
Vector de inicialización sintético (SIV)
El vector de inicialización sintético (SIV) es un modo de cifrado de bloque resistente al mal uso.
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:
- Se admiten datos adicionales autenticados (cero, uno o muchos campos AAD)
- Plaintext
- Clave de autenticación (K1).
SIV cifra la salida S2V y el texto sin formato mediante AES-CTR, con la clave de cifrado (K2).
SIV puede admitir cifrado autenticado externo basado en nonce, en cuyo caso se utiliza uno de los campos de datos autenticados para este fin. RFC5297 especifica que, para fines de interoperabilidad, el último campo de datos autenticado debe usarse como nonce externo.
Debido al uso de dos claves, la clave de autenticación K1 y la clave de cifrado K2, 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
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.
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 cifra en 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 de nombre muy similar GCM-SIV, con algunos cambios muy pequeños (por ejemplo, cómo se inicializa AES-CTR), pero que aporta beneficios prácticos a su seguridad "Esta adición permite cifrar hasta 250 mensajes con la misma clave, en comparación con la importante limitación de solo 232 mensajes que estaban permitidos con GCM-SIV."
Modos de solo 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.
Diferentes modos de cifrado enmascaran patrones conectando en cascada las salidas del bloque de cifrado u otras variables deterministas globales en el bloque de cifrado subsiguiente. Las entradas de los modos enumerados se resumen en la siguiente tabla:
Modo | Fórmulas | Ciphertext | |
---|---|---|---|
Libro electrónico | (BCE) | Yi F(PlainTexti, Key) | Yi |
Cipher block chaining | (CBC) | Yi = PlainTexti XOR Ciphertexti−1 | F(Y, Key); Ciphertext0 IV |
Propagating CBC | (PCBC) | Yi = PlainTexti XOR (Ciphertexti−1 XOR PlainTexti−1) | F(Y, Key); Ciphertext0 IV |
Cipher feedback | (CFB) | Yi = Ciphertexti−1 | Plaintext XOR F(Y, Key); Ciphertext0 IV |
Reacción de los productos | (OFB) | Yi = F(Y)i−1, Key); Y0 = F(IV, Key) | Plaintext XOR Yi |
Contrato | (CTR) | Yi F(IV + g()i), Key); IV = token() | Plaintext XOR Yi |
Nota: g(i) es cualquier función determinista, a menudo la función de identidad.
Libro de códigos electrónico (ECB)
El más simple (y que ya no se usa) de los modos de encriptación es el modo libro de códigos electrónico (ECB) (llamado así por los libros de códigos físicos convencionales). 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.
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 utiliza el modo ECB para cifrar una imagen de mapa de bits que utiliza grandes áreas de color uniforme. Si bien el color de cada píxel individual está encriptado, aún se puede discernir la imagen general, 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 reproducción, ya que cada bloque se descifra exactamente de la misma manera.
Encadenamiento de bloques de cifrado (CBC)
Ehrsam, Meyer, Smith y Tuchman inventaron el modo de operación de encadenamiento de bloques de cifrado (CBC) en 1976. En el modo CBC, cada bloque de texto sin formato se somete a XOR con el bloque de texto cifrado anterior antes de cifrarse. De esta forma, cada bloque de texto cifrado depende de todos los bloques de texto sin formato 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
- Ci=EK()Pi⊕ ⊕ Ci− − 1),{displaystyle C_{i}=E_{K}(P_{i}oplus C_{i-1}}
- C0=IV,{displaystyle C_{0}=IV,}
mientras que la fórmula matemática para el descifrado de CBC es
- Pi=DK()Ci)⊕ ⊕ Ci− − 1,{displaystyle P_{i}=D_{K}(C_{i})oplus C_{i-1}
- C0=IV.{displaystyle C_{0}=IV.}
Ejemplo
CBC ha sido el modo de operación más utilizado. Sus principales inconvenientes 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 a través del método conocido como robo de texto cifrado. Tenga en cuenta que un cambio de un bit en un texto sin formato 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 sin formato se corrompa, pero los bloques de texto sin formato subsiguientes serán correctos. Esto se debe a que cada bloque se somete a XOR con el texto cifrado del bloque anterior, no con el texto sin formato, 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 puede ser paralelo. Tenga en cuenta que un cambio de un bit en el texto cifrado provoca la 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 aprovecha en diferentes ataques de padding oráculo, como POODLE.
Vectores de inicialización explícitos aprovecha esta propiedad al anteponer 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 del descifrado IV, solo el bloque aleatorio está 'corrompido'. Se puede descartar de forma segura y el resto del descifrado es el texto sin formato original.
Propagar el encadenamiento de bloques de cifrado (PCBC)
El modo propagación de encadenamiento de bloques de cifrado o encadenamiento de bloques de cifrado de texto sin formato se diseñó para provocar 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 sin formato se somete a XOR tanto con el bloque de texto sin formato anterior como con 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 sin formato se corrompan.
Los algoritmos de cifrado y descifrado son los siguientes:
- Ci=EK()Pi⊕ ⊕ Pi− − 1⊕ ⊕ Ci− − 1),P0⊕ ⊕ C0=IV,{displaystyle C_{i}=E_{K}(P_{i}oplus P_{i-1}oplus C_{i-1},P_{0}oplus C_{0}=IV,}
- Pi=DK()Ci)⊕ ⊕ Pi− − 1⊕ ⊕ Ci− − 1,P0⊕ ⊕ C0=IV.{displaystyle P_{i}=D_{K}(C_{i})oplus P_{i-1}oplus C_{i-1},P_{0}oplus C_{0}=IV.}
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 el descifrado de los bloques posteriores. Por esta razón, PCBC no se usa en Kerberos v5.
Retroalimentación de cifrado (CFB)
CFB de bloque completo
El modo 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 a CBC, convierte un cifrado de bloque en un cifrado de flujo de sincronización automática. El descifrado CFB en esta variación es casi idéntico al cifrado CBC realizado a la inversa:
- Ci={}IV,i=0EK()Ci− − 1)⊕ ⊕ Pi,de otra maneraPi=EK()Ci− − 1)⊕ ⊕ Ci,{displaystyle {begin{aligned}C_{i} limit={begin{cases}{text{IV}}, recuri=0E_{K}(C_{i-1})oplus ¿Por qué? C_{i},end{aligned}
CFB-1, CFB-8, CFB-64, CFB-128, etc.
NIST SP800-38A define CFB con un ancho de bits. El modo CFB también requiere un parámetro entero, denominado s, tal que 1 ≤ s ≤ b. En la especificación del modo CFB a continuación, cada segmento de texto sin formato (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.
- I0=IV.{displaystyle I_{0}={text{IV}}
- Ii=()()Ii− − 1≪ ≪ s)+Ci)mod2b,{displaystyle Yo...
- Ci=MSBs ()EK()Ii− − 1))⊕ ⊕ Pi,{displaystyle C_{i}=operatorname {fnMicrosoft Sans Serif}oplus P_{i},}
- Pi=MSBs ()EK()Ii− − 1))⊕ ⊕ Ci,{displaystyle P_{i}=operatorname {fnMicrosoft Sans Serif}oplus C_{i},}
CFB-1 se considera autosincronizante y resistente a la pérdida de texto cifrado; "Cuando se usa el modo CFB de 1 bit, la sincronización se restaura automáticamente en las posiciones b+1 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 restaurarse externamente." (NIST SP800-38A). Es decir. La pérdida de 1 bit en un cifrado de bloque de 128 bits de ancho como AES generará 129 bits no 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 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 correctamente; una pérdida de un bit hará que el descifrador pierda la alineación con el encriptador)
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 encriptación, y no es necesario rellenar el mensaje a un múltiplo del tamaño del bloque de cifrado (aunque el robo de texto cifrado también puede usarse para el modo CBC para hacer innecesario el relleno).
Retroalimentación de salida (OFB)
El modo 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 someten a XOR con los bloques de texto sin formato para obtener el texto cifrado. Al igual que con otros cifrados de flujo, voltear un bit en el texto cifrado produce un bit volteado 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:
- Cj=Pj⊕ ⊕ Oj,{displaystyle C_{j}=P_{j}oplus O_{j},}
- Pj=Cj⊕ ⊕ Oj,{displaystyle P_{j}=C_{j}oplus O_{j},}
- Oj=EK()Ij),{displaystyle O_{j}=E_{K}(I_{j}),}
- Ij=Oj− − 1,{displaystyle I_{j}=O_{j-1}
- I0=IV.{displaystyle I_{0}={text{IV}}
Cada operación de cifrado del 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 sin formato o el texto cifrado solo se usa para el XOR final, las operaciones de cifrado de bloques se pueden realizar con anticipación, lo que permite que el paso final se realice en paralelo una vez que el texto sin formato o el texto cifrado esté disponible.
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 en modo OFB.
Usar el modo OFB con un bloqueo parcial como retroalimentación como el modo CFB reduce la duración promedio del ciclo en un factor de 232 o más. Un modelo matemático propuesto por Davies y Parkin y respaldado por resultados experimentales mostró que solo con retroalimentación completa se puede lograr una duración de ciclo promedio cercana al máximo obtenible. Por este motivo, se eliminó la compatibilidad con comentarios truncados de la especificación de OFB.
Contador (CTR)
- Nota: El modo CTR (CM) también se conoce como modo contador entero (ICM) and contador entero segmentado Modo SIC.
Al igual que OFB, el modo de 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 que se garantice que no se repetirá durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y 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". 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. Junto con CBC, el modo CTR es uno de los dos modos de cifrado de bloques recomendados por Niels Ferguson y Bruce Schneier.
El modo CTR fue introducido por Whitfield Diffie y Martin Hellman en 1979.
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.
Si el IV/nonce es aleatorio, se pueden combinar 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, almacenar 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 XORing el nonce y el contador en un solo valor rompería la seguridad bajo un ataque de texto sin formato 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 de contadores IV y el texto sin formato, la operación XOR del texto cifrado con el texto sin formato conocido generaría un valor que, cuando se aplica XOR con el texto cifrado del otro bloque que comparte el mismo par de contadores IV, descifraría ese bloque.
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á corrupta, será imposible recuperar parcialmente dichos datos debido a la dependencia del desplazamiento de bytes.
Propagación de errores
"Propagación de errores" Las propiedades describen cómo se comporta un descifrado durante los errores de bits, es decir, cómo el error en un bit cae en cascada a diferentes bits descifrados.
Los errores de bit pueden ocurrir intencionalmente en ataques o al azar debido a errores de transmisión.
- Los errores de bits aleatorios ocurren independientemente en cualquier posición de bit con una probabilidad esperada de 1⁄2.
- Los errores de bits específicos ocurren en la misma posición de bits que el error de bit original.
- Los errores de bits específicos en los modos de cifrado de flujo (OFB, CTR, etc.) son triviales. Afectan sólo la parte específica destinada.
- Errores de bits específicos en modos más complejos tales (p. ej. CBC): ataque adaptativo selecto-ciphertext puede combinar inteligentemente muchos errores de bits específicos diferentes para romper el modo de cifrado. En el ataque de oráculos de relleno, CBC puede descifrarse en el ataque adivinando secretos de cifrado basados en respuestas de error. La variante de ataque de Padding Oracle "CBC-R" permite al atacante construir cualquier mensaje válido.
Para el cifrado autenticado moderno (AEAD) o 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 tuvo éxito, 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 errores de bits en Ci | Efecto de errores de bits en la IV o nonce |
---|---|---|
BCE | Errores de bits aleatorios en Pi | — |
CBC | Errores de bits aleatorios en Pi Errores de bits específicos en Pi+1 | Errores de bits específicos en P1 |
CFB | Errores de bits específicos en Pi Errores de bits aleatorios en Pi+1,..., hasta que se restablezca la sincronización | Errores de bits aleatorios en P1,..., hasta que se restablezca la sincronización |
OFB | Errores de bits específicos en Pi | Errores de bits aleatorios en P1, P2,..., Pn |
CTR | Errores de bits específicos en Pi | Errores de bits aleatorios en Pi error de bit en contra bloque Ti |
(Fuente: SP800-38A Tabla D.2: Resumen del efecto de los errores de bit en el descifrado)
Puede observarse, 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 sin formato reconstruido para el cifrado en modo ECB, mientras que en el modo CBC dicho error afectaría a dos bloques. Algunos sintieron que tal resiliencia era deseable frente a errores aleatorios (por ejemplo, ruido de línea), mientras que otros argumentaron que la corrección de errores aumentaba el alcance de los atacantes para manipular maliciosamente un mensaje.
Sin embargo, cuando se utiliza la protección de integridad adecuada, dicho error dará como resultado (con alta probabilidad) que se rechace todo el mensaje. Si se desea resistencia al error aleatorio, 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 los 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. Aún otros no se clasifican como confidencialidad, autenticidad o cifrado autenticado, por ejemplo, el modo de retroalimentación de clave y el hash de Davies-Meyer.
NIST mantiene una lista de modos propuestos para cifrados de bloques en Desarrollo de modos.
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 ajustables (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 una sola vez (un nonce) o ser impredecible antes de su publicación, etc. Reutilizar un IV con la misma clave en El modo CTR, GCM u OFB da como resultado XORing del mismo flujo de claves con dos o más textos sin formato, un claro mal uso de un flujo, con una pérdida de seguridad catastrófica. Los modos de cifrado autenticados deterministas, 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 la misma etiqueta de autenticación cada vez para un texto sin formato y una clave determinados. Otros modos resistentes al uso indebido 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 se usa el mismo IV varias veces.
Los cifrados de bloque también se pueden usar en otros protocolos criptográficos. Generalmente se usan en modos de operación similares a los modos de bloque descritos aquí. Como con todos los protocolos, para ser criptográficamente seguro, se debe tener cuidado para diseñar estos modos de operación correctamente.
Existen varios esquemas que utilizan un cifrado de bloque 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.
Los generadores de números pseudoaleatorios criptográficamente seguros (CSPRNG) también se pueden construir utilizando cifrados de bloque.
Los códigos de autenticación de mensajes (MAC) a menudo se crean a partir de cifrados de bloque. CBC-MAC, OMAC y PMAC son ejemplos.
Contenido relacionado
AltiVec
Arco compuesto
Fragata