2017-03-06 2 views
1

Ich möchte eine Möglichkeit haben, einen Benutzer zu authentifizieren (der sein Passwort einführt), ohne dass dieses Passwort im Klartext oder sogar als Hash gespeichert wird.Wie kann man ein Passwort ohne Hashes sicher speichern?

Wie soll ich das machen?

Ist es sicher, eine Kontrollzeichenfolge zu haben, die der Benutzerschlüssel verschlüsseln und mit der chiffrierten Zeichenfolge vergleichen kann, die ich gespeichert habe?

+0

"ohne dieses Passwort im Klartext oder sogar einen Hash davon gespeichert zu haben" - warum? – mayersdesign

+0

Sicherheitsgründe – jm8FE

+1

Funktioniert das Hashing nicht? –

Antwort

1

Per NIST (National Institute of Standards and Technology):

eine Hash-Funktion verwenden, durchläuft einen HMAC mit einem zufälligen Salz für etwa ein 100 ms Dauer und das Salz mit dem Hash speichern. Verwenden Sie Funktionen wie PBKDF2, password_hash, Bcrypt und ähnliche Funktionen. Es geht darum, den Angreifer dazu zu bringen, viel Zeit mit der Suche nach Passwörtern zu verbringen.

See: How to store your users’ passwords safely

aus der Präsentation Excerptiert "zur besseren Passwort-Anforderungen" von Jim Fenton Informationen basierend auf NIST SP 800-63-3 Draft-Dokument "Digital Authentifizierungsrichtlinien"

Do:

Require an 8 character min, >64 max with no truncation or 6 random digits 
Use a dictionary to disallow common passwords against a dictionary list of 10M compromised passwords 
Allow all printing characters (Unicode optional) + spaces but MAY canonicalize spaces out 
Best to accept Unicode, including emojis (1 “character”/code point) 
Limit failed authentication attempts to 100 in 30-day period per account 
Offer option to display the secret while typing rather than dots or asterisks 

Storing passwords: 
    Hash with 32-bit random salt using key derivation function such as 
    PBKDF2 with SHA-1, SHA-2 family, SHA-3 family 
    with at least 10,000 iterations 

Don‘ t:

Require composition rules 
Allow hints 
Require routine password expiration 
Save plain or hashed versions with or without seeding 

See: Toward Better Password Requirements von Jim Fenton.

1

Siehe Zaphs Antwort für was Sie tun müssen. Ich werde nur ein wenig mehr Hintergrund hinzufügen, falls es hilfreich ist.

Wie sich herausstellt, ist das Speichern des Passworts in verschlüsselter Form weniger sicher als das Speichern eines korrekt ausgeführten Passwort-Hash. Dies liegt daran, dass eine Verschlüsselungscodierung so ausgelegt ist, dass sie mit dem richtigen Schlüssel unverschlüsselt ist, und dass der Verschlüsselungsalgorithmus nicht notwendigerweise darauf angewiesen ist, dass er als eine seiner Abwehrmechanismen gegen einen Brute-Force-Angriff langsam ist.

Aber ein richtig gemacht Passwort Hash-Algorithmus ist so konzipiert, dass Sie nicht das Passwort aus dem Hash erhalten, und das Passwort Hashalgorithmus Design verwendet Geschwindigkeit des Hashing (dh machen es langsam) als eine teilweise Verteidigung gegen zu versuchen finde das Passwort durch Brute-Force-Hashing für jedes mögliche Passwort.

Verwandte Themen