it-swarm-eu.dev

Wie groß sollte Salz sein?

Ich werde scrypt verwenden, um Passwörter in meiner Anwendung zu speichern. Als solches werde ich SHA-256- und Salsa20-Krypto-Grundelemente (mit PBKDF2) verwenden.

Wie viel Salz sollte ich vor diesem Hintergrund verwenden? Sollte es gleich der Größe der SHA-256-Ausgabe sein: 256 Bit oder sollte es gleich der Anzahl der Bits sein, die ich aus dieser Passwort-Stretching-Funktion entnehmen werde: 512 Bit?

Wenn man bedenkt, dass SSHA, wie es von OpenLDAP verwendet wird, nur 32-Bit-Salz enthält und Linux crypt () 48-Bit-Salz verwendet, scheinen meine Salze ziemlich groß zu sein ...

Im Allgemeinen: Was ist die Faustregel für die Salzgröße?


Verbunden:

Was sollte als Salz verwendet werden?

Was ist gut genug Salz für einen SaltedHash?

30
Hubert Kario

Salze müssen einzigartig sein; Das ist ihre einzige Aufgabe. Sie sollten sich so weit wie möglich bemühen, einen Salzwert niemals wiederzuverwenden. Die gelegentliche Wiederverwendung ist selten kritisch, sollte aber dennoch vermieden werden. Bei vernünftig gestalteten Passwortschemata gibt es außer der Einzigartigkeit keine andere nützliche Eigenschaft in Salzen. Sie können sie auswählen, wie Sie möchten, solange Sie nicht genau dieselbe Bitfolge reproduzieren. Einzigartigkeit muss weltweit verstanden werden.

(Bei schlecht gestalteten Kennwort-Hashing-Schemata hat das Salt möglicherweise einige erforderliche zusätzliche Eigenschaften. Wenn Sie jedoch ein schlecht gestaltetes Kennwortschema verwenden, treten bereits größere Probleme auf. Beachten Sie, dass ein Salt nicht genau mit einem identisch ist. Initialisierungsvektor für symmetrische Verschlüsselung, bei dem normalerweise strenge Anforderungen wie unvorhersehbare einheitliche Zufälligkeit gelten.)

Ein üblicher Weg Um mehr oder weniger eindeutige Salzwerte zu haben, müssen diese zufällig mit einem guten Generator generiert werden (z. B. einem, der für kryptografische Verwendungen geeignet ist, wie /dev/urandom). Wenn das Salz lang genug ist, ist das Risiko von Kollisionen (d. H. Wiederverwendung eines Salzwerts) gering. Wenn Sie n - Bit-Salze verwenden, wird die Wahrscheinlichkeit einer Kollision nicht vernachlässigbar, sobald Sie ungefähr 2 erreichenn/2 generierte Werte. Es gibt ungefähr 7 Milliarden Menschen auf diesem Planeten, und man kann davon ausgehen, dass sie im Durchschnitt jeweils weniger als 1000 Passwörter besitzen. Daher muss die weltweite Anzahl der gehashten Passwörter etwas niedriger sein als 242.7. Daher sollten 86 Bit Salz ausreichen. Da wir so genannte "Sicherheitsränder" mögen und Programmierer nur Liebe Zweierpotenzen, gehen wir zu 128 Bit . Nach der obigen Analyse ist dies mehr als genug, um die weltweite Einzigartigkeit mit ausreichend hoher Wahrscheinlichkeit sicherzustellen, und von einem Salz wollen wir nichts mehr als die Einzigartigkeit.

Die Eindeutigkeit kann auch durch andere Mittel sichergestellt werden, z. Verwendung der Verkettung des Servernamens (das weltweite DNS-System stellt bereits sicher, dass jeder seinen eigenen Servernamen erhalten kann, der sich von dem aller anderen auf dem Planeten unterscheidet) und eines serverweiten Zählers als Salz. Dies wirft einige praktische Probleme auf, z. Beibehalten eines Zählerwerts, der sich selbst bei einem Serverabsturz und Neustart mit schlechtem Timing und/oder mehreren Frontends mit Lastausgleich nicht wiederholt. Ein zufälliges Salz fester Länge ist einfacher.

33
Thomas Pornin

"Es sollte mindestens acht Oktette (64 Bit) lang sein." von: http://www.ietf.org/rfc/rfc2898.txt

7
woliveirajr