¿Cómo se convierte el factor de costo BCRYPT de password_hash () de PHP en tiempos de cálculo de craqueo?

5

Estoy tratando de entender completamente la relación entre los factores BCRYPT ' COST y cuánto tiempo más le tomaría a una máquina descifrar una contraseña con PHP a password_hash ()

Los tiempos de cifrado que observé en un servidor promedio para password_hash () son:

COST 14 takes 1.23s to 2s
COST 13 takes 0.6 to 1s
COST 12 takes about 0.3s
COST 11 takes about 0.15s
COST 10 takes about 0.08s
COST 09 takes about 0.04s
  1. ¿El número de rondas es linealmente proporcional al tiempo empleado?

  2. ¿Se requiere el tiempo de cálculo para descifrar una contraseña en la misma escala lineal o exponencial?

por ejemplo Si un hash COST 10 demoraba 1 minuto en romperse. ¿Cuánto tiempo estamos mirando con COST 14 para la misma contraseña? Supongo que esto variaría dependiendo de la contraseña de la entropía. Así que tomemos una contraseña de 10 letras bastante débil, como "EasyCrack1", como base para el razonamiento.

    
pregunta hexalys 14.04.2015 - 07:52
fuente

1 respuesta

7

Como se documenta de manera bastante indirecta en la página para la función crypt () , el parámetro cost es el logaritmo base-2 del recuento de iteraciones, o dicho de otra manera, cada aumento de +1 a cost representa una duplicación del número de iteraciones.

Si un hash de costo-10 tarda un minuto en resquebrajarse, un costo-14 tomaría 2 ^ (14-10) = 16 minutos. Descifrar un hash criptográfico como bcrypt consiste en adivinar cuál es la contraseña, realizar el hash y ver si los hashes coinciden, por lo que la dificultad del cracking aumenta proporcionalmente con el tiempo de hashing. Al igual que al aumentar el costo en 1 el tiempo de hash, se duplica el esfuerzo involucrado en romper el hash.

    
respondido por el Mark 14.04.2015 - 09:19
fuente

Lea otras preguntas en las etiquetas