HMAC-SHA256 para la firma del token JWT

0

Actualmente estoy trabajando en una empresa en la que tenemos la necesidad de diseñar un sistema de autenticación basado en token. Seremos los propietarios y controladores de dos servidores, uno será el servidor de autenticación y el otro el servidor de aplicaciones.

Estoy razonablemente bien versado en conceptos, amenazas, vulnerabilidades comunes y sus contramedidas de Seguridad informática, pero una pregunta a la que no he encontrado respuesta es si necesita o no varias rondas de hashing cuando usa HMAC-SHA256 para firmar una ficha JWT.

Ya que para algo como el hashing de una contraseña usando SHA256, la regla general que entiendo es que se ejecutan 2 ^ (año-2000) (de dar o recibir según las necesidades de rendimiento) rondas de hashing, me cuesta creer una sola ronda de HMAC -SHA256 es lo suficientemente bueno, sin embargo, realmente no he visto a nadie hacer esta pregunta cuando he investigado el tema.

Por lo tanto, dada una clave secreta y un encabezado de token JWT y una carga útil, cuál de las siguientes se considera la mejor práctica para la firma del token:

  1. Una sola iteración de HMAC-SHA256 se considera segura para una firma de token JWT.
  2. Se recomienda ejecutar HMAC-SHA256 varias veces una y otra vez reutilizando la misma clave secreta.
  3. Ejecute HMAC-SHA256 una vez y luego ejecute las iteraciones de hash SHA256 en el producto a partir del cálculo de HMAC. (Esto es lo que supongo que es la mejor práctica)
  4. Estoy totalmente equivocado y es algo diferente.

Muchas gracias por cualquier ayuda. Solo quiero asegurarnos de que el sistema esté diseñado lo mejor posible.

    
pregunta dFrancisco 12.01.2018 - 15:28
fuente

1 respuesta

3

HMAC y el hash de contraseñas resuelven problemas muy diferentes. Con HMAC, se espera que el secreto sea de alta calidad (es decir, 128 bits de entropía), mientras que se espera que las contraseñas sean de baja calidad (30 bits de entropía son optimistas para la mayoría de las personas).

Una sola ronda de una función hash rápida es mala para las contraseñas porque permite a los atacantes intentar rápidamente muchas contraseñas comunes, o realizar un ataque de fuerza bruta en una contraseña de baja entropía. Para HMAC ese riesgo no existe realmente (siempre que el secreto sea generado por un CSPRNG), por lo que una ronda es suficiente.

Nota al margen: no especificó, pero no debe usar SHA-256 directamente para las contraseñas de hash, incluso si usa muchas rondas. Es mucho más fácil usar PBKDF2 con SHA-256 desde una biblioteca estándar, por lo que no tiene ningún problema.

    
respondido por el AndrolGenhald 12.01.2018 - 15:48
fuente

Lea otras preguntas en las etiquetas