Modo de funcionamiento del cifrado por bloques

Algoritmo de criptografía
Seis modos de operación de cifrado de bloques comunes para cifrar

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]

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 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 .

Vector de inicialización (IV)

Un vector de inicialización (IV) o variable de inicio (SV) [5] es un bloque de bits que se utiliza en varios modos para aleatorizar el cifrado y, por lo tanto, producir textos cifrados distintos incluso si el mismo texto 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.

  • Los vectores de inicialización sintéticos (SIV) sintetizan un IV interno ejecutando una construcción de función pseudoaleatoria (PRF) llamada S2V en la entrada (datos adicionales y texto sin formato), lo que evita que los datos externos controlen directamente el IV. Los nonces/IV externos pueden introducirse en S2V como un campo de datos adicional.
  • Los AES-GCM-SIV sintetizan un IV interno ejecutando el modo de autenticación Galois POLYVAL en la entrada (datos adicionales y texto sin formato), seguido de una operación AES.

Relleno

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.

Modos comunes

Modos de cifrado autenticado con datos adicionales (AEAD)

Se han diseñado varios modos de funcionamiento para combinar el secreto y la autenticación en 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.

Galois/contador (GCM)

MCG
Galois/contra
Cifrado paralelizable
Descifrado paralelizable
Acceso de lectura aleatorio

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.


Galois/Contador (GCM)

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.

Contador con código de autenticación de mensajes de encadenamiento de bloques cifrados (CCM)

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]

Vector de inicialización sintética (SIV)

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:

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

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

SIV puede admitir cifrado autenticado 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

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]

Modos de confidencialidad únicamente

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:

Resumen de modos
ModoFórmulasTexto 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 −1F(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 −1Texto 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 .

Libro de códigos electrónico (ECB)

BCE
Libro de códigos electrónico
Cifrado paralelizable
Descifrado paralelizable
Acceso de lectura aleatorio

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]


Libro de códigos electrónico (ECB)




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 ]

Encadenamiento de bloques cifrados (CBC)

CBC
Encadenamiento de bloques cifrados
Cifrado paralelizableNo
Descifrado paralelizable
Acceso de lectura aleatorio

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.

Encadenamiento de bloques cifrados (CBC)

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

do i = mi K ( PAG i do i 1 ) , {\displaystyle C_{i}=E_{K}(P_{i}\oplus C_{i-1}),}
do 0 = I V , {\displaystyle C_{0}=IV,}

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

PAG i = D K ( do i ) do i 1 , {\displaystyle P_{i}=D_{K}(C_{i})\omás C_{i-1},}
do 0 = I V . {\displaystyle C_{0}=IV.}
Ejemplo
Ejemplo

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.

Propagación de encadenamiento de bloques cifrados (PCBC)

PCBC
Propagación de encadenamiento de bloques de cifrado
Cifrado paralelizableNo
Descifrado paralelizableNo
Acceso de lectura aleatorioNo

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.

Propagación de encadenamiento de bloques cifrados (PCBC)


Los algoritmos de cifrado y descifrado son los siguientes:

do i = mi K ( PAG i PAG i 1 do i 1 ) , PAG 0 do 0 = I V , {\displaystyle C_{i}=E_{K}(P_{i}\omás P_{i-1}\omás C_{i-1}),P_{0}\omás C_{0}=IV,}
PAG i = D K ( do i ) PAG i 1 do i 1 , PAG 0 do 0 = I V . {\displaystyle P_{i}=D_{K}(C_{i})\omás P_{i-1}\omás C_{i-1},P_{0}\omás C_{0}=IV.}

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.

Retroalimentación cifrada (CFB)

CFB de bloque completo
Banco de la Bahía de Córcega
Retroalimentación cifrada
Cifrado paralelizableNo
Descifrado paralelizable
Acceso de lectura aleatorio

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:

do i = { IV , i = 0 mi K ( do i 1 ) PAG i , de lo contrario PAG i = mi K ( do i 1 ) do i , {\displaystyle {\begin{aligned}C_{i}&={\begin{cases}{\text{IV}},&i=0\\E_{K}(C_{i-1})\oplus P_{i},&{\text{de lo contrario}}\end{cases}}\\P_{i}&=E_{K}(C_{i-1})\oplus C_{i},\end{aligned}}}
Retroalimentación cifrada (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, 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.

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}
I i = ( ( I i 1 s ) + do i ) modificación 2 b , {\displaystyle I_{i}={\big (}(I_{i-1}\ll s)+C_{i}{\big )}{\bmod {2}}^{b},}
do i = MSB s ( mi K ( I i 1 ) ) PAG i , {\displaystyle C_{i}=\operatorname {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus P_{i},}
PAG i = MSB s ( mi K ( I i 1 ) ) do i , {\displaystyle P_{i}=\operatorname {MSB} _{s}{\big (}E_{K}(I_{i-1}){\big )}\oplus C_{i},}

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)

CFB comparado con otros modos

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).

Retroalimentación de salida (OFB)

OBI
Retroalimentación de salida
Cifrado paralelizableNo
Descifrado paralelizableNo
Acceso de lectura aleatorioNo

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:

C j = P j O j , {\displaystyle C_{j}=P_{j}\oplus O_{j},}
P j = C j O j , {\displaystyle P_{j}=C_{j}\oplus O_{j},}
O j = E K ( I j ) , {\displaystyle O_{j}=E_{K}(I_{j}),}
I j = O j 1 , {\displaystyle I_{j}=O_{j-1},}
I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}


Retroalimentación de salida (OFB)


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]

Contador (CTR)

CTR
Encimera
Cifrado paralelizable
Descifrado paralelizable
Acceso de lectura aleatorio
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 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.

Contador (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 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.

  • Los errores de bits aleatorios ocurren independientemente en cualquier posición de bit con una probabilidad esperada de ½.
  • Los errores de bits específicos ocurren en las mismas posiciones de bit que los errores de bit 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 previsto.
  • Errores de bits específicos en modos más complejos como (por ejemplo, CBC): el ataque de texto cifrado adaptable puede combinar de forma inteligente muchos errores de bits específicos diferentes para romper el modo de cifrado. En el ataque de Padding Oracle , el CBC se puede descifrar en el ataque adivinando secretos de cifrado en función de las respuestas de error. La variante del ataque Padding Oracle "CBC-R" (CBC Reverse) permite al atacante construir cualquier mensaje válido.

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.

ModoEfecto de los errores de bit en C iEfecto de los errores de bit en el IV o nonce
BCEErrores de bits aleatorios en P i
CBCErrores 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órcegaErrores 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
OBIErrores de bits específicos en P iErrores de bits aleatorios en P 1 , P 2 , …, P n
CTRErrores de bits específicos en P iErrores 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.

Otros modos y otros primitivos criptográficos

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 .

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 en bloque». Kit de herramientas criptográficas . NIST. Archivado desde el original el 6 de noviembre de 2012. Consultado el 12 de abril de 2013 .
  2. ^ ab Ferguson, N.; Schneier, B.; Kohno, T. (2010). Ingeniería criptográfica: principios de diseño y aplicaciones prácticas . Indianápolis: Wiley Publishing, Inc., págs. 63, 64. ISBN 978-0-470-47424-2.
  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 desde el original el 2 de abril de 2013. Consultado 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. ^ abc «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 desde el original el 17 de marzo de 2012.
  6. ^ Conrad, Eric; Misenar, Seth; Feldman, Joshua (1 de enero de 2017), Conrad, Eric; Misenar, Seth; Feldman, Joshua (eds.), "Capítulo 3 - Dominio 3: Ingeniería de seguridad", Eleventh Hour CISSP® (tercera edición) , Syngress, págs. 47–93, doi :10.1016/b978-0-12-811248-9.00003-6, ISBN 978-0-12-811248-9, consultado el 1 de noviembre de 2020
  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 desde el original el 2 de abril de 2013. Consultado el 12 de abril de 2013 .
  8. ^ "Reutilización de cifrado de flujo: un ejemplo gráfico". Cryptosmith LLC. 31 de mayo de 2008. Archivado desde el original el 25 de enero de 2015. Consultado el 7 de enero de 2015 .
  9. ^ B. Moeller (20 de mayo de 2004), Seguridad de los conjuntos de cifrados CBC en SSL/TLS: problemas y contramedidas, archivado desde el original el 30 de junio de 2012
  10. ^ Tervoort, Tom. "Zerologon: Unuthenticated domain controller breach by subverting Netlogon cryptography (CVE-2020-1472)" (Zerologon: Compromiso de controlador de dominio no autenticado al subvertir la criptografía de Netlogon (CVE-2020-1472)). Secura . Consultado el 14 de octubre de 2020 .
  11. ^ Blaufish (14 de octubre de 2020). "Netlogon CFB8 se considera perjudicial. OFB8 también". GitHub . Consultado el 14 de octubre de 2020 .
  12. ^ Gligor, Virgil D. ; Donescu, Pompiliu (2002). Matsui, M. (ed.). Cifrado y autenticación rápidos: modos de cifrado XCBC y autenticación XECB (PDF) . Fast Software Encryption 2001. Lecture Notes in Computer Science. Vol. 2355. Berlín: Springer. págs. 92–108. doi : 10.1007/3-540-45473-X_8 . ISBN 978-3-540-43869-4.
  13. ^ Jutla, Charanjit S. (mayo de 2001). Modos de cifrado con integridad de mensajes casi libre (PDF) . Eurocrypt 2001. Apuntes de clase en informática. Vol. 2045. Springer. doi : 10.1007/3-540-44987-6_32 .
  14. ^ Dworkin, Morris (mayo de 2004). Recomendación para modos de operación de cifrado de 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.
  15. ^ Whiting, D.; Housley, R.; Ferguson, N. (septiembre de 2003). Contador con CBC-MAC (CCM). IETF . doi : 10.17487/RFC3610 . RFC 3610.
  16. ^ Harkins, Dan (octubre de 2008). «Synthetic Initialization Vector (SIV) Authenticated Encryption Using the Advanced Encryption Standard (AES)» (Cifrado autenticado mediante vector de inicialización sintética (SIV) utilizando el estándar de cifrado avanzado (AES)) . Consultado el 21 de octubre de 2020 .
  17. ^ Gueron, S. (abril de 2019). AES-GCM-SIV: cifrado autenticado resistente al uso indebido de nonce. IETF . doi : 10.17487/RFC8452 . RFC 8452 . Consultado el 14 de agosto de 2019 .
  18. ^ Gueron, Shay; Langley, Adam; Lindell, Yehuda (14 de diciembre de 2018). "AES-GCM-SIV: especificación y análisis". Archivo de ePrints de criptología . Informe (2017/168) . Consultado el 19 de octubre de 2020 .
  19. ^ "Recomendación para los modos de funcionamiento del cifrado por bloques" (PDF) . NIST.gov . NIST. pág. 9. Archivado (PDF) del original el 29 de marzo de 2017 . Consultado el 1 de abril de 2017 .
  20. ^ Menezes, Alfred J.; van Oorschot, Paul C.; Vanstone, Scott A. (2018). Manual de criptografía aplicada. CRC Press. pág. 228. ISBN 9780429881329.
  21. ^ Dam, Kenneth W.; Lin, Herbert S. (1996). El papel de la criptografía en la protección de la sociedad de la información. National Academies Press. pág. 132. ISBN 9780309054751.
  22. ^ Schneier, Bruce (2015). Criptografía aplicada: protocolos, algoritmos y código fuente en C. John Wiley & Sons. p. 208. ISBN 9781119096726.
  23. ^ William F. Ehrsam, Carl HW Meyer, John L. Smith, Walter L. Tuchman, "Verificación de mensajes y detección de errores de transmisión mediante encadenamiento de bloques", Patente de EE. UU. 4074066, 1976.
  24. ^ "El protocolo Transport Layer Security (TLS) versión 1.1". pág. 20. Archivado desde el original el 7 de enero de 2015. Consultado el 7 de enero de 2015 .
  25. ^ "Preguntas frecuentes sobre criptografía: Pregunta 84: ¿Qué son los modos de contador y PCBC?". www.iks-jena.de . Archivado desde el 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, Crypto '89 . Berlín: Springer. ISBN. 0387973176. Archivado desde el original (PDF) el 12 de junio de 2009.
  28. ^ ab (NIST), Autor: Morris Dworkin (2001). "SP 800-38A, Recomendación para modos de operación de cifrado de bloques: métodos y técnicas" (PDF) . csrc.nist.gov . doi : 10.6028/NIST.SP.800-38A . Archivado (PDF) desde el original el 28 de agosto de 2017 . Consultado el 28 de abril de 2018 . {{cite journal}}: |first=tiene nombre genérico ( ayuda )
  29. ^ Davies, DW; Parkin, GIP (1983). "El tamaño medio 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. ^ ab Lipmaa, Helger; Wagner, David; Rogaway, Phillip (2000). "Comentarios al NIST sobre los modos de operación AES: cifrado en modo CTR" (PDF) . Archivado (PDF) desde el 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 de bloques". www.quadibloc.com . Archivado desde el original el 24 de octubre de 2017 . Consultado el 28 de abril de 2018 .
  34. ^ "Criptografía I". Coursera . Archivado desde el original el 23 de marzo de 2018 . Consultado el 28 de abril de 2018 .
  35. ^ "Desarrollo de modos – Técnicas de cifrado en bloque – CSRC". División de seguridad informática, Laboratorio de tecnología de la información, Instituto Nacional de Normas y Tecnología, Departamento de Comercio de los Estados Unidos. 4 de enero de 2017. Archivado desde el original el 4 de septiembre de 2017 . Consultado el 28 de abril de 2018 .
Retrieved from "https://en.wikipedia.org/w/index.php?title=Block_cipher_mode_of_operation&oldid=1246703154"