Adición (criptografía)

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.

Criptografía clásica

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.

Criptografía simétrica

Funciones hash

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 .

Modo de cifrado

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 bits

El 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 bytes

El relleno de bytes se puede aplicar a los mensajes que se pueden codificar como un número entero de bytes.

ANSI X.923

En 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 10126

En 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 | PKCS7

PKCS#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-4

ISO/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 |

Relleno cero

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.

Criptografía de clave pública

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.

Análisis de tráfico

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.

Véase también

Notas

  1. Gordon Welchman , The Hut Six Story: Breaking the Enigma Codes , p. 78.
  2. Catálogo ISO, ISO 10126-1:1991 . Fecha de acceso: 8 de diciembre de 2015. Archivado desde el original el 9 de abril de 2016.
  3. Catálogo ISO, ISO 10126-2:1991 . Fecha de acceso: 8 de diciembre de 2015. Archivado desde el original el 9 de abril de 2016.
  4. Catálogo ISO, ISO/IEC 7816-4:2005 . Fecha de acceso: 8 de diciembre de 2015. Archivado desde el original el 4 de marzo de 2016.
  5. ISO/IEC 10118-1:2000 Tecnología de la información — Técnicas de seguridad — Funciones hash — Parte 1: Generalidades . Fecha de acceso: 8 de diciembre de 2015. Archivado desde el original el 18 de abril de 2016.
  6. ISO/IEC 9797-1:1999 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 de bloque . Fecha de acceso: 8 de diciembre de 2015. Archivado desde el original el 9 de abril de 2016.
  7. Descubrir frases habladas en conversaciones cifradas de voz sobre IP