Zufallszahlen in der Kryptographie
Man unterscheidet in der Kryptographie zwischen echten Zufallszahlen (True Random Numbers) und Pseudozufallszahlen (Pseudorandom Numbers). Erstere können beispielsweise durch physikalische Prozesse wie Schwingungen, Stromwellen oder radioaktive Zerfälle erzeugt werden, während letztere durch deterministische Algorithmen in Programmen erzeugt werden.
Echte Zufallszahlen (True Random Numbers)
- Werden aus physikalischen, nicht-deterministischen Quellen generiert
- Beispiele: Hardware-Random-Number-Generators (HRNG), Quantenprozesse, thermisches Rauschen
- Nicht reproduzierbar
- Höchste Sicherheit für kryptographische Anwendungen
Pseudozufallszahlen (Pseudorandom Numbers)
- Werden durch deterministische Algorithmen erzeugt
- Erscheinen zufällig, sind aber reproduzierbar bei bekanntem Seed
- Beispiele: Linear Congruential Generator (LCG), Mersenne Twister, kryptographisch sichere PRNGs wie
/dev/urandom - Für kryptographische Zwecke sollten nur kryptographisch sichere PRNGs verwendet werden
Anwendungsfälle
Man benötigt Zufallszahlen um:
- Schlüsselgenerierung: Erzeugung von kryptographischen Schlüsseln
- Salts: Generierung von Salts für Passwort-Hashing
- Nonces: Einmalige Werte für Protokolle (z.B. in TLS)
- Initialisierungsvektoren (IVs): Für Blockchiffren im CBC-Modus
- Padding: Zufälliges Padding in Verschlüsselungsalgorithmen
- Challenge-Response-Protokolle: Zufällige Challenges für Authentifizierung
Wichtige Unterschiede
| Eigenschaft | Echte Zufallszahlen | Pseudozufallszahlen |
|---|---|---|
| Quelle | Physikalische Prozesse | Deterministische Algorithmen |
| Reproduzierbarkeit | Nicht reproduzierbar | Reproduzierbar mit Seed |
| Geschwindigkeit | Langsamer | Schneller |
| Sicherheit | Höchste Sicherheit | Abhängig vom Algorithmus |
| Verwendung | Kritische Anwendungen | Viele kryptographische Anwendungen |