2013-07-09 14 views
6

mi occupo di fare l'autenticazione nel nostro .Net MVC 4 Web Application e ho colpito un urto riguardante hashing delle password, memorizzazione e di autenticazione.Dove conservare il sale password e come ottenerlo

Piano è quello di utilizzare attualmente 2 Sali, 1 dinamico (per utente) e 1 statico (Web App costanti) e una forte funzione di hashing.

dato un semplice tabella utente che contiene un nome utente e una password:

  • devo conservare il sale per ogni utente in una colonna della tabella utente?

Le mie preoccupazioni sono che, così facendo, dovrò ottenere l'utente dal database nella memoria dell'applicazione Web solo con il suo nome utente. C'è qualche tipo di attacco in cui ciò potrebbe essere problematico? Idealmente mi piacerebbe che fosse un'autenticazione di una richiesta SQL a un passo/uno.

Perchè sono preoccuparsi troppo? Esiste un'alternativa al sale "per utente" in cui posso ancora eseguire un'autenticazione in un'unica fase?

+0

anche similitudine: http://stackoverflow.com/questions/1219899/where-do-you-store-your-salt-strings – user956584

risposta

3

Il sale possono essere immagazzinate assieme alla password hash, in modo da poter creare una sale per la password invece di per utente. È una pratica comune per le funzioni di hash della password (funzione di derivazione a chiave lenta come BCrypt o PBKDF2), per restituire il cleartext di sale come parte dell'hash della password, il che significa che è possibile memorizzare salt e hash insieme in un singolo campo di database.

Per verificate una password inserita, dovete prima di cercare la password hash (utilizzando il nome utente o e-mail), e quindi la funzione per estrarre il sale utilizzato dalla password-hash memorizzato e utilizzarlo per confrontare gli hash . Questo dovrebbe effettivamente rispondere alla tua domanda, i database di solito non hanno funzioni appropriate per le password hash, quindi non puoi fare la verifica all'interno di una query SQL, la verifica sarà fatta nel codice.

La seconda sale è in realtà chiamato un peperone, il modo migliore per aggiungere questo segreto lato server è, per crittografare la password già hash con questo segreto. In contrasto con l'hash, questa sarà una crittografia a due vie, ciò che consente di scambiare la chiave se questa volta fosse necessario.

+0

Grazie mille. Ho usato la libreria SimpleCrypto.Net per i metodi di hashing PBKDF2. Analizzerò ulteriormente il pepe. – Alexandre

1

non hai bisogno di una libreria esterna per fare questo. Il framework ha la sua implementazione PBKDF2 integrata. Preferisco archiviare il sale in un campo separato nel database ma è solo una questione di gusti, immagino. Ho scritto il mio pensiero circa la password hashing here

Problemi correlati