¿Cuál es la forma más segura de almacenar una contraseña en un solo archivo?

1

He estado leyendo sobre esto. Este artículo me ayudó mucho. Pero cuanto más leo, más complicado me parece. Por ejemplo:

¿Es mejor usar bcrypt, o PBKDF2, sha2 o alguna otra cosa para la sal? ¿Cómo agrego contraseñas de cifrado HMAC?

Supongamos que tengo que almacenar contraseñas (toda la información, hashes, sal ...) en un solo archivo.

Planeo hacerlo de esta manera:

  1. Obtenga la contraseña del usuario final.
  2. Crea una sal.
  3. Crear hash = SHA256 (salt + contraseña) y almacenar sal junto con hash en el archivo.

Pero no estoy seguro de cómo mejorarlo. No entiendo cómo usar HMAC

Bueno, la pregunta es: ¿Cuál es la forma más segura de almacenar una contraseña en un solo archivo? no importa el costo del algoritmo

PD: Estoy usando JAVA.

    
pregunta user60108 27.02.2013 - 07:28
fuente

2 respuestas

8

Primer punto, nunca use SHA256 para hashear sus contraseñas. Utilice bcrypt o pbkdf2 . Aquí hay un enlace a una biblioteca de Java para bcrypt .

La biblioteca se encargará de la mayoría de los detalles, incluida la generación de sales. Úsalo, no hagas tu propio rollo.

¿Cuál es el propósito de la contraseña? ¿Es para la autenticación? Si es así, simplemente almacene el hash en algún lugar que pueda recuperar más adelante para su comparación, ya sea un archivo de texto o una base de datos.

Si desea utilizar la contraseña para el cifrado, bueno, es un conjunto de problemas completamente diferente que debe tener en cuenta. Los detalles como la administración de claves, los modos de operación que debe usar varían según el escenario exacto. No hagas esto a menos que seas un criptógrafo entrenado, lo que claramente no lo eres, ya que hay muchas cosas que pueden y van a salir mal si intentas rodar tu propia criptografía.

    
respondido por el Ayrx 27.02.2013 - 07:38
fuente
2

Usar SHA-256 es una mala idea. Este algoritmo no se ha diseñado para ser utilizado en esta situación.

El algoritmo IETF scrypt es probablemente el mejor para el almacenamiento de contraseñas, pero no es lo suficientemente antiguo como para ser implementado extensamente o probado intensivamente. PBKDF2 , por otro lado, es promovido por los Estándares de criptografía de clave pública (PKCS) de los Laboratorios RSA.

En ambos casos, use las bibliotecas de Java para hacer el trabajo por usted, y no implemente esas funciones usted mismo. Encuentra aquí una biblioteca para scrypt.

    
respondido por el user1766244 01.03.2013 - 01:37
fuente

Lea otras preguntas en las etiquetas