has_secure_password
verwendet bcrypt-ruby. bcrypt-ruby
behandelt automatisch die Speicherung und Generierung von Salzen für Sie. Ein typischer Hash von bcrypt-ruby
sieht so aus: $2a$10$4wXszTTd7ass8j5ZLpK/7.ywXXgDh7XPNmzfIWeZC1dMGpFghd92e
. Dieser Hash wird intern aufgeteilt, um die folgende Funktion:
def split_hash(h)
_, v, c, mash = h.split('$')
return v, c.to_i, h[0, 29].to_str, mash[-31, 31].to_str
end
Für das Beispiel Hash diese Funktion ergibt:
- Version: 2a
- Kosten: 10
- Salz: 2a $ $ $ 10 4wXszTTd7ass8j5ZLpK/7.
- hash: ywXXgDh7XPNmzfIWeZC1dMGpFghd92e
Die ==
-function von BCrypt::Password
extrahiert das Salz und wendet sie auf die Zeichenfolge übergeben:
BCrypt::Password.create('bla') == 'bla' # => true
glaubte ich, dass Autor über eine separate Spalte für Salz bat. Es gibt keine Möglichkeit für uns, dieses Salz zu kontrollieren, also verhält es sich für den Benutzer wie ein Hash-Extender - die Kompromittierung von nur einer Spalte macht das Brechen unseres Passworts nur eine Frage von Zeit. – jdoe
Die Frage lautete: Hat has_secure_password irgendeine Form von Salzen? Ich denke die meiste Zeit ist eine ganze Datenbank kompromittiert, so dass es keinen Unterschied macht, ob das Salz in einer extra Spalte gespeichert wird. Sie haben jedoch Recht, dass es sicherer ist, wenn nur eine einzelne Spalte der Datenbank kompromittiert wird. – fabi
Hallo Fabi, vielen Dank für die Antwort, bitte upvote die Frage auch, wenn Sie denken, dass es interessant/anwendbar für ein größeres Publikum ist. –