¿Qué es hashear?
Hashear consiste en transformar mediante una función unidireccional un dato en claro (por ejemplo, una contraseña) a una cadena de longitud fija. La misma entrada produce siempre el mismo hash, pero no es posible recuperar el texto en claro a partir del hash. La fachadaHash de Laravel soporta los algoritmos bcrypt y Argon2 para el almacenamiento seguro de contraseñas.
Comparación de algoritmos
El “work factor” de bcrypt controla el tiempo que se tarda en generar el hash. Cuanto más lento sea el hash, mayor será la resistencia frente a ataques de fuerza bruta. A medida que el hardware se vuelve más rápido, puedes ir subiendo el work factor para mantener el nivel de seguridad.
Flujo de hasheo y verificación
Configuración
Por defecto, Laravel usa el driverbcrypt. Puedes cambiarlo con la variable de entorno HASH_DRIVER.
config:publish.
config/hashing.php.
Uso básico
Hashear una contraseña
Al pasar el texto en claro aHash::make() se devuelve el hash. Ese hash es lo que guardas en la base de datos.
Ajustar el work factor de bcrypt
La opciónrounds ajusta el coste de generar el hash. Cuanto mayor sea el valor, más seguro, pero también más lento.
El valor por defecto (12) es adecuado para la mayoría de aplicaciones.
Ajustar el work factor de Argon2
Con Argon2 puedes ajustar el coste con las opcionesmemory, time y threads.
Verificación de contraseñas
ConHash::check() puedes comprobar si una contraseña en claro coincide con el hash guardado.
Es un uso típico dentro del proceso de login.
Auth::attempt(), esto se hace automáticamente y no necesitas llamarlo directamente.
Hash::check() es útil cuando quieres comprobar la contraseña actual manualmente.
Detección de necesidad de rehash
ConHash::needsRehash() puedes comprobar si el work factor con el que se generó el hash es distinto de la configuración actual.
Se usa para actualizar los hashes existentes tras haber cambiado el work factor.
Verificación del algoritmo del hash
Por defecto,Hash::check() verifica que el hash se haya generado con el algoritmo configurado actualmente.
Si el algoritmo difiere, se lanza una RuntimeException.
Esto ayuda a prevenir ataques por manipulación del algoritmo del hash.
Si estás migrando algoritmos y necesitas soportar varios simultáneamente, puedes desactivar esta verificación estableciendo HASH_VERIFY a false.
Resumen
Próximos pasos
Introducción a la autenticación
Aprende una visión general de la autenticación, incluida la implementación del login con
Hash::check().