Supongamos que tiene la libertad de decidir cómo se almacenarán las contraseñas hash en un DBMS. ¿Hay debilidades obvias en un esquema como este?Hashing de contraseñas, sal y almacenamiento de valores hash
para crear el valor hash almacenado en el DBMS, tomar:
- Un valor que es único para la instancia del servidor DBMS como parte de la sal,
- Y el nombre de usuario como una segunda parte de la sal,
- y crear la concatenación de la sal con la contraseña real,
- y croquetas de toda la cadena usando el algoritmo SHA-256,
- y almacenar el resultado en el DBMS.
Esto significaría que cualquiera que quiera llegar a una colisión debería realizar el trabajo por separado para cada nombre de usuario y cada instancia del servidor DBMS por separado. Planearía mantener el mecanismo hash actual algo flexible para permitir el uso del nuevo algoritmo hash estándar NIST (SHA-3) que aún se está trabajando.
El 'valor que es exclusivo de la instancia del servidor DBMS' no tiene por qué ser secreto, aunque no se divulgará por casualidad. La intención es garantizar que si alguien usa la misma contraseña en diferentes instancias del servidor DBMS, los valores hash grabados serían diferentes. Del mismo modo, el nombre de usuario no sería secreto, solo la contraseña propiamente dicha.
¿Sería una ventaja tener primero la contraseña y el nombre de usuario y el 'valor único' en segundo lugar, o cualquier otra permutación de las tres fuentes de datos? ¿O qué tal entrelazar las cuerdas?
¿Debo agregar (y registrar) un valor de sal al azar (por contraseña), así como la información anterior? (Ventaja: el usuario puede reutilizar una contraseña y aún así, probablemente, obtenga un hash diferente registrado en la base de datos. Desventaja: la sal debe registrarse. Sospecho que la ventaja supera considerablemente la desventaja.)
un buen montón de preguntas relacionadas con SO - esta lista es poco probable que sea integral:
- Encrypting/Hashing plain text passwords in database
- Secure hash and salt for PHP passwords
- The necessity of hiding the salt for a hash
- Clients-side MD5 hash with time salt
- Simple password encryption
- Salt generation and Open Source software
- Password hashes: fixed-length binary fields or single string field?
creo que las respuestas a estas preguntas apoyan mi algoritmo (aunque si usted sólo tiene que utilizar una sal de azar, entonces el "valor único para cada servidor y los componentes de nombre de usuario son menos importantes).
La parte aleatoria es importante, previene los ataques de predicción – Jacco
se puede agregar http: // stackoverflow.com/questions/1645161/salt-generation-and-open-source-software/1645190 # 1645190 a la lista de artículos – Jacco
También agregue http://dba.stackexchange.com/questions/7492/password-hashes-fixed-length- binary-fields-or-single-string-field como una buena pista para acceder al sitio [dba.se] – jcolebrand