Ich arbeite an der Entwicklung einer Android-Zubehörhardware. Derzeit versuche ich, eine Zufallszahl (C-Sprache) auf einem eingebetteten System zu generieren, aber der Wert ändert sich nicht. Ich frage mich, ob es eine Entropiequelle gibt, die ich zum Generieren von Zufallszahlen verwenden kann.
Wenn es eine andere Möglichkeit gibt, Zufallszahlen zu erzeugen, als die Verwendung einer Entropiemethode, würde ich es sehr gerne von Ihnen hören!
Die von mir verwendete Software:
MPLAB IDE Version 8.73 MPLAB C Compiler für PIC24 und dsPIC v3.30
Die Geräte/Tools, die ich verwende:
DM240415 - PIC24F-Zubehörentwicklungs-Starterkit für Android
„Jeder, der arithmetische Methoden zur Erzeugung von Zufallsziffern in Betracht zieht, ist natürlich in einem Zustand der Sünde“ Johann von Neumann
Eine gute Rauschquelle ist das Durchbruchrauschen einer Zenerdiode. Das einfache Schema unten zeigt, wie man weißes Rauschen von einem Zener erhält, indem man zwei LNAs (Low Noise Amplifiers) kaskadiert, um den Rauschpegel zu erhöhen.
Wenn es Ihnen egal ist, ob 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. Kaskadieren Sie bei Bedarf 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 mit zufälligen Bits von dieser Schaltung einzutakten.
(Die SPI ist nur eine einfache Möglichkeit, automatisch 8 zufällige Bits zu sammeln, sie fügt keinerlei Determinismus hinzu: Die Eingabe ändert sich kontinuierlich und zufällig und Sie wissen nie, was sie bei der nächsten Taktflanke sein wird. Sie können auch eine lesen I/O-Pin und verschieben Sie den Pegel dieses Bits in Ihr Ergebnisbyte.)
Diese Schaltung ist eine mögliche alternative Lösung, die sich ebenfalls auf eine Zenerdiode als Rauschquelle stützt:
Der Schaltplan erwähnt den OPA2340 für den Verstärker, ist aber für den Komparator nicht klar. Obwohl der OPA2340 ziemlich schnell ist, würde ich vorschlagen, hier einen echten Komparator zu verwenden , da diese normalerweise viel schneller sind als Operationsverstärker. Beispielsweise hat der TL3016 eine Ausbreitungsverzögerung von weniger als 10 ns und eine typische Anstiegszeit von 0,5 ns. Das bedeutet, dass Sie Zufallswerte schneller abtasten können, ohne das Risiko einer Kohärenz zwischen aufeinanderfolgenden Abtastungen.
Um den Zufallszahlengenerator zu testen, können Sie auf Normalität testen . Das bedeutet, eine lange Folge von Zufallszahlen zu erstellen, je länger desto besser. Am besten transportieren Sie es für die Analyse zum PC. Zählen Sie die Ein-Bit-Folgen, das sind die 0
s und 1
s. Es sollten jeweils ungefähr die gleiche Anzahl vorhanden sein. Nächste Wiederholung für Zwei-Bit-Sequenzen. Es sollte so viele 00
s wie 01
s, 10
s und 11
s geben. Wiederholen Sie dies für Drei-Bit-Sequenzen usw.
Ich bin kein Statistiker, daher gibt es möglicherweise bessere / einfachere Tests. Fühlen Sie sich frei, sie hinzuzufügen.
Sie verwenden keinen PIC24FJ256GB110, der so aussieht:
Sie verwenden ein Android Starter Kit:
die, wie Sie verstehen, eine ziemlich feste Leiterplatte ist: Sie entwerfen die Leiterplatte nicht, und ein kurzer Blick auf den Schaltplan ergab nicht viel, was als Hardware-Entropiequelle gebaut wurde oder als Hardware-Entropiequelle umfunktioniert werden könnte, außer einigen ADC-Spuren die als Antennen fungieren könnten, wie von Matt vorgeschlagen .
Angenommen, Sie interagieren mit einem Android-Gerät, haben Sie jedoch drei potenzielle Quellen für zufälliges Rauschen:
Beachten Sie jedoch, dass kryptografische Sicherheit und echte Zufälligkeit schwierige Dinge 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 sich in ernsthafte Schwierigkeiten bringen.
Das Problem mit Pseudozufallszahlengeneratoren ist, dass sie es nicht sind. Sie erzeugen eine Zahlenfolge von einem bekannten Startpunkt aus. Dies ist normalerweise für die meisten Anwendungen auf niedriger Ebene zufällig genug, aber nicht, wenn Sie sicherheitsbewusst sind oder möchten, dass mehr als ein System ohne Kollisionen interagiert (z. B. Netzwerke).
Also ja, wie Sie richtig sagen, Sie wollen eine Entropiequelle. Dies kann verwendet werden, um den 'Seed' des Zufallszahlengenerators auf einen unbekannten Wert zu setzen. Da nur der Seed gesetzt und die Zufallszahlen nicht wirklich generiert werden, muss die Entropie nur einmal wirklich verwendet werden, kann also in Bezug auf Taktzyklen ziemlich "schwer" sein. Es kann einmal beim Systemstart ausgeführt werden und sollte von da an nie wieder ausgeführt werden müssen.
Die meiste Entropie wird von 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 vielleicht einem Stückchen damit verbundener Spur, um als Antenne zu fungieren. Dies sollte ziemlich zufällig zwischen Werten wechseln, die Sie verwenden können, um einen numerischen Wert in der richtigen Reihenfolge zu erstellen, um Ihren Pseudozufallszahlengenerator zu starten.
Eine andere Idee könnte darin bestehen, eine Art Wandler an diesen Eingang anzuschließen, damit er zuverlässig "Rauschen" sammeln kann, das als Ihre Entropiequelle verwendet werden kann. Das kann alles sein, von einem einfachen Mikrofon und Operationsverstärker bis hin zu ein paar Operationsverstärkern, die miteinander verbunden sind, um eine enorme Verstärkung und damit eine Ausgabe mit weißem Rauschen zu erzielen. Es gibt eine beliebige Anzahl möglicher Rauschquellen in einer Schaltung, je nachdem, was Sie an Platinenplatz und Budget zur Verfügung haben.
Toby Jaffey
Endolith
Ezylryb
stevenvh
drxzcl
Ezylryb
drxzcl