Gamma-Zufallszahlen-Generator       


Elektronik-Labor  Projekte  AVR 

 

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.


Elektronik-Labor  Projekte  AVR