¿Cuál ' es la diferencia entre PBKDF y SHA y por qué usarlos juntos?

He estado leyendo un poco sobre hash últimamente y según AgileBits , utilizan « SHA512 dentro de PBKDF2 » en su nuevo archivo de bóveda.

He buscado en Wikipedia ambos nombres y sé que PBKDF2 es una función de derivación de claves y SHA es una función criptográfica función hash, pero realmente no puedo entender la diferencia y por qué ambos se usan juntos uno dentro del otro.

¿Alguien puede explicar esto a una persona sin experiencia en criptografía?

(Puede asumir que solo sé de matemáticas, si es necesario).

Comentarios

  • PBKDF2 es por diseño mucho más lento que SHA, por lo que es mejor adecuado para hash de contraseñas porque lleva mucho más tiempo hacer un diccionario o un ataque de fuerza bruta.
  • @puzzlepalace, por lo que hacen básicamente lo mismo y usan la composición PBKDF2 (SHA (contraseña)), por lo que lleva más tiempo atacantes?
  • Bueno, en la mayoría de los casos PBKDF2 usa una primitiva llamada HMAC como una función pseudoaleatoria, que a su vez usa una función hash criptográfica en sus ‘ s internos, en este caso SHA512. Entonces, la composición realmente se parece más a PBKDF2(HMAC_SHA512, password, ...).
  • PBKDF2 es el automóvil, HMAC es el motor, SHA512 es el pistón
  • Este último parte de mi respuesta a una pregunta anterior también aborda esto.

Respuesta

SHA-512 es un hash criptográficamente seguro , PBKDF2 es lo que llamamos una función de derivación de claves basada en contraseña. Si el secreto resultante no se utiliza como clave sino como valor hash, también se denomina hash de contraseña . Los hash de contraseña se diferencian de los hash seguros en el sentido de que contienen una sal y un factor de trabajo / recuento de iteraciones.

Tanto los hash criptográficos como los hash de contraseña son funciones unidireccionales diseñadas para crear una salida corta y de tamaño fijo a partir de un entrada dada. En el caso del hash de la contraseña, la entrada sería la contraseña y la sal. El tamaño de la sal y el recuento de iteraciones se consideran comúnmente parámetros de configuración; ambos, por supuesto, influyen en la salida del hash de contraseña.

Los hash de contraseña generalmente se construyen sobre funciones pseudoaleatorias o PRF. Una forma habitual de PRF es un código de autenticación de mensajes basado en HMAC o Hash, que a su vez utiliza un hash internamente. Cuando se utilizan PRF basados en hash, como HMAC, el tipo / tamaño de hash utilizado suele ser configurable. Sin embargo, los hashes de contraseña no necesitan construirse utilizando hashes. Cualquier otro PRF, como los basados en cifrados simétricos, puede servir. bcrypt, por ejemplo, se construye sobre Blowfish, un cifrado de bloques.

Los hash de contraseña necesitan una sal para que las contraseñas idénticas no se asignen al mismo hash. Por lo tanto, también evitan las tablas de arco iris (que contienen contraseñas / pares hash) sean útiles. Además, contienen un factor de trabajo / recuento de iteraciones para que un atacante necesite realizar más trabajo para calcular el hash de cada contraseña posible. Esto es necesario porque la mayoría de las contraseñas no son lo suficientemente aleatorias. Sin el factor de trabajo, El atacante podría probar una gran cantidad de posibles contraseñas utilizando la fuerza bruta o un ataque de diccionario.

Comentarios

  • mucha más información aquí … no ‘ cabe en el espacio de respuesta.

Responder

Para parafrasear mi respuesta a una pregunta anterior , PBKDF2 es un algoritmo genérico de alto nivel que internamente llama a una función pseudoaleatoria (PRF) para procesar su entrada. La especificación PBKDF2 no exige ningún PRF en particular, por lo que los implementadores son libres de elegir cualquier PRF que deseen (siempre que cumpla con la definición de un PRF seguro y pueda aceptar la entrada que PBKDF2 le da).

Da la casualidad de que, con mucho, la opción más común de PRF para PBKDF2 es HMAC , que es otra construcción de alto nivel que utiliza internamente una función hash criptográfica . Nuevamente, la especificación HMAC no exige ninguna función hash en particular, * por lo que los implementadores son libres de elegir cualquier hash que deseen. Probablemente, la opción más común hoy en día es uno de la familia de hash SHA-2 , que incluye SHA-256 y SHA-512.

Entonces, «SHA512 dentro de PBKDF2» casi con certeza significa que «están usando PBKDF2 con HMAC como PRF y con SHA-512 como hash dentro de HMAC. **

Lo que puede ser confuso es que, en un A simple vista, este PBKDF2-with-HMAC-with-SHA512 puede parecer que está haciendo algo muy similar al simple SHA-512: ambos toman una contraseña arbitraria como entrada y la convierten en una cadena de bits pseudoaleatoria de la cual la contraseña original no puede ser fácilmente reconstruido.Sin embargo, en realidad existen varias diferencias, las más importantes son que:

  • SHA-512 es rápido. Muy rapido. PBKDF2 es deliberadamente lento de calcular, y su lentitud se puede controlar ajustando el parámetro de conteo de iteraciones.

  • Como consecuencia directa de su velocidad, SHA -512 solo es vulnerable a ataques de adivinación de contraseñas por fuerza bruta utilizando software como hashcat , que simplemente genera muchas contraseñas y las codifica hasta que encuentran una que produce un hash coincidente . Una sola CPU moderna puede codificar fácilmente millones de contraseñas por segundo, y las GPU son incluso más rápidas.

Además, existen algunas otras diferencias menores con la observación:


*) La definición original de HMAC y las pruebas de seguridad asumen efectivamente que la función hash utilizada es de un tipo conocido como función hash Merkle – Damgård . Da la casualidad de que todas las funciones hash criptográficas más populares durante las últimas décadas, incluida la familia SHA-2, han sido de este tipo, por lo que esta limitación no ha sido un gran problema en la práctica. Esto puede estar cambiando gradualmente con la estandarización de SHA-3 (también conocido como Keccak), que no es un hash Merkle-Damgård, pero convenientemente, viene con su propia reclamo de seguridad para HMAC-SHA3 .

**) Esta es una multa y elección tradicional, en la medida de lo posible. No es tan resistente a los ataques basados en GPU y otros ataques paralelos como los KDF más modernos como scrypt o Argon2 sería, pero sigue siendo mucho mejor que el antiguo hash sin iterar. Dicho esto, para evaluar adecuadamente su seguridad, también necesitaríamos saber el recuento de iteraciones utilizado para PBKDF2. Desafortunadamente, muchas implementaciones de PBKDF2 tienden a usar el antiguo «mínimo recomendado» de 1000 iteraciones, que es poco más que un bache en la actualidad. Personalmente, en una CPU moderna, prefiero algo más cercano a 1,000,000 o 1,000,000,000 de iteraciones .

Comentarios

  • Pregunta: ¿Se usa PBKDF2 solo para ralentizar el número de conjeturas (si es de fuerza bruta)? ¿O hay otros detalles específicos a tener en cuenta?
  • @NaveenNiraula : Además de ralentizar las adivinaciones por fuerza bruta, PBKDF2 tiene el propósito secundario de convertir contraseñas de longitud y formato arbitrarios en cadenas de bits uniformemente pseudoaleatorias. Pero el simple hash también podría lograrlo. Además, el parámetro salt permite derivar múltiples claves distintas a partir de la misma contraseña, y previene algunos ataques usando diccionarios precalculados como » tablas arcoiris «. Pero nuevamente, si no ‘ No necesita la protección de adivinación de fuerza bruta de PBKDF2, puede usar HMAC simple para eso, o incluso simplemente concatenar la sal con la contraseña antes de aplicar el hash eso.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *