¿No está utilizando pbkdf2 + scrypt + bcrypt mejor?

1

Ya que más lento es mejor y el estiramiento de las teclas es una forma increíble de aumentar la seguridad con respecto a las contraseñas de baja entropía, ¿no tiene sentido usar las tres?

Para ser claros, se trata de implementar una arquitectura de estiramiento clave para su software. Veo muchas disputas sobre cuál es la mejor, pero me parece que, simplemente use las tres.

    
pregunta Blaze 23.04.2016 - 00:57
fuente

3 respuestas

9

PBKDF2, scrypt y bcrypt son configurables ; Se pueden hacer tan lento como quieras. El punto límite no es la computadora, sino la paciencia del usuario.

Por ejemplo, suponga que el usuario se enfadará si el procesamiento de la contraseña (por ejemplo, para desbloquear un archivo de almacenamiento) demora más de 6 segundos. Si solo usa bcrypt, entonces puede afinarlo para que tarde 6 segundos en su máquina. Pero si usa PBKDF2 y scrypt y bcrypt en sucesión, entonces tendrán que encajar en el presupuesto de 6 segundos, lo que significa que, en la práctica, los configurará con un menor número de iteraciones, por ejemplo. 2 segundos cada uno. Desde ese punto de vista, usar tres algoritmos en sucesión no es mejor que uno; lo que importa es el tiempo total .

El punto de esta lentitud configurable es que dificulta las cosas para el atacante; desea elegir un algoritmo que haga que cada contraseña sea lo más cara posible para el atacante. El atacante no tiene necesariamente el mismo hardware que usted (por ejemplo, es probable que intente usar una GPU), por lo que cada algoritmo puede ser más o menos "bueno". El atacante siempre puede comprar una PC como la tuya, y así hacer en 6 segundos lo que haces en 6 segundos; sin embargo, el atacante a veces puede comprar un hardware más especializado que será mejor que el tuyo para esa tarea específica. Este es especialmente el caso con PBKDF2 y GPU. Como defensor, usted quiere evitar tal situación. Por lo tanto, algunos algoritmos son mejores que otros y, en la tríada PBKDF2 / bcrypt / scrypt, se puede suponer que un algoritmo es "más fuerte" en el sentido explicado anteriormente.

Por lo tanto, usar solo ese algoritmo, solo y con su configuración ajustada para que tome todo el tiempo que pueda tolerar, será óptimo. Por definición, el uso de los tres algoritmos en sucesión no puede ser tan sólido como ese único algoritmo solo. En la práctica, esto significa que debe usar bcrypt: el presupuesto que gasta en PBKDF2 es un desperdicio de seguridad, ya que, para el mismo uso de la CPU en su máquina, bcrypt habría brindado más resistencia (consulte esto para obtener algunos detalles sobre bcrypt vs scrypt, y that para más detalles sobre el hashing de contraseñas en general).

    
respondido por el Thomas Pornin 23.04.2016 - 03:57
fuente
1

En realidad es bastante peligroso hacerlo. Podría decir que está agregando puntos fuertes, pero en realidad está acumulando puntos débiles. PBKDF2 no tiene protección contra las GPU, por ejemplo, lo que significa que esas rondas son un esfuerzo inútil en su servidor que los usuarios / procesos deben esperar pero no contribuyen tanto a la seguridad como bcrypt (o scrypt). Bcrypt no tiene protección contra FPGAs. Scrypt está construido para soportar ambos. Por lo tanto, es mejor usar la función más fuerte.

Dicho esto, el NIST ha declarado que recomiendan el PBKDF2, que técnicamente es el más débil, pero probablemente sea lo suficientemente bueno. Sin embargo, siempre han sido ambivilentes hacia bcrypt. Scrypt es el nuevo chico en el bloque y, por lo tanto, no está tan probado como los demás.

    
respondido por el Caen 18.07.2017 - 15:22
fuente
0

Muy dependiente. Después de cierto punto, el cifrado simplemente no vale la pena. No importa lo seguro que puedas hacerlo. El hecho de que la técnica X sea más segura que la técnica Y si alguna vez se roban los datos es un argumento horrible, ya que en primer lugar debería haber implementado la seguridad adecuada para asegurarse de que no pudiera ser robada en primer lugar. Significa que estás tratando de resolver un problema respondiendo a otro problema que no tiene ninguna relación.

Si su vector de seguridad es "Si me roban el disco duro, ¿cómo me aseguro de que el contenido en él sea seguro?" incluso esto es aún una mala idea porque la respuesta real es tener algún tipo de almacenamiento de claves de cifrado de hardware desactivado, de modo que si roban el hardware, incluido el disco duro, no podrán descifrarlo a menos que adivinen la clave. El universo moriría para entonces si el cifrado se encuentra en un nivel suficientemente bueno que, en la mayoría de los casos, no utiliza solo dos de los que están en tándem.

Recuerda, tienes infinito posibles teclas. Si pudiera adivinar las adivinanzas infinitas en un marco de tiempo razonable, estaría realmente impresionado.

    
respondido por el Robert Mennell 23.04.2016 - 01:20
fuente

Lea otras preguntas en las etiquetas