Was ist die aktuelle Standard-Iterationszahl für PBKDF2?
Es gibt keine. Die Iterationsanzahl ist in einem Standarddokument nicht angegeben. Verwenden Sie so viele wie möglich, ohne den Benutzer zu stören. Beachten Sie, dass dies normalerweise dadurch bestimmt wird, dass Sie eine Zielzeit (für die tatsächliche Hardware) wie 0,1 Sekunden bis zu 2 Sekunden festlegen und dann mehrere Iterationszählungen versuchen, um näher an diese Marke zu kommen (verwenden Sie die binäre Suche, wenn Sie nicht möchten Es gibt keine PBKDF2-Implementierung mit Protokollierung, die Sie abbrechen können.
Natürlich sollten Sie die Anzahl der Iterationen nicht selbst definieren, sondern den Benutzer definieren lassen (Keepass macht das so). Es ist im Grunde ein Benchmark mit einer Zielzeit.
Die Anzahl der Iterationen ist der Haupttreiber der Sicherheit in PBKDF2 und ist im Grunde die Verlangsamung für Angreifer, vorausgesetzt, dass Sie nicht mehr Ausgaben als die Ausgabegröße der zugrunde liegenden Hash-Funktion anfordern.
Ist PBKDF2 die Länge der Ausgangsbyte wichtig? Ich meine mehr Länge = mehr Sicherheit?
Ja, es ist wichtig, aber nur bis zu einem gewissen Punkt. Wenn die Ausgabe klein ist, sagen wir 64 Bit, dann ist es einfacher, eine Kollision zu finden (einige Eingaben, die zur selben Ausgabe hashen) als ein Hash mit einer 128 Bit Ausgabe. Aus diesem Grund sollten kurze Hash-Funktionen heutzutage nicht verwendet werden. Alles, was 256 Bit ausgibt, ist in Ordnung. Beachten Sie, dass SHA-512 so implementiert werden kann, dass es auf 64-Bit-Plattformen mit SHA-256 schneller läuft.
Und würde mir ein längeres Salz zusätzliche Sicherheit geben?
Nein, ein Salz ist da, um zwischen mehreren Verwendungen desselben Passwortes oder Schlüssels zu unterscheiden. Mit dem selbe würde es einem Angreifer, der die Passwortdatenbank gestohlen hat, ermöglichen, die Passwörter aller Benutzer zur gleichen Zeit und nicht nacheinander zu erzwingen. Ein 64-Bit- oder 128-Bit-Salz ist ausreichend genug, um die Erzeugung von Rainbow-Tabellen zu verhindern (aber eine große Iterationszählung sorgt im Grunde dafür).
Die Angabe eines Salzes ist nur relevant, wenn Sie glauben, dass der Angreifer einen Off-line-Brute-Force-Angriff auf mehrere Kennwortcontainer Ihrer Benutzer gleichzeitig ausführen kann (wodurch er zuvor in mehrere Benutzercomputer einbricht).
Das Salz seine auf der Datei gespeichert, so ist es „möglich“, um es abzurufen, ist es einen besseren Weg zu „verstecken“ als nur die Bytes kriechen?
Nein, das Salz soll nicht geheim sein. Sein einziger Zweck ist die Randomisierung der Ausgabe selbst und insbesondere, wenn das gleiche Passwort verwendet wurde. Erzeugen Sie einfach ein zufälliges Salz aus einer guten Zufälligkeitsquelle und speichern Sie es wie es ist. Wenn Sie authentifizierte Verschlüsselung (AES-GCM oder Ähnliches) verwenden, sollten Sie das Salz natürlich als zusätzliche authentifizierte Daten weitergeben, um (bösartige) Manipulationen zu erkennen.
Hilfreiche Ressource: pbkdf-2 Tag auf Cryptography.
re: Iterationszählung: Ich sehe normalerweise 5k-20k in freier Wildbahn, aber eine nicht feste Anzahl ist besser imho; vielleicht addiere den ASCII-Wert des ersten Buchstabens zur Zählung, so dass Sachen wie John der Ripper eine 93X härtere Zeit davon haben. – dandavis