Schlüsselstreckung
Schlüsselstreckung, englisch Key Stretching, ist eine kryptographische Schlüsselableitungsoperation, die einen schwachen Schlüssel, üblicherweise ein Passwort, sicherer machen soll, indem sie dafür sorgt, dass zum Durchprobieren aller Möglichkeiten mehr Mittel (Zeit, Speicher) benötigt werden. Stand der Technik ist Argon2. Den anerkannten Regeln der Technik genügen auch noch PBKDF2, bcrypt oder scrypt, die jedoch bekannte Nachteile aufweisen.
Strecktechniken arbeiten im Allgemeinen wie folgt: Der Anfangsschlüssel wird in einen Algorithmus eingegeben, der einen verbesserten, gestreckten Schlüssel erzeugt. Dieser muss groß genug sein, dass er nicht durch einen Brute-Force-Angriff herausgefunden werden kann (eine Länge von 128 Bit reicht in der Regel aus). Der Streckungsalgorithmus muss sicher sein, das heißt, es darf keine Möglichkeit bekannt sein, den verbesserten Schlüssel aus dem Anfangsschlüssel mit geringerem Aufwand zu berechnen.
Der Angreifer, der einen gestreckten Schlüssel herausfinden möchte, hat zwei Möglichkeiten: entweder alle Möglichkeiten für den verbesserten Schlüssel auszuprobieren (praktisch unmöglich, wenn der Schlüssel lang genug ist), oder alle möglichen Kombinationen von Zeichen des ursprünglichen Schlüssels auszuprobieren, indem er sie jeweils streckt. Wenn der Anfangsschlüssel ein Passwort ist, wird der Angreifer üblicherweise wie folgt vorgehen: zuerst wird er jedes Wort einer Liste von häufigen Passwörtern ausprobieren, dann jedes Wort im Wörterbuch, und schließlich alle möglichen Kombinationen von Zeichen, mit zunehmender Länge, soweit es seine Rechenleistung und -zeit erlaubt. Das Strecken des Schlüssels verhindert diese Vorgehensweise nicht, aber der Angreifer muss je Probepasswort mehr Zeit aufwenden, da er es strecken muss.
Wenn der Angreifer dieselbe Hardwareklasse wie der Benutzer verwendet, erfordert jeder Versuch die gleiche Zeit, die der Benutzer zum Strecken des Schlüssels benötigt hat (diese Zeit liegt normalerweise in der Größenordnung von einer Sekunde). Selbst wenn der Angreifer viel größere Rechenressourcen hat, verlangsamt die Schlüsselstreckung den Angriff erheblich, da der Computer des Benutzers die Streckungsfunktion nur einmal berechnen muss, um ein Kennwort zu verarbeiten, während der Angreifer sie für jedes mögliche Kennwort berechnen muss, das er probiert.
Es gibt mehrere Möglichkeiten, die Schlüsselstreckung durchzuführen. Neben den oben genannten Algorithmen wie Argon2 kann auch eine Kryptographische Hashfunktion oder Blockchiffre wiederholt angewendet werden.