Ich habe in letzter Zeit ein wenig über Hashing und laut AgileBits gelesen. Sie verwenden „ SHA512 in PBKDF2 “ in ihrer neuen Tresordatei.
Ich habe in Wikipedia nach beiden Namen gesucht und weiß, dass PBKDF2 eine Schlüsselableitungsfunktion und SHA eine kryptografische Funktion ist Hash-Funktion, aber ich kann den Unterschied nicht wirklich verstehen und warum sie beide zusammen ineinander verwendet werden.
Kann jemand dies für eine Person ohne Erfahrung in Kryptographie erklären?
(Sie können davon ausgehen, dass ich nur bei Bedarf über Mathematik Bescheid weiß.)
Kommentare
- PBKDF2 ist von Natur aus viel langsamer als SHA, daher ist es besser Geeignet für das Hashing von Passwörtern, da das Durchführen eines Wörterbuchs oder eines Brute-Force-Angriffs viel länger dauert.
- @puzzlepalace Angreifer?
- In den meisten Fällen verwendet PBKDF2 ein Grundelement namens HMAC als Pseudozufallsfunktion, die wiederum eine kryptografische Hash-Funktion verwendet. ‚ s Interna, in dieser Fall SHA512. Die Zusammensetzung sieht also eher wie
PBKDF2(HMAC_SHA512, password, ...)
aus. - PBKDF2 ist das Auto, HMAC ist der Motor, SHA512 ist der Kolben
- Letzteres Ein Teil von meiner Antwort auf eine frühere Frage spricht dies ebenfalls an.
Antwort
SHA-512 ist ein kryptografisch sicherer Hash , PBKDF2 wird als kennwortbasierte Schlüsselableitungsfunktion bezeichnet. Wenn das resultierende Geheimnis nicht als Schlüssel, sondern als Hash-Wert verwendet wird, wird es auch als Passwort-Hash bezeichnet. Kennwort-Hashes unterscheiden sich von sicheren Hashes darin, dass sie einen Salt- und einen Work Factor / Iteration Count enthalten.
Sowohl kryptografische Hashes als auch Kennwort-Hashes sind Einwegfunktionen, mit denen eine kurze Ausgabe mit fester Größe von a erstellt werden kann gegebene Eingabe. Im Fall des Passwort-Hash wäre die Eingabe das Passwort und Salt. Die Größe des Salzes und die Anzahl der Iterationen werden üblicherweise als Konfigurationsparameter betrachtet. Beide beeinflussen natürlich die Ausgabe des Passwort-Hash.
Passwort-Hashes bauen im Allgemeinen auf Pseudo-Zufallsfunktionen oder PRFs auf. Eine übliche Form von PRF ist ein HMAC- oder Hash-basierter Nachrichtenauthentifizierungscode, der wiederum intern einen Hash verwendet. Wenn Hash-basierte PRFs wie HMAC verwendet werden, ist der Typ / die Größe des verwendeten Hash häufig konfigurierbar. Kennwort-Hashes müssen jedoch nicht mithilfe von Hashes erstellt werden. Jede andere PRF, beispielsweise solche, die auf symmetrischen Chiffren basieren, kann dies tun. bcrypt basiert beispielsweise auf Blowfish, einer Blockverschlüsselung.
Kennwort-Hashes benötigen ein Salz, damit identische Kennwörter nicht demselben Hash zugeordnet werden. Sie verhindern daher auch Regenbogentabellen (die vorberechnete Kennwörter enthalten /). Hash-Paare) sind nicht nützlich. Außerdem enthalten sie eine Anzahl von Arbeitsfaktoren / Iterationen, sodass ein Angreifer mehr Arbeit ausführen muss, um den Hash jedes möglichen Kennworts zu berechnen. Dies ist erforderlich, da die meisten Kennwörter nicht zufällig genug sind Der Angreifer kann große Mengen möglicher Passwörter mit Brute Force oder einem Wörterbuchangriff testen.
Kommentare
- viel mehr Informationen hier … passt jedoch nicht ‚ nicht in den Antwortbereich.
Antwort
Um meine Antwort auf eine frühere Frage zu paraphrasieren , PBKDF2 ist ein generischer High-Level-Algorithmus, der ruft intern eine Pseudozufallsfunktion (PRF) auf, um ihre Eingabe zu verarbeiten. Die PBKDF2-Spezifikation schreibt keine bestimmte PRF vor, daher können Implementierer jede gewünschte PRF frei wählen (sofern sie der Definition einer sicheren PRF entspricht und die von PBKDF2 angegebene Eingabe akzeptieren kann).
Die bei weitem häufigste Wahl von PRF für PBKDF2 ist HMAC , eine andere High-Level-Konstruktion, die intern verwendet wird eine kryptografische Hash-Funktion . Auch hier schreibt die HMAC-Spezifikation keine bestimmte Hash-Funktion * vor, sodass Implementierer frei wählen können, welchen Hash sie möchten. Die heute wahrscheinlich häufigste Wahl ist eine der SHA-2 -Hashes, zu denen SHA-256 und SHA-512 gehören.
„SHA512 in PBKDF2“ bedeutet also mit ziemlicher Sicherheit, dass sie „PBKDF2 mit HMAC als PRF und mit SHA-512 als Hash innerhalb von HMAC verwenden. **
Was verwirrend sein kann, ist, dass bei a Auf den ersten Blick sieht dieses PBKDF2-mit-HMAC-mit-SHA512 so aus, als würde es etwas sehr Ähnliches wie einfaches SHA-512 tun: Beide nehmen ein beliebiges Passwort als Eingabe und wandeln es in eine pseudozufällige Bitfolge um, aus der das ursprüngliche Passwort nicht stammen kann leicht rekonstruiert werden.Es gibt jedoch tatsächlich mehrere Unterschiede, von denen die wichtigsten folgende sind:
-
SHA-512 ist schnell. Sehr schnell. PBKDF2 ist absichtlich langsam zu berechnen, und seine Langsamkeit kann durch Anpassen des Iterationszählparameters gesteuert werden.
-
Als direkte Folge seiner Geschwindigkeit SHA -512 allein ist anfällig für Brute-Force-Angriffe zum Erraten von Passwörtern mit Software wie hashcat , die einfach viele Passwörter generiert und sie hasht, bis sie eines finden, das einen passenden Hash erzeugt . Eine einzelne moderne CPU kann leicht Millionen von Passwörtern pro Sekunde hashen, und GPUs sind sogar noch schneller.
Darüber hinaus gibt es einige kleinere Unterschiede bei der Feststellung:
-
PBKDF2 verwendet einen „salt“ -Parameter, mit dem sichergestellt werden kann, dass die Ausgaben eindeutig sind, auch wenn die Eingabekennwörter nicht . (Die Verwendung eines Salzes verhindert auch vorberechnungsbasierte Angriffe, da der Angreifer nicht mit dem Hashing des erratenen Passworts beginnen kann, bevor er das Salz kennt.) SHA-512 selbst hat nicht das Konzept eines Salzes, obwohl ein äquivalenter Effekt erzielt werden kann, z. indem Sie dem Kennwort das Salt voranstellen.
-
SHA-512 erzeugt immer eine 512-Bit-Ausgabe (daher der Name), obwohl Sie sie jederzeit auf eine kürzere Länge kürzen können, wenn Sie dies tun Die vollen 512 Bits werden nicht benötigt. PBKDF2 kann im Prinzip eine Ausgabe beliebiger Länge erzeugen, obwohl in der Praxis verwendet wird, um mehr als eine interne Hash-Ausgabe im Wert von zu generieren Bits werden nicht empfohlen .
*) Die ursprüngliche HMAC-Definition und die Sicherheitsnachweise setzen effektiv voraus, dass die verwendete Hash-Funktion von einer bestimmten Bedeutung ist Typ bekannt als Merkle-Damgård-Hash-Funktion . Zufällig waren alle gängigen kryptografischen Hash-Funktionen der letzten Jahrzehnte, einschließlich der SHA-2-Familie, von diesem Typ, sodass diese Einschränkung in der Praxis kein großes Problem darstellte. Dies kann sich mit der Standardisierung von SHA-3 (auch bekannt als Keccak) allmählich ändern, das kein Merkle-Damgård-Hash ist, aber Praktischerweise wird es mit einem eigenen Sicherheitsanspruch für HMAC-SHA3 geliefert.
**) Dies ist eine Geldstrafe und traditionelle Wahl, soweit es geht. Es ist nicht so resistent gegen GPU-basierte und andere parallele Angriffe wie modernere KDFs wie scrypt oder Argon2 wäre, aber es ist immer noch viel besser als einfaches altes, nicht iteriertes Hashing. Um die Sicherheit richtig bewerten zu können, müssen wir jedoch auch die für PBKDF2 verwendete Iterationszahl kennen. Leider verwenden viele PBKDF2-Implementierungen das alte „empfohlene Minimum“ von 1000 Iterationen, was heutzutage kaum mehr als ein Geschwindigkeitsschub ist. Persönlich würde ich auf einer modernen CPU etwas bevorzugen, das näher an 1.000.000 oder 1.000.000.000 Iterationen liegt .
Kommentare
- Frage: Wird PBKDF2 nur verwendet, um die Anzahl der Vermutungen zu verlangsamen (wenn Bruteforce)? Oder gibt es andere Besonderheiten, die zu beachten sind?
- @NaveenNiraula : Neben der Verlangsamung des Brute-Force-Ratings hat PBKDF2 den sekundären Zweck, Passwörter beliebiger Länge und beliebigen Formats in einheitlich pseudozufällige Bitstrings umzuwandeln Kennwort und verhindert einige Angriffe mit vorberechneten Wörterbüchern wie “ Regenbogentabellen „. Aber auch wenn Sie nicht ‚ Sie benötigen nicht den Brute-Force-Raten-Schutz von PBKDF2. Sie können dafür einfach HMAC verwenden oder das Salt vor dem Hashing einfach mit dem Kennwort verketten es.