23.04.2014 Aufrufe

Kompakte Notebooks Kompakte Notebooks - Wuala

Kompakte Notebooks Kompakte Notebooks - Wuala

Kompakte Notebooks Kompakte Notebooks - Wuala

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Know-how | Zufallszahlen<br />

Bias Setting<br />

Bias V<br />

Generator<br />

Ring Oscillators A, B, C<br />

450–810 MHz Sampling<br />

Flip Flop<br />

geht es mit 74,5 MByte/s zur Sache. Die Erzeugungsvorschrift<br />

ist so einfach, dass man<br />

kaum glauben kann, dass sie pseudozufällige<br />

Zahlenfolgen liefert: r nˇ+ˇ1ˇ=ˇ(r nˇ·ˇ16807)ˇ&ˇ2 31ˇ–<br />

1. Als nächster Wert der Zahlenfolge werden 8<br />

Bit aus der Mitte der Zahl herausgegriffen und<br />

ausgegeben. Zur Implementierung des Algorithmus<br />

siehe die Datei gen/mcg.h aus dem<br />

Listing-Archiv.<br />

Zahlen nach dem multiplikativen Kongruenzverfahren<br />

sind perfekt gleichverteilt,<br />

halten aber sonst nicht vielen Tests stand.<br />

Deshalb taugen sie am ehesten für einfache,<br />

aber zahlenhungrige Simulationen.<br />

C<br />

B<br />

A<br />

÷ 8<br />

XOR<br />

÷ 8 D<br />

Ring Oscillator D<br />

20–68 MHz<br />

von Neumann<br />

Corrector<br />

Raw Mode<br />

Select<br />

Shift<br />

Register<br />

Byte to<br />

FIFO<br />

1 bit<br />

discard<br />

Die PadLock-Einheit des Nehemiah-Chips sammelt Entropie aus elektronischem Rauschen.<br />

Chi-Quadrat-Schwellenwerte<br />

p 0,100 0,050 0,025 0,010 0,005 0,001<br />

df<br />

1 2,71 3,84 5,02 6,63 7,88 10,83<br />

2 4,61 5,99 7,38 9,21 10,60 13,82<br />

3 6,25 7,81 9,35 11,34 12,84 16,27<br />

4 7,78 9,49 11,14 13,28 14,86 18,47<br />

5 9,24 11,07 12,83 15,09 16,75 20,52<br />

6 10,64 12,59 14,45 16,81 18,55 22,46<br />

7 12,02 14,07 16,01 18,48 20,28 24,32<br />

8 13,36 15,51 17,53 20,09 21,95 26,12<br />

9 14,68 16,92 19,02 21,67 23,59 27,88<br />

10 15,99 18,31 20,48 23,21 25,19 29,59<br />

11 17,28 19,68 21,92 24,72 26,76 31,26<br />

12 18,55 21,03 23,34 26,22 28,30 32,91<br />

13 19,81 22,36 24,74 27,69 29,82 34,53<br />

14 21,06 23,68 26,12 29,14 31,32 36,12<br />

15 22,31 25,00 27,49 30,58 32,80 37,70<br />

16 23,54 26,30 28,85 32,00 34,27 39,25<br />

17 24,77 27,59 30,19 33,41 35,72 40,79<br />

18 25,99 28,87 31,53 34,81 37,16 42,31<br />

19 27,20 30,14 32,85 36,19 38,58 43,82<br />

20 28,41 31,41 34,17 37,57 40,00 45,31<br />

21 29,62 32,67 35,48 38,93 41,40 46,80<br />

22 30,81 33,92 36,78 40,29 42,80 48,27<br />

23 32,01 35,17 38,08 41,64 44,18 49,73<br />

24 33,20 36,42 39,36 42,98 45,56 51,18<br />

25 34,38 37,65 40,65 44,31 46,93 52,62<br />

26 35,56 38,89 41,92 45,64 48,29 54,05<br />

27 36,74 40,11 43,19 46,96 49,64 55,48<br />

28 37,92 41,34 44,46 48,28 50,99 56,89<br />

29 39,09 42,56 45,72 49,59 52,34 58,30<br />

30 40,26 43,77 46,98 50,89 53,67 59,70<br />

Mersenne-Twister<br />

Eine fast mustergültige Synthese aus Geschwindigkeit<br />

und Zufälligkeit bietet der Mersenne-Twister.<br />

Seinen Namen hat er von der<br />

unvorstellbaren Periodenlänge von 2 19937ˇ–ˇ1<br />

(eine Zahl mit 6002 Stellen). Diese Zahl ist<br />

eine Mersenne-Primzahl; Mersenne-Zahlen<br />

folgen dem allgemeinen Schema 2 nˇ–ˇ1. Zu<br />

den Details des Algorithmus siehe [5].<br />

Statistische Tests meistert er mit Bravour.<br />

Für kryptografische Zwecke eignet sich der<br />

Algorithmus trotz seiner langen Periode<br />

nicht, da die Kenntnis von 624 aufeinanderfolgenden<br />

Zahlen genügt, um alle weiteren<br />

vorhersagen zu können. Außerdem muss<br />

sich der Generator erst einmal mit mindestens<br />

624 Iterationen warmlaufen – empfohlen<br />

sind einige tausend –, bevor er gute Zufallszahlen<br />

ausgibt. Das tut jedenfalls die<br />

Implementierung, die in der Datei gen/mersenne.cpp<br />

des Listing-Archivs wiederzufinden<br />

ist. Alternativ kann man die 624 Startwerte<br />

(32-bittige Ganzzahlen) auch mit Zufallszahlen<br />

aus einem Hardware-Generator<br />

belegen.<br />

Marsaglia<br />

Der Mathematiker und Informatiker George<br />

Marsaglia, bekannt für seine Diehard genannten<br />

Suite mit Zufälligkeitstests, kritisiert<br />

den Mersenne-Twister als zu unelegant und<br />

kompliziert – zum Glück, nicht ohne ein eigenes<br />

Verfahren vorzustellen, das unter Multiply-with-carry<br />

(MWC) oder Recursion-withcarry<br />

firmiert und als „Mutter der Zufälligkeit“<br />

gehandelt wird. Je nach Parametrierung<br />

gestattet MWC Periodenlängen von 2 60 bis<br />

2 2000000 . Der im Listing-Archiv in der Datei<br />

gen/marsaglia.h implementierte Algorithmus<br />

hat eine Periodenlänge von 3ˇ·ˇ10 47 . Er<br />

gibt 32-Bit-Ganzzahlen aus und arbeitet intern<br />

mit 64-Bit-Werten. Die Funktionsweise:<br />

–ˇBildung der Summe Sˇ=ˇ2111111111ˇ·ˇr n–4<br />

+ˇ1492ˇ·ˇr n–3ˇ+ˇ1776ˇ·ˇr n–2ˇ+ˇ5115 ·ˇr n–1ˇ+ˇC.<br />

–ˇExtrahieren der untersten 32 Bits und Ausgabe<br />

als aktuelle Zufallszahl: r nˇ= Sˇmodˇ2 32 .<br />

–ˇNeusetzen der Konstante mit den oberen<br />

32 Bit der Summe: Cˇ=ˇSˇ/ˇ2 32 .<br />

Der Algorithmus benötigt zwei Dutzend Iterationen<br />

zum Aufwärmen, kann aber auch<br />

sofort losstarten, wenn man ihn mit fünf 32-<br />

Bit-Zufallszahlen vorbelegt.<br />

In der aktuellen Implementierung muss<br />

sich der MWC-Algorithmus dem Mersenne-<br />

Twister hinsichtlich der Geschwindigkeit<br />

geschlagen geben. Allerdings schreit die<br />

parallele Multiplikation bei der Summenbildung<br />

geradezu nach schnellen SSE2-Befehlen<br />

zur Vektormultiplikation, woraus sich<br />

eine deutliche Performance-Steigerung ergeben<br />

dürfte.<br />

Blum-Blum-Shub (BBS)<br />

Zu den langsamsten Kandidaten der Zufallszahlenerzeugung<br />

gehört der BBS-Algorithmus,<br />

der nach seinen Schöpfern Lenore<br />

Blum, Manuel Blum und Michael Shub benannt<br />

wurde. Das Verfahren lockt allerdings<br />

mit dem hohen Anspruch, sich für kryptografische<br />

Zwecke zu eignen. Deshalb ist BBS die<br />

eigentliche Mutter der Zufälligkeit, wenn<br />

auch eine sehr langsam gebärende.<br />

Dass der Algorithmus eher gemächlich<br />

zu Werke geht, liegt daran, dass er mit<br />

Ganzzahlen beliebiger Genauigkeit arbeitet.<br />

Das sieht man der Generatorformel allerdings<br />

nicht gleich an: r n+1ˇ=ˇr n2ˇmodˇm. Die<br />

Tücke verbirgt sich hinter dem Modulus m,<br />

der das Produkt zweier großer Primzahlen p<br />

und q ist. Daraus ergibt sich die Sicherheit<br />

für kryptografische Anwendungen: Mit steigenden<br />

Werten für p und q steigt der Aufwand<br />

für die Primfaktorzerlegung rapide<br />

an. Heute als sicher gelten Werte jenseits<br />

von 2 1024 . Das ist eine Dezimalzahl mit über<br />

300 Stellen. Für jede Iteration muss der Algorithmus<br />

demnach mit 300-und-mehrstelligen<br />

Zahlen hantieren. Für Simulationen<br />

ist das in der Regel zu teuer und umständlich.<br />

Fazit<br />

Den perfekten Zufallszahlengenerator, der<br />

gleichzeitig billig, schnell und kryptografisch<br />

sicher ist, gibt es nicht. Die vorgestellten<br />

(Pseudo-)Zufallszahlgeneratoren stellen nur<br />

eine Auswahl dar – wenn auch eine, auf die<br />

es zu setzen lohnt. Für welchen Generator<br />

man sich letztlich entscheidet, hängt vom<br />

Einsatzzweck ab.<br />

Auf eine Idee sollte man allerdings nicht<br />

kommen: sich einen Generator nach Gutdünken<br />

selbst zusammenzubasteln. Damit ist<br />

schon der Zahlengroßmeister Donald Knuth<br />

ganz fürchterlich auf die Nase gefallen, als er<br />

den „Super-random number generator“ ausgetüftelt<br />

zu haben glaubte, sehr amüsant<br />

nachzulesen in [1].<br />

Ein Generator, der ct-rng-assessor aushält,<br />

hat quasi das Casting bestanden und kommt<br />

in den Recall. Dort erwartet ihn die harte Jury<br />

der Kryptografen vom CAcert oder – alternativ<br />

– die Dieharder-Suite. Im Finale muss der<br />

Generator gegen TestU01 antreten. Erst<br />

dann kann man (einigermaßen) sicher sein,<br />

Zufall erschaffen zu haben.<br />

(ola)<br />

Literatur<br />

[1]ˇDonald E. Knuth, The Art of Computer Programming<br />

Vol. 2 – Seminumerical Algorithms, 3rd edition,<br />

Addison-Wesley 1997, ISBN 0-201-89684-2<br />

[2]ˇErich Bonnert, Meilenstein der Fahrzeug-Robotik,<br />

Volkswagen und die Stanford University<br />

178 c’t 2009, Heft 2<br />

©<br />

Copyright by Heise Zeitschriften Verlag GmbH & Co. KG. Veröffentlichung und Vervielfältigung nur mit Genehmigung des Heise Zeitschriften Verlags.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!