Ich arbeite an der Entwicklung einer Android-Zubehörhardware. Derzeit versuche ich, auf einem eingebetteten System eine Zufallszahl (C-Sprache) zu generieren, aber der Wert ändert sich nicht. Ich frage mich, ob es eine Entropiequelle gibt, mit der ich Zufallszahlen generieren kann.
Wenn es eine andere Möglichkeit gibt, eine Zufallszahl zu generieren, als eine Entropie-Methode, würde ich sie gerne von Ihnen hören!
Die Software, die ich benutze:
MPLAB IDE Version 8.73 MPLAB C Compiler für PIC24 und dsPIC v3.30
Das Gerät / die Werkzeuge, die ich benutze:
DM240415 - PIC24F Starter Kit für die Entwicklung von Zubehör für Android
pic
microchip
development
random-number
Ezylryb
quelle
quelle
Antworten:
Eine gute Rauschquelle ist das Durchbruchrauschen einer Zenerdiode. Das folgende einfache Schema zeigt, wie Sie weißes Rauschen von einem Zener erhalten, indem Sie zwei LNAs (Low Noise Amplifiers) kaskadieren, um den Rauschpegel zu erhöhen.
Wenn Sie sich nicht dafür interessieren, dass das Rauschen weiß ist, können Sie einfach einen Operationsverstärker mit hoher Verstärkung verwenden, dem ein Komparator folgt. Die Verstärkung des Operationsverstärkers begrenzt die Bandbreite und damit die Änderungsrate Ihres digitalen Signals. Falls erforderlich, kaskadieren Sie zwei Operationsverstärker wie die LNAs im angegebenen Schema, um einen schnelleren zufälligen Bitstrom zu erhalten.
Sie können das SPI-Modul verwenden, um Bytes zufälliger Bits von dieser Schaltung zu takten.
(Der SPI ist nur eine einfache Möglichkeit, 8 zufällige Bits automatisch zu erfassen. Er fügt keine Determinismusstufe hinzu: Die Eingabe ändert sich kontinuierlich und zufällig, und Sie wissen nie, wie sie bei der nächsten Taktflanke aussehen wird. Sie können auch eine lesen E / A-Pin und verschieben Sie den Pegel dieses Bits in Ihr Ergebnisbyte.)
Diese Schaltung ist eine mögliche alternative Lösung, die auch auf einer Zenerdiode als Rauschquelle beruht:
Das Schema erwähnt den OPA2340 für den Verstärker, ist aber auf dem Komparator nicht klar. Während der OPA2340 relativ schnell ist, würde ich vorschlagen, hier einen echten Komparator zu verwenden , da diese normalerweise viel schneller als Opamps sind. Beispielsweise hat der TL3016 eine Ausbreitungsverzögerung von weniger als 10 ns und eine typische Anstiegszeit von 0,5 ns. Dies bedeutet, dass Sie Zufallswerte schneller abtasten können, ohne das Risiko einer Kohärenz zwischen aufeinanderfolgenden Stichproben.
Um den Zufallszahlengenerator zu testen, können Sie die Normalität testen . Dies bedeutet, dass eine lange Folge von Zufallszahlen erstellt wird. Je länger, desto besser. Am besten transportieren Sie es zur Analyse auf den PC. Zähle die Ein-Bit-Sequenzen, das sind die
0
s und1
s. Es sollte ungefähr die gleiche Anzahl von jedem sein. Nächste Wiederholung für Zwei-Bit-Sequenzen. Es sollte so viele00
s wie01
s,10
s und11
s geben. Wiederholen Sie dies für Drei-Bit-Sequenzen usw.Ich bin kein Statistiker, daher kann es bessere / einfachere Tests geben. Fühlen Sie sich frei, sie hinzuzufügen.
quelle
Sie verwenden keinen PIC24FJ256GB110, der folgendermaßen aussieht:
Sie verwenden ein Android Starter Kit:
Wie Sie verstehen, handelt es sich um eine ziemlich feste Leiterplatte: Sie entwerfen die Leiterplatte nicht, und ein kurzer Blick auf den Schaltplan ergab nicht viel, das für eine Hardware-Entropiequelle entwickelt wurde oder als Hardware-Entropiequelle verwendet werden könnte, mit Ausnahme einiger ADC-Spuren das könnte als Antenne funktionieren, wie von Matt vorgeschlagen .
Angenommen, Sie interagieren mit einem Android-Gerät, dann haben Sie drei mögliche Quellen für zufälliges Rauschen:
Beachten Sie jedoch, dass kryptografische Sicherheit und echte Zufälligkeit schwierig sind. Es hört sich so an, als müssten Sie noch etwas lesen, bevor Sie versuchen, etwas zu produzieren, auf das sich die Leute verlassen können, oder Sie könnten in ernsthafte Schwierigkeiten geraten.
quelle
Das Problem bei Pseudozufallszahlengeneratoren ist, dass dies nicht der Fall ist. Sie erzeugen eine Folge von Zahlen von einem bekannten Ausgangspunkt aus. Dies ist normalerweise zufällig genug für die meisten Anwendungen auf niedriger Ebene, jedoch nicht, wenn Sie sicherheitsbewusst sind oder möchten, dass mehr als ein System ohne Kollisionen interagiert (z. B. Netzwerk).
Also ja, wie Sie zu Recht sagen, möchten Sie eine Entropiequelle. Dies kann verwendet werden, um den 'Startwert' des Zufallszahlengenerators auf einen unbekannten Wert zu setzen. Da nur der Startwert gesetzt wird und die Zufallszahlen nicht tatsächlich generiert werden, muss die Entropie nur einmal verwendet werden, sodass sie in Bezug auf Taktzyklen ziemlich "schwer" sein kann. Es kann beim Systemstart einmal ausgeführt werden und sollte von da an nie wieder ausgeführt werden müssen.
Die meiste Entropie wird aus Interrupts und anderen externen Quellen gesammelt (geerntet?). Meine erste Idee, die mir in den Sinn kommt, wäre, einen Eingang schwebend zu lassen (vielleicht einen analogen?), Mit dem vielleicht ein bisschen Spur verbunden ist, um als Antenne zu fungieren. Dies sollte ziemlich zufällig zwischen Werten wechseln, mit denen Sie einen numerischen Wert in der richtigen Reihenfolge erstellen können, um Ihren Pseudozufallszahlengenerator zu setzen.
Eine andere Idee könnte darin bestehen, eine Art Wandler an diesen Eingang anzuschließen, damit er zuverlässig "Rauschen" sammelt, das als Entropiequelle verwendet werden soll. Das kann alles sein, von einem einfachen Mikrofon und einem Operationsverstärker bis zu ein paar Operationsverstärkern, die miteinander verbunden sind, um eine enorme Verstärkung und damit einen Ausgang mit weißem Rauschen zu erzielen. Es gibt eine beliebige Anzahl möglicher Geräuschquellen in einem Stromkreis, je nachdem, was Ihnen in Bezug auf Board-Immobilien und Budget zur Verfügung steht.
quelle