Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

memorizzazione delle password in SQL Server

Il solito modo per memorizzare la password è usare una funzione hash sulla password, ma per sale in anticipo. È importante "salare" la password, per difendersi da tavolo arcobaleno attacchi.

Quindi il tuo tavolo dovrebbe assomigliare a quello

._______._________________.______________.
|user_id|hash             |salt          |
|-------|-----------------|--------------|
|12     |[email protected]|13%!#tQ!#3t...|
|       |...              |...           |

Quando si verifica se una determinata password corrisponde a un utente, è necessario concatenare il salt alla password specificata e calcolare la funzione hash della stringa di risultato. Se l'output della funzione hash corrisponde a hash colonna - è la password corretta.

È importante capire, tuttavia, che l'idea salt-hash ha una ragione specifica:impedire a chiunque abbia accesso al database di conoscere la password di qualcuno (è considerato un problema difficile invertire l'output di una funzione hash). Quindi, ad esempio, il DBA della banca, non sarebbe in grado di accedere al tuo conto bancario, anche se ha accesso a tutte le colonne.

Dovresti anche considerare di utilizzarlo se ritieni che i tuoi utenti utilizzeranno una password sensibile (ad esempio la password per il loro account Gmail) come password per il tuo sito web.

IMHO non è sempre una funzionalità di sicurezza necessaria. Quindi dovresti pensare se lo vuoi o meno.

Vedi questo articolo per una buona sintesi di questo meccanismo.

Aggiornamento: Vale la pena ricordare che per una maggiore sicurezza contro gli attacchi mirati per invertire l'hash delle singole password, dovresti usa bcrypt , che può essere arbitrariamente difficile da calcolare. (Ma a meno che tu non abbia davvero paura del misterioso uomo in nero che prende di mira il tuo database specifico, penso che sha1 sia abbastanza buono. Non introdurrei un'altra dipendenza per il mio progetto per questa sicurezza extra. Detto questo, non c'è motivo per non usare sha1 100 volte, il che darebbe un effetto simile).