Glosario

¿Qué es bcrypt?

bcrypt es una función de hashing de contraseñas basada en el cifrado por bloques Blowfish que incorpora una sal integrada y un factor de coste configurable, diseñada para ser computacionalmente costosa de un modo que resiste específicamente la aceleración mediante GPU y hardware especializado.

También conocido como: bcrypt hash, Blowfish crypt

bcrypt fue diseñado en 1999 por Niels Provos y David Mazieres específicamente para el hashing de contraseñas, en una época en que la mayoría de los sistemas usaban funciones de hash rápidas como MD5 o SHA-1. Su innovación clave fue el factor de coste: un parámetro que controla cuántas iteraciones de la configuración de clave Blowfish subyacente se realizan. Cada incremento del factor de coste duplica el tiempo de cálculo, permitiendo a los defensores escalar la dificultad a medida que el hardware se vuelve más rápido.

Lo que distingue a bcrypt de PBKDF2 es su resistencia a la aceleración por GPU. PBKDF2 usa operaciones HMAC que se ajustan bien a las arquitecturas de GPU, permitiendo a los atacantes con GPU de consumo lograr un paralelismo masivo. La programación de claves de bcrypt, basada en Blowfish, requiere acceso frecuente a una tabla de estado de 4 KB que debe modificarse durante el cálculo. Este patrón de acceso a memoria no se paraleliza de forma eficiente en las GPU, obligando a los atacantes a volver a ataques a velocidad de CPU.

bcrypt produce una cadena de 60 caracteres que codifica conjuntamente la versión del algoritmo, el factor de coste, la sal y el hash, lo que la hace autocontenida y portable. Un hash típico de bcrypt tiene el aspecto $2b$12$..., donde 12 es el factor de coste. El factor de coste mínimo recomendado actualmente es 10 (aproximadamente 100 ms por hash en hardware moderno), aunque 12-14 es habitual en aplicaciones que pueden tolerar tiempos de inicio de sesión algo más lentos. bcrypt está disponible en prácticamente todos los lenguajes de programación y sigue siendo uno de los algoritmos de hashing de contraseñas más desplegados.

Cómo usa Vaulted bcrypt

Vaulted usa PBKDF2 en lugar de bcrypt para la derivación de claves basada en frase de contraseña, porque PBKDF2 está disponible de forma nativa a través de la Web Crypto API en los navegadores, mientras que bcrypt no. La Web Crypto API no expone bcrypt, por lo que usarlo requeriría una implementación en JavaScript que sacrifica los beneficios de seguridad de la ejecución nativa y en tiempo constante. Para aplicaciones del lado del servidor que hacen hashing de contraseñas para autenticación, bcrypt sigue siendo una excelente opción, pero para la derivación de claves del lado del cliente en el navegador, PBKDF2 a través de Web Crypto es el enfoque estándar.