Mejores prácticas para proteger con contraseña una clave secreta

6

¿Qué enfoques se aceptan generalmente para generar una clave simétrica protegida por contraseña?

Mi intuición es generar y almacenar una cadena aleatoria de la longitud adecuada como clave protegida por contraseña, luego HMAC con una contraseña PBKDF2ed para obtener la clave simétrica real. Con este enfoque, ¿es el paso PBKDF2 necesario o superfluo? ¿Hay un mejor enfoque (por ejemplo, XORAR los bits de clave generados con los bits de clave de contraseña PBKDF2ed)?

Editar: Me di cuenta después de hacer esta publicación que tiene más sentido hacer HMAC(key, password) que HMAC(PBKDF2(password), key) .

Actualización: la respuesta es PBKDF2(SHA256, password, key, iterations) .

    
pregunta Stephen Touset 12.09.2012 - 02:55
fuente

2 respuestas

6

PBKDF2 está diseñado exactamente para el propósito en el que estás pensando: hacer el intercambio de tiempo para atacar una fuente de entropía baja comparable a la de atacar la salida resultante como si fuera una fuente de entropía puramente alta.

En un ejemplo artificial, podría hacer mi contraseña usando uno de cuatro números. La clave resultante podría ser uno de los 32 números. Para que estén igual de seguros contra el forzamiento bruto, debe tomar tanto tiempo probar una de las cuatro teclas como lo haría probar siete de las 32 teclas (32/4 - 1 porque el 1/32 resultante también debe probarse). Para protegerse contra las tablas del arco iris, también sería útil agregar una sal.

PBKDF2 cumple con las tareas anteriores de ralentizar el proceso y usa una sal. A menos que esté ejecutando su salida a través de algo que tenga un proceso de operación comparativamente lento, entonces sería apropiado tomar la salida de PBKDF2.

Otros diseños de fortalecimiento de claves como bcrypt también pueden ser una opción. En cualquier método que utilice, asegúrese de que su salida tenga al menos la cantidad de bits que necesita su clave. Puede hacer hash a un tamaño más pequeño, pero nunca use el hash para obtener una clave más larga.

    
respondido por el Jeff Ferland 12.09.2012 - 03:59
fuente
3

Hay dos métodos, ya sea usando PBKDF2 (RFC 2898) con su contraseña maestra y un salt para generar la clave simétrica (donde el salt es la cadena aleatoria a la que hace referencia), o usa Extract-and- basado en HMAC Expanda la función de derivación de claves de RFC 5869 para generar la clave simétrica a partir de su contraseña maestra, un salt y alguna información específica de la clave.

Nota: HKDF solo es apropiado si su contraseña maestra tiene una alta entropía & longitud, ya que no itera como PBKDF2.

bcrypt & Scrypt son otras posibilidades.

    
respondido por el ericball 12.09.2012 - 18:26
fuente

Lea otras preguntas en las etiquetas