Kann ich eine (schwache) Entropiequelle in FPGA implementieren?


12

Ich arbeite mit einer IoT-Plattform im FPGA für Evaluierung und Prototyping. Ich muss TLS unterstützen und dafür benötige ich eine Entropiequelle.

Ich verstehe, dass echte zufällige Rauschquellen im FPGA sehr speziell (wenn auch praktisch) sind, da die Geräteleistung oft recht gut ist (und es schwierig ist, Eckparameter zu finden), aber ich kann einen Pseudozufallssequenzgenerator ohne solche implementieren Probleme.

Ich habe nur einige Standard-I / O-Kanäle (Uart, I2C usw.), nichts, was so aussieht, kann einen PRBS-Ausgang sogar stark genug machen - außer vielleicht einen Audio-ADC-Eingang. Gibt es vielleicht zuverlässige Tricks zur Erzeugung von Entropie in einem FPGA, die ich berücksichtigen sollte?

Unter der Annahme, dass ich ein PRBS verwende, kann ich möglicherweise eine externe Geräuschquelle anschließen, die ich mit Sicherheit als Ausgangswert verwenden könnte. Ich bin gespannt, inwieweit sich dies tatsächlich auf meine TLS-Implementierung auswirkt. Wäre dies zuverlässig und sicher oder nur geringfügig besser als die Verwendung einer festen Pseudozufallsfolge? Muss ich die externe Rauschquelle weiter abfragen, um mehr Entropie zu erhalten?

Es ist in Ordnung, wenn die Entropiequelle, mit der ich ende, nicht richtig kryptosicher ist (da dies nur für das Prototyping ist), aber ich möchte den Kompromiss zwischen Kosten und Qualität verstehen.

Antworten:


6

Musst du? Sie können einen kryptografisch sicheren Zufallsgenerator implementieren, wenn Sie zwei Dinge haben: einen wiederbeschreibbaren sicheren Speicher und einen anfänglichen Startwert. Das heißt, es reicht aus, den RNG einmal zu setzen und dann seinen Zustand zu speichern und den gespeicherten Zustand zu verarbeiten. Es ist nicht ideal, es wäre besser, die Entropie periodisch einzumischen, aber es ist in Ordnung, insbesondere für einen Entwicklungsprototyp.

Sie benötigen einen wiederbeschreibbaren sicheren Speicher. Wenn das Gerät nur über ROM und nicht sicheren Speicher verfügt, ist dieser Ansatz nicht möglich. Es muss einen Ort geben, an dem Sie den RNG-Status so speichern können, dass Ihre Gegner ihn weder lesen noch ändern können.

Dies funktioniert so, dass beim Booten des Geräts der aktuelle RNG-Status geladen und damit genügend Zufallsbytes für die doppelte Größe des RNG-Status generiert werden. Schreiben Sie die erste Hälfte als neuen gespeicherten RNG-Status und verwenden Sie die zweite Hälfte als anfänglichen RNG-Status für die aktuelle Sitzung. Bei jedem kryptografisch sicheren PRNG ergibt sich ein kryptografisch sicheres PRNG. Beachten Sie, dass es wichtig ist, dass Sie einen gespeicherten RNG-Status nicht wiederverwenden. Aus diesem Grund müssen Sie einen neuen unabhängigen RNG-Status erstellen, bevor Sie den RNG verwenden können.

Die anfängliche Entropieinjektion kann während der Herstellung oder beim Einrichten des Geräts erfolgen. In der Regel geschieht dies mit einer Verbindung zu einem PC, der die Entropie für das Gerät erzeugen kann.


OK, in diesem Zusammenhang glaube ich nicht, dass der Speicher sogar sicher sein muss, da das Nutzungsmodell kein Verbraucherprodukt ist. Es kann davon ausgegangen werden, dass jeder Angreifer keinen physischen Zugriff auf mein Gerät hat (obwohl er möglicherweise über ein identisches Gerät verfügt). . Also kann ich einen Klon nicht verhindern.
Sean Houlihane
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.