En criptografía , el robo de texto cifrado ( CTS ) es un método general de uso de un modo de operación de cifrado de bloques que permite el procesamiento de mensajes que no se pueden dividir uniformemente en bloques sin dar como resultado 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, por lo que el texto cifrado tiene 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 segundo y último bloque se "roba" para rellenar el último bloque de texto sin formato. A continuación, el bloque final acolchado se cifra como de costumbre.
El texto cifrado final, para los dos últimos bloques, consiste en el penúltimo bloque parcial (con la parte "robada" omitida) más el bloque final completo, que son del mismo tamaño que el texto plano original.
El descifrado requiere descifrar el bloque final primero, luego restaurar el texto cifrado robado en el penúltimo bloque, que luego se puede descifrar como de costumbre.
En principio, se puede usar cualquier modo de operación de cifrado de bloques orientado a bloques , pero los modos de 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 funcionamiento comunes que se combinan con el robo de texto cifrado son Libro de códigos electrónico (ECB) y Encadenamiento de bloques de cifrado (CBC).
El robo de texto cifrado para el modo ECB requiere que el texto sin formato sea más largo que un bloque . Una posible solución es utilizar un modo de operación de cifrado de bloques de tipo secuencia de cifrado cuando la longitud del texto sin formato es de un bloque o menos, como los modos CTR, CFB u OFB.
El robo de texto cifrado para el modo CBC no requiere necesariamente que el texto sin formato sea más largo que un bloque . En el caso de que el texto sin formato tenga un bloque de longitud o menos, el vector de inicialización (IV) puede actuar como el bloque previo de texto cifrado. En este caso, se debe enviar un IV modificado al receptor. Esto puede no ser posible en situaciones en las que 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 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
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, solo que se transmiten en un orden diferente, por lo que la elección no tiene implicaciones de seguridad; es puramente de conveniencia de implementación.
La numeración aquí está tomada de Dworkin, quien los describe a 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 razones:
- El receptor debe descifrar el bloque final primero en cualquier caso, y
- Esto da como resultado que el bloque final no se alinee en un límite natural, lo que complica las implementaciones de hardware.
Esto tiene la ventaja de que, si el bloque de texto sin formato 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, por lo que el texto cifrado termina con el bloque final 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 de no robo, la opción CS2 realiza este intercambio solo si la cantidad de texto cifrado robado no es 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 de no 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 los dos últimos bloques de texto cifrado incondicionalmente. Este es el orden utilizado en las descripciones siguientes.
Descripción del modo de robo de texto cifrado
Para cifrar o descifrar datos, utilice el modo de operación de cifrado de 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, 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, P n , es M bits; y K es la clave que está en uso. M puede oscilar entre 1 y 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 se ajusta a dos bloques.
Para esta descripción, se utilizan las siguientes funciones y operadores:
- Cabeza (datos, un ): devuelve el primer unos trozos de cuerda los 'datos'.
- Cola (datos, a ): devuelve el último unos trozos de cuerda los 'datos'.
- Cifrar ( K , datos): utilizar el cifrado de bloques subyacente en el modo de cifrar en la cadena '' de datos usando la clave K .
- Descifrar ( K , datos): utilizar el cifrado de bloques subyacente en el modo de descifrar 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 una : una cadena de un 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 resulta en un comportamiento de propagación de errores alterado para los dos últimos bloques.
Pasos de cifrado ECB (ver figura)
- E n −1 = Cifrar ( K , P n −1 ). Cifre P n −1 para crear E n −1 . Esto es equivalente al comportamiento del modo ECB estándar.
- C n = Cabeza ( E n −1 , M ). Seleccione los primeros M bits de E n −1 para crear C n . El bloque de texto cifrado final, C n , está compuesto por 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 sin formato correspondientes.
- D n = P n || Cola ( E n −1 , B - M ). 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 bits B - M , esta es la segunda vez que estos datos se cifran con esta clave (ya estaba cifrada en la producción de E n −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.
- E n −1 = C n || Cola ( D n , B - M ). Rellene C n con el texto cifrado extraído al final de D n (colocado allí en el paso 3 del proceso de cifrado ECB).
- P n = Cabeza ( D n , M ). Seleccione 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 una salida eventual.
- P n −1 = Descifrar ( K , E n −1 ). Descifre E n −1 para crear P n −1 . Esto invierte el paso de cifrado 1.
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 resultaría en la corrupción de todo el bloque de P n −1 . Este es un cambio significativo con respecto al comportamiento de propagación de errores del BCE.
Robo de texto cifrado 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 n −1 = P n −1 XOR C n −2 . O 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 n = Cabeza ( E n −1 , M ). Seleccione los primeros M bits de E n −1 para crear C n . El bloque de texto cifrado final, C n , está compuesto por 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 sin formato correspondientes.
- P = P n || 0 B - M . Pad P n con ceros al final para crear P de longitud B . El relleno de ceros en este paso es importante para el paso 5.
- D n = E n -1 XOR P . OR exclusivo 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 XOR con los M bits de texto sin formato del último bloque de texto sin formato. El relleno de 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 bits B - M , esta es la segunda vez que estos datos se cifran con esta clave (ya estaba cifrada en la producción de E n −1 en el paso 2).
Pasos de descifrado de 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 n || 0 B - M . Pad 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 n = D n 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, hemos descifrado CBC los primeros M bits de P n . Mirando 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 una salida eventual.
- E n −1 = C n || Cola ( X n , 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 todos los C n (que tienen M bits de longitud) añadidos con 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 procesar en el paso 6.
- X n −1 = Descifrar ( K , E n −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 n −1 = X n −1 XOR C n −2 . O exclusivo X n −1 con 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 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 utilizando una implementación dedicada.
Cifrado de robo de texto cifrado CBC utilizando una interfaz CBC estándar
- Rellene el último bloque parcial de texto sin formato con 0.
- Cifre todo el texto plano acolchado utilizando el modo CBC estándar.
- Intercambia los dos últimos bloques de texto cifrado.
- Truncar el texto cifrado a la longitud del texto sin formato original.
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 n = C n || Cola ( D n , B - M ). Rellene el texto cifrado al múltiplo más cercano del tamaño del bloque utilizando los últimos B - M bits de descifrado de cifrado de bloque 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.
- Truncar el texto sin formato a la longitud del texto cifrado original.
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 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). Katholieke Universiteit Leuven.
- 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.