¿Cuánto tiempo tomaría la fuerza bruta del cifrado AES?

1

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.

    
pregunta 0111010001110000 17.08.2013 - 17:52
fuente

1 respuesta

3

Hay algunas cosas aquí. En primer lugar, no es necesario cifrar un hash. El punto de un hash es proteger la contraseña original. El cifrado simétrico además de eso no agrega mucho, ya que es bastante probable que la clave se vea comprometida si sus servidores están comprometidos de todos modos (lo que debería ser la única forma en que alguien se vaya con su base de datos de usuario).

Segundo, si estás usando un IV aleatorio pero no veo que se almacene. No estoy tan familiarizado con mcrypt específicamente, así que perdóneme si se ocupa de almacenar la IV en algún formato con la salida encriptada, pero si no almacena la IV de alguna manera, el descifrado será imposible.

Tercero, use un hash criptográfico lento y seguro como bcrypt en lugar de SHA256 y obtendrá mucha más seguridad del hash en sí. La velocidad de hash es mala y el cifrado es innecesario e ineficaz. Use un hash lo suficientemente lento para que generar tablas arcoiris tenga un costo prohibitivo pero la verificación no lo es y usted debería estar bien.

    
respondido por el AJ Henderson 17.08.2013 - 18:10
fuente

Lea otras preguntas en las etiquetas