¿Existe algún riesgo / beneficio de seguridad al agregar un relleno adicional (más allá de lo que se requiere) cuando se usa AES-256 para cifrar cadenas muy cortas?

4

Me gustaría cifrar algunos tokens de autenticación utilizando AES 256 (no está vinculado a este algoritmo, pero parece ser una opción razonable). Estos mensajes son generalmente muy cortos en 128-256 bits. Estoy preocupado principalmente por la seguridad, no muy preocupado por la longitud del texto cifrado o el rendimiento en el cifrado o descifrado. Estos son secretos compartidos, así que tengo que poder obtener el texto simple.

Tengo curiosidad por si es beneficioso cualquier relleno adicional más allá de lo que se requiere para que el mensaje coincida con el tamaño de bloque.

Para aclarar esto, no se trata de rellenar el mensaje para que pueda ejecutarse a través del algoritmo de cifrado, sino que obtendría algo al rellenar el mensaje para decir 1024 bits en lugar de 256 cuando el mensaje es muy corto. Ya estoy usando un IV ya que estoy reutilizando una clave.

Si hago un pad de una longitud adicional, ¿debería usar un solo carácter o colocar un flujo de datos al azar?

Mi preocupación es que al rellenar solo a 256 bits potencialmente puedo traicionar el tamaño del secreto (aunque la mayoría de ellos son más cortos que el tamaño del bloque).

    
pregunta Aea 27.08.2014 - 06:50
fuente

3 respuestas

4

El relleno más largo no tiene desventajas en cuanto a seguridad y la ventaja es que filtra menos información sobre la longitud del texto sin formato. El único inconveniente de un mayor relleno es el mayor tamaño del texto cifrado, por lo que siempre que considere que el relleno aceptable para un tamaño mayor de bloque es una buena opción. Por ejemplo, en una aplicación de chat, rellenaría múltiplos de 256 bytes o incluso bloques más grandes.

En principio, cualquier relleno funciona bien, siempre que pueda eliminarlo sin ambigüedades. Recomiendo el relleno determinista en lugar del relleno aleatorio, simplifica las pruebas y evita las preocupaciones sobre los canales ocultos . Una IV adecuada ya agrega toda la aleatoriedad que necesita, y se asume que AES es seguro contra ataques conocidos de texto simple.

Los rellenos típicos son 0x80 seguido de tantos 0x00 como quieras, o tantos 0x00 como quieras, seguido por la longitud del relleno o la longitud del texto en claro. Un solo byte no funciona, ya que no puede saber si un byte todavía es parte del relleno o ya forma parte del mensaje.

Como siempre, recuerde usar un modo de cifrado autenticado con un mensaje por mensaje IV. AES-GCM es popular, pero la opción convencional de AES-CBC combinada con HMAC en el orden de cifrar y luego MAC también está bien, si logras implementarlo correctamente.

    
respondido por el CodesInChaos 27.08.2014 - 10:23
fuente
2

Hay una ganancia de seguridad, y es justo lo que mencionaste.

Si un atacante sabe que las diferentes longitudes de cyphertext significan algo, no necesita descifrar el mensaje.

La situación más extrema (libro de texto) es cuando tiene N mensajes, y cada uno tiene una longitud diferente. Si el atacante sabe lo que significa cada uno de esos mensajes, puede deducir el tipo de mensaje, pero aún así perder algunos detalles. Esto sigue siendo un error de seguridad, ya que el atacante puede inferir algo del mensaje, mientras que la criptografía (buena) no debe revelar nada que el atacante no supiera antes de ver el texto cifrado.

En el lado del riesgo, siempre y cuando no uses el modo ECB, deberías estar bien.

    
respondido por el HocusPocus 27.08.2014 - 09:38
fuente
0

El relleno adicional no necesariamente aumenta la seguridad en este escenario. Solo aumenta el tiempo de descifrado. No está realizando ninguna otra operación en la entrada rellenada antes de enviarla a través del algoritmo para el cifrado. Si emplea un protocolo personalizado que realiza operaciones adicionales en el texto plano y utiliza el algoritmo aes, podría haber un aumento en la seguridad. (Por favor, no intentes eso, ya que los protocolos personalizados casi siempre son fáciles de romper hasta que no estén respaldados por Cryptanalysts)

También debes considerar el relleno de los ataques de Oracle. Siempre y cuando no uses ningún esquema de relleno estandarizado y uses bytes aleatorios para el relleno, podrías superar este ataque.

    
respondido por el Pelo 27.08.2014 - 10:25
fuente

Lea otras preguntas en las etiquetas