2016-04-01 30 views
1

Ist es sicher, einen Hash der Benutzerkennwörter mit sha256_crypt.encrypt("secretUserPassword") zu erstellen und in einer Datenbank zu speichern, ohne eine Leiste zum Hash hinzuzufügen?Ist es sicher, Kennwörter zu speichern, die mit sha256_crypt verschlüsselt sind, aber ohne zusätzliches Salz?

Wenn ja, was schützt die Hashes vor Rainbow Table Attacken?

Dies ist, wie ich einen neuen Benutzer in meiner Web-Anwendung erstellen und speichern sie in der Datenbank:

admin = User() 
admin.name = 'admin' 
admin.password = sha256_crypt.encrypt("secretAdminPassword") 
db.persist_user(admin) 

Dies ist, wie ich die Anmeldeinformationen überprüfen und anmelden, um den Benutzer

username = request.form['username'] 
password = request.form['password'] 
user = user_from_db(username) 
if sha256_crypt.verify(password, user.password): 
    login_user(user) 
+2

Gemäß [der Dokumentation] (https://pythonhosted.org/passlib/lib/passlib.hash.sha256_crypt.html) werden Salze automatisch hinzugefügt. Also ich denke, es ist in Ordnung. – Schore

+2

Nebenbei, ein Salz fügt keine Sicherheit als solche hinzu. Sein Zweck besteht darin, zu verhindern, dass identische Kennwörter den gleichen Hash erzeugen. Es ist schwer sich eine Situation vorzustellen, in der dieser Schutz nicht nützlich wäre, aber isoliert betrachtet verbessert er die Sicherheit der SHA256-Verschlüsselung überhaupt nicht. – tripleee

+0

@triplee - Dies ist mehr eine Nebenwirkung des Salzens, nicht der Hauptzweck. Eindeutige Salze für jedes Passwort verhindern den Aufbau einer einzigen Rainbow-Tabelle, um alle Passwörter gleichzeitig zu erhalten. Stattdessen muss man für jedes Passwort eine Rainbow-Tabelle erstellen, was diese Methode unpraktisch macht. – martinstoeckli

Antwort

1

Die documentation besagt, daß die Funktion nicht nur sha256_crypt.encrypt("password") berechnet einen Hash-SHA-256, ist es auch ...

  1. fügt ein Salz automatisch
  2. hat viele Runden

Beiden Punkte sind wesentliche Hashing eine sichere Passwort-Hashing-Funktion zu erhalten. Es wird bevorzugt, es ohne ein selbst gemachtes Salz zu verwenden, da es bei der Erstellung eines kryptografisch sicheren Salzes mehrere Probleme gibt, also sollte es am besten der Bibliothek überlassen werden.