Supponiamo che tu fossi libero di decidere come memorizzare le password hash in un DBMS. Ci sono evidenti debolezze in uno schema come questo?hashing della password, sale e memorizzazione dei valori hash
Per creare il valore hash memorizzato in DBMS, prendono:
- Un valore che è unico per l'istanza del DBMS server come parte del sale,
- e il nome utente come seconda parte della sale,
- E creare la concatenazione del sale con la password attuale,
- E hash l'intera stringa utilizzando l'algoritmo SHA-256,
- e memorizzare il risultato nel DBMS.
Ciò significa che chiunque desideri ottenere una collisione dovrebbe dover eseguire il lavoro separatamente per ciascun nome utente e ogni istanza del server DBMS separatamente. Avrei intenzione di mantenere un po 'flessibile l'attuale meccanismo di hash per consentire l'utilizzo del nuovo algoritmo di hash standard NIST (SHA-3) su cui si sta ancora lavorando.
Il "valore che è univoco per l'istanza del server DBMS" non deve essere segreto, sebbene non venga divulgato in modo casuale. L'intenzione è di garantire che se qualcuno usa la stessa password in diverse istanze del server DBMS, gli hash registrati sarebbero diversi. Allo stesso modo, il nome utente non sarebbe segreto: solo la password corretta.
Potrebbe esserci qualche vantaggio prima di avere la password e il nome utente e il "valore unico" secondo, o qualsiasi altra permutazione delle tre fonti di dati? O che dire dell'incrocio tra le corde?
Devo aggiungere (e registrare) un valore salt random (per password) e le informazioni sopra? (Vantaggio: l'utente può riutilizzare una password e ancora, probabilmente, ottenere un hash diverso registrato nel database Svantaggio: il sale deve essere registrato.Subito che il vantaggio superi notevolmente lo svantaggio.)
Ci sono un bel po 'di domande relative SO - questa lista è improbabile che sia completo:
- 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?
penso che le risposte a queste domande supportano il mio algoritmo (anche se è sufficiente utilizzare un sale casuale, quindi il 'valore unico per server' e componenti nome utente sono meno importanti).
La parte casuale è importante per prevenire gli attacchi di predizione – Jacco
è possibile aggiungere http: // stackoverflow.it/questions/1645161/salt-generation-and-open-source-software/1645190 # 1645190 al tuo elenco articoli – Jacco
Aggiungi anche http://dba.stackexchange.com/questions/7492/password-hashes-fixed-length- campo binario-o-single-string-field come buona guida al sito [dba.se] – jcolebrand