Zum Hauptinhalt springen

4.1. Salt

4.1. Salt

Ein Salt in der passwortbasierten Kryptographie hat traditionell dem Zweck gedient, eine große Menge von Schlüsseln zu erzeugen, die einem gegebenen Passwort entsprechen, von denen einer gemäß dem Salt zufällig ausgewählt wird. Ein einzelner Schlüssel in der Menge wird durch Anwendung einer Schlüsselableitungsfunktion KDF ausgewählt, wie folgt:

DK = KDF (P, S)

wobei DK der abgeleitete Schlüssel ist, P das Passwort ist und S das Salt ist. Dies hat zwei Vorteile:

  1. Es ist für einen Gegner schwierig, alle Schlüssel oder sogar die wahrscheinlichsten Schlüssel vorab zu berechnen, die einem Wörterbuch von Passwörtern entsprechen. Wenn das Salt beispielsweise 64 Bits lang ist, wird es für jedes Passwort bis zu 2^64 Schlüssel geben. Ein Gegner ist daher darauf beschränkt, nach Passwörtern zu suchen, nachdem eine passwortbasierte Operation durchgeführt wurde und das Salt bekannt ist.

  2. Es ist unwahrscheinlich, dass derselbe Schlüssel zweimal ausgewählt wird. Wiederum, wenn das Salt 64 Bits lang ist, wird die Wahrscheinlichkeit einer "Kollision" zwischen Schlüsseln erst bei etwa 2^32 erzeugten Schlüsseln signifikant, entsprechend dem Geburtstagsparadoxon. Die Tatsache, dass Kollisionen unwahrscheinlich sind, adressiert einige Bedenken hinsichtlich Interaktionen zwischen mehrfachen Verwendungen desselben Schlüssels, die bei der Verwendung einiger Verschlüsselungs- und Authentifizierungstechniken auftreten können.

Bei der passwortbasierten Verschlüsselung kann die Partei, die eine Nachricht verschlüsselt, Gewissheit erlangen, dass diese Vorteile realisiert werden, indem sie einfach ein großes und ausreichend zufälliges Salt auswählt, wenn sie einen Verschlüsselungsschlüssel von einem Passwort ableitet. Eine Partei, die einen Nachrichtenauthentifizierungscode generiert, kann auf ähnliche Weise eine solche Gewissheit erlangen.

Die Partei, die eine Nachricht entschlüsselt oder einen Nachrichtenauthentifizierungscode verifiziert, kann sich jedoch nicht sicher sein, dass ein von einer anderen Partei bereitgestelltes Salt tatsächlich zufällig generiert wurde. Es ist zum Beispiel möglich, dass das Salt von einer anderen passwortbasierten Operation kopiert wurde, um Interaktionen zwischen mehrfachen Verwendungen desselben Schlüssels auszunutzen. Angenommen, zwei legitime Parteien tauschen eine verschlüsselte Nachricht aus, wobei der Verschlüsselungsschlüssel ein 80-Bit-Schlüssel ist, der von einem gemeinsamen Passwort mit einem gewissen Salt abgeleitet wird. Ein Gegner könnte das Salt von dieser Verschlüsselung nehmen und es einer der Parteien so zur Verfügung stellen, als wäre es für einen 40-Bit-Schlüssel. Wenn die Partei das Ergebnis der Entschlüsselung mit dem 40-Bit-Schlüssel preisgibt, kann der Gegner möglicherweise den 40-Bit-Schlüssel auflösen. In dem Fall, dass der 40-Bit-Schlüssel die erste Hälfte des 80-Bit-Schlüssels ist, kann der Gegner dann leicht die verbleibenden 40 Bits des 80-Bit-Schlüssels auflösen.

Um sich gegen solche Angriffe zu verteidigen, sollte entweder die Interaktion zwischen mehrfachen Verwendungen desselben Schlüssels sorgfältig analysiert werden, oder das Salt sollte Daten enthalten, die explizit zwischen verschiedenen Operationen unterscheiden. Zum Beispiel könnte das Salt ein zusätzliches, nicht zufälliges Oktett haben, das angibt, ob der abgeleitete Schlüssel für Verschlüsselung, für Nachrichtenauthentifizierung oder für eine andere Operation bestimmt ist.

Basierend darauf wird Folgendes für die Salt-Auswahl empfohlen:

  1. Wenn keine Bedenken hinsichtlich Interaktionen zwischen mehrfachen Verwendungen desselben Schlüssels (oder eines Präfixes dieses Schlüssels) mit den passwortbasierten Verschlüsselungs- und Authentifizierungstechniken bestehen, die für ein gegebenes Passwort unterstützt werden, dann kann das Salt zufällig generiert werden und muss von der Partei, die das Salt empfängt, nicht auf ein bestimmtes Format überprüft werden. Es sollte mindestens acht Oktette (64 Bits) lang sein.

  2. Andernfalls sollte das Salt Daten enthalten, die explizit zwischen verschiedenen Operationen und verschiedenen Schlüssellängen unterscheiden, zusätzlich zu einem zufälligen Teil, der mindestens acht Oktette lang ist, und diese Daten sollten von der Partei, die das Salt empfängt, überprüft oder regeneriert werden. Zum Beispiel könnte das Salt ein zusätzliches nicht zufälliges Oktett haben, das den Zweck des abgeleiteten Schlüssels spezifiziert. Alternativ könnte es die Kodierung einer Struktur sein, die detaillierte Informationen über den abgeleiteten Schlüssel spezifiziert, wie die Verschlüsselungs- oder Authentifizierungstechnik und eine Sequenznummer unter den verschiedenen vom Passwort abgeleiteten Schlüsseln. Das spezielle Format der zusätzlichen Daten wird der Anwendung überlassen.

Hinweis: Wenn ein Zufallszahlengenerator oder Pseudozufallsgenerator nicht verfügbar ist, ist eine deterministische Alternative zur Generierung des Salts (oder des zufälligen Teils davon) die Anwendung einer passwortbasierten Schlüsselableitungsfunktion auf das Passwort und die zu verarbeitende Nachricht M. Zum Beispiel könnte das Salt mit einer Schlüsselableitungsfunktion als S = KDF (P, M) berechnet werden. Dieser Ansatz wird jedoch nicht empfohlen, wenn die Nachricht M bekanntermaßen zu einem kleinen Nachrichtenraum gehört (z.B. "Ja" oder "Nein"), da es dann nur eine kleine Anzahl möglicher Salts geben wird.