Articulo de referencia

Robo de texto cifrado

En criptografía , el robo de texto cifrado ( CTS , por sus siglas en inglés) es un método general que utiliza un modo de operación de cifrado por bloques que permite procesar me...

En criptografía , el robo de texto cifrado ( CTS , por sus siglas en inglés) es un método general que utiliza un modo de operación de cifrado por bloques que permite procesar mensajes que no son divisibles uniformemente en bloques sin que ello suponga ninguna expansión del texto cifrado , a costa de un ligero aumento de la complejidad.

Características generales

El robo de texto cifrado es una técnica para encriptar texto plano utilizando un cifrado de bloques, sin rellenar el mensaje hasta que sea un múltiplo del tamaño del bloque, de modo que el texto cifrado tenga el mismo tamaño que el texto plano.

Esto se logra alterando el procesamiento de los dos últimos bloques del mensaje. El procesamiento de todos los bloques, excepto los dos últimos, permanece inalterado, pero una parte del texto cifrado del penúltimo bloque se "toma prestada" para rellenar el último bloque de texto plano. El bloque final rellenado se cifra posteriormente como de costumbre.

El texto cifrado final, para los dos últimos bloques, consta del penúltimo bloque parcial (omitiendo la parte "robada") más el bloque final completo, que tienen el mismo tamaño que el texto plano original.

El descifrado requiere descifrar primero el último bloque y luego restaurar el texto cifrado robado en el penúltimo bloque, que luego se puede descifrar como de costumbre.

En principio, se puede utilizar cualquier modo de cifrado por bloques orientado a bloques , pero los modos similares al cifrado de flujo ya se pueden aplicar a mensajes de longitud arbitraria sin relleno, por lo que no se benefician de esta técnica. Los modos de operación comunes que se combinan con el robo de texto cifrado son el Libro de Códigos Electrónico (ECB) y el Encadenamiento de Bloques de Cifrado (CBC).

El robo de texto cifrado en el modo ECB requiere que el texto plano sea más largo que un bloque . Una posible solución es utilizar un modo de cifrado por bloques similar al cifrado de flujo cuando la longitud del texto plano sea de un bloque o menos, como los modos CTR, CFB u OFB.

El robo de texto cifrado en modo CBC no requiere necesariamente que el texto plano sea más largo que un bloque . Si el texto plano tiene un bloque o menos, el vector de inicialización (IV) puede actuar como el bloque anterior del texto cifrado. En este caso, se debe enviar un IV modificado al receptor. Esto puede no ser posible en situaciones donde el remitente no puede elegir libremente el IV al enviar el texto cifrado (por ejemplo, cuando el IV es un valor derivado o preestablecido), y en este caso, el robo de texto cifrado en modo CBC solo puede ocurrir con textos planos de más de un bloque.

Para implementar el cifrado o descifrado CTS para datos de longitud desconocida, la implementación debe retrasar el procesamiento (y almacenar en búfer) los dos bloques de datos más recientes, de modo que puedan procesarse correctamente al final del flujo de datos.

Formato de texto cifrado

Existen varias formas diferentes de organizar el texto cifrado para su transmisión. Los bits del texto cifrado son los mismos en todos los casos, solo que se transmiten en un orden diferente, por lo que la elección no tiene implicaciones de seguridad; es simplemente una cuestión de conveniencia para la implementación.

La numeración que se muestra aquí proviene de Dworkin, quien las describe todas. La tercera es la más popular y fue descrita por Daemen y Schneier ; Meyer describe un esquema relacionado, pero incompatible (en cuanto al orden de bits y el uso de claves).

CS1

Podría decirse que la forma más obvia de organizar el texto cifrado es transmitir el penúltimo bloque truncado, seguido del bloque final completo. Esto no es conveniente para el receptor por dos razones:

  1. En cualquier caso, el receptor debe descifrar primero el último bloque y
  2. Esto provoca que el bloque final no esté alineado con un límite natural, lo que complica las implementaciones de hardware.

Esto tiene la ventaja de que, si el bloque de texto plano final resulta ser un múltiplo del tamaño del bloque, el texto cifrado es idéntico al del modo de operación original sin robo de texto cifrado.

CS2

A menudo resulta más conveniente intercambiar los dos últimos bloques de texto cifrado, de modo que el texto cifrado finalice con el último bloque completo, seguido del penúltimo bloque truncado. Esto da como resultado bloques de texto cifrado alineados de forma natural.

Para mantener la compatibilidad con los modos que no implican robo de datos, la opción CS2 realiza este intercambio solo si la cantidad de texto cifrado robado no es cero, es decir, si el mensaje original no era un múltiplo del tamaño del bloque.

Esto mantiene la alineación natural y la compatibilidad con los modos que no roban datos, pero requiere tratar de manera diferente los casos de tamaño de mensaje alineado y no alineado.

CS3

La alternativa más popular intercambia incondicionalmente los dos últimos bloques de texto cifrado. Este es el orden que se utiliza en las descripciones a continuación.

Descripción del modo de robo de texto cifrado

Para cifrar o descifrar datos, utilice el modo de operación de cifrado por bloques estándar en todos los bloques de datos, excepto en los dos últimos.

Los siguientes pasos describen cómo manejar los dos últimos bloques del texto plano, denominados P n −1 y P n , donde la longitud de P n −1 es igual al tamaño del bloque del cifrado en bits, B ; la longitud del último bloque, P n , es de M bits; y K es la clave que se está utilizando. M puede variar de 1 a B , ambos inclusive, por lo que P n podría ser un bloque completo. La descripción del modo CBC también utiliza el bloque de texto cifrado inmediatamente anterior a los bloques en cuestión, C n −2 , que de hecho podría ser el IV si el texto plano cabe dentro de dos bloques.

Para esta descripción, se utilizan las siguientes funciones y operadores:

  • Head (data, a ): devuelve los primeros a bits de la cadena 'data'.
  • Tail (datos, a ): devuelve los últimos a bits de la cadena 'datos'.
  • Cifrar ( K , datos): utilice el cifrado de bloques subyacente en modo de cifrado en la cadena 'datos' utilizando la clave K .
  • Descifrar ( K , datos): utilice el cifrado de bloques subyacente en modo de descifrado en la cadena 'datos' utilizando la clave K .
  • XOR : OR exclusivo a nivel de bits. Equivalente a la suma a nivel de bits sin utilizar el bit de acarreo.
  • ||: Operador de concatenación. Combina las cadenas a ambos lados del operador.
  • 0 a : una cadena de 0 bits.

Robo de textos cifrados por parte del BCE

El robo de texto cifrado en modo ECB introduce una dependencia entre bloques dentro de los dos últimos bloques, lo que resulta en un comportamiento de propagación de errores alterado para los dos últimos bloques.

Pasos de cifrado del BCE (véase la figura)

Pasos de cifrado del BCE para CTS
  1. E n −1 = Encrypt ( K , P n −1 ). Encripta P n −1 para crear E n −1 . Esto es equivalente al comportamiento del modo ECB estándar.
  2. C n = Head ( E n −1 , M ). Seleccione los primeros M bits de E n −1 para crear C n . El último bloque de texto cifrado, C n , se compone de los M bits iniciales del penúltimo bloque de texto cifrado. En todos los casos, los dos últimos bloques se envían en un orden diferente al de los bloques de texto plano correspondientes.
  3. D n = P n || Tail ( E n −1 , BM ). Rellena P n con los bits de orden inferior de E n −1 .
  4. C n −1 = Encrypt ( K , D n ). Encripta D n para crear C n −1 . Para los primeros M bits, esto es equivalente a lo que ocurriría en el modo ECB (excepto por el orden del texto cifrado). Para los últimos BM bits, esta es la segunda vez que estos datos se han encriptado con esta clave (ya se encriptaron en la producción de E n −1 en el paso 2).

Pasos de descifrado del BCE

  1. D n = Descifrar ( K , C n −1 ). Descifrar C n −1 para crear D n . Esto deshace el paso 4 del proceso de cifrado.
  2. E n −1 = C n || Tail ( D n , BM ). Rellene C n con el texto cifrado extraído en el extremo final de D n (colocado allí en el paso 3 del proceso de cifrado del BCE).
  3. P n = Head ( D n , M ). Seleccionamos los primeros M bits de D n para crear P n . Como se describe en el paso 3 del proceso de cifrado ECB, los primeros M bits de D n contienen P n . Ponemos en cola este último bloque (posiblemente parcial) para su eventual salida.
  4. P n −1 = Descifrar ( K , E n −1 ). Descifrar E n −1 para crear P n −1 . Esto revierte el paso 1 del cifrado.

Propagación de errores en el robo de texto cifrado del BCE

Un error de bit en la transmisión de C n −1 provocaría la corrupción de todo el bloque tanto de P n −1 como de P n . Un error de bit en la transmisión de C n provocaría la corrupción de todo el bloque de P n −1 . Esto supone un cambio significativo con respecto al comportamiento de propagación de errores del BCE.

Robo de texto cifrado de CBC

En CBC, ya existe interacción entre el procesamiento de diferentes bloques adyacentes, por lo que CTS tiene un menor impacto conceptual en este modo. La propagación de errores se ve afectada.

Pasos de cifrado de CBC

  1. X n −1 = P n −1 XOR C n −2 . Se realiza una operación OR exclusiva de P n −1 con el bloque de texto cifrado anterior, C n −2 , para crear X n −1 . Esto es equivalente al comportamiento del modo CBC estándar.
  2. E n −1 = Encrypt ( K , X n −1 ). Encripta X n −1 para crear E n −1 . Esto es equivalente al comportamiento del modo CBC estándar.
  3. C n = Head ( E n −1 , M ). Seleccione los primeros M bits de E n −1 para crear C n . El último bloque de texto cifrado, C n , se compone de los M bits iniciales del penúltimo bloque de texto cifrado. En todos los casos, los dos últimos bloques se envían en un orden diferente al de los bloques de texto plano correspondientes.
  4. P = P n || 0 BM . Rellena P n con ceros al final para crear P de longitud B . El relleno con ceros en este paso es importante para el paso 5.
  5. D n = E n −1 XOR P . Se realiza una operación XOR exclusiva de E n −1 con P para crear D n . Para los primeros M bits del bloque, esto es equivalente al modo CBC; los primeros M bits del texto cifrado del bloque anterior, E n −1 , se combinan mediante XOR con los M bits del texto plano del último bloque de texto plano. El relleno con ceros de P en el paso 4 fue importante, porque hace que el efecto de la operación XOR en los últimos BM bits sea equivalente a copiar los últimos BM bits de E n −1 al final de D n . Estos son los mismos bits que se eliminaron de E n −1 en el paso 3 cuando se creó C n .
  6. C n −1 = Encrypt ( K , D n ). Encripta D n para crear C n −1 . Para los primeros M bits, esto es equivalente a lo que ocurriría en el modo CBC (excepto por el orden del texto cifrado). Para los últimos BM bits, esta es la segunda vez que estos datos se han encriptado con esta clave (ya se encriptaron en la producción de E n −1 en el paso 2).

Pasos de descifrado de CBC

  1. D n = Descifrar ( K , C n −1 ). Descifrar C n −1 para crear D n . Esto deshace el paso 6 del proceso de cifrado.
  2. C = C n || 0 BM . Rellena C n con ceros al final para crear un bloque C de longitud B . Estamos rellenando C n con ceros para ayudar en el paso 3.
  3. X n = D n XOR C . OR exclusivo D n con C para crear X n . Observando los primeros M bits, este paso tiene el resultado de XOR C n (los primeros M bits del proceso de cifrado' E n −1 ) con el (ahora descifrado) P n XOR Head ( E n −1 , M ) (ver pasos 4-5 del proceso de cifrado). En otras palabras, hemos descifrado CBC los primeros M bits de P n . Observando los últimos BM bits, esto recupera los últimos BM bits de E n −1 .
  4. P n = Head ( X n , M ). Seleccionamos los primeros M bits de X n para crear P n . Como se describe en el paso 3, los primeros M bits de X n contienen P n . Ponemos en cola este último bloque (posiblemente parcial) para su eventual salida.
  5. E n −1 = C n || Tail ( X n , BM ). Agregamos los bits de la cola ( BM ) de X n a C n para crear E n −1 . Como se describe en el paso 3, E n −1 se compone de todo C n (que tiene M bits de longitud) con los últimos BM bits de X n . Reensamblamos E n −1 (que es el mismo E n −1 visto en el proceso de cifrado) para procesarlo en el paso 6.
  6. X n −1 = Descifrar ( K , E n −1 ). Descifrar E n −1 para crear X n −1 . Esto revierte el paso 2 del cifrado. X n −1 es el mismo que en el proceso de cifrado.
  7. P n −1 = X n −1 XOR C n −2 . Realizamos una operación XOR exclusiva entre X n −1 y el bloque de texto cifrado anterior, C n −2 , para crear P n −1 . Finalmente, revertimos el paso XOR del paso 1 del proceso de cifrado.

Notas de implementación de CBC

Para el robo de texto cifrado mediante CBC, existe un método ingenioso (aunque poco transparente) para implementar el proceso descrito utilizando una interfaz CBC estándar. El uso de este método supone una penalización en el rendimiento durante la etapa de descifrado, consistente en una operación de descifrado de bloque adicional en comparación con lo que sería necesario con una implementación específica.

Cifrado de robo de texto cifrado CBC mediante una interfaz CBC estándar
  1. Rellena el último bloque parcial de texto plano con 0.
  2. Encripta todo el texto plano con relleno utilizando el modo CBC estándar.
  3. Intercambia los dos últimos bloques de texto cifrado.
  4. Trunca el texto cifrado a la longitud del texto plano original.
Robo de texto cifrado (CTS) en CBC, modo de cifrado
Robo de texto cifrado (CTS) en CBC, modo de cifrado
Descifrado de robo de texto cifrado CBC mediante una interfaz CBC estándar
  1. D n = Descifrar ( K , C n −1 ). Descifrar el penúltimo bloque de texto cifrado usando el modo ECB.
  2. C n = C n || Tail ( D n , BM ). Rellena el texto cifrado hasta el múltiplo más cercano del tamaño del bloque utilizando los últimos BM bits del descifrado del cifrado de bloques del penúltimo bloque de texto cifrado.
  3. Intercambia los dos últimos bloques de texto cifrado.
  4. Descifra el texto cifrado (modificado) utilizando el modo CBC estándar.
  5. Recorta el texto plano a la longitud del texto cifrado original.
Robo de texto cifrado (CTS) en CBC, modo de descifrado
Robo de texto cifrado (CTS) en CBC, modo de descifrado

Propagación de errores de robo de texto cifrado CBC

Un error de bit en la transmisión de C n −1 resultaría en la corrupción de todo el bloque tanto de P n −1 como de P n . Un error de bit en la transmisión de C n resultaría en un error de bit correspondiente en P n , y en la corrupción de todo el bloque de P n −1 .

Referencias

  • Daemen, Joan (1995). "2.5.1 y 2.5.2". Diseño de funciones de cifrado y hash, estrategias basadas en criptoanálisis lineal y diferencial (PDF) (tesis doctoral). Universidad Católica de Lovaina.
  • Schneier, Bruce (1995). Criptografía aplicada (2.ª  ed.). John Wiley & Sons, Inc. págs.  191, 195. ISBN 978-0-471-12845-8.
  • Meyer, Carl H.; Matyas, Stephen M. (1982). Criptografía: Una nueva dimensión en la seguridad de los datos informáticos . John Wiley & Sons, Inc. pp. 77–85 . ISBN  978-0-471-04892-3.
  • R. Baldwin; R. Rivest (octubre de 1996). Los algoritmos RC5, RC5-CBC, RC5-CBC-Pad y RC5-CTS . IETF . doi : 10.17487/RFC2040 . RFC 2040 .
  • Dworkin, Morris (octubre de 2011). Recomendación para los modos de operación de cifrado por bloques: tres variantes de robo de texto cifrado para el modo CBC (PDF) . Instituto Nacional de Estándares y Tecnología de EE. UU. (NIST). Adenda a la publicación especial 800-38A del NIST.