Según mi entender, el IV se usa como un bloque anterior solo para el primer bloque. Pero dado que cada bloque es usado por lo siguiente, esto agrega que la seguridad es que se proporciona un IV y no se basa en la contraseña.
Por lo tanto, implementé un sistema de inicio de sesión cuando el usuario proporciona ambos, distintos con un mínimo de 8 caracteres usando cualquier carácter que les importe, siempre que utilicen al menos 3 tipos (superior, inferior, numérico, especial, no ASCII).
Pero ahora alguien me dijo que al definir el IV, debilito el cifrado, ya que eso haría que la contraseña sea inútil.
No entendí exactamente su explicación.
Mi código se ve así:
$hash = openssl_encrypt($username, 'aes-256-cbc', $password, false, md5($iv, true));
- Sí, estoy cifrando el nombre de usuario
- Tanto la contraseña como la IV son definidas por el usuario
- Sí, les estoy pidiendo dos contraseñas
- Estoy envolviendo la IV en RAW md5 para garantizar que obtenga una longitud estándar de 16 chr
¿Alguien puede aclarar si el uso IV de esta manera es una buena práctica y esta idea es lo suficientemente fuerte?