© Liashko/Shutterstock.com
Entwickler Magazin
Teil 2: Zufallszahlengeneratoren und symmetrische Verschlüsselung

Zufälliger Determinismus?

Computer sind letztlich Rechenmaschinen, daher arbeiten sie deterministisch. Wenn aber Zufall eine große Rolle in der Kryptografie spielt, wie lässt sich das miteinander vereinbaren?

Golo Roden


ArtikelserieTeil 1: GrundlagenTeil 2: Zufallszahlengeneratoren und symmetrische VerschlüsselungTeil 3: Hashes und PasswörterTeil 4: Asymmetrische VerschlüsselungTeil 5: Zertifikate, HTTPS und Co.

Im ersten Teil dieser Serie wurde im Zusammenhang mit dem One-Time Pad (OTP) erwähnt, wie wichtig das Verwenden von Zufall beziehungsweise Zufallszahlen ist, um wiederkehrende Muster zu vermeiden. Diese können in der Verschlüsselung rasch auftreten, da zumindest Textnachrichten in natürlichen Sprachen verfasst werden, die per se besondere Eigenheiten und Muster aufweisen. Diese gilt es aufzubrechen.

In Anbetracht der enormen Rechenleistung, die heute selbst in Mobiltelefonen zur Verfügung steht, stellt man sich die Frage, wie schwer es denn sein kann, ein paar Zufallszahlen zu erzeugen. Diese Aufgabe sollte doch im 21. Jahrhundert verhältnismäßig einfach zu lösen sein – meint man. Wie schwer das jedoch tatsächlich ist, merkt man, wenn man selbst einmal von Hand versucht, eine zufällige Reihe von Nullen und Einsen aufzuschreiben. Im Folgenden der Versuch des Autors, der durch spontanes Tippen ohne weiteres Nachdenken entstanden ist:

001010101011010101001010101001010010101001010

Analysiert man diese Reihe, stellt man fest, dass weder die eine noch die andere Ziffer mehr als zwei Mal in Folge auftritt – und selbst das ist schon selten. Tatsächlich wechseln sich die beiden Ziffern im Wesentlichen mit schöner Regelmäßigkeit ab. In einer echt zufälligen Reihe müssten auch längere Sequenzen enthalten sein, im Extremfall könnte sie sogar so aussehen:

000000000000000000001111111111111111111111111

Rein statistisch betrachtet ist diese Reihe nicht wahrscheinlicher oder unwahrscheinlicher als die vorige. Auf einen Menschen wirkt sie aber geplant und systematisch.

Die fehlende Unregelmäßigkeit in dem vermeintlich zufällig erzeugten Ergebnis lässt sich durch das Maß der Entropie [1] beschreiben, das angibt, wie unstrukturiert ein Text ist. Verwandt damit ist die Redundanz, die quasi das Gegenteil der Entropie beschreibt: Ein echt zufälliger Text hat eine Redundanz von 0, in natürlich-sprachlichen Texten liegt sie weitaus höher.

Eine eigene Zufallsfunktion bauen

Nun überlässt man in der Kryptografie das Erzeugen von Zufallszahlen selten einem Menschen, sondern verwendet dafür die Mittel der jeweiligen Programmiersprache. Praktisch jede Sprache kennt dafür geeignete Funktionen, wie beispielsweise Math.random in JavaScript. Warum also nicht diese Funktionen verwenden?

Tatsächlich ist das...

Entwickler Magazin
Teil 2: Zufallszahlengeneratoren und symmetrische Verschlüsselung

Zufälliger Determinismus?

Computer sind letztlich Rechenmaschinen, daher arbeiten sie deterministisch. Wenn aber Zufall eine große Rolle in der Kryptografie spielt, wie lässt sich das miteinander vereinbaren?

Golo Roden


ArtikelserieTeil 1: GrundlagenTeil 2: Zufallszahlengeneratoren und symmetrische VerschlüsselungTeil 3: Hashes und PasswörterTeil 4: Asymmetrische VerschlüsselungTeil 5: Zertifikate, HTTPS und Co.

Im ersten Teil dieser Serie wurde im Zusammenhang mit dem One-Time Pad (OTP) erwähnt, wie wichtig das Verwenden von Zufall beziehungsweise Zufallszahlen ist, um wiederkehrende Muster zu vermeiden. Diese können in der Verschlüsselung rasch auftreten, da zumindest Textnachrichten in natürlichen Sprachen verfasst werden, die per se besondere Eigenheiten und Muster aufweisen. Diese gilt es aufzubrechen.

In Anbetracht der enormen Rechenleistung, die heute selbst in Mobiltelefonen zur Verfügung steht, stellt man sich die Frage, wie schwer es denn sein kann, ein paar Zufallszahlen zu erzeugen. Diese Aufgabe sollte doch im 21. Jahrhundert verhältnismäßig einfach zu lösen sein – meint man. Wie schwer das jedoch tatsächlich ist, merkt man, wenn man selbst einmal von Hand versucht, eine zufällige Reihe von Nullen und Einsen aufzuschreiben. Im Folgenden der Versuch des Autors, der durch spontanes Tippen ohne weiteres Nachdenken entstanden ist:

001010101011010101001010101001010010101001010

Analysiert man diese Reihe, stellt man fest, dass weder die eine noch die andere Ziffer mehr als zwei Mal in Folge auftritt – und selbst das ist schon selten. Tatsächlich wechseln sich die beiden Ziffern im Wesentlichen mit schöner Regelmäßigkeit ab. In einer echt zufälligen Reihe müssten auch längere Sequenzen enthalten sein, im Extremfall könnte sie sogar so aussehen:

000000000000000000001111111111111111111111111

Rein statistisch betrachtet ist diese Reihe nicht wahrscheinlicher oder unwahrscheinlicher als die vorige. Auf einen Menschen wirkt sie aber geplant und systematisch.

Die fehlende Unregelmäßigkeit in dem vermeintlich zufällig erzeugten Ergebnis lässt sich durch das Maß der Entropie [1] beschreiben, das angibt, wie unstrukturiert ein Text ist. Verwandt damit ist die Redundanz, die quasi das Gegenteil der Entropie beschreibt: Ein echt zufälliger Text hat eine Redundanz von 0, in natürlich-sprachlichen Texten liegt sie weitaus höher.

Eine eigene Zufallsfunktion bauen

Nun überlässt man in der Kryptografie das Erzeugen von Zufallszahlen selten einem Menschen, sondern verwendet dafür die Mittel der jeweiligen Programmiersprache. Praktisch jede Sprache kennt dafür geeignete Funktionen, wie beispielsweise Math.random in JavaScript. Warum also nicht diese Funktionen verwenden?

Tatsächlich ist das...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang