Zum Hauptinhalt springen

3. Overview (Überblick)

3. Overview (Überblick)

In vielen Anwendungen der Public-Key-Kryptographie ist die Benutzersicherheit letztendlich von einem oder mehreren geheimen Textwerten oder Passwörtern abhängig. Da ein Passwort jedoch nicht direkt als Schlüssel für ein konventionelles Kryptosystem anwendbar ist, ist eine gewisse Verarbeitung des Passworts erforderlich, um kryptographische Operationen damit durchzuführen. Darüber hinaus erfordert die Tatsache, dass Passwörter oft aus einem relativ kleinen Raum ausgewählt werden, besondere Sorgfalt bei dieser Verarbeitung, um sich gegen Suchangriffe zu verteidigen.

Ein allgemeiner Ansatz für passwortbasierte Kryptographie, wie von Morris und Thompson [MORRIS] für den Schutz von Passwort-Tabellen beschrieben, besteht darin, ein Passwort mit einem Salt zu kombinieren, um einen Schlüssel zu erzeugen. Das Salt kann als Index in eine große Menge von Schlüsseln betrachtet werden, die vom Passwort abgeleitet sind, und muss nicht geheim gehalten werden. Obwohl es für einen Angreifer möglich sein kann, eine Tabelle möglicher Passwörter zu konstruieren (ein sogenannter "dictionary attack" oder Wörterbuchangriff), wird der Aufbau einer Tabelle möglicher Schlüssel schwierig sein, da es für jedes Passwort viele mögliche Schlüssel geben wird. Ein Angreifer wird daher darauf beschränkt sein, Passwörter für jedes Salt separat zu durchsuchen.

Ein anderer Ansatz zur passwortbasierten Kryptographie besteht darin, Schlüsselableitungstechniken zu konstruieren, die relativ aufwendig sind und dadurch die Kosten einer erschöpfenden Suche erhöhen. Eine Möglichkeit hierzu besteht darin, einen Iterationszähler in die Schlüsselableitungstechnik einzubeziehen, der angibt, wie oft eine zugrunde liegende Funktion iteriert werden soll, durch die Schlüssel abgeleitet werden. Eine moderate Anzahl von Iterationen (z.B. 1000) dürfte für legitime Parteien bei der Berechnung eines Schlüssels keine Belastung darstellen, wird aber eine erhebliche Belastung für Gegner sein.

Salt und Iterationszähler bildeten die Grundlage für passwortbasierte Verschlüsselung in PKCS #5 v2.0 und werden hier ebenfalls für die verschiedenen kryptographischen Operationen übernommen. Somit ist die hier definierte passwortbasierte Schlüsselableitung eine Funktion eines Passworts, eines Salts und eines Iterationszählers, wobei die letzteren beiden Größen nicht geheim gehalten werden müssen.

Aus einer passwortbasierten Schlüsselableitungsfunktion ist es einfach, passwortbasierte Verschlüsselungs- und Nachrichtenauthentifizierungsschemata zu definieren. Wie in PKCS #5 v2.0 basieren die hier vorgestellten passwortbasierten Verschlüsselungsschemata auf einem zugrunde liegenden konventionellen Verschlüsselungsschema, wobei der Schlüssel für das konventionelle Schema vom Passwort abgeleitet wird. Ebenso basiert das passwortbasierte Nachrichtenauthentifizierungsschema auf einem zugrunde liegenden konventionellen Schema. Dieser zweischichtige Ansatz macht die passwortbasierten Techniken modular in Bezug auf die zugrunde liegenden Techniken, auf denen sie basieren können.

Es wird erwartet, dass die passwortbasierten Schlüsselableitungsfunktionen auch andere Anwendungen finden können als nur die hier definierten Verschlüsselungs- und Nachrichtenauthentifizierungsschemata. Zum Beispiel könnte man eine Menge von Schlüsseln mit einer einzigen Anwendung einer Schlüsselableitungsfunktion ableiten, anstatt jeden Schlüssel mit einer separaten Anwendung der Funktion abzuleiten. Die Schlüssel in der Menge würden als Teilzeichenketten der Ausgabe der Schlüsselableitungsfunktion erhalten. Dieser Ansatz könnte als Teil des Key-Establishments in einem sitzungsorientierten Protokoll eingesetzt werden. Eine weitere Anwendung ist die Passwortüberprüfung, bei der die Ausgabe der Schlüsselableitungsfunktion (zusammen mit dem Salt und dem Iterationszähler) zum Zweck der späteren Verifizierung eines Passworts gespeichert wird.

In diesem gesamten Dokument wird ein Passwort als eine Oktettzeichenkette beliebiger Länge betrachtet, deren Interpretation als Textzeichenkette nicht spezifiziert ist. Im Interesse der Interoperabilität wird jedoch empfohlen, dass Anwendungen einigen gemeinsamen Textkodierungsregeln folgen. ASCII und UTF-8 [RFC3629] sind zwei Möglichkeiten. (ASCII ist eine Teilmenge von UTF-8.)

Obwohl die Auswahl von Passwörtern außerhalb des Anwendungsbereichs dieses Dokuments liegt, wurden Richtlinien [NISTSP63] veröffentlicht, die gut berücksichtigt werden können.