Articulo de referencia

Modo de operación de cifrado por bloques

Seis modos de operación comunes de cifrado por bloques para encriptación En criptografía, un modo de operación de cifrado por bloques es un algoritmo que utiliza un cifrado por ...

Seis modos de operación comunes de cifrado por bloques para encriptación

En criptografía, un modo de operación de cifrado por bloques es un algoritmo que utiliza un cifrado por bloques para proporcionar seguridad de la información, como confidencialidad o autenticidad . [ 1 ] Un cifrado por 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 debe ser no repetitivo y, para 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 plano se cifra varias veces de forma independiente con la misma clave . [ 6 ] Los cifrados de bloques pueden ser capaces de 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 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, hay modos que no requieren relleno porque utilizan efectivamente un cifrado de bloques como un cifrado de flujo .

Históricamente, los modos de cifrado se han estudiado exhaustivamente en relación con sus propiedades de propagación de errores bajo diversos escenarios de modificación de datos. Posteriormente, se consideró 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 manera 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), datan de 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 cifrado de bloques y agregar el modo CTR en SP800-38A , Recomendación para Modos de Operación de Cifrado de Bloques . Finalmente, en enero de 2010, NIST agregó XTS-AES en SP800-38E , Recomendación para Modos de Operación de Cifrado de Bloques: 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 por bloques ECB, CBC, OFB, CFB, CTR y XTS proporcionan confidencialidad, pero no protegen contra modificaciones accidentales o manipulaciones maliciosas. Las modificaciones o manipulaciones pueden detectarse 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 específicas y el NIST respondió con HMAC, CMAC y GMAC. HMAC fue aprobado en 2002 como FIPS 198 , The Keyed-Hash Message Authentication Code (HMAC) , CMAC fue publicado en 2005 bajo SP800-38B , Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication , y GMAC fue formalizado en 2007 bajo SP800-38D , Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC .

La comunidad criptográfica observó que combinar un modo de confidencialidad con un modo de autenticidad podía resultar 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 única primitiva criptográfica (un algoritmo de cifrado). Estos modos combinados se denominan cifrado autenticado , AE o "autenticación". Algunos ejemplos de modos AE son CCM ( SP800-38C ), GCM ( SP800-38D ), CWC , EAX , IAPM y OCB .

Los modos de operación 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 encuentran 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 utilizan varios modos para aleatorizar el cifrado y, por lo tanto, producir textos cifrados distintos incluso si el mismo texto plano se cifra varias veces con la misma clave. [ 8 ]

Un vector de inicialización (IV) tiene requisitos de seguridad diferentes a los de una clave, por lo que generalmente no necesita ser secreto. Para la mayoría de los cifrados por bloques, es importante que un vector de inicialización nunca se reutilice con la misma clave; es decir, debe ser un valor aleatorio ( nonce) criptográfico . Muchos cifrados por bloques tienen requisitos más estrictos, como que el IV sea aleatorio o pseudoaleatorio . Algunos cifrados por bloques presentan problemas particulares con ciertos vectores de inicialización, como cuando un IV compuesto solo por ceros no genera cifrado (para algunas claves).

Se recomienda revisar los requisitos de IV relevantes para el modo de cifrado de bloques particular en la especificación correspondiente, por ejemplo SP800-38A .

En el caso de CBC y CFB, la reutilización de un vector de inicialización (IV) filtra cierta información sobre el primer bloque de texto plano y sobre cualquier prefijo común compartido por los dos mensajes.

Para OFB y CTR, reutilizar un IV provoca la reutilización del flujo de bits de la clave, lo que compromete la seguridad. [ 9 ] Esto se puede observar porque ambos modos crean efectivamente un flujo de bits que se combina mediante XOR con el texto plano, y este flujo de bits depende únicamente 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 (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 de texto cifrado anterior) antes de que se especifique el siguiente texto plano, puede comprobar su suposición sobre el texto plano de algún bloque que fue cifrado previamente con la misma clave (esto se conoce como ataque TLS CBC IV). [ 10 ]

Para algunas claves, un vector de inicialización de ceros puede generar algunos modos de cifrado por bloques (CFB-8, OFB-8) para que el estado interno se quede fijo en ceros. Para CFB-8, un IV de ceros y un texto plano de ceros hacen que 1/256 de las claves no generen cifrado, y el texto plano se devuelve como texto cifrado. [ 11 ] Para OFB-8, usar un vector de inicialización de ceros no generará cifrado para 1/256 de las claves. [ 12 ] El cifrado OFB-8 devuelve el texto plano 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 valores aleatorios (nonce), 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 función pseudoaleatoria (PRF) denominada S2V sobre la entrada (datos adicionales y texto plano), lo que impide que cualquier dato externo controle directamente el IV. Se pueden introducir nonces/IV externos en S2V como un campo de datos adicional.
  • Los AES-GCM-SIV sintetizan un vector de inicialización interno ejecutando el modo de autenticación Galois POLYVAL en la entrada (datos adicionales y texto plano), seguido de una operación AES.

Relleno

Un cifrado por bloques funciona con unidades de tamaño fijo (conocido como tamaño de bloque ), pero los mensajes tienen longitudes variadas. Por lo tanto, algunos modos (en concreto, ECB y CBC ) requieren que el último bloque se rellene antes del cifrado. Existen varios esquemas de relleno . El más sencillo consiste en añadir bytes nulos al texto plano para que su longitud sea un múltiplo del tamaño del bloque, pero hay que tener cuidado de que se pueda recuperar la longitud original del texto plano; esto es trivial, por ejemplo, si el texto plano 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 añadir un bit 1 , seguido de suficientes bits 0 para completar el bloque; si el mensaje termina en un límite de bloque, se añadirá un bloque de relleno completo. Los esquemas más sofisticados son los específicos de CBC, como el robo de texto cifrado o la terminación de bloque residual, que no generan texto cifrado adicional, a costa de una mayor complejidad. Schneier y Ferguson sugieren dos posibilidades , ambas sencillas: agregar un byte con valor 128 (hexadecimal 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 medidas especiales para gestionar mensajes cuya longitud no sea múltiplo del tamaño del bloque, ya que funcionan aplicando la operación XOR al texto plano con la salida del cifrado de bloques. El último bloque parcial de texto plano se combina mediante XOR con los primeros bytes del último bloque de la secuencia de claves , generando un bloque de texto cifrado final del mismo tamaño que el último bloque parcial de texto plano. Esta característica de los cifrados de flujo los hace adecuados para aplicaciones que requieren que los datos cifrados tengan el mismo tamaño que los datos originales de texto plano, y para aplicaciones que transmiten datos en formato de flujo continuo, donde resulta inconveniente añadir bytes de relleno.

Modos comunes

Modos de cifrado autenticado con datos adicionales (AEAD)

Se han diseñado varios modos de operación para combinar el secreto y la autenticación en una única primitiva criptográfica. Ejemplos de estos modos son RIV, [ 13 ] McOE, [ 14 ] IACBC, [ 15 ] IAPM, [ 15 ] Ascon , OCB , EAX , CWC , CCM , AES-GCM-SIV y GCM . Los modos de cifrado autenticados se clasifican como modos de paso único o modos de doble paso.

Además, algunos modos 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 pasada, mientras que el modo OCB es de una sola pasada.

Galois/contador (GCM)

El modo Galois/contador (GCM) combina el conocido modo de cifrado por contador con el nuevo modo de autenticación Galois. Su característica clave reside en la facilidad de cálculo paralelo de la multiplicación del campo Galois utilizada para la autenticación. Esta característica permite un mayor rendimiento que los algoritmos de cifrado.

GCM se define para cifrados de bloques con un tamaño de bloque de 128 bits. El código de autenticación de mensajes de Galois (GMAC) es una variante de GCM que solo admite autenticación y 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 aprovecha al máximo el procesamiento paralelo y su implementación permite un uso eficiente de una tubería de instrucciones o una tubería de hardware. El modo de operación CBC genera bloqueos en la tubería que perjudican 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 vector de inicialización (IV) y se cifra con un algoritmo de cifrado de bloques E , generalmente AES. El resultado de este cifrado se combina mediante la operación XOR con el texto plano para producir el texto cifrado. Como todos los modos de contador, este es esencialmente un cifrado de flujo, por lo que es fundamental utilizar un IV diferente para cada flujo que se cifra.

Galois/Contador (GCM)
cifrado en modo GCM

Los bloques de texto cifrado se consideran coeficientes de un polinomio que se evalúa en un punto H dependiente de la clave , utilizando aritmética de campo finito . El resultado se cifra, generando una etiqueta de autenticación que permite verificar la integridad de los datos. El texto cifrado contiene el vector de inicialización (IV), el texto cifrado y la etiqueta de autenticación.

Contador con código de autenticación de mensajes encadenados por bloques de cifrado (CCM)

El contador con código de autenticación de mensajes mediante encadenamiento 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. [ 16 ] [ 17 ]

Vector de inicialización sintético (SIV)

El vector de inicialización sintética (SIV) es un modo de cifrado por bloques resistente al uso indebido de valores aleatorios (nonce).

SIV sintetiza un vector de inicialización interno (IV) utilizando la función pseudoaleatoria S2V. S2V es una función hash con clave basada en CMAC, y la entrada a la función es:

  • Datos autenticados adicionales (se admiten cero, uno o varios campos de AAD).
  • Texto plano
  • Clave de autenticación (K 1 ).

SIV cifra la salida S2V y el texto plano utilizando AES-CTR, con la clave de cifrado (K 2 ).

SIV puede admitir el cifrado autenticado basado en nonce externo, en cuyo caso se utiliza uno de los campos de datos autenticados para este propósito. RFC5297 [ 18 ] especifica que, para fines de interoperabilidad, se debe utilizar el nonce externo como último campo de datos autenticados.

Debido al uso de dos claves, la clave de autenticación K 1 y la clave de cifrado K 2 , los esquemas de nomenclatura 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 a AES-256.

AES-GCM-SIV

AES-GCM-SIV es un modo de operación del 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. Su construcción se define en el RFC 8452. [ 19 ]

AES-GCM-SIV sintetiza el vector de inicialización interno (IV). Deriva un hash de los datos autenticados adicionales y del texto plano mediante la función hash de Galois POLYVAL. A continuación, el hash se cifra con una clave AES y se utiliza como etiqueta de autenticación y vector de inicialización AES-CTR.

AES-GCM-SIV es una mejora con respecto al algoritmo GCM-SIV , de nombre muy similar , 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 2⁵⁰ mensajes con la misma clave, en comparación con la importante limitación de solo 2³² mensajes que permitía GCM-SIV." [ 20 ]

Modos de confidencialidad únicamente

Se han definido muchos modos de operación. Algunos de ellos se describen a continuación. El propósito de los modos de cifrado es enmascarar patrones que existen en los datos cifrados, como se ilustra en la descripción de la vulnerabilidad de ECB .

Los distintos modos de cifrado enmascaran patrones mediante la propagación en cascada de las salidas del bloque de cifrado u otras variables globalmente deterministas al siguiente bloque de cifrado. Las entradas de los modos enumerados se resumen en la siguiente tabla:

Libro de códigos electrónico (BCE)

El modo de cifrado más sencillo 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 [ 21 ] ). 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 logra ocultar los patrones de datos cuando cifra bloques de texto plano idénticos en bloques de texto cifrado idénticos . [ 22 ] [ 23 ] [ 24 ]

Libro de códigos electrónico (ECB)
cifrado en modo BCE
descifrado en modo BCE

Un ejemplo llamativo del grado en que el cifrado ECB puede dejar patrones de datos en texto plano en el texto cifrado se observa al usar el modo ECB para encriptar una imagen de mapa de bits que contiene grandes áreas de color uniforme. Si bien el color de cada píxel individual supuestamente se ha encriptado, la imagen completa aún puede discernirse, ya que el patrón de píxeles del mismo color del original permanece visible en la versión encriptada.

Imagen original
El uso del BCE permite discernir fácilmente los patrones.
Los modos distintos al BCE dan como resultado una pseudoaleatoriedad.

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.

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 plano se combina mediante la operación 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.

Encadenamiento de bloques de cifrado (CBC)
cifrado en modo CBC
descifrado en modo CBC

Si el primer bloque tiene índice 1, la fórmula matemática para el cifrado CBC es

doi=miK(PAGidoi1),{\displaystyle C_{i}=E_{K}(P_{i}\oplus C_{i-1}),}
do0=IV,{\displaystyle C_{0}=IV,}

mientras que la fórmula matemática para el descifrado de CBC es

PAGi=DK(doi)doi1,{\displaystyle P_{i}=D_{K}(C_{i})\oplus C_{i-1},}
do0=IV.{\displaystyle C_{0}=IV.}
Ejemplo
Ejemplo
Ejemplo de cifrado CBC con un cifrado simple de 2 bits.
Ejemplo de descifrado CBC con un cifrado de juguete de 2 bits.

El cifrado basado en bloques (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 alcanzar un tamaño múltiplo del tamaño del bloque cifrado. Una forma de solucionar este último problema es mediante el método conocido como robo de texto cifrado. Cabe destacar que un cambio de un bit en el texto plano o en el vector de inicialización (IV) afecta a todos los bloques cifrados subsiguientes.

El descifrado con un IV incorrecto provoca que el primer bloque de texto plano se corrompa, pero los bloques subsiguientes permanecerán intactos. Esto se debe a que cada bloque se combina mediante XOR con el texto cifrado del bloque anterior, no con el texto plano, por lo que no es necesario descifrar el bloque anterior antes de usarlo como IV para el descifrado del actual. Esto significa que un bloque de texto plano puede recuperarse a partir de dos bloques adyacentes de texto cifrado. En consecuencia, el descifrado puede paralelizarse. Cabe destacar que un cambio de un bit en el texto cifrado provoca la corrupción completa del bloque de texto plano correspondiente e invierte el bit correspondiente en el siguiente bloque, pero el resto de los bloques permanecen intactos. Esta peculiaridad se aprovecha en diferentes ataques de oráculo de relleno, como POODLE.

Los vectores de inicialización explícitos aprovechan esta propiedad al anteponer un único bloque aleatorio al texto plano. El cifrado se realiza de forma habitual, salvo que no es necesario comunicar el vector de inicialización (IV) a la rutina de descifrado. Independientemente del IV que utilice el descifrado, solo el bloque aleatorio se ve afectado. Este puede descartarse sin problemas y el resto del descifrado corresponde al texto plano original.

Encadenamiento de bloques de cifrado propagado (PCBC)

El modo de encadenamiento de bloques de cifrado propagante [ 25 ] o encadenamiento de bloques de cifrado de texto plano [ 26 ] se diseñó para que pequeños cambios en el texto cifrado se propagaran indefinidamente tanto al descifrar como al cifrar. En el modo PCBC, cada bloque de texto plano se combina mediante XOR con el bloque de texto plano anterior y el bloque de texto cifrado anterior antes de ser cifrado. Al igual que en el modo CBC, se utiliza un vector de inicialización en el primer bloque. A diferencia de CBC, descifrar PCBC con un IV (vector de inicialización) incorrecto provoca que todos los bloques de texto plano se corrompan.

Encadenamiento de bloques de cifrado propagado (PCBC)
Cifrado en modo PCBC
descifrado del modo PCBC

Los algoritmos de cifrado y descifrado son los siguientes:

doi=miK(PAGiPAGi1doi1),PAG0do0=IV,{\displaystyle C_{i}=E_{K}(P_{i}\oplus P_{i-1}\oplus C_{i-1}),P_{0}\oplus C_{0}=IV,}
PAGi=DK(doi)PAGi1doi1,PAG0do0=IV.{\displaystyle P_{i}=D_{K}(C_{i})\oplus P_{i-1}\oplus C_{i-1},P_{0}\oplus C_{0}=IV.}

PCBC se utiliza principalmente en Kerberos v4 y WASTE , 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)

Bloque completo de fútbol americano

El modo de retroalimentación de cifrado (CFB), en su forma más simple, utiliza toda la salida del cifrado por bloques. En esta variante, es muy similar al CBC, convirtiendo un cifrado por bloques en un cifrado de flujo autosincronizado . El descifrado CFB en esta variante es casi idéntico al cifrado CBC realizado a la inversa.

doi={IV,i=0miK(doi1)PAGi,de lo contrarioPAGi=miK(doi1)doi,{\displaystyle {\begin{aligned}C_{i}&={\begin{cases}{\text{IV}},&i=0\\E_{K}(C_{i-1})\oplus P_{i},&{\text{en otro caso}}\end{cases}}\\P_{i}&=E_{K}(C_{i-1})\oplus C_{i},\end{aligned}}}
Retroalimentación de cifrado (CFB)
Cifrado con retroalimentación de cifrado (CFB)
Descifrado por retroalimentación de cifrado (CFB)
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 que se muestra 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 bloques subyacente.

I0=IV.{\displaystyle I_{0}={\text{IV}}.}
Ii=((Ii1s)+doi)mod2b,{\displaystyle I_{i}={\big (}(I_{i-1}\ll s)+C_{i}{\big )}{\bmod {2}}^{b},}
doi=MSBs(miK(Ii1))PAGi,{\displaystyle C_{i}=\operatorname {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus P_{i},}
PAGi=MSBs(miK(Ii1))doi,{\displaystyle P_{i}=\operatorname {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus C_{i},}

CFB-1 se considera autosincronizable y resistente a la pérdida de texto cifrado; "Cuando se utiliza el modo CFB de 1 bit, la sincronización se restablece automáticamente b+1 posiciones después del bit insertado o eliminado. Para otros valores de s en el modo CFB, y para los demás modos de confidencialidad de esta recomendación, la sincronización debe restablecerse externamente." (NIST SP800-38A). Es decir, la pérdida de 1 bit en un cifrado de bloques de 128 bits como AES invalidará 129 bits antes de emitir bits válidos.

CFB también puede autosincronizarse en algunos casos especiales distintos a los especificados. Por ejemplo, un cambio de un bit en CFB-128 con un cifrado de bloques subyacente de 128 bits, se resincronizará después de dos bloques. (Sin embargo, CFB-128, etc., no gestiona adecuadamente la pérdida de bits; una pérdida de un bit provocará que el descifrador pierda la alineación con el cifrador).

CFB en comparación con otros modos

Al igual que en el modo CBC, los cambios en el texto plano se propagan indefinidamente en el texto cifrado, y el cifrado no se puede paralelizar. Asimismo, al igual que en CBC, el descifrado sí se puede paralelizar.

Los modos CFB, OFB y CTR comparten dos ventajas sobre el modo CBC: el cifrado por bloques solo se utiliza en la dirección de cifrado y el mensaje no necesita rellenarse hasta un múltiplo del tamaño del bloque de cifrado (aunque también se puede utilizar el robo de texto cifrado en el modo CBC para que el relleno sea innecesario).

Retroalimentación de salida (OFB)

El modo de retroalimentación de salida (OFB) convierte un cifrado de bloques en un cifrado de flujo síncrono . Genera bloques de secuencia de claves , que luego se combinan mediante la operación XOR con los bloques de texto plano para obtener el texto cifrado. Al igual que con otros cifrados de flujo, invertir un bit en el texto cifrado produce un bit invertido en el texto plano en la misma posición. Esta propiedad permite que muchos códigos de corrección de errores funcionen con normalidad 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:

doj=PAGjOj,{\displaystyle C_{j}=P_{j}\oplus O_{j},}
PAGj=dojOj,{\displaystyle P_{j}=C_{j}\oplus O_{j},}
Oj=miK(Ij),{\displaystyle O_{j}=E_{K}(I_{j}),}
Ij=Oj1,{\displaystyle I_{j}=O_{j-1},}
I0=IV.{\displaystyle I_{0}={\text{IV}}.}
Retroalimentación de salida (OFB)
Cifrado en modo OFB
descifrado en modo OFB

Cada operación de cifrado por bloques con retroalimentación de salida depende de todas las anteriores, por lo que no puede realizarse en paralelo. Sin embargo, dado que el texto plano o cifrado solo se utiliza para la operación XOR final, las operaciones de cifrado por bloques pueden realizarse con antelación, lo que permite realizar el paso final en paralelo una vez que el texto plano o cifrado esté disponible.

Es posible obtener una secuencia 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 de hardware rápidas del modo CBC para el cifrado en modo OFB.

El uso del modo OFB con un bloqueo parcial como retroalimentación, al igual que el modo CFB, reduce la duración promedio del ciclo en un factor de 2³² o más. Un modelo matemático propuesto por Davies y Parkin, y corroborado por resultados experimentales, demostró que solo con retroalimentación completa se puede alcanzar una duración promedio del ciclo cercana al máximo obtenible. Por esta razón, se eliminó la compatibilidad con retroalimentación truncada de la especificación de OFB. [ 29 ]

Contador (CTR)

Nota: El modo CTR (CM) también se conoce como modo de contador entero (ICM) y modo de contador entero segmentado (SIC).

Al igual que OFB, el modo contador convierte un cifrado de bloques 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 garantice no repetirse durante un largo período, aunque un contador que se incremente en 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 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 cifrado 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 a OFB, pero además permite el acceso aleatorio durante el descifrado. El modo CTR es ideal 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, se puede combinar con el contador mediante cualquier operación invertible (concatenación, suma o XOR) para generar el bloque de contador único para el cifrado. En 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 sumar o aplicar XOR al nonce y al contador en un solo valor comprometería la seguridad ante un ataque de texto plano elegido en muchos casos, ya que el atacante podría manipular todo el par IV-contador para provocar una colisión. Una vez que el atacante controla el par IV-contador y el texto plano, la operación XOR del texto cifrado con el texto plano conocido produciría un valor que, al aplicarse XOR con el texto cifrado del otro bloque que comparte el mismo par IV-contador, descifraría dicho bloque. [ 34 ]

Cabe destacar que el valor nonce en este diagrama es equivalente al vector de inicialización (IV) en los demás 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.

Contador (CTR)
Cifrado en modo CTR
descifrado en modo CTR

Propagación de errores

Las propiedades de "propagación de errores" describen cómo se comporta un descifrado durante errores de bits, es decir, cómo un error en un bit se propaga en cascada a diferentes bits descifrados.

Los errores de bits pueden producirse intencionadamente en ataques o de forma aleatoria debido a errores de transmisión.

  • Los errores aleatorios de bits ocurren de forma independiente en cualquier posición de bit con una probabilidad esperada de ½.
  • Los errores de bits específicos ocurren en la misma posición o posiciones de bits que el error o los errores de bits originales.
  • Los errores de bits específicos en los modos de cifrado de flujo (OFB, CTR, etc.) son triviales. Afectan únicamente al bit específico al que se refieren.
  • Errores de bits específicos en modos más complejos (por ejemplo, CBC): un ataque adaptativo de texto cifrado elegido puede combinar inteligentemente muchos errores de bits específicos diferentes para romper el modo de cifrado. En el ataque de oráculo de relleno , CBC se puede descifrar adivinando las claves de cifrado basándose en las respuestas de error. La variante de ataque de oráculo de relleno "CBC-R" (CBC inverso) permite al atacante construir cualquier mensaje válido.

En el cifrado autenticado moderno (AEAD) o en protocolos con códigos de autenticación de mensajes encadenados en orden MAC-Luego-Cifrado, cualquier error de bit debe interrumpir completamente el descifrado y no debe generar errores de bit específicos para el descifrador. Es decir, si el descifrado se realiza 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 que solo garantizan la confidencialidad.

(Fuente: SP800-38A Tabla D.2: Resumen del efecto de los errores de bits en el descifrado)

Cabe señalar, por ejemplo, que un error de un bloque en el texto cifrado transmitido resultaría en un error de un bloque en el texto plano reconstruido para el cifrado en modo ECB, mientras que en modo CBC dicho error afectaría a dos bloques. Algunos consideraban que esta resistencia era deseable ante errores aleatorios (por ejemplo, ruido en la línea), mientras que otros argumentaban que la corrección de errores aumentaba las posibilidades de 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 alta probabilidad) el rechazo completo del mensaje. Si se desea resistencia a errores aleatorios, se deben aplicar códigos correctores de errores al texto cifrado antes de la transmisión.

Otros modos y otras primitivas criptográficas

Se han propuesto muchos otros modos de operación para los cifrados por bloques. Algunos han sido aceptados, descritos exhaustivamente (e incluso estandarizados) y se utilizan. Otros se han considerado inseguros y no deberían usarse nunca. Otros, en cambio, no se ajustan a las categorías de confidencialidad, autenticidad o cifrado autenticado; por ejemplo, el modo de retroalimentación de clave y el hash Davies-Meyer .

El NIST mantiene una lista de modos propuestos para cifrados de bloques en Modes Development . [ 28 ] [ 35 ]

El cifrado de disco suele utilizar modos especiales diseñados específicamente para la aplicación. Los modos de cifrado de bloque estrecho configurables ( 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 (véase la teoría del cifrado de disco ).

Muchos modos utilizan un vector de inicialización (IV) que, según el 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 los modos CTR, GCM u OFB resulta en una operación XOR del mismo flujo de claves con dos o más textos planos, un claro uso indebido del flujo, con una pérdida catastrófica de seguridad. Los modos de cifrado autenticado 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 etiqueta de autenticación cada vez para un texto plano y una clave dados. 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 por bloques también pueden utilizarse en otros protocolos criptográficos . Generalmente, se emplean en modos de operación similares a los descritos aquí. Como ocurre con todos los protocolos, para garantizar la seguridad criptográfica, es fundamental diseñar correctamente estos modos de operación.

Existen varios métodos que utilizan un cifrado por bloques para construir una función hash criptográfica . Consulte la sección sobre funciones de compresión unidireccional para obtener descripciones de algunos de estos métodos.

Los generadores de números pseudoaleatorios criptográficamente seguros (CSPRNG, por sus siglas en inglés) también pueden construirse utilizando cifrados por bloques.

Los códigos de autenticación de mensajes (MAC) suelen construirse a partir de cifrados de bloques. CBC-MAC , OMAC y PMAC son algunos ejemplos.

Véase también

Referencias

  1. Grupo de Tecnología de Seguridad (STG) de la División de Seguridad Informática (CSD) del NIST (2013). "Modos de cifrado por bloques" . Kit de herramientas criptográficas . NIST. Archivado del original el 6 de noviembre de 2012. Recuperado el 12 de abril de 2013 .
  2. 1 2 Ferguson, N.; Schneier, B.; Kohno, T. (2010). Ingeniería criptográfica: principios de diseño y aplicaciones prácticas . Indianápolis: Wiley Publishing, Inc. pp. 63, 64. ISBN  978-0-470-47424-2.
  3. Grupo de Tecnología de Seguridad (STG) de la División de Seguridad Informática (CSD) del NIST (2013). "Modos propuestos" . Kit de herramientas criptográficas . NIST. Archivado del original el 2 de abril de 2013. Recuperado el 14 de abril de 2013 .
  4. Alfred J. Menezes; Paul C. van Oorschot; Scott A. Vanstone (1996). Manual de criptografía aplicada . CRC Press. págs. 228–233 . ISBN  0-8493-8523-7.
  5. 1 2 3 "ISO/IEC 10116:2006 – Tecnología de la información – Técnicas de seguridad – Modos de operación para un cifrado de bloques de n bits" . Catálogo de normas ISO . 2006. Archivado del original el 17 de marzo de 2012.
  6. Conrad, Eric; Misenar, Seth; Feldman, Joshua (1 de enero de 2017), "Capítulo 3 - Dominio 3: Ingeniería de seguridad" , en Conrad, Eric; Misenar, Seth; Feldman, Joshua (eds.), Eleventh Hour CISSP® (Tercera edición) , Syngress, pp. 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
  7. Grupo de Tecnología de Seguridad (STG) de la División de Seguridad Informática (CSD) del NIST (2013). "Modos actuales" . Kit de herramientas criptográficas . NIST. Archivado del original el 2 de abril de 2013. Recuperado el 12 de abril de 2013 .
  8. Bellare, Mihir; Rogaway, Phillip (mayo de 2005). "Introducción a la criptografía moderna" (PDF) .
  9. "Reutilización de cifrado de flujo: un ejemplo gráfico" . Cryptosmith LLC. 31 de mayo de 2008. Archivado del original el 25 de enero de 2015. Consultado el 7 de enero de 2015 .
  10. B. Moeller (20 de mayo de 2004), Seguridad de los conjuntos de cifrado CBC en SSL/TLS: Problemas y contramedidas , archivado del original el 30 de junio de 2012.
  11. Tervoort, Tom. "Zerologon: Compromiso del controlador de dominio no autenticado mediante la subversión de la criptografía de Netlogon (CVE-2020-1472)" . Secura . Consultado el 14 de octubre de 2020 .
  12. Blaufish (14 de octubre de 2020). "Netlogon CFB8 considerado dañino. OFB8 también" . GitHub . Consultado el 14 de octubre de 2020 .
  13. Abed, Farzaneh; Forler, Christian; List, Eik; Lucks, Stefan; Wenzel, Jakob (2016). "RIV para cifrado autenticado robusto". En Thomas Peyrin (ed.). Cifrado de software rápido: 23.ª Conferencia Internacional (FSE 2016), Bochum, Alemania, 20-23 de marzo de 2016, Artículos seleccionados revisados . Lecture Notes in Computer Science. Vol. 9783. Springer. pp. 23-42 . doi : 10.1007/978-3-662-52993-5_2 .  
  14. Fleischmann, Ewan; Forler, Christian; Lucks, Stefan (2012). "McOE: Una familia de esquemas de cifrado autenticado en línea casi infalibles" . En Anne Canteaut (ed.). Cifrado de software rápido: 19.º taller internacional, FSE 2012, Washington, DC, EE. UU., 19-21 de marzo de 2012. Artículos seleccionados revisados . Lecture Notes in Computer Science. Vol. 7549. Springer. pp. 196-215 . doi : 10.1007/978-3-642-34047-5_12 .  
  15. 1 2 Jutla, Charanjit S. (mayo de 2001). Modos de cifrado con integridad de mensaje casi libre (PDF) . Eurocrypt 2001. Lecture Notes in Computer Science. Vol. 2045. Springer. doi : 10.1007/3-540-44987-6_32 . 
  16. Dworkin, Morris (mayo de 2004). Recomendación para los modos de operación de cifrado por bloques: 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.
  17. Whiting, D.; Housley, R.; Ferguson, N. (septiembre de 2003). Contador con CBC-MAC (CCM) . IETF . doi : 10.17487/RFC3610 . RFC 3610 .
  18. Harkins, Dan (octubre de 2008). "Cifrado autenticado mediante vector de inicialización sintética (SIV) utilizando el estándar de cifrado avanzado (AES)" . Recuperado el 21 de octubre de 2020 .
  19. Gueron, S. (abril de 2019). AES-GCM-SIV: Cifrado autenticado resistente al mal uso de nonce . IETF . doi : 10.17487/RFC8452 . RFC 8452. Recuperado el 14 de agosto de 2019 .
  20. Gueron, Shay; Langley, Adam; Lindell, Yehuda (14 de diciembre de 2018). "AES-GCM-SIV: Especificación y análisis" . Cryptology ePrint Archive . Informe (2017/168) . Recuperado el 19 de octubre de 2020 .
  21. "Recomendación para los modos de operación del cifrado por bloques" (PDF) . NIST.gov . NIST. pág. 9. Archivado (PDF) del original el 29 de marzo de 2017. Recuperado el 1 de abril de 2017 . 
  22. Menezes, Alfred J.; van Oorschot, Paul C.; Vanstone, Scott A. (2018). Manual de criptografía aplicada . CRC Press. pág. 228. ISBN  9780429881329.
  23. Dam, Kenneth W.; Lin, Herbert S. (1996). El papel de la criptografía en la seguridad de la sociedad de la información . National Academies Press. pág. 132. ISBN  9780309054751.
  24. Schneier, Bruce (2015). Criptografía aplicada: protocolos, algoritmos y código fuente en C. John Wiley & Sons. pág. 208. ISBN  9781119096726.
  25. "Preguntas frecuentes sobre criptografía: Pregunta 84: ¿Qué son los modos Counter y PCBC?" . www.iks-jena.de . Archivado del original el 16 de julio de 2012 . Consultado el 28 de abril de 2018 .
  26. Kaufman, C.; Perlman, R.; Speciner, M. (2002). Seguridad de redes (2.ª ed.). Upper Saddle River, NJ: Prentice Hall. pág. 319. ISBN   0130460192.
  27. Kohl, J. (1990). "El uso del cifrado en Kerberos para la autenticación de redes" (PDF) . Actas de Crypto '89 . Berlín: Springer. ISBN 0387973176Archivado del original (PDF) el 12 de junio de 2009.
  28. 1 2 Dworkin, Morris (2001). "SP 800-38A, Recomendación para los modos de operación del cifrado por bloques: métodos y técnicas" (PDF) . csrc.nist.gov . doi : 10.6028/NIST.SP.800-38A . Archivado (PDF) del original el 28 de agosto de 2017. Recuperado el 28 de abril de 2018 .
  29. Davies, DW; Parkin, GIP (1983). «El tamaño promedio del ciclo del flujo de claves en el cifrado con retroalimentación de salida». Avances en criptología, Actas de CRYPTO 82. Nueva York: Plenum Press. págs. 263–282 . ISBN  0306413663.
  30. 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.
  31. 1 2 Lipmaa, Helger; Wagner, David; Rogaway, Phillip (2000). "Comentarios al NIST sobre los modos de operación de AES: Cifrado en modo CTR" (PDF) . Archivado (PDF) del original el 26 de febrero de 2015.
  32. Ferguson, Niels; Schneier, Bruce; Kohno, Tadayoshi (2010). Ingeniería criptográfica . pág. 71. 
  33. "Modos básicos de cifrado por bloques" . www.quadibloc.com . Archivado del original el 24 de octubre de 2017. Consultado el 28 de abril de 2018 .
  34. "Criptografía I" . Coursera . Archivado del original el 23 de marzo de 2018. Consultado el 28 de abril de 2018 .
  35. "Desarrollo de modos – Técnicas de cifrado por 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 los Estados Unidos. 4 de enero de 2017. Archivado del original el 4 de septiembre de 2017. Consultado el 28 de abril de 2018 .