Modo de funcionamiento del cifrado por bloques

Modos de cifrado autenticado con datos adicionales (AEAD)

Artículo principal: Encriptación autenticada

Se han diseñado varios modos de operación para combinar el secreto y la autenticación en una sola primitiva criptográfica. Ejemplos de estos modos son el encadenamiento de bloques de cifrado extendido (XCBC), el encadenamiento de bloques de cifrado consciente de la integridad (IACBC), el modo paralelizable consciente de la integridad (IAPM), OCB, EAX, CWC, CCM y GCM. Los modos de cifrado autenticado se clasifican en modos de paso único o de paso doble. Algunos algoritmos de encriptación autenticada de una sola pasada, como el modo OCB, están gravados por patentes, mientras que otros se diseñaron y publicaron específicamente para evitar dicho gravamen.

Además, algunos modos también permiten la autenticación de datos asociados no encriptados, y se denominan esquemas AEAD (encriptación autenticada con datos asociados). Por ejemplo, el modo EAX es un esquema AEAD de doble paso, mientras que el modo OCB es de paso único.

Galois/contador (GCM)Edit

GCM

Galois/contador

Encriptación paralelizable

Descifrado paralelizable

Acceso de lectura aleatorio

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

GCM se define para los cifradores 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 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 un pipeline de instrucciones o un pipeline de hardware. El modo de operación CBC incurre en atascos en el pipeline 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 bloques E, normalmente AES. El resultado de esta encriptación se combina con el texto plano para producir el texto cifrado. Como todos los modos de contador, se trata esencialmente de un cifrado de flujo, por lo que es esencial que se utilice un IV diferente para cada flujo que se cifre.

Los bloques del texto cifrado se consideran coeficientes de un polinomio que luego se evalúa en un punto H dependiente de la clave, utilizando aritmética de campo finito. El resultado se encripta, produciendo una etiqueta de autenticación que puede utilizarse 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 de cifrado (CCM)Edit

El contador con código de autenticación de mensajes de 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 sólo se define para cifradores de bloque con una longitud de bloque de 128 bits.

Vector de inicialización sintético (SIV)Edit

El vector de inicialización sintético (SIV) es un modo de cifrado por bloques resistente a los picos.

El SIV sintetiza un IV interno utilizando la función pseudoaleatoria S2V. S2V es un hash con clave se basa en CMAC, y la entrada a la función es:

  • Datos adicionales autenticados (se admiten cero, uno o muchos campos AAD)
  • Plaintexto
  • Clave de autenticación (K1).

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

SIV puede admitir el cifrado autenticado basado en nonce externo, en cuyo caso se utiliza uno de los campos de datos autenticados para este fin. El RFC5297 especifica que, a efectos de interoperabilidad, el último campo de datos autenticados debe utilizarse como nonce externo.

Debido al uso de dos claves, la clave de autenticación K1 y la clave de cifrado K2, los esquemas de denominación de las variantes AEAD de SIV pueden dar lugar a 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-SIVEdit

AES-GCM-SIV es un modo de operación para el Estándar de Cifrado Avanzado que proporciona un rendimiento similar al modo Galois/contador, así como resistencia al mal uso en caso de reutilización de un nonce criptográfico. La construcción se define en el RFC 8452.

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

AES-GCM-SIV es una mejora del 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 sólo 232 mensajes que se permitía con GCM-SIV.»

Modos de sólo confidencialidadEditar

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

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

Resumen de los modos
Modo Fórmulas Texto cifrado
Libro de códigos electrónico (BCE) Yi = F(PlainTexti, Clave) Yi
Encadenamiento de bloques de cifrado (CBC) Yi = PlainTexti XOR Ciphertexti-1 F(Y, Clave); Ciphertext0 = IV
Propagación CBC (PCBC) Yi = PlainTexti XOR (Ciphertexti-1 XOR PlainTexti-1) F(Y, Clave); Ciphertext0 = IV
Cipher feedback (CFB) Yi = Ciphertexti-1 Plaintext XOR F(Y, Key); Ciphertext0 = IV
Retroalimentación de salida (OFB) Yi = F(Yi-1, Clave); Y0 = F(IV, Key) Plaintexto XOR Yi
Contador (CTR) Yi = F(IV + g(i), Key); IV = token() Plaintexto XOR Yi

Nota: g(i) es cualquier función determinista, a menudo la función identidad.

Libro de códigos electrónico (ECB)Edit

ECB

Libro de códigos electrónico

Encriptación paralizable

Descriptación paralizable

Acceso de lectura aleatorio

El más sencillo de los modos de cifrado es el modo de libro de códigos electrónico (ECB) (llamado así por los libros de códigos físicos convencionales). 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 plano idénticos en bloques de texto cifrado idénticos, no oculta bien los patrones de datos.ECB no se recomienda para su uso en protocolos criptográficos.

Un ejemplo sorprendente del grado en que ECB puede dejar patrones de datos de texto plano en el texto cifrado puede verse cuando se utiliza el modo ECB para encriptar una imagen de mapa de bits que utiliza grandes áreas de color uniforme. Mientras que el color de cada píxel individual está encriptado, la imagen global todavía puede ser discernida, ya que el patrón de píxeles de colores idénticos en el original permanece en la versión encriptada.

Imagen original

Encriptada mediante el modo ECB

Los modos distintos al ECB dan lugar a la pseudoaleatoriedad

La tercera imagen es cómo podría aparecer la imagen encriptada con CBC, CTR o cualquiera de los otros modos más seguros-indistinguible del ruido aleatorio. Tenga en cuenta que la apariencia aleatoria de la tercera imagen no garantiza que la imagen haya sido encriptada de forma segura; se han desarrollado muchos tipos de encriptación insegura que producirían una salida con la misma «apariencia aleatoria».

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

CBC

Encadenamiento de bloques de cifrado

Encriptación paralelizable

No

Descifrado paralelizable

Acceso de lectura aleatorio

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 es XOR con el bloque de texto cifrado anterior antes de ser cifrado. De este modo, cada bloque de texto cifrado depende de todos los bloques de texto plano procesados hasta ese momento. Para que cada mensaje sea único, se debe utilizar un vector de inicialización en el primer bloque.

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

C i = E K ( P i ⊕ C i – 1 ) , {\displaystyle C_{i}=E_{K}(P_{i}\oplus C_{i-1}),}

C 0 = I V , {\displaystyle C_{0}=IV,}

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

P i = D K ( C i ) ⊕ C i – 1 , {\displaystyle P_{i}=D_{K}(C_{i})\oplus C_{i-1},}

C 0 = I V . {\displaystyle C_{0}=IV.}

ExampleEdit

CBC ha sido el modo de funcionamiento más utilizado. Sus principales inconvenientes son que el cifrado es secuencial (es decir, no se puede paralelizar) y que el mensaje debe rellenarse con un múltiplo del tamaño del bloque de cifrado. Una forma de resolver este último problema es mediante el método conocido como robo de texto cifrado. Tenga en cuenta que un cambio de un bit en un texto plano o vector de inicialización (IV) afecta a todos los bloques de texto cifrado siguientes.

Descifrar con el IV incorrecto hace que el primer bloque de texto plano esté corrupto, pero los bloques de texto plano posteriores serán correctos. Esto se debe a que cada bloque se XORiza con el texto cifrado del bloque anterior, no con el texto plano, por lo que no es necesario descifrar el bloque anterior antes de utilizarlo 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 se puede paralelizar. Obsérvese 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 de texto plano, 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 se aprovechan de esta propiedad anteponiendo un único bloque aleatorio al texto plano. El cifrado se realiza de forma normal, excepto que el IV no necesita ser comunicado a la rutina de descifrado. Cualquiera que sea el IV que se utilice en el descifrado, sólo el bloque aleatorio se «corrompe». Se puede descartar con seguridad y el resto del descifrado es el texto plano original.

Encadenamiento de bloques de cifrado de propagación (PCBC)Editar

PCBC

Encadenamiento de bloques de cifrado de propagación

Encriptación paralelizable

No

Descifrado paralelizable

No

Acceso de lectura aleatorio

No

El encadenamiento de bloques de cifrado propagante o cifrado de texto plano-El modo de encadenamiento de bloques fue diseñado para hacer que los pequeños cambios en el texto cifrado se propaguen indefinidamente al descifrar así como al cifrar. En el modo PCBC, cada bloque de texto plano se XORiza con el bloque de texto plano anterior y con 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.

Los algoritmos de cifrado y descifrado son los siguientes:

C i = E K ( P i ⊕ P i – 1 ⊕ C i – 1 ) , P 0 ⊕ C 0 = I V , {\displaystyle C_{i}=E_{K}(P_{i}\oplus P_{i-1}\oplus C_{i-1}),P_{0}\oplus C_{0}=IV,}

P i = D K ( C i ) ⊕ P i – 1 ⊕ C i – 1 , P 0 ⊕ C 0 = I V . {\displaystyle P_{i}=D_{K}(C_{i})\N-plus P_{i-1}\N-plus C_{i-1},P_{0}\N-plus 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 al descifrado de los bloques siguientes. Por esta razón, PCBC no se utiliza en Kerberos v5.

Retroalimentación de cifrado (CFB)Edit

Full-bloque CFBEdit

CFB

Cipher feedback

Encryption parallelizable

No

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 en bloque. En esta variación, es muy similar al CBC, convierte un cifrado de bloques en un cifrado de flujo autosincronizado. El descifrado CFB en esta variación es casi idéntico al cifrado CBC realizado a la inversa:

C i = { IV , i = 0 E K ( C i – 1 ) ⊕ P i , de lo contrario P i = E K ( C i – 1 ) ⊕ C i , {\displaystyle {\begin{aligned}C_{i}&={begin{cases}{texto{IV}},&i=0\\E_{K}(C_{i-1})\oplus P_{i},&{\text{otherwise}}\end{cases}}\\P_{i}&=E_{K}(C_{i-1})\oplus C_{i},\end{aligned}}}

CFB-1, CFB-8, CFB-64, CFB-128, etc.Edit

El NIST SP800-38A define CFB con un ancho de bits. El modo CFB también requiere un parámetro entero, denotado s, tal que 1 ≤ s ≤ b. En la especificación del modo CFB a continuación, cada segmento de texto plano (Pj) y segmento de texto cifrado (Cj) consta de s bits. El valor de s se incorpora a veces 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.

I 0 = IV . {\displaystyle I_{0}={\text{IV}}.}

I i = ( I i – 1 ≪ s ) + C i ) mod 2 b , {\displaystyle I_{i}={big (}(I_{i-1}\ll s)+C_{i}{big )}{bmod {2}^{b},}

C i = MSB s ( E K ( I i – 1 ) ) ⊕ P i , {\displaystyle C_{i}={operatorname} {MSB} {{s} {\big (}E_{K}(I_{i-1}){\big )} {\big P_{i},}

P i = MSB s ( E K ( I i – 1 ) ) ⊕ C i , {\displaystyle P_{i}=\Nnombre del operador {MSB} _{s} {\big (}E_{K}(I_{i-1}){\big )}oplus C_{i},}

CFB-1 se considera autosincronizado 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 otros modos de confidencialidad en esta recomendación, la sincronización debe ser restaurada externamente». (NIST SP800-38A). Es decir, la pérdida de 1 bit en un cifrado de bloque de 128 bits como AES hará que 129 bits no sean válidos antes de emitir bits válidos.

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

CFB comparado con otros modosEditar

Al igual que el modo CBC, los cambios en el texto plano se propagan para siempre en el texto cifrado, y el cifrado no puede ser paralelizado. También como CBC, el descifrado puede ser paralelizado.

CFB, OFB y CTR comparten dos ventajas sobre el modo CBC: el cifrado en bloque sólo se utiliza en la dirección de cifrado, y el mensaje no necesita ser rellenado a 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 el relleno innecesario).

Retroalimentación de salida (OFB)Editar

OFB

Retroalimentación de salida

Encriptación paralelizable

No

Descriptación paralelizable

No

Acceso de lectura aleatorio

No

El modo de retroalimentación de salida (OFB) convierte un cifrado de bloques en un cifrado de flujo síncrono. Genera bloques de flujo de claves, que luego se XOR con los bloques de texto plano para obtener el texto cifrado. Al igual que ocurre con otros cifradores de flujo, la inversión de un bit en el texto cifrado produce un bit invertido en el texto plano en el mismo lugar. 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}}.}

Cada operación de cifrado en bloque de 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 el texto cifrado sólo se utiliza para el XOR final, las operaciones de cifrado por bloques pueden realizarse por adelantado, permitiendo que el paso final se realice en paralelo una vez que el texto plano o el texto cifrado estén disponibles.

Es posible obtener un flujo de claves en modo OFB utilizando el modo CBC con una cadena constante de ceros como entrada. Esto puede ser útil, porque permite el uso de implementaciones de hardware rápidas del modo CBC para el cifrado en modo OFB.

El uso del modo OFB con un bloque parcial como retroalimentación, como el modo CFB, reduce la longitud media del ciclo en un factor de 232 o más. Un modelo matemático propuesto por Davies y Parkin y corroborado por resultados experimentales demostró que sólo con retroalimentación completa se puede lograr una longitud de ciclo promedio cercana al máximo obtenible. Por esta razón, se eliminó de la especificación de OFB el apoyo a la retroalimentación truncada.

Contador (CTR)Edit

CTR

Contador

Encriptación paralela

Descifrado paralelizable

Acceso de lectura aleatorio

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

Al igual que OFB, el modo contador convierte un cifrado de bloque en un cifrado de flujo. Genera el siguiente bloque de flujo de claves cifrando valores sucesivos de un «contador». El contador puede ser cualquier función que produzca una secuencia que se garantice que no se repita durante mucho tiempo, aunque un contador real de incremento por uno es el más simple y popular. El uso de una simple función de entrada determinista solía ser controvertido; los críticos argumentaban que «exponer deliberadamente un criptosistema a una entrada sistemática conocida representa un riesgo innecesario». Sin embargo, hoy en día el modo CTR está ampliamente aceptado y cualquier problema se considera una debilidad del cifrado de bloques subyacente, del que se espera que sea seguro independientemente del sesgo sistémico de su entrada. Junto con CBC, el modo CTR es uno de los dos modos de cifrado por 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 muy adecuado para operar en una máquina multiprocesadora en la que se pueden cifrar bloques en paralelo. Además, no sufre el problema del ciclo corto que puede afectar a OFB.

Si el IV/nonce es aleatorio, entonces pueden combinarse junto con el contador utilizando 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). La simple adición o XOR del nonce y el contador en un solo valor rompería la seguridad bajo un ataque de texto plano elegido en muchos casos, ya que el atacante puede 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 plano, el XOR del texto cifrado con el texto plano conocido produciría un valor que, al ser XORado con el texto cifrado del otro bloque que comparte el mismo par IV-contador, descifraría ese bloque.

Nótese 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 esos datos debido a la dependencia del desplazamiento de bytes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.