Estoy intentando escribir un código seguro que pueda mantener las contraseñas de los usuarios de mi sitio lo más seguras posible. Ahora soy bastante nuevo en el cifrado y me gustaría recibir algunas opiniones y sugerencias profesionales. Además de una estimación bruta de cuánto tiempo llevaría a la fuerza bruta mi método de cifrado actual.
Por lo tanto, mi cifrado comienza con la creación de un valor SALT aleatorio como tal
$salt = dechex(mt_rand(0, 2147483647)) . dechex(mt_rand(0, 2147483647));
Después de crear el valor SALT, se realiza un hash con SHA-256 como tal
$password = hash('sha256', $_POST['bindPass'] . $salt);
Después de que el $ hash de contraseña sea creado, re-hash los valores para asegurarlos más lejos
for($round = 0; $round < 656757; $round++)
{
$password = hash('sha256', $password . $salt);
}
Ahora, una vez que se haya completado el lavado, el cifrado está vinculado a una función y se agrega directamente a la consulta de inserción de PDO. Aquí está la función de cifrado.
function encrypt_cpass($in)
{
$iv_size = mcrypt_get_iv_size(MCRYPT_TWOFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$enc = mcrypt_encrypt(MCRYPT_TWOFISH,ENCRYPT_KEY, $in, MCRYPT_MODE_ECB, $iv);
$enc = base64_encode($enc);
return $enc;
}
Y finalmente la parte de la DOP
$query_params = array(
':password' => encrypt_cpass($password),
..........
}
No puedo decir que tenga un mal rendimiento con el siguiente código y la secuencia de comandos, pero me preocupa más que pueda estar haciendo la contraseña de manera no segura y que eventualmente se rompa. Nuevamente, si tiene alguna sugerencia o podría indicarme algunos buenos recursos, por favor publíquelos.
Saludos.