Longitud de clave y función hash en PBKDF2

3

En esta página:

enlace

hacen una declaración que me parece bastante rara:

  

Longitud de la llave

     

Especifica la longitud en bytes de la salida que se generará. Normalmente, la longitud de la clave debe ser mayor o igual a la longitud de salida de la función de compendio subyacente.

Entonces, si nos tomamos esto en serio, si estamos usando SHA-512 (64 bytes), solo deberíamos obtener tamaños de clave que sean más de 64 bytes. Esto significaría que no podemos (o no) obtener claves de 32 bytes para usar con AES-256.

Pero de acuerdo con esta lógica, deberíamos optar por SHA-1 (20 bytes), ya que 32 bytes ahora son más grandes que los 20 bytes de SHA-1.

¿Qué me estoy perdiendo?

    
pregunta user21203 26.02.2013 - 21:12
fuente

1 respuesta

7

La afirmación es extraña, ya que proviene de un reflejo ritualista reflejo de la longitud de las claves.

El texto completo de la página es:

  

Especifica la longitud en bytes de la salida que se generará. Normalmente, la longitud de la clave debe ser mayor o igual a la longitud de salida de la función de compendio subyacente, de lo contrario, un atacante podría simplemente intentar forzar la clave con fuerza bruta. De acuerdo con PKCS # 5, la seguridad está limitada por la longitud de salida de la función de resumen subyacente, es decir, la seguridad no se mejora si se elige una longitud de clave estrictamente mayor que la longitud de salida de resumen. Por lo tanto, cuando se utiliza PKCS5 para el almacenamiento de contraseñas, basta con almacenar valores iguales a la longitud de salida del resumen, no se gana nada almacenando valores más grandes.

Hay algo de confusión aquí, de hecho. Veamos los detalles:

  • PBKDF2 es una Key Derivation Function : su salida puede tener una longitud configurable y debe ser una" clave ".

  • La clave para la criptografía no debe ser demasiado pequeña, para evitar ser inherentemente débil. Por ejemplo, una clave DES, que tiene 56 bits de longitud (ok, 64 bits, pero se ignoran 8 bits, por lo que 56 bits "reales"). Sin embargo, más allá de los 100 bits, la búsqueda exhaustiva es tan ridículamente cara que deja de ser una amenaza.

  • De manera similar, PBKDF2 puede ser "atacado" con un esfuerzo de costo 2n si la función hash subyacente tiene una salida de n bits. Esto es totalmente inviable incluso si se usa MD5 (128 bits ya son suficientes para eso). Pero, en una cierta luz burocrática , PBKDF2 tiene "fuerza n bits".

Así es el razonamiento: si usa PBKDF2 para generar una clave que no tenga al menos n bits, entonces su clave es "más débil" de lo que pudo haber producido PBKDF2. Ahora sería un poco estúpido negarse a generar una clave de 128 bits con PBKDF2 / SHA-256 porque SHA-256 ofrece "seguridad de 256 bits". Pero tiene algún tipo de sentido retorcido, si se ve a través de un prisma de procedimiento por un auditor frustrado que no tiene idea de lo que realmente es una clave .

Resumen: ignora ese extraño pasaje del documento. Use PBKDF2 con HMAC / SHA-256 o HMAC / SHA-512, lo que haga flotar su bote (SHA-512 podría ser un poco más fuerte contra el atacante que usa GPU, ya que se venden a principios de 2013, porque actual GPU son malos haciendo aritmética de 64 bits). Genere la longitud de clave que necesita para el algoritmo en cuestión. De todos modos, 128 bits son más que suficientes para claves simétricas.

    
respondido por el Tom Leek 26.02.2013 - 21:38
fuente

Lea otras preguntas en las etiquetas