Qué es Bcrypt y por que usarlo?
Bcrypt es un algoritmo de hasheo de contraseñas creado en 1999 por Niels Provos y David Mazieres. A diferencia de funciones hash rapidas como MD5 o SHA-256, bcrypt es deliberadamente lento, lo que hace que los ataques de fuerza bruta sean computacionalmente costosos. Genera e incrusta automáticamente un salt aleatorio en la salida del hash, protegiendo contra ataques de tablas arcoiris precalculadas. La cadena de hash resultante contiene la versión del algoritmo, el factor de coste, el salt y el hash en un único formato portable.
Entendiendo el factor de coste
El factor de coste es un entero entré 4 y 31 que controla el número de rondas de expansión de clave como potencia de 2. Un coste de 10 realiza 1024 rondas, mientras que un coste de 12 realiza 4096 rondas. A medida que la potencia de cálculo aumenta con el tiempo, puedes elevar el factor de coste para mantener la seguridad sin cambiar tu infraestructura de hasheo. La Fundacion OWASP recomienda un factor de coste mínimo de 10, siendo 12 un buen equilibrio entré seguridad y experiencia de usuario para la mayoría de aplicaciones web.
Formato del hash Bcrypt explicado
Una cadena de hash bcrypt se ve así: $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. El primer segmento ($2a$) identifica la versión de bcrypt. El segundo segmento ($10$) es el factor de coste. Los siguientes 22 caracteres son el salt codificado en base64, y los 31 caracteres restantes son el hash codificado en base64. Este formato autocontenido significa que nunca necesitas almacenar el salt por separado; está incrustado directamente en la cadena de hash.
Mejores prácticas para el hasheo de contraseñas
Siempre hashea las contraseñas del lado del servidor en sistemas de producción, nunca del lado del cliente. Usa un factor de coste de al menos 10 y haz benchmarks en tu servidor para encontrar el factor de coste más alto que mantenga el tiempo de inició de sesión por debajo de un segundo. Nunca almacenes contraseñas en texto plano, ni siquiera temporalmente. Cuando los usuarios cambien su contraseña, genera un hash completamente nuevo en lugar de actualizar el existente. Considera migrar a Argon2id para nuevos proyectos si tu plataforma lo soporta, ya que añade resistencia a memoria.





