cripta | |
---|---|
Desarrolladores | Niels Provos y David Mazières |
Publicado por primera vez | 1999 |
Número de rondas | 2n_ _ |
bcrypt es una función hash de derivación de clave criptográfica adaptativa que se utiliza para almacenar contraseñas de forma segura . Desarrolladores: Niels Provos y David Mazières. La función se basa en el cifrado Blowfish , introducido por primera vez en USENIX en 1999 [1] . Para protegerse contra los ataques de la tabla del arco iris , bcrypt usa una sal (salt); además, la función es adaptativa, su tiempo de ejecución es fácilmente configurable y se puede ralentizar para dificultar un ataque de fuerza bruta.
El cifrado Blowfish se diferencia de muchos algoritmos en la fase computacionalmente difícil preparar las claves
Provos y Mazières aprovecharon esta característica, pero cambiaron el algoritmo de preparación de claves, obteniendo el cifrado "Eksblowfish" ( programa de clave costoso Blowfish ). El número de rondas en la preparación de llaves debe ser una potencia de dos; se puede especificar un grado específico al usar bcrypt.
Implementado originalmente en la función de cifrado de OpenBSD . Hay implementaciones para Java, Python, Nim, C#, Ruby, Perl, PHP 5.3, Node.js, Go [2] y algunas otras.
El algoritmo bcrypt utiliza el algoritmo de configuración de claves de "Eksblowfish":
EksBlowfishSetup( costo , sal , clave ) estado InitState() estado ExpandKey( estado , sal , clave ) repetir (2 costo ) estado ExpandKey(estado, 0, clave) estado ExpandKey(estado, 0, sal) estado de retornoLa función InitState corresponde a la función original del cifrado Blowfish; la parte fraccionaria del número se usa para llenar la matriz de cajas P y S.
Función ExpandKey:
ExpandKey( estado , sal , clave ) para( n = 1..18) P n key [32(n-1)..32n-1] P n //trata la clave como ctext cíclico Encrypt( salt [0..63]) P 1 ctexto [0..31] P 2 ctexto [32..63] for( n = 2..9) ctext Encrypt( ctext salt [64(n-1)..64n-1]) //cifrar usando el programa de claves actual y tratar el salt como cíclico P 2n-1) ctexto [0..31] P 2n ctexto [32..63] para( i = 1..4) for( n = 0..127) ctext Encrypt( ctext salt [64(n-1)..64n-1]) //como arriba S i [2n] ctexto [0..31] S i [2n+1] ctext [32..63] estado de retorno
Para calcular el hash, bcrypt procesa la entrada equivalente a 'eksblowfish(strength_key, input)':
En varios sistemas operativos (Linux, OpenBSD) que utilizan el algoritmo bcrypt en la función crypt(3) estándar, la entrada es la constante "OrpheanBeholderScryDoubt" [3] .
bcrypt fue desarrollado en 1999 y estaba protegido de la fuerza bruta eficiente en el hardware de la época. Actualmente, los FPGA son ampliamente utilizados en los que bcrypt se implementa de manera más eficiente. En 2009, se creó el algoritmo scrypt , que requiere una cantidad significativa de memoria para su funcionamiento (con acceso aleatorio), la cantidad de memoria es configurable [4] .
En comparación con PBKDF2 , el algoritmo de expansión de claves de bcrypt ha sido poco explorado por los criptógrafos [5] .
Funciones hash | |
---|---|
propósito general | |
Criptográfico | |
Funciones de generación de claves | |
Número de cheque ( comparación ) | |
Hachís |
|