En criptografía , el robo de texto cifrado ( CTS ) es un método general de utilizar un modo de operación de cifrado en bloque que permite el procesamiento de mensajes que no son divisibles uniformemente en bloques sin dar lugar a ninguna expansión del texto cifrado , a costa de una complejidad ligeramente mayor.
Características generales
El robo de texto cifrado es una técnica para cifrar texto sin formato utilizando un cifrado de bloque, sin rellenar el mensaje a un múltiplo del tamaño del bloque, de modo que el texto cifrado tenga el mismo tamaño que el texto sin formato.
Lo hace alterando el procesamiento de los dos últimos bloques del mensaje. El procesamiento de todos los bloques, excepto los dos últimos, no se modifica, pero una parte del texto cifrado del penúltimo bloque se "roba" para rellenar el último bloque de texto sin formato. A continuación, el bloque final rellenado se cifra como de costumbre.
El texto cifrado final, para los dos últimos bloques, consta del penúltimo bloque parcial (con la parte "robada" omitida) más el bloque final completo, que tiene el mismo tamaño que el texto sin formato original.
El descifrado requiere descifrar primero el bloque final y luego restaurar el texto cifrado robado en el penúltimo bloque, que luego se puede descifrar como de costumbre.
El robo de texto cifrado para el modo CBC no requiere necesariamente que el texto sin formato tenga más de un bloque . En el caso de que el texto sin formato tenga una longitud de un bloque o menos, el vector de inicialización (IV) puede actuar como bloque anterior de texto cifrado. En este caso se deberá enviar un IV modificado al receptor. Esto puede no ser posible en situaciones donde el remitente no puede elegir libremente el IV cuando se envía el texto cifrado (por ejemplo, cuando el IV es un valor derivado o preestablecido), y en este caso el robo de texto cifrado para el modo CBC solo puede ocurren en textos planos de más de un bloque.
Para implementar el cifrado o descifrado CTS de datos de longitud desconocida, la implementación debe retrasar el procesamiento (y almacenar en el buffer) los dos bloques de datos más recientes, para que puedan procesarse adecuadamente al final del flujo de datos.
Formato de texto cifrado
Hay varias formas diferentes de organizar el texto cifrado para su transmisión. Los bits de texto cifrado son los mismos en todos los casos, sólo que se transmiten en un orden diferente, por lo que la elección no tiene implicaciones de seguridad; es puramente una cuestión de conveniencia de implementación.
La numeración aquí está tomada de Dworkin, quien los describe todos. El tercero es el más popular y descrito por Daemen y Schneier ; Meyer describe un esquema relacionado, pero incompatible (con respecto 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 motivos:
En cualquier caso, el receptor debe descifrar primero el bloque final y
Esto da como resultado 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 es más conveniente intercambiar los dos últimos bloques de texto cifrado, de modo que el texto cifrado termine con el bloque final completo, seguido del penúltimo bloque truncado. Esto da como resultado bloques de texto cifrado naturalmente alineados.
Para mantener la compatibilidad con los modos sin robo, la opción CS2 realiza este intercambio sólo si la cantidad de texto cifrado robado es distinta de cero, es decir, 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 sin robo, pero requiere tratar los casos de tamaño de mensaje alineado y no alineado de manera diferente.
CS3
La alternativa más popular intercambia incondicionalmente los dos últimos bloques de texto cifrado. Este es el orden utilizado en las descripciones siguientes.
Los siguientes pasos describen cómo manejar los dos últimos bloques del texto plano, llamados 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, Pn , es de M bits; y K es la clave que está en uso. M puede variar de 1 a B , inclusive, por lo que P n podría ser un bloque completo. La descripción del modo CBC también hace uso del bloque de texto cifrado justo antes de los bloques en cuestión, C n −2 , que de hecho puede ser el IV si el texto sin formato cabe dentro de dos bloques.
Para esta descripción se utilizan las siguientes funciones y operadores:
Head (datos, a ): devuelve los primeros bits de la cadena de 'datos'.
Cola (datos, a ): devuelve los últimos bits de la cadena de 'datos'.
Cifrar ( K , datos): use el cifrado de bloque subyacente en modo de cifrado en la cadena de 'datos' usando la clave K .
Descifrar ( K , datos): use el cifrado de bloque subyacente en modo de descifrado en la cadena de 'datos' usando la clave K .
XOR : OR exclusivo bit a bit. Equivalente a la suma bit a bit sin el uso de un bit de acarreo.
||: Operador de concatenación. Combine las cuerdas a cada lado del operador.
0 a : una cadena de 0 bits.
Robo de texto cifrado del BCE
El robo de texto cifrado en modo ECB introduce una dependencia entre bloques dentro de los dos últimos bloques, lo que da como resultado un comportamiento de propagación de errores alterado para los dos últimos bloques.
Pasos de cifrado del BCE (ver figura)
Pasos de cifrado del BCE para CTS
E n −1 = Cifrar ( K , P n −1 ). Cifre P n −1 para crear E n −1 . Esto es equivalente al comportamiento del modo BCE estándar.
C norte = Cabeza ( mi norte −1 , METRO ). Seleccione los primeros M bits de E n −1 para crear C n . El bloque de texto cifrado final, 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.
re norte = pag norte || Cola ( mi norte −1 , segundo − metro ). Rellene P n con los bits de orden inferior de E n −1 .
C n −1 = Cifrar ( K , D n ). Cifre D n para crear C n −1 . Para los primeros M bits, esto es equivalente a lo que sucedería en el modo ECB (aparte del orden del texto cifrado). Para los últimos B − M bits, esta es la segunda vez que estos datos se cifran con esta clave (ya se cifró en la producción de En −1 en el paso 2).
Pasos de descifrado del BCE
D n = Descifrar ( K , C n −1 ). Descifre C n −1 para crear D n . Esto deshace el paso 4 del proceso de cifrado.
mi norte −1 = C norte || Cola ( D norte , segundo - METRO ). Rellene C n con el texto cifrado extraído al final de D n (colocado allí en el paso 3 del proceso de cifrado del BCE).
P norte = Cabeza ( D norte , M ). Seleccione los primeros M bits de D n para crear P n . Como se describe en el paso 3 del proceso de cifrado del BCE, los primeros M bits de D n contienen P n . Ponemos en cola este último bloque (posiblemente parcial) para su eventual salida.
P norte −1 = Descifrar ( K , En −1 ) . Descifre E n −1 para crear P n −1 . Esto invierte el paso 1 del cifrado.
Propagación de errores de robo de texto cifrado del BCE
Un error de bit en la transmisión de C n −1 daría como resultado 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 daría como resultado la corrupción de P n −1 en todo el bloque . Este es 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 menos impacto conceptual en este modo. La propagación de errores se ve afectada.
Pasos de cifrado CBC
X norte −1 = P norte −1 XOR C norte −2 . OR exclusivo 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.
E n −1 = Cifrar ( K , X n −1 ). Cifre X n −1 para crear E n −1 . Esto es equivalente al comportamiento del modo CBC estándar.
C norte = Cabeza ( mi norte −1 , METRO ). Seleccione los primeros M bits de E n −1 para crear C n . El bloque de texto cifrado final, 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.
P = P norte || 0 segundo - METRO . Rellene 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.
re norte = mi norte −1 XOR PAG . OR exclusivo E n −1 con P para crear D n . Para los primeros M bits del bloque, esto equivale al modo CBC; los primeros M bits del texto cifrado del bloque anterior, En −1 , se aplican XOR con los M bits de texto sin formato del último bloque de texto sin formato. 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 B − M bits sea equivalente a copiar los últimos B − M bits de E n −1 al final de D n . Estos son los mismos bits que se quitaron de E n −1 en el paso 3 cuando se creó C n .
C n −1 = Cifrar ( K , D n ). Cifre D n para crear C n −1 . Para los primeros M bits, esto es equivalente a lo que sucedería en el modo CBC (aparte del orden del texto cifrado). Para los últimos B − M bits, esta es la segunda vez que estos datos se cifran con esta clave (ya se cifró en la producción de En −1 en el paso 2).
Pasos para descifrar CBC
D n = Descifrar ( K , C n −1 ). Descifre C n −1 para crear D n . Esto deshace el paso 6 del proceso de cifrado.
C = C norte || 0 segundo - METRO . Rellene 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.
X norte = D norte XOR C . OR exclusivo D n con C para crear X n . Mirando los primeros M bits, este paso tiene el resultado de XORing 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 ) ( consulte los pasos 4-5 del proceso de cifrado). En otras palabras, tenemos CBC descifrado los primeros M bits de P n . Al observar los últimos B − M bits, esto recupera los últimos B − M bits de E n −1 .
P n = Cabeza ( X n , M ). Seleccione 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.
mi norte −1 = C norte || Cola ( X norte , B − M ). Agregue los bits de cola ( B − M ) 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) al que se le añaden los últimos B − M 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.
X norte −1 = Descifrar ( K , En −1 ) . Descifre E n −1 para crear X n −1 . Esto invierte el paso de cifrado 2. X n −1 es el mismo que en el proceso de cifrado.
P norte −1 = X norte −1 XOR C norte −2 . OR exclusivo X n −1 con el bloque de texto cifrado anterior, C n −2 , para crear P n −1 . Finalmente, invertimos el paso XOR del paso 1 del proceso de cifrado.
Notas de implementación del CBC
Para el robo de texto cifrado CBC, existe un método inteligente (pero opaco) para implementar el proceso de robo de texto cifrado descrito utilizando una interfaz CBC estándar. El uso de este método impone una penalización de rendimiento en la etapa de descifrado de una operación de descifrado de bloque adicional sobre lo que sería necesario usando una implementación dedicada.
Cifrado de robo de texto cifrado CBC utilizando una interfaz CBC estándar
Rellene el último bloque parcial de texto plano con 0.
Cifre todo el texto plano acolchado utilizando el modo CBC estándar.
Intercambia los dos últimos bloques de texto cifrado.
Trunca el texto cifrado a la longitud del texto sin formato original.
Robo de texto cifrado (CTS) en CBC, modo de cifrado
Descifrado de robo de texto cifrado CBC utilizando una interfaz CBC estándar
D n = Descifrar ( K , C n −1 ). Descifre el penúltimo bloque de texto cifrado utilizando el modo ECB.
C norte = C norte || Cola ( D norte , segundo - METRO ). Rellene el texto cifrado al múltiplo más cercano del tamaño del bloque utilizando los últimos B - M bits del descifrado del cifrado del penúltimo bloque de texto cifrado.
Intercambia los dos últimos bloques de texto cifrado.
Descifre el texto cifrado (modificado) utilizando el modo CBC estándar.
Trunca el texto sin formato a la longitud del texto cifrado original.
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 daría como resultado 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 daría como resultado un error de bit correspondiente en P n y la corrupción de P n −1 en todo el bloque .
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. págs. 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. doi : 10.17487/RFC2040 . RFC 2040.
Dworkin, Morris (octubre de 2011). Recomendación para los modos de operación de cifrado en bloque: tres variantes de robo de texto cifrado para el modo CBC (PDF) . Instituto Nacional de Estándares y Tecnología de EE. UU. (NIST). Anexo a la publicación especial NIST 800-38A.