El robo de texto cifrado ( CTS) en criptografía es un método común de usar el modo de cifrado de bloques que le permite procesar mensajes de longitud arbitraria a expensas de un ligero aumento en la complejidad de la implementación. A diferencia del relleno , el texto cifrado resultante no se convierte en un múltiplo del tamaño del bloque del cifrado utilizado, sino que permanece igual a la longitud del texto sin formato original . [una]
La idea detrás del método de préstamo de texto cifrado no es nueva. En 1982, se propuso un algoritmo para procesar texto sin formato de longitud arbitraria en el modo de retroalimentación de texto cifrado (CBC) [2] , más tarde llamado CBC-CSX, que se ha utilizado activamente desde principios de la década de 1980 en el IMB CUSP (Programa de soporte de unidades criptográficas). ) arquitectura. . En 2012, se demostró que este método era vulnerable a un simple ataque de texto sin formato elegido . [3]
En 2010, el Instituto Nacional de Estándares y Tecnología (NIST) publicó un documento que describía 3 opciones para usar el método de préstamo junto con el modo de encriptación CBC. [1] Se denominan CBC-CS1, CBC-CS2 y CBC-CS3 y se diferencian entre sí solo en la forma en que se ordenan los bits del texto cifrado. El modo CBC-CS2 se conocía antes [4] , así como el modo CBC-CS3, especificado en los comentarios al protocolo Kerberos 5 [5]
La recomendación NIST SP800-38A [6] establece que una de las restricciones en el uso de modos de cifrado de bloque es la necesidad de tener un bloque de texto sin formato que tenga la misma longitud que el bloque del cifrado que se utiliza. Para resolver este problema, puede utilizar el método de relleno de texto cifrado . Sin embargo, en este caso, la longitud del texto cifrado en comparación con el mensaje original aumenta por el número de bits utilizados para complementar el bloque de cifrado.
El préstamo de texto cifrado no tiene esta desventaja al cambiar la forma en que se procesan los dos últimos bloques del mensaje. [5] El procesamiento de todos menos los dos últimos bloques permanece sin cambios, pero parte del penúltimo bloque de texto cifrado se "toma prestado" para rellenar el último. A continuación, el último bloque rellenado se cifra de forma normal. El texto cifrado final de los dos últimos bloques consiste en la parte del penúltimo bloque (con la parte "prestada" omitida) y el último bloque completo.
El descifrado requiere primero descifrar el último bloque y luego devolver el texto cifrado "prestado" al penúltimo bloque, que luego se puede descifrar como de costumbre.
En principio, se puede usar cualquier modo de cifrado de bloques [7] , pero los modos que funcionan como cifrados de flujo ya se pueden aplicar a mensajes de longitud arbitraria sin necesidad de relleno, por lo que no se benefician de este método. Los modos populares que utilizan el préstamo de texto cifrado son el modo Electronic Codebook ( ECB) y el modo de retroalimentación Cipher Block Chaining (CBC) . [5]
El uso del método de préstamo de texto cifrado para el modo ECB requiere que el texto sin formato sea más largo que un bloque [5] . Una posible solución es utilizar modos de cifrado de bloques con propiedades similares a las de cifrado de flujo (p. ej ., CTR , CFB u OFB ) o el método de relleno [7] en situaciones en las que el tamaño del texto sin formato es de un bloque o menos.
El uso del método de préstamo de texto cifrado en modo CBC no impone la condición obligatoria de que el texto sin formato sea más largo que un bloque [8] . En el caso de que el texto sea menor o igual que el tamaño del bloque, el vector de inicialización (IV) puede actuar como el bloque de texto cifrado precedente. En tal caso, la IV modificada también debe enviarse al destinatario. Este enfoque puede no ser posible en situaciones en las que el remitente no puede elegir libremente el IV junto con el texto cifrado transmitido [8] (por ejemplo, el vector de inicialización se calcula a partir del número de sector del disco duro, a partir de una marca de tiempo, o es un valor fijo ). valor), entonces tomar prestado el texto cifrado para el modo CBC solo puede ocurrir para textos sin formato de más de un bloque.
La forma más sencilla de ordenar el texto cifrado es enviar primero el penúltimo bloque acortado y luego el último bloque completo. Las desventajas de este enfoque son las siguientes:
La ventaja es que si el último bloque de texto plano es un múltiplo del tamaño del bloque de cifrado, el texto cifrado es idéntico al obtenido en la operación normal sin préstamo.
Es más conveniente intercambiar los dos últimos bloques, de modo que el texto cifrado termine con un último bloque completo, seguido de un penúltimo bloque incompleto. Como resultado, los bloques cifrados están alineados, lo que facilita el trabajo con ellos. [una]
Para mantener la compatibilidad con los modos de no préstamo, CS2 realiza esta permutación solo si la cantidad de texto cifrado prestado no es cero, es decir, cuando el tamaño del mensaje original no era un múltiplo del tamaño del bloque. [una]
La desventaja es que los bloques deben manejarse de manera diferente para los mensajes alineados y no alineados.
Esta variante siempre intercambia los dos últimos bloques de texto cifrado sin ninguna condición. Es él quien se utiliza en las siguientes descripciones.
Para el cifrado y descifrado de todos los bloques, excepto los dos últimos, se utiliza el modo estándar de operación del cifrado de bloque.
Los siguientes pasos describen cómo tratar con los últimos bloques del texto sin formato [7] , indicados por y , donde la longitud es el tamaño del bloque de cifrado en bits y la longitud del último bloque es bits; - la clave utilizada para el cifrado. se encuentra en el rango de 1 a inclusive, por lo que teóricamente puede ser un bloque completo. La descripción de cómo funciona el modo CBC también utiliza el bloque de texto cifrado que precede al que se está considerando. Si el texto sin formato cabe en solo dos bloques, puede tomar el vector de inicialización ( ) en su lugar.
La descripción utiliza las siguientes funciones y operadores:
Un error en un bit al transmitirlo a través de un canal de comunicación provocará daños completos en los bloques y . Un error de un solo bit corromperá completamente el bloque . Este es un cambio significativo con respecto a la propagación de errores estándar en el cifrado ECB, donde un error en un bloque de texto cifrado solo corrompe el bloque de texto sin formato correspondiente. [ocho]
En el modo CBC, ya existe interacción en el procesamiento de varios bloques adyacentes, por lo que el préstamo de texto cifrado tiene un impacto conceptual menor. [3] Un error en un bit al transmitirlo a través de un canal de comunicación provocará daños completos en los bloques y . Un error en un bit cambiará el bit correspondiente y corromperá completamente el archivo .
En 2010, se demostró que el modo CBC-CSX no era confiable. [3]
Un ejemplo de un ataque de discriminación de mensajes [9] utilizando texto sin formato seleccionado:
Se ha demostrado que los modos CBC-CS1-3 son confiables en las siguientes condiciones: [3]
El método de préstamo de texto cifrado se utiliza en muchos sistemas modernos de cifrado y descifrado de discos. Por ejemplo, el 27 de enero de 2010, NIST publicó la versión final de la publicación 800-38E, [10] que recomienda usar el modo XTS-AES (modo de libro de códigos modificado basado en XEX con robo de texto cifrado y cifrado AES), estandarizado por IEEE en 2007 [11] , en módulos criptográficos. Este modo se utiliza para el cifrado sector por sector de discos o archivos y se considera la forma más segura de almacenar datos. [once]
Es compatible con la mayoría de las aplicaciones modernas, como BestCrypt [12] , Botan, dm-crypt, FreeOTFE, TrueCrypt, VeraCrypt [13] , DiskCryptor [14] , FileVault 2 de Mac OS X Lion y BitLocker de Windows 10. [quince]