¿Son útiles varias iteraciones de bcrypt?

1

¿Cómo se comparan estas dos formas de hash, en cuanto a seguridad?

bcrypt(15, bcrypt(15, bcrypt(15, bcrypt(15, "password"))))

bcrypt(15, "password")

Sé que, por lo general, la iteración en un método de hash no lo hace más seguro, pero cuando un atacante encuentra el texto plano del primer bcrypt, ¿no es este texto llano otro hash bcrypt que tiene que fuerza de fuerza bruta nuevamente ¿Esto tantas veces como iteraciones?

    
pregunta Magix 11.08.2016 - 10:14
fuente

2 respuestas

4

BCrypt estaba bien diseñado y se pensó mucho en su operación. Hay un ajuste especial incluido llamado Factor de trabajo destinado a agregar trabajo cuando el atacante intenta descifrar la contraseña.

Estas dos soluciones tardan el mismo tiempo en calcularse.

bcrypt(15, bcrypt(15, bcrypt(15, bcrypt(15, "password"))))

bcrypt(17, "password")

(el factor de trabajo 16 toma el doble de tiempo que 15, y 17 toma cuatro veces más tiempo que 15)

No hay nada de beneficio en complicar el proceso del código. Simplemente elige el factor de trabajo ideal. Por lo general, sugiero que ajuste el factor de trabajo para que se demore unos 100 ms en completarse (con la protección Bruto DoS adecuada) en su hardware de destino. (teniendo en cuenta que el hardware del atacante probablemente sea más rápido)

Si está buscando formas de mejorar esto, le sugeriría a Pepper en espera antes de la contraseña. Pepper es simplemente una cadena aleatoria que no se almacena con el hash en sí. Puede codificar el pimiento en su aplicación o guardarlo en un archivo de texto separado. (No en la base de datos) Recomiendo usar un pimiento con 72 bits de entropía. (12 caracteres Base64 o 18 caracteres hexadecimales)

Dado que BCrypt tiene un longitud máxima de 55-56 bytes , puede ser sabio ejecutar primero un hash SHA-256 en el Pepper y la Contraseña, para lograr una cadena hexadecimal de 32 caracteres consistente, que se adapte bien en BCrypt. (de lo contrario, suponiendo que haya utilizado un pimiento de 12 caracteres, se truncará cualquier carácter más allá de una contraseña de 43 bytes) Gracias @Walfrat .

    
respondido por el George Bailey 11.08.2016 - 15:12
fuente
3

El algoritmo de BCrypt ya está a punto de realizar un bucle en sus propios datos, si desea más seguridad, aumente el factor de carga (su 15 aquí).

Además, de acuerdo con este post: ¿Tiene bcrypt una longitud máxima de contraseña? ? , BCrypt tiene una longitud máxima de 50 ~ 55 bytes y de acuerdo con este ( enlace ) un hash Bcrypt tiene una longitud de 59 ~ 60 bytes. Por lo tanto, simplemente no funcionará o puede terminar mal dependiendo de la implementación.

    
respondido por el Walfrat 11.08.2016 - 10:50
fuente

Lea otras preguntas en las etiquetas