En criptografía , el relleno es cualquiera de las distintas prácticas que consisten en añadir datos al principio, en medio o al final de un mensaje antes de cifrarlo. En la criptografía clásica, el relleno puede incluir la adición de frases sin sentido a un mensaje para ocultar el hecho de que muchos mensajes terminan de forma predecible, por ejemplo, « atentamente» .
Criptografía clásica
Los mensajes oficiales suelen empezar y terminar de forma predecible: Estimado embajador, Informe meteorológico, Atentamente , etc. El uso principal del relleno con cifrados clásicos es impedir que el criptoanalista utilice esa previsibilidad para encontrar texto plano conocido [ 1 ] que facilite el descifrado. El relleno de longitud aleatoria también impide que un atacante conozca la longitud exacta del mensaje en texto plano.
Un ejemplo famoso de relleno clásico que causó un gran malentendido es el incidente de las " maravillas del mundo ", que casi provocó una derrota aliada en la batalla de Samar de la Segunda Guerra Mundial , parte de la batalla más amplia del Golfo de Leyte . En ese ejemplo, el almirante Chester Nimitz , comandante en jefe de la Flota del Pacífico de los EE. UU . en la Segunda Guerra Mundial, envió el siguiente mensaje al almirante Bull Halsey , comandante de la Fuerza de Tarea Treinta y Cuatro (la flota principal aliada) en la batalla del Golfo de Leyte, el 25 de octubre de 1944: [ 2 ]
¿Dónde está, repito, dónde está el Grupo de Trabajo Treinta y Cuatro? [ 3 ]
Con el relleno (en negrita) y los metadatos añadidos, el mensaje quedó así:
TURKEY TROTS TO WATER GG FROM CINCPAC ACTION COM THIRD FLEET INFO COMINCH CTF SEVENTY-SEVEN X WHERE IS RPT WHERE IS TASK FORCE THIRTY FOUR RR THE WORLD WONDERS[ 3 ]
El operador de radio de Halsey confundió parte del texto de relleno con el mensaje, por lo que el almirante Halsey terminó leyendo el siguiente mensaje:
¿Dónde está, repito, dónde está el Grupo de Trabajo Treinta y Cuatro? El mundo se pregunta [ 3 ]
El almirante Halsey interpretó la frase de relleno «el mundo se maravilla» como una reprimenda sarcástica, lo que le provocó un arrebato emocional y lo llevó a encerrarse en su puente y enfurruñarse durante una hora antes de movilizar sus fuerzas para participar en la batalla de Samar. [ 2 ] El operador de radio de Halsey debería haber sido alertado por las letras RR de que «el mundo se maravilla» era una frase de relleno; todos los demás operadores de radio que recibieron el mensaje del almirante Nimitz eliminaron correctamente ambas frases de relleno. [ 2 ]
Muchos cifrados clásicos organizan el texto plano en patrones específicos (por ejemplo, cuadrados, rectángulos, etc.) y, si el texto plano no encaja exactamente, suele ser necesario añadir letras adicionales para completar el patrón. El uso de letras sin sentido para este fin tiene la ventaja añadida de dificultar ciertos tipos de criptoanálisis.
Criptografía simétrica
Funciones hash
La mayoría de las funciones hash criptográficas modernas procesan mensajes en bloques de longitud fija; todas, excepto las más antiguas, incluyen algún tipo de esquema de relleno. Es fundamental que las funciones hash criptográficas empleen esquemas de terminación que impidan que un hash sea vulnerable a ataques de extensión de longitud .
Muchos esquemas de relleno se basan en agregar datos predecibles al bloque final. Por ejemplo, el relleno podría derivarse de la longitud total del mensaje. Este tipo de esquema de relleno se aplica comúnmente a algoritmos hash que utilizan la construcción Merkle-Damgård, como MD-5 , SHA-1 y la familia SHA-2 , como SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 y SHA-512/256 [ 4 ].
Modo de operación de cifrado por bloques
El modo de encadenamiento de bloques cifrados (CBC) es un ejemplo de modo de operación de cifrado por bloques . Algunos modos de cifrado por bloques (CBC y PCBC, esencialmente) para algoritmos de cifrado de clave simétrica requieren una entrada de texto plano que sea un múltiplo del tamaño del bloque, por lo que es posible que los mensajes deban rellenarse para alcanzar esta longitud.
Actualmente se observa una tendencia a utilizar el modo de operación de transmisión continua en lugar del modo de operación por bloques. Un ejemplo de cifrado en modo de transmisión continua es el modo de operación por contador . [ 5 ] Los modos de operación de transmisión continua pueden cifrar y descifrar mensajes de cualquier tamaño y, por lo tanto, no requieren relleno. Métodos más complejos para finalizar un mensaje, como el robo de texto cifrado o la terminación de bloques residuales , evitan la necesidad de relleno.
Una desventaja del relleno es que hace que el texto plano del mensaje sea vulnerable a ataques de oráculo de relleno . Estos ataques permiten al atacante obtener información sobre el texto plano sin atacar la primitiva de cifrado por bloques en sí. Los ataques de oráculo de relleno pueden evitarse asegurándose de que el atacante no pueda obtener información sobre la eliminación de los bytes de relleno. Esto se puede lograr verificando un código de autenticación de mensajes (MAC) o una firma digital antes de eliminar los bytes de relleno, o cambiando a un modo de operación de transmisión continua.
Relleno de bits
El relleno de bits se puede aplicar a mensajes de cualquier tamaño.
Se añade un bit '1' al mensaje y, a continuación, tantos bits '0' como sean necesarios (posiblemente ninguno). El número de bits '0' añadidos dependerá del límite del bloque al que se deba extender el mensaje. En términos de bits, esto se representa como "1000 ... 0000".
Este método se puede utilizar para rellenar mensajes de cualquier longitud en bits, no necesariamente en bytes enteros. Por ejemplo, un mensaje de 23 bits al que se le añaden 9 bits para completar un bloque de 32 bits:
... | 1011 1001 1101 0100 0010 011 1 0000 0000 |
Este relleno es el primer paso de un esquema de relleno de dos pasos utilizado en muchas funciones hash, incluidas MD5 y SHA . En este contexto, se especifica en el paso 3.1 de la RFC1321 .
Este esquema de relleno está definido por la norma ISO/IEC 9797-1 como Método de Relleno 2.
Relleno de bytes
El relleno de bytes se puede aplicar a mensajes que se pueden codificar como un número entero de bytes .
ANSI X9.23
En ANSI X9.23, siempre se agregan entre 1 y 8 bytes como relleno. El bloque se rellena con bytes aleatorios (aunque muchas implementaciones usan 00) y el último byte del bloque se establece al número de bytes agregados. [ 6 ]
Ejemplo: En el siguiente ejemplo, el tamaño del bloque es de 8 bytes y se requiere un relleno de 4 bytes (en formato hexadecimal).
... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |
ISO 10126
La norma ISO 10126 (retirada en 2007 [ 7 ] [ 8 ] ) especifica que el relleno debe realizarse al final de ese último bloque con bytes aleatorios, y el límite del relleno debe estar especificado por el último byte.
Ejemplo: En el siguiente ejemplo, el tamaño del bloque es de 8 bytes y se requiere un relleno de 4 bytes.
... | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |
PKCS#5 y PKCS#7
PKCS#7 se describe en RFC 5652 .
El relleno se mide en bytes enteros. El valor de cada byte añadido es el número de bytes que se agregan; es decir, se añaden N bytes, cada uno con un valor de N. El número de bytes añadidos dependerá del límite del bloque al que se deba extender el mensaje.
El acolchado será uno de los siguientes:
01 02 02 03 03 03 04 04 04 04 05 05 05 05 05 06 06 06 06 06 06 etc.
Este método de relleno (así como los dos anteriores) está bien definido si y solo si N es menor que 256.
Ejemplo: En el siguiente ejemplo, el tamaño del bloque es de 8 bytes y se requiere un relleno de 4 bytes.
... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 |
Si la longitud de los datos originales es un múltiplo entero del tamaño del bloque B , se añade un bloque adicional de bytes con valor B. Esto es necesario para que el algoritmo de descifrado pueda determinar con certeza si el último byte del último bloque es un byte de relleno que indica el número de bytes de relleno añadidos o parte del mensaje de texto plano. Consideremos un mensaje de texto plano que es un múltiplo entero de B bytes, con el último byte de texto plano siendo 01. Sin información adicional, el algoritmo de descifrado no podrá determinar si el último byte es un byte de texto plano o un byte de relleno. Sin embargo, al añadir B bytes, cada uno con valor B , después del byte de texto plano 01 , el algoritmo de descifrado siempre puede tratar el último byte como un byte de relleno y eliminar el número apropiado de bytes de relleno del final del texto cifrado; dicho número de bytes a eliminar depende del valor del último byte.
El relleno PKCS#5 es idéntico al relleno PKCS#7, con la única diferencia de que solo se ha definido para cifrados de bloques que utilizan un tamaño de bloque de 64 bits (8 bytes). En la práctica, ambos se pueden usar indistintamente.
El tamaño máximo del bloque es de 255, ya que es el número más grande que puede contener un byte.
ISO/IEC 7816-4
ISO/IEC 7816-4 :2005 [ 9 ] es idéntico al esquema de relleno de bits aplicado a un texto plano de N bytes. Esto significa, en la práctica, que el primer byte es un byte obligatorio con valor '80' (hexadecimal), seguido, si es necesario, de 0 a N − 1 bytes con valor '00', hasta llegar al final del bloque. ISO/IEC 7816-4 es un estándar de comunicación para tarjetas inteligentes con sistema de archivos y, por sí mismo, no contiene especificaciones criptográficas.
Ejemplo: En el siguiente ejemplo, el tamaño del bloque es de 8 bytes y se requiere un relleno de 4 bytes.
... | DD DD DD DD DD DD DD DD | DD DD DD DD 80 00 00 00 |
El siguiente ejemplo muestra un relleno de tan solo un byte.
... | DD DD DD DD DD DD DD DD | DD DD DD DD DD DD DD 80 |
Relleno cero
Todos los bytes que deben rellenarse se rellenan con ceros. El esquema de relleno con ceros no se ha estandarizado para el cifrado, aunque se especifica para hashes y MAC como Método de Relleno 1 en ISO/IEC 10118-1 [ 10 ] e ISO/IEC 9797-1 . [ 11 ]
Ejemplo: En el siguiente ejemplo, el tamaño del bloque es de 8 bytes y se requiere un relleno de 4 bytes.
... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |
El relleno con ceros puede no ser reversible si el archivo original termina con uno o más bytes cero, lo que imposibilita distinguir entre los bytes de datos de texto plano y los bytes de relleno. Puede utilizarse cuando la longitud del mensaje se puede obtener fuera de banda . A menudo se aplica a cadenas codificadas en binario ( cadenas terminadas en nulo ), ya que el carácter nulo generalmente se puede eliminar como espacio en blanco .
El relleno con ceros también se conoce a veces como "relleno nulo" o "relleno de bytes cero". Algunas implementaciones pueden añadir un bloque adicional de bytes cero si el texto plano ya es divisible por el tamaño del bloque.
Criptografía de clave pública
En criptografía de clave pública , el relleno es el proceso de preparar un mensaje para su cifrado o firma mediante una especificación o esquema como PKCS#1 v2.2, OAEP , PSS , PSSR, IEEE P1363 EMSA2 y EMSA5. Una forma moderna de relleno para primitivas asimétricas es OAEP aplicada al algoritmo RSA , cuando se utiliza para cifrar un número limitado de bytes.
Esta operación se denomina "relleno" porque, originalmente, simplemente se añadía material aleatorio al mensaje para que tuviera la longitud suficiente para la primitiva. Esta forma de relleno no es segura y, por lo tanto, ya no se utiliza. Un esquema de relleno moderno busca garantizar que el atacante no pueda manipular el texto plano para explotar la estructura matemática de la primitiva y, por lo general, irá acompañado de una prueba, a menudo basada en el modelo de oráculo aleatorio , que demuestra que romper el esquema de relleno es tan difícil como resolver el problema complejo subyacente a la primitiva.
Análisis del tráfico y protección mediante acolchado
Incluso con rutinas criptográficas perfectas, el atacante puede obtener información sobre la cantidad de tráfico generado. Puede que no sepa de qué hablaban Alice y Bob , pero sí que hablaban y cuánto . En ciertas circunstancias, esta filtración puede ser muy comprometedora. Por ejemplo, cuando un ejército organiza un ataque secreto contra otra nación: basta con alertarla para que sepa que se está llevando a cabo una intensa actividad secreta.
Como otro ejemplo, al cifrar transmisiones de Voz sobre IP que utilizan codificación de tasa de bits variable, el número de bits por unidad de tiempo no se oculta, y esto puede explotarse para adivinar frases habladas. [ 12 ] De manera similar, los patrones de ráfaga que producen los codificadores de video comunes suelen ser suficientes para identificar de forma única el video en streaming que un usuario está viendo. [ 13 ] Incluso el tamaño total de un objeto, como un sitio web, un archivo, una descarga de paquete de software o un video en línea, puede identificar de forma única un objeto, si el atacante conoce o puede adivinar un conjunto conocido del que proviene el objeto. [ 14 ] [ 15 ] [ 16 ] El canal lateral de longitud de contenido cifrado se utilizó para extraer contraseñas de comunicaciones HTTPS en los conocidos ataques CRIME y BREACH . [ 17 ]
Rellenar un mensaje cifrado puede dificultar el análisis del tráfico al ocultar la longitud real de su contenido. La longitud a la que se rellena un mensaje puede elegirse de forma determinista o aleatoria; cada enfoque tiene ventajas y desventajas que se aplican en diferentes contextos.
Relleno aleatorio
Se puede añadir un número aleatorio de bits o bytes de relleno adicionales al final de un mensaje, junto con una indicación de la cantidad de relleno añadido. Si la cantidad de relleno se elige como un número aleatorio uniforme entre 0 y un máximo M, por ejemplo, un intruso no podrá determinar la longitud del mensaje con precisión dentro de ese rango. Si el relleno máximo M es pequeño en comparación con el tamaño total del mensaje, este relleno no añadirá mucha sobrecarga , pero solo ocultará los bits menos significativos de la longitud total del objeto, dejando la longitud aproximada de los objetos grandes fácilmente observable y, por lo tanto, potencialmente identificable de forma única por su longitud. Por el contrario, si el relleno máximo M es comparable al tamaño de la carga útil, la incertidumbre de un intruso sobre el tamaño real de la carga útil del mensaje es mucho mayor, a costa de que el relleno pueda añadir hasta un 100 % de sobrecarga ( 2× desbordamiento) al mensaje.
Además, en escenarios comunes donde un intruso tiene la oportunidad de ver muchos mensajes consecutivos del mismo remitente, y esos mensajes son similares de maneras que el atacante conoce o puede adivinar, entonces el intruso puede usar técnicas estadísticas para disminuir e incluso eliminar el beneficio del relleno aleatorio. Por ejemplo, supongamos que la aplicación de un usuario envía regularmente mensajes de la misma longitud, y el intruso conoce o puede adivinar este hecho basándose, por ejemplo, en la huella digital de la aplicación del usuario. Alternativamente, un atacante activo podría inducir a un punto final a enviar mensajes regularmente, como si la víctima fuera un servidor público. En tales casos, el intruso puede simplemente calcular el promedio de muchas observaciones para determinar la longitud de la carga útil del mensaje regular.
Relleno determinista
Un esquema de relleno determinista siempre rellena la carga útil de un mensaje de una longitud determinada para formar un mensaje cifrado con una longitud de salida correspondiente. Cuando varias longitudes de carga útil se corresponden con la misma longitud de salida rellena, un intruso no puede distinguir ni obtener información sobre la longitud real de la carga útil dentro de uno de estos intervalos de longitud , incluso después de observar repetidamente la transmisión de mensajes de longitud idéntica. En este sentido, los esquemas de relleno deterministas tienen la ventaja de no filtrar información adicional con cada mensaje sucesivo del mismo tamaño de carga útil.
Por otro lado, supongamos que un intruso puede beneficiarse al conocer pequeñas variaciones en el tamaño de la carga útil, como por ejemplo, una diferencia de un byte en un ataque de adivinación de contraseñas. Si el remitente tiene la mala suerte de enviar muchos mensajes cuyas longitudes de carga útil varían en un solo byte, y esa longitud se encuentra justo en el límite entre dos de las clases de relleno deterministas, entonces estas longitudes de carga útil con una variación de un byte producirán consistentemente longitudes de relleno diferentes (por ejemplo, un bloque con una variación de un byte), filtrando precisamente la información detallada que el atacante desea. Frente a estos riesgos, el relleno aleatorio puede ofrecer mayor protección al ocultar de forma independiente los bits menos significativos de las longitudes de los mensajes.
Los métodos de relleno deterministas comunes incluyen el relleno a un tamaño de bloque constante y el relleno a la siguiente potencia de dos mayor. Sin embargo, al igual que el relleno aleatorio con una pequeña cantidad máxima M , el relleno determinista a un tamaño de bloque mucho menor que la carga útil del mensaje oculta solo los bits menos significativos de la longitud real del mensaje, dejando la longitud aproximada real del mensaje en gran medida desprotegida. El relleno de mensajes a una potencia de dos (o cualquier otra base fija) reduce la cantidad máxima de información que el mensaje puede filtrar a través de su longitud de O (log M ) a O (log log M ) . Sin embargo, el relleno a una potencia de dos aumenta la sobrecarga del tamaño del mensaje hasta en un 100%, y el relleno a potencias de bases enteras mayores aumenta aún más la sobrecarga máxima.
El esquema PADMÉ, propuesto para blobs aleatorios uniformes rellenos o PURBs , rellena determinísticamente los mensajes a longitudes representables como un número de punto flotante cuya mantisa no es más larga (es decir, no contiene más bits significativos) que su exponente. [ 16 ] Esta restricción de longitud asegura que un mensaje filtre como máximo O (log log M ) bits de información a través de su longitud, como el relleno a una potencia de dos, pero incurre en una sobrecarga mucho menor, como máximo un 12 % para mensajes pequeños y disminuyendo gradualmente con el tamaño del mensaje.
Véase también
- Recortar y aventar , mezclando grandes cantidades de tonterías antes de enviar
- El robo de texto cifrado es otro método para lidiar con mensajes que no son múltiplos de la longitud del bloque.
- Vector de inicialización , sal (criptografía) , que a veces se confunden con relleno
- Encapsulación de claves , una alternativa al relleno para sistemas de clave pública utilizados para intercambiar claves simétricas.
- PURB o blob aleatorio uniforme con relleno , una disciplina de cifrado que minimiza la fuga de metadatos o longitud.
- La cópula rusa , otra técnica para prevenir las cunas
Referencias
- ↑ Gordon Welchman , La historia de la cabaña seis: Descifrando los códigos Enigma , pág. 78.
- 1 2 3 Willmott, HP (19 de agosto de 2005). «El gran día de la ira: 25 de octubre de 1944». La batalla del golfo de Leyte: La última acción de la flota . Indiana University Press. ISBN 9780253003515.
- 1 2 3 Tuohy, William (2007). Los almirantes combatientes de Estados Unidos: Ganando la guerra en el mar durante la Segunda Guerra Mundial . MBI Publishing Company. ISBN 9780760329856.
- ↑ NIST. "FIPS 180-4 Estándar de hash seguro (SHS)" (PDF) . NIST..
- ↑ https://www.cs.columbia.edu/~smb/classes/s09/l05.pdf , pág. 17
- ↑ "Encadenamiento de bloques de cifrado ANSI X9.23" . Centro de conocimiento de IBM . IBM . Consultado el 31 de diciembre de 2018 .
- ^ Catálogo ISO, ISO 10126-1:1991
- ^ Catálogo ISO, ISO 10126-2:1991
- ↑ Catálogo ISO, ISO/IEC 7816-4:2005
- ↑ ISO/IEC 10118-1:2016 Tecnología de la información – Técnicas de seguridad – Funciones hash – Parte 1: Generalidades
- ↑ ISO/IEC 9797-1:2011 Tecnología de la información – Técnicas de seguridad – Códigos de autenticación de mensajes (MAC) – Parte 1: Mecanismos que utilizan un cifrado por bloques
- ↑ Wright, Charles V.; Ballard, Lucas; Coull, Scott E.; Monrose, Fabian; Masson, Gerald M. (1 de diciembre de 2010). "Descubriendo frases habladas en conversaciones de voz sobre IP encriptadas". ACM Transactions on Information and System Security . 13 (4): 35. CiteSeerX 10.1.1.363.1973 . doi : 10.1145/1880022.1880029 . S2CID 9622722 .
- ↑ Schuster, Roei; Shmatikov, Vitaly; Tromer, Eran (agosto de 2017). Belleza y explosión: identificación remota de flujos de vídeo cifrados . Simposio de seguridad USENIX .
- ↑ Hintz, Andrew (abril de 2002). «Identificación de sitios web mediante análisis de tráfico». Tecnologías para la mejora de la privacidad . Taller internacional sobre tecnologías para la mejora de la privacidad. Notas de clase en informática. Vol. 2482. págs. 171–178 . doi : 10.1007/3-540-36467-6_13 . ISBN 978-3-540-00565-0.
- ↑ Sun, Qixiang; Simon, DR; Wang, Yi-Min; Russell, W.; Padmanabhan, VN; Qiu, Lili (mayo de 2002). "Identificación estadística del tráfico de navegación web cifrado". Actas del Simposio IEEE de 2002 sobre Seguridad y Privacidad . Simposio IEEE sobre Seguridad y Privacidad. págs. 19–30 . doi : 10.1109/SECPRI.2002.1004359 . ISBN 0-7695-1543-6.
- 1 2 Nikitin, Kirill; Barman, Ludovic; Lueks, Wouter; Underwood, Matthew; Hubaux, Jean-Pierre; Ford, Bryan (2019). "Reducción de la fuga de metadatos de archivos cifrados y comunicación con PURBs" (PDF) . Actas sobre tecnologías de mejora de la privacidad (PoPETS) . 2019 (4): 6–33 . arXiv : 1806.03160 . doi : 10.2478/popets-2019-0056 . S2CID 47011059 .
- ↑ Sheffer, Y.; Holz, R.; Saint-Andre, P. (febrero de 2015). Resumen de los ataques conocidos a Transport Layer Security (TLS) y Datagram TLS (DTLS) (Informe).
Lecturas adicionales
- XCBC: csrc.nist.gov/groups/ST/toolkit/BCM/documents/workshop2/presentations/xcbc.pdf
- Criptografía
- Algoritmos de relleno