Gamma-Zufallszahlen-Generator
Wie erzeugt man echt zufällige Zufallszahlen? Am besten mit
einem echt zufälligen Vorgang wie z.B. mit dem radioaktiven
Zerfall. Hier wird eine Fotodiode als Sensor für Gammastrahlen
eingesetzt. Als Strahler kann z.B. ein ganz zufällig gefundener
uranhaltiger Stein sein. Das Verfahren funktioniert sogar schon mit der
kosmischen Strahlung oder mit ganz schwachem Restlicht. Man könnte sogar gezielt den funkelnden Sternenhimmel
oder die Lichter einer Großstadt verwenden, da ist genügend Zufall drin. Die Schaltung
ist extrem einfach und verwendet das Prinzip des CMOS-Sensors in einer
Kamera. Auch da findet man ja ein Rauschen bei schwachem Licht.
Die Sperrschichtkapazität der Fotodiode wird mit
einem kurzen Impuls aufgeladen. Dann wartet das Programm bis sie durch
irgendwelche Strahlung entladen ist. An diesem Punkt wird ein frei laufender
Zähler ausgelesen. Der Zeitpunkt ist damit zufällig. Auch wenn die Entladezeit
jedesmal ähnlich lange dauern sollte, wird das Ergebnis sehr zufällig, weil der
Zähler in der Zeit mehrfach überläuft. Der Zähler kann daher jeden Wert
zwischen 0 und 255 haben. Der ausgelesene Zählerstand wird über die serielle
Schnittstelle an den PC geschickt. Dort kommen dann etwa alle 100 ms oder bei
schwacher Strahlung entsprechend seltener zufällige Bytes an. Damit kann man
dann z.B. das Fort Knox verschlüsseln, oder den Lotto-Jackpot knacken.
'Gamma Random Generator
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 8
$swstack = 4
$framesize = 4
Dim X As Word
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
Start Timer0
Open "comb.1:9600,8,n,1,INVERTED" For Output As #1
Do
Portb.3 = 1 'charge photo diode
Ddrb.3 = 1
Ddrb.3 = 0
Portb.3 = 0 'hi Z
Do
Loop Until Pinb.3 = 0 'discharged by radiation?
X = Timer0
Put #1 , X
Waitms 100
Loop
End
Sind
diese Zahlen wirklich echt zufällig? Zur Überprüfung
wurde das Gamma-Spektroskop-Programm für den
Elektor-Strahlungsmesser angepasst. Und tatsächlich, auf den
ersten Blick sieht das wie ein echtes Rauschen aus. Nur die Endwerte 0
und 255 scheinen etwas zu kurz zu kommen. Die Ursache ist noch nicht
klar. Es könnte etwas mit der Art der Timer-Initialisierung zu tun
haben oder mit dem Auswerteprogramm.
Entropie Destillation von Stefan K.
Mit John von Neumanns Methode der "Entropie Destillation" lässt sich die Güte der Rohdaten noch verfeinern:
00 -> fällt weg
01 -> 0
10 -> 1
11 -> fällt weg
So
erreicht man über etwaige Störungen hinweg
Shannon-Sicherheit. Leider wird dabei mindestens die Hälfte an
Output zunichte gemacht. Aber man muss es ja nicht übertreiben.
Die Russen haben damals für den KGB sogar nur die Atmosphäre
als Rauschquelle verwendet. Wenn man an mathematischen Tests ein wenig
interressiert ist bietet sich die folgendes an: http://en.wikipedia.org/wiki/Diehard_tests
Alternative Messmethode von Erik Hermann
Die
Methode der Zufallszahlenbestimmung ist nicht ganz perfekt. Ich habe
das auch schon mal mit meinem Geigerzähler gemacht. Die
übliche Methode funktioniert wie folgt:
Man wartet bis
ein Teilchen gemessen wird. Dann misst man die Zeit bis zum Eintreffen
eines weiteren Teilchens. Nennen wir sie mal A. Dann misst man die Zeit
bis zum Eintreffen des nächsten Teilchens. Nennen wie sie B.
Nun wird verglichen. Ist A>B, wird eine binäre 0 generiert, ansonsten eine 1, und zur Zufallszahl hinzugefügt.
Nun
wird das Ganze wiederholt, aber die Überprüfung umgedreht,
d.h. ist A>B, wird eine 1 generiert, ansonsten eine 0.
Bei jeder weiteren Messung wird die Prüfbedingung wiederum umgedreht.
Auf
diese Weise kann man beliebig lange Zufallszahlen generieren, und
vermeidet durch das Umdrehen der Bedingung bei jedem bit systematische
Fehler in der Messung.