¿Es una buena práctica usar contraseñas SHA512 antes de pasarlas a bcrypt?

9

Quiero permitir que se puedan enviar contraseñas de cualquier tamaño. Actualmente utilizo bcrypt como una función de derivación de claves para contraseñas, sin embargo, me he dado cuenta de que tiene una longitud de entrada máxima de 72.

Debido a esto, me gustaría usar las contraseñas de sha512 antes de pasarlas a bcrypt, permitiendo que se registren contraseñas de cualquier tamaño, porque entiendo que sha512 genera 64 bytes.

¿Está bien esta práctica? He oído que mezclar y combinar hashes, o "crear tu propio criptografía" es una mala práctica, pero esto parece ser una solución viable hasta el límite difícil.

Gracias.

    
pregunta InvokeStatic 21.06.2014 - 23:46
fuente

3 respuestas

13

Hashear contraseñas con una función hash segura y decente antes de introducirlas en bcrypt es una forma razonable y segura de mantener todo lo bueno de bcrypt y, además, admitir contraseñas de tamaño arbitrario.

Todavía quieres tener cuidado con algunos detalles prácticos. En particular, muchas implementaciones de bcrypt esperan una contraseña , es decir, una secuencia de caracteres, que termina con el primer byte de valor 0x00. La salida de SHA-512 es binaria y, por lo tanto, puede contener algunos bytes de valor 0x00. Por ejemplo, 1/25 de todas las contraseñas generará un valor de hash que comienza con un byte de valor 0x00, que una instancia de bcrypt basada en cadenas entenderá como equivalente a una contraseña vacía. Esto no es bueno ...

La solución es usar una codificación determinista de bytes a caracteres, por ejemplo. Base64 . Dado que esto implica una extensión de tamaño, SHA-512 ya no será adecuado (Base64 convierte 64 bytes en 88 caracteres, más que el límite de 72 de bcrypt). Por lo tanto, use SHA-256: la salida de 256 bits (32 bytes) será codificada por Base64 en 44 caracteres, y eso estará bien con bcrypt.

(El tamaño de salida de 512 bits de SHA-512 es un exceso excesivo de todos modos. SHA-256 es lo suficientemente bueno.)

    
respondido por el Thomas Pornin 22.06.2014 - 01:09
fuente
1

Por lo que sé, la función de hash de criptografía hace un prehash de entrada y luego se acepta el resultado con una función de hash de contraseña.

Mozilla sugiere un hmac + bcrypt , si elige SHA512 para HMAC, eso debería estar bien. (Creo que SHA512 es el mismo tipo de exageración que AES256, por lo que podría ahorrar algunos ciclos de CPU utilizando SHA256 sin sacrificar la seguridad)

La función de hash de contraseñas de Makwa, que es una candidata en la competencia de hash de contraseñas por Thomas Pornin en realidad tiene soporte para el hashing previo y posterior.

    
respondido por el Darsstar 21.06.2014 - 23:58
fuente
0

Esto no debilitará sus contraseñas ni agregará seguridad adicional. La entropía, incluso después del truncamiento para contraseñas más largas, seguirá siendo lo suficientemente alta. En realidad, PBKDF2, que también se usa a menudo para cifrar contraseñas, hace algo similar cuando la clave derivada de una contraseña excede el tamaño de bloque.

    
respondido por el Lucas Kauffman 21.06.2014 - 23:57
fuente

Lea otras preguntas en las etiquetas