2016-07-24 16 views
0

Ich kodiere einen Passwort-Manager für die Schule und ich würde gerne wissen, was ich verbessern oder ändern sollte. Dies ist, wie es funktioniert:Password Manager Sicherheit

Um das Hauptkennwort ich eine Datei mit dem Kennwort mit PBKDF2 512bytes output oben auf SHA3-512 gehasht erstellen zu speichern. Verwenden Sie eine zufällige 128byte Salz und eine zufällige Anzahl von Iterationen (welcher Bereich ist es der Punkt der Frage). All diese Daten werden in der Datei gespeichert und mit einem pseudozufälligen Generator verschlüsselt, der aus dem Passwort selbst generiert wird (auf diese Weise ist es schwieriger, das Salz zu erhalten).

Dann ist die Datei, in der die Passwörter gespeichert sind, mit AES 256 verschlüsselt, und das Salz wird vom Benutzer PC Pseudo-Unique Identifier generiert.

Wenn der Benutzer ein Passwort wählt, sind die Anforderungen: Mindestens 10 Zeichen und nicht auf die 100.000 am häufigsten verwendeten Passwörtern Liste zu sein (ich habe diese Liste irgendwo im Internet, könnte veraltet sein)

Nun

, ich habe Fragen, die sind: Was ist die aktuelle Standard-Iteration für PBKDF2 zählen? Ist PBKDF2 die Länge des Ausgangsbytes wichtig? Ich meine mehr Länge = mehr Sicherheit?

Und würde mir ein längeres Salz zusätzliche Sicherheit geben?

Das Salz ist auf der Datei gespeichert, so dass es "möglich" ist, es zu erhalten, gibt es eine bessere Möglichkeit, es zu "verstecken" als nur die Bytes zu verwürfeln?

+0

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

Antwort

2

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.