Adición ( eng. relleno ) en criptografía : la adición de datos sin sentido a la información cifrada, con el objetivo de aumentar la fuerza criptográfica . Se utilizaron varias técnicas de relleno en la criptografía clásica , las técnicas de relleno se utilizaron ampliamente en los sistemas de cifrado informático.
Los mensajes formales a menudo comienzan y terminan de manera predecible, como " Respetuosamente,... ". El propósito principal de aplicar la adición a los cifrados clásicos es privar al criptoanalista de la oportunidad de usar tal previsibilidad al criptoanalizar un texto conocido [1] . La longitud del relleno aleatorio también evita que el criptoanalista conozca la longitud exacta del mensaje.
Muchos cifrados clásicos utilizan patrones específicos (por ejemplo, cuadrados, rectángulos, etc.) como texto sin formato. Si el mensaje que se envía no se ajusta a la plantilla, a menudo es necesario rellenarlo para completar la plantilla. El uso de caracteres sin sentido como complemento en este caso también complica el trabajo del criptoanalista.
La mayoría de las funciones hash criptográficas modernas procesan mensajes en bloques de longitud fija y casi todas usan relleno hasta cierto punto.
Muchos esquemas de relleno se basan en agregar ciertos datos al último bloque. Por ejemplo, el relleno puede derivarse de la longitud total del mensaje. Este tipo de relleno generalmente se aplica a los algoritmos hash basados en la estructura Merkle-Damgor .
El libro de códigos electrónico (ECB) y el encadenamiento de bloques de cifrado (CBC) son ejemplos de modos de cifrado . Los modos de cifrado para los algoritmos de clave simétrica requieren que la longitud del mensaje sea un múltiplo del tamaño del bloque, por lo que es posible que sea necesario rellenar el mensaje para que tenga una longitud adecuada.
La desventaja del relleno es que hace que el texto sea vulnerable a los ataques de Oracle . Este ataque permite que un atacante obtenga conocimiento sobre el mensaje que se transmite sin atacar primitivamente el cifrado de bloque; este ataque se puede evitar asegurándose de que el atacante no pueda obtener ningún conocimiento sobre la eliminación de los bytes agregados. 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.
Relleno de bitsEl relleno de bits se puede aplicar a un mensaje de cualquier longitud. El mensaje se rellena con un bit 1 ('1') y una cierta cantidad de bits cero ('0'). El número de bits cero agregados depende del límite del bloque al que se debe rellenar el mensaje. En términos de bits, esto es "1000...0000". Este método se puede usar para rellenar mensajes con cualquier número de bits, no es absolutamente necesario que sean un número entero de bytes. Por ejemplo, un mensaje de 23 bits se rellena con 9 bits para llenar un bloque de 32 bits:
… | 1011 1001 1101 0100 0010 011 1 0000 0000 |
Este relleno es el primer paso en un esquema de relleno de dos etapas que se utiliza en muchas funciones hash, incluidas MD5 y SHA .
Relleno de bytesEl relleno de bytes se puede aplicar a los mensajes que se pueden codificar como un número entero de bytes.
ANSI X.923En ANSI X.923, los bytes se rellenan con ceros y el último byte especifica el límite de relleno o el número de bytes agregados.
Ejemplo: En el siguiente ejemplo, el bloque tiene un tamaño 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 04 | ISO 10126En ISO 10126 [2] [3], el relleno debe completarse con bytes aleatorios y el último byte debe indicar el número de bytes agregados.
Ejemplo: En el siguiente ejemplo, el bloque tiene un tamaño 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 | PKCS7PKCS#7 se describe en RFC 5652 .
Relleno en bytes completos. El valor de cada byte es igual a la cantidad de bytes agregados, es decir, se agregan N bytes con un valor de N. La cantidad de bytes agregados depende del límite del bloque al que se debe extender el mensaje. La adición será una de:
01 02 02 03 03 03 04 04 04 04 05 05 05 05 05 etc.Este método de relleno (así como los dos anteriores) solo está bien definido si N es menor que 256.
Ejemplo: En el siguiente ejemplo, el bloque tiene un tamaño 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 | ISO/IEC 7816-4ISO/IEC 7816 -4:2005 [4] es idéntico al esquema de relleno de bits aplicado al texto de N bytes. En la práctica, esto significa que el primer byte adicional es necesariamente '80', seguido de 0 a N-1 bytes '00' si es necesario, hasta que se alcanza un límite de bloque. ISO/IEC 7816-4 es un estándar de comunicación para tarjetas inteligentes y no contiene ninguna especificación criptográfica.
Ejemplo: En el siguiente ejemplo, el bloque tiene un tamaño 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 el relleno con un solo byte:
... | DD DD DD DD DD DD DD DD | DD DD DD DD DD DD DD 80 |Todos los bytes que deben rellenarse se rellenan con ceros. El esquema de relleno de ceros no está reconocido por el estándar, aunque se describe como un método de relleno de 1 para funciones hash y MAC en ISO/IEC 10118-1 [5] e ISO/IEC 9797-1 . [6]
Ejemplo: En el siguiente ejemplo, el bloque tiene un tamaño 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 ser irreversible si el mensaje original finaliza con uno o más bytes nulos, lo que hace imposible distinguir los bytes de texto sin formato de los bytes de relleno.
En la criptografía de clave pública, el relleno es la forma en que se prepara un mensaje para el cifrado o la firma con los siguientes esquemas: PKCS#1 , OAEP , PSS , PSSR, IEEE P1363 EMSA2 y EMSA5. El formulario de relleno moderno para primitivas asimétricas se aplica al algoritmo RSA cuando se utiliza para cifrar un número limitado de bytes.
La operación se llama "Adición" porque inicialmente el material aleatorio simplemente se agrega al mensaje. Esta forma de adición no es segura y, por lo tanto, ya no se usa.
Incluso si se utilizan procedimientos criptográficos perfectos, un atacante puede conocer la cantidad de tráfico que se ha generado. El atacante no puede saber específicamente qué estaban transmitiendo Alice y Bob , pero puede saber qué mensaje se transmitió y cuánto tiempo tomó. En algunas situaciones, esto puede ser muy malo. Por ejemplo, cuando los países organizan un ataque secreto contra otro país: esto puede ser suficiente para alertar a ese país, haciéndole saber que hay mucha actividad clandestina en curso.
Como otro ejemplo, al cifrar flujos de voz sobre IP que usan codificación de tasa de bits variable, la cantidad de bits por unidad de tiempo no se oculta y esto puede servir para adivinar la frase de voz. [7]
Agregar un mensaje ayuda a que el análisis del tráfico sea más difícil. Por lo general, los bits aleatorios se agregan al final del mensaje para indicar cuántos bits hay en total.
Criptosistemas simétricos | |
---|---|
Cifrados de flujo | |
Red Feistel | |
red SP | |
Otro |
Funciones hash | |
---|---|
propósito general | |
Criptográfico | |
Funciones de generación de claves | |
Número de cheque ( comparación ) | |
Hachís |
|