2016-03-23 17 views
0

Angenommen, ich möchte Passwörter in meinem Code speichern. Ist SHA256 eine gute Möglichkeit, sie zu speichern?Ist SHA256 eine gute Möglichkeit, Passwörter zu speichern? (in py3)

Hier ist, was der Code wie folgt aussieht:

#!/usr/bin/python3 
#The password is 'helloWorld' 

import hashlib 

hashedString = "11d4ddc357e0822968dbfd226b6e1c2aac018d076a54da4f65e1dc8180684ac3" 

for i in range(3): 
    x = input('Password: ') # For now, ignore the fact that it's exposed. 
    if hashlib.sha256(x.encode()).hexdigest() == hashedString: 
    print('Access granted!') 
    exit() 
    else: 
    print('Wrong password.') 
print('3 attempts!') 

Nun gibt es Probleme mit diesem, wie die Möglichkeit, dass es andere Saiten mit der gleichen SHA256 Hash.
Gibt es eine andere Möglichkeit, sie zu speichern (ohne explizite Informationen wie Passwortlänge usw.)?

Antwort

1

Ich würde PBKDF2 empfehlen, wenn es verfügbar ist. Überprüfen Sie diese link heraus und sehen Sie, ob es bietet, was Sie brauchen.

Der Unterschied ist, dass:
- PBKDF2 nach Design langsam ist
- SHA256 eine gute Hash-Funktion ist; es ist nicht langsam, von Entwurf

Passwort Hashing-Algorithmen wie PBKDF2, bcrypt und scrypt sind für die Verwendung mit Kennwörtern gedacht und sind absichtlich langsam. Kryptografische Hashalgorithmen sind schnell. Schnell ist in den meisten Situationen gut, aber nicht hier. Die Verlangsamung des Algorithmus (normalerweise durch Iteration) erschwert die Arbeit des Angreifers. Password-Hashes fügen jedem Hash auch einen Salt-Wert hinzu, um ihn eindeutig zu machen, so dass ein Angreifer nicht mehrere Hashes gleichzeitig angreifen kann.

Siehe diese post für weitere Informationen darüber, warum PBKDF2 zu wählen.

EDIT: PBKDF2 bietet auch Padding, so dass Sie keine Informationen über die Passwortlänge geben.

1

Eigentlich sind in Ihrer Frage zwei verschiedene Fragen enthalten.

1) Ist es sicher genug, um das Passwort mit SHA-256 zu speichern?

Nein, normalerweise ist dies nicht sicher genug, ein SHA- * Hash kann sehr schnell berechnet werden, so dass Sie Brute-Force mit 14 Giga SHA-256 per second. Wenn Ihr Kennwort sehr stark ist, kann eine einzelne Iteration von SAH-256 sicher genug sein. Sobald andere das Passwort bestimmen können oder sich Menschen daran erinnern können, sollten Sie unbedingt zu BCrypt, PBKDF2 oder SCrypt wechseln.

2) Sind Kollisionen ein Problem?

Nein, es ist äußerst unwahrscheinlich, dass Sie ein anderes Passwort finden, das den gleichen Hash erzeugt, in der Praxis kann dies ignoriert werden. Es gibt eine weitere gute answer über die Wahrscheinlichkeit einer solchen Kollision.

Verwandte Themen