¿Cuál debería ser el $cost
ideal en este caso para evitar un ataque de fuerza bruta incluso con ASIC o un FPGA
$cost = '06';
$secret_key = bin2hex(random_bytes(64));
$store_data = crypt($secret_key, '$2a$.$cost.$'.bin2hex(random_bytes(16)).'$')
Scenerio
La compañía le da al usuario $secret_key
generado por el código anterior para permitirle retirar dinero y esta clave secreta nunca debe ser adivinada por un pirata informático.
$store_data
es la cadena que almacenamos en nuestra base de datos.
Entonces, si un atacante obtiene acceso a la base de datos y aprende la variable $store_data
, no debería poder obtener $secret_key
.
He utilizado el algoritmo bcrypt para el hash pero no estoy seguro de que $cost = 6
sea lo suficientemente seguro en este caso.
Nota:
No usé password_hash
porque convertiré todo el código a Java en el futuro y en Java no hay un equivalente de password_hash