Que es Bcrypt y por que usarlo?
Bcrypt es un algoritmo de hasheo de contrasenas 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 automaticamente un salt aleatorio en la salida del hash, protegiendo contra ataques de tablas arcoiris precalculadas. La cadena de hash resultante contiene la version del algoritmo, el factor de coste, el salt y el hash en un unico formato portable.
Entendiendo el factor de coste
El factor de coste es un entero entre 4 y 31 que controla el numero de rondas de expansion 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 calculo 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 minimo de 10, siendo 12 un buen equilibrio entre seguridad y experiencia de usuario para la mayoria de aplicaciones web.
Formato del hash Bcrypt explicado
Una cadena de hash bcrypt se ve asi: $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. El primer segmento ($2a$) identifica la version 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; esta incrustado directamente en la cadena de hash.
Mejores practicas para el hasheo de contrasenas
Siempre hashea las contrasenas del lado del servidor en sistemas de produccion, 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 mas alto que mantenga el tiempo de inicio de sesion por debajo de un segundo. Nunca almacenes contrasenas en texto plano, ni siquiera temporalmente. Cuando los usuarios cambien su contrasena, 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 anade resistencia a memoria.





