2012-04-14 4 views
0

Ich bin neu in Web-Entwicklung und Datenbank und versuche, Passwort-Authentifizierung mit angemessener Sicherheit und Geschwindigkeit zu implementieren. Ich habe über das Hashing des Passworts gelesen und füge ein Salz an jeden Benutzer an, um Leute daran zu hindern, Rainbow-Tabellen zu erstellen.Die Zeit, die es dauert, Datenbank zu suchen

Meine Frage bezieht sich auf die Zeit, die ich suchen muss, um einen Benutzer zu überprüfen. Da ich nicht weiß, wer zu einem bestimmten Zeitpunkt versucht, eine Verbindung herzustellen, scheint es mir, dass ich jedes Feld von der Salzspalte abrufen müsste, dann das übermittelte Passwort + jedes einzelne Salz hashen und dann jeden Ausgang mit dem Hashwert vergleichen müsste Saiten in der Tabelle?

Also muss ich eine separate Abfrage für jede Kombination von Hash (Passwort + Salz) einreichen? Das scheint so furchtbar langsam zu sein. Fehle ich einen Trick, der den Prozess beschleunigen würde? Oder ist es nur eine Frage des Aufsaugens und des Opferns von Geschwindigkeit für bessere Sicherheit? Oder bin ich falsch und mit der Geschwindigkeit der heutigen Computer ist es überhaupt kein Problem?

Antwort

1

Sie können den Benutzer nicht nur anhand eines Kennworts authentifizieren. Passwort ist eine Bestätigung, dass der Benutzer ist, wer sie sagen, sie sind, also benötigen Sie eine Art von Benutzerkennung - Name oder was auch immer. Tabelle sieht dann aus wie users(..., name, password, ...), Sie tun SELECT password WHERE name = "foo" und fahren mit der Bestätigung von dort fort. Eine zweckmßige Form besteht darin, alle Parameter, die zum Erzeugen eines abgeleiteten Schlüssels innerhalb des Passwortfeldes benötigt werden, z. wie folgt aus:

algo$salt$password hash 

selbst für Hashing, die Sie nicht wollen es schnell sein - Schlüsselableitungsfunktionen wie PBKDF2, bcrypt oder Scrypt sehen. Im Allgemeinen ist das Tunen der Parameter so, dass es etwa eine Sekunde dauert, um einen Schlüssel abzuleiten, ein guter Weg, Brute Forcing unmöglich zu machen.

+0

Wow, ich bin ein Idiot. Ich kann nicht glauben, dass ich nicht dachte, die Namensspalte nach übereinstimmender Zeichenkette zu durchsuchen, als das Passwort dieses Benutzers + Salz zum Vergleich zu hashen. Zu meiner Verteidigung ist es 3:30 Uhr, wo ich gerade lol bin. Vielen Dank. – StackAttack