2012-04-13 4 views
61

Ich möchte has_secure_password verwenden, um verschlüsselte Passwörter in der Datenbank zu speichern. Ich kann nicht im Internet finden, wenn has_secure_password irgendeine Form des Salzens benutzt. Wenn es Salzen verwendet, wie funktioniert es? Kann das jemand für mich klären?Verwendet has_secure_password irgendeine Form von Salzen?

Thijs

Antwort

79

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 
+1

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

+11

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

+0

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. –