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)
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
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
@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