Forum: Mikrocontroller und Digitale Elektronik AVR: Zufallszahlengenerator - zufälliger Startwert


von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Und noch eine Frage hinterher. Wie bekomme ich beim Start eines 
AVR-Controllers eine wirklich echte Zufallszahl, die nicht irgendwie 
berechnet und daher bei jedem Start die gleiche ist?

Kennt jemand da eine einfache Möglichkeit?

Ansonsten mache ich's mit dem ADC, rotiere/addiere eine große Anzahl 
Messungen des Batteriespannungs-messenden Kanals und hoffe auf ein paar 
Bitwackler... wobei mir die aber eigentlich zu selten auftreten. Die 
Entstörung ist leider bereits auf Lochraster ziemlich gut geworden. :-/

Danke...

von Daniel (Gast)


Lesenswert?

Wie wärs mit der Messung eines offenen(floatenden) AD-Kanals?

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Das hatte ich auch überlegt, geht leider nicht (mehr), alle ADC-Eingänge 
sind belegt. Daher der meiner Meinung nach am stärksten wackelnde 
Eingang.

Es liegen auch keine Eingänge zuverlässig auf annähernd gleichem 
Spannungsbereich, ansonsten hätte ich welche mit hoher Verstärkung 
gemessen, daß die unteren Bits schön flattern. Aber ich glaube alles 
würde nur den Verstärker übersteuern und dann klebe ich an einem der 
Endwerte fest.

von J. Zimmermann (Gast)


Lesenswert?

Hab an meiner Appl. eine RTC, nutze einfach die aktuelle Zeit als 
Startwert.
mfg
Achim

von Cyblord -. (cyblord)


Angehängte Dateien:

Lesenswert?

Ich nutze einfach die angehängte Zufallsfunktion.

von Peter D. (peda)


Lesenswert?

Daniel schrieb:
> Wie wärs mit der Messung eines offenen(floatenden) AD-Kanals?

Dieser wird sich, bedingt durch Leckstöme, auf GND bzw. VCC aufladen und 
dann konstant 0x0000 oder 0xFFFF liefern. Es reicht ein hochohmiger 
Flußmittelrest oder fettiger Fingerabdruck an der richtigen Stelle.

von Falk B. (falk)


Lesenswert?

Ben B. schrieb:
> Und noch eine Frage hinterher. Wie bekomme ich beim Start eines
> AVR-Controllers eine wirklich echte Zufallszahl, die nicht irgendwie
> berechnet und daher bei jedem Start die gleiche ist?
>
> Kennt jemand da eine einfache Möglichkeit?

Indem man den Zufallsgenerator immer laufen läßt, z.B. in einem 100Hz 
Interrupt. Die Anwendung/State machine starte dann zufällig in einem 
beliebigen Augenblick, damit ist der Zufallsgeneratorstartpunt zufällig.

von Cyblord -. (cyblord)


Lesenswert?

Falk B. schrieb:

> Indem man den Zufallsgenerator immer laufen läßt, z.B. in einem 100Hz
> Interrupt. Die Anwendung/State machine starte dann zufällig in einem
> beliebigen Augenblick, damit ist der Zufallsgeneratorstartpunt zufällig.

Da braucht das Programm aber ein nicht deterministisches Element, wie 
z.B. eine Benutzereingabe. Sonst bringt das gar nichts.

von Dietrich L. (dietrichl)


Lesenswert?

Ein echter Zufallsgenerator wäre ein Rauschen, z.B. das Rauschen einer 
Diode verstärken und auf der ADC geben.
Siehe https://de.wikipedia.org/wiki/Rauschgenerator

Eine fertige, erprobte Schaltung habe ich aber nicht :-(

von Wachtelberg (Gast)


Lesenswert?

> ... eines AVR-Controllers ...

Da hast du aber Glück gehabt, dass es nur einen gibt.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Yep, wie schon geschrieben, geht nicht weil ich keinen ADC-Eingang für 
ein zusätzliches Rauschsignal mehr frei habe.

Andere Idee: Wie kann man am einfachsten einen digitalen Pin flattern 
lassen, bzw. wie bekommt man ein möglichst chaotisches Signal an einem 
digitalen Pin zustande? Irgendein Kippschwinger mit ein paar kHz?

Hab was:
Das geht sogar ganz einfach mit einem RC-Glied an einem Pin. Ich kann 
mit dem Pin die Zeit messen bis der Pin auf high kippt und kann den 
Kondensator über den Pin entladen. In der Zeit wo der Kondensator 
aufgeladen wird kann ich intern mit hoher Frequenz (der wird mit einigen 
Mhz zählen) einen 8-Bit Zähler laufen lassen. Den Zyklus ein paar 
hundert Mal durchlaufen lassen, die Ergebnisse auf 128 Bit addieren oder 
sonstewie durchrotieren...

Das sollte doch zufällig genug werden, oder?

von Thomas E. (thomase)


Lesenswert?

Cyblord -. schrieb:
> Da braucht das Programm aber ein nicht deterministisches Element, wie
> z.B. eine Benutzereingabe. Sonst bringt das gar nichts.

Man könnte den dafür zuständigen Timer mit einer vom Systemtakt 
unabhängigen Taktquelle versorgen, indem man den Watchdog Timer dafür 
verwendet.

von Falk B. (falk)


Lesenswert?

Oder.

von Cyblord -. (cyblord)


Lesenswert?

Thomas E. schrieb:
> Man könnte den dafür zuständigen Timer mit einer vom Systemtakt
> unabhängigen Taktquelle versorgen, indem man den Watchdog Timer dafür
> verwendet.

Und in wie fern ergibt das irgendwie Zufall?

von Chris K. (Gast)


Lesenswert?

Schau dir das letzte Bit von dem ADC Eingang an, welcher am stärksten 
rauscht. Den sampelst du 8 mal und schiebst das letzte Bit des ADC 
Wertes immer eine Stelle weiter in deine Zufallszahl. Somit hast du eine 
8 Bit Zufallszahl.

von Falk B. (falk)


Lesenswert?

Cyblord -. schrieb:
> Und in wie fern ergibt das irgendwie Zufall?

Gar nicht, denn die Jungs kennen den Unterschied zwischen Toleranz (der 
Frequenz) und (gleichverteiltem) Zufall nicht.
Denn selbst wenn die Frequenz des Watchdogs eine mehr oder minder große 
Streuung hat, so ist sie für einen IC relativ konstant, wenn 
Versorgungsspannung und Temperatur konstant bleiben.

von Falk B. (falk)


Lesenswert?

Chris  K. schrieb:
> Schau dir das letzte Bit von dem ADC Eingang an, welcher am stärksten
> rauscht. Den sampelst du 8 mal und schiebst das letzte Bit des ADC
> Wertes immer eine Stelle weiter in deine Zufallszahl. Somit hast du eine
> 8 Bit Zufallszahl.

Die alles andere als gleichverteilt ist . . .

von Falk B. (falk)


Lesenswert?

Man sollte erstmal klären, wofür diese Zufallszahl denn wirklich 
gebraucht wird (schon klar, als Startwert des Pseudozufallsgenerators). 
Und ob externe Ereignisse (Eingangssignale, Nutzereingaben) existieren. 
Wenn ja, ist die Methode des "warmlaufen lassen" des Zufallsgenerators 
sehr einfach und wirksam.

von M. K. (sylaina)


Lesenswert?

Cyblord -. schrieb:
> Ich nutze einfach die angehängte Zufallsfunktion.

ymmd :D

von M. K. (sylaina)


Lesenswert?

Ben B. schrieb:
> Das hatte ich auch überlegt, geht leider nicht (mehr), alle ADC-Eingänge
> sind belegt.

Benutzt du den internen Temperatursensor deines AVRs (beim Atmega328P an 
ADC Kanal 8)? Wenn nicht kannst du doch das Rauschen vom dem benutzen 
als "Zufallsgenerator" ;)

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Ich überlege wie ich es am besten hinbekomme, den Kommunikationsweg vom 
Terminal zur Zentrale meiner AlarmSau zu verschlüsseln, um zu 
verhindern, daß jemand an dem Punkt mit einem Keylogger oder so mitlesen 
kann, was da eingegeben wird.

Da Benutzereingaben nicht ohne diese Kommunikation möglich sind, muß das 
anlaufen bevor Benutzereingaben möglich sind.

Was meint ihr zu der Idee oben mit dem RC-Glied am digitalen Eingang?

von Framulestigo (Gast)


Lesenswert?

Kann man nicht jede 100000ste (oder so) Zufallszahl als 
Reinitialisierungswert für den nächsten Reset ins EEPROM speichern?

von Falk B. (falk)


Lesenswert?

Ben B. schrieb:
> Ich überlege wie ich es am besten hinbekomme, den Kommunikationsweg vom
> Terminal zur Zentrale meiner AlarmSau zu verschlüsseln, um zu
> verhindern, daß jemand an dem Punkt mit einem Keylogger oder so mitlesen
> kann, was da eingegeben wird.#

Mal abgesehen vom nicht wirklich vorhandenen Nutzwert und Notwendigkeit, 
macht man sowas, wenn es denn WIRKLICH was taugen soll, mit bestehenden, 
nachweislich sicheren Verfahren. Denn alles Selbstgestrickte, "hippe" 
und "mal schnell ADC-Rauschen messen" ist zu 99,9% Bastlerschrott. Denn 
die bestehenden Verfahren wurden sowohl von Kryptogaphieprofis als auch 
IT-Profis entworfen und getestet.

> Was meint ihr zu der Idee oben mit dem RC-Glied am digitalen Eingang?

Bastlerschrott.

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Falk B. schrieb:
> Chris  K. schrieb:
>> Schau dir das letzte Bit von dem ADC Eingang an, welcher am stärksten
>> rauscht. Den sampelst du 8 mal und schiebst das letzte Bit des ADC
>> Wertes immer eine Stelle weiter in deine Zufallszahl. Somit hast du eine
>> 8 Bit Zufallszahl.
>
> Die alles andere als gleichverteilt ist . . .

Das sollte nicht das Problem sein. Die Verteilung einer Zufallsvariable 
laesst sich transformieren.

Problematisch wird eher sein ob das letzte Bit nicht doch einem gewissen 
Determinismus unterliegt. Haengt auch ganz von der Anwendung ab wie viel 
Zufall man wirklich braucht.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Na dann mach mich doch mal schlau, wie es die Profis machen. Bin 
gespannt, das zu hören.

von Kaj (Gast)


Lesenswert?

Ben B. schrieb:
> Ich überlege wie ich es am besten hinbekomme, den Kommunikationsweg vom
> Terminal zur Zentrale meiner AlarmSau zu verschlüsseln, um zu
> verhindern, daß jemand an dem Punkt mit einem Keylogger oder so mitlesen
> kann, was da eingegeben wird.
"Kommunikationsweg" und "Keylogger" sind 2 paar Schuhe.
Keylogger sind dazu da, die Nutzereingaben aufzuzeichnen (waere also am 
Terminal installiert). Da hilft eine Verschluesselung des 
Kommunikationsweges (Terminal -> Zentrale), wie z.B. TLS, gar nichts.

Also, was willst du?
Willst du dich gegen Keylogger und/oder MitM schuetzen?

von Cyblord -. (cyblord)


Lesenswert?

Ben B. schrieb:
> Na dann mach mich doch mal schlau, wie es die Profis machen. Bin
> gespannt, das zu hören.

Schau doch mal wie man heute digitale Verbindungen im Netz 
verschlüsselt. Zertifikate, also PPK/Asymetrische Verschlüsselung z.B. 
RSA für die Authentifizierung des Gegenüber. Darüber dann 
Schlüsseltausch via Diffie-Hellman. Dann die eigentliche 
Datenverschlüsselung symmetrisch z.B. AES.

Für einfachere Dinge, wie schlichte Befehle von einem Terminal könnten 
auch Challenge-Response Verfahren reichen. Aber auch hier mit 
asymmetrischen Verfahren.

: Bearbeitet durch User
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Ich meine einen Hardware-Keylogger, der die Kommunikation auf den 
USART-Leitungen aufzeichnet. Der würde die Eingaben so ziemlich im 
Klartext erhalten.

Das Terminal ist auch nichts auf PC-Basis, sondern das ist eine zweite 
Platine, auf der mir ein ATMega88 ein Display und ein 4x3-Tasten-Feld 
RS232-tauglich machen. Da könnte man nur mechanisch was draufbasteln, 
wie bei den Skimming-Angriffen an Bankautomaten.

von Thomas E. (thomase)


Lesenswert?

Falk B. schrieb:
> Gar nicht, denn die Jungs kennen den Unterschied zwischen Toleranz (der
> Frequenz) und (gleichverteiltem) Zufall nicht.

Und die alten Säcke tun sich schwer mit dem verstehen (wollen).

von Cyblord -. (cyblord)


Lesenswert?

Das Problem mit den beiden Thread von Ben ist einfach: Er ist sich 
überhaupt nicht im Klaren darüber welche Angriffsvektoren er absichern 
will.

Da wird wild alles durcheinander gewirbelt und außer Aktionismus fällt 
da nichts bei raus.

@Ben:

Jetzt nimm dir mal die Zeit und überlege WAS du da genau schützen 
willst. Welche Szenarien schweben dir vor. Dann erst kann man über eine 
Lösung nachdenken.

von Dennis M. (dennis_dertypda)


Lesenswert?

Warum nicht 'einfach' eine CA erstellen,
Eine private Zertifikats-Autorität, mit der du Asymetrische Schlüssel 
von deinem Master-Server signierst.

Der Client kann dann mit deinem Master Zertifikat die unterzertifikate 
auf Ihre glaubwürdigkeit überprüfen.
Ich glaube ein 512Bit Key (auch wenn mittlerweile gut knackbar) ist 
ausreichend, da zu aufwendig.

Bzw. falls der Chip nicht die leistung hat, kann man eine Synchrone 
Verschlüsselung benutzen.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

@Cyblord
Da die Sache mit dem EEPROM abgehakt ist, geht es mir nur noch um die 
Verschlüsselung der Kommunikation vom Terminal zur Zentrale. Der Rückweg 
ist nicht wichtig, da werden nie sensible Daten übertragen.

Was ich damit verhindern will? Die (rein hypotetische) Möglichkeit, daß 
jemand mit einem einfachen RS232-Logger die Tastenanschläge mitliest 
und/oder aufzeichnet.

von Cyblord -. (cyblord)


Lesenswert?

Ben B. schrieb:
> Was ich damit verhindern will? Die (rein hypotetische) Möglichkeit, daß
> jemand mit einem einfachen RS232-Logger die Tastenanschläge mitliest
> und/oder aufzeichnet.

Dafür reicht eine einfache Verschlüsselung. Der Schlüssel kann dann fest 
auf beiden Seiten eincompiliert sein. Denn die Gefahr dass jemand dein 
Flash ausliest siehst du ja nicht als gegeben. Dir geht es ja nur um die 
Strecke.

Wenn du auch ausschliest dass jemand in die Kommunikation reinfummelt, 
fallen auch Replay Attacken usw. flach.

von PittyJ (Gast)


Lesenswert?

Bei einem AD-Wandler ist doch meist das letzte Bit immer am flackern.
Stabile AD-Werte habe ich noch nie gesehen.

Einfach das letzte Bit nehmen, dann etwas warten, nehmen ... und damit 
16 oder 32 Bit generieren.

von M. K. (sylaina)


Lesenswert?

PittyJ schrieb:
> Bei einem AD-Wandler ist doch meist das letzte Bit immer am flackern.
> Stabile AD-Werte habe ich noch nie gesehen.

Ohje, wie schlecht sind denn deine ADC-Aufbauten? Also ganz ohne 
Anstrengung bekomm ich den internen ADC des AVRs bis aufs letzte Bit 
stabil hin, das ist nun bei 10 bit auch alles andere als schwer.

von sid (Gast)


Lesenswert?

Natürlich kann man das "richtig" machen mit CA Handshake protokollen usw 
usf..

Aaber..
wieso kein vordefinierter key?

Du generierst eine SemiPrime am heimischen Rechner (sagen wir 479bit 
weil es ne ätzende länge ist [auch prim])
Den private key dazu brennste ins EEprom der Sender
und verschlüsselst damit die Datenpakete die gesedet werden.
Pakete pumpst Du auf 512bit auf, damit der MitM die exakte Länge nicht 
erkennt;

Empfänger bekommt den public key dazu, kürzt was ankommt auf 479 bit und 
entschlüsselt was übrig bleibt.
Protokoll dazu kann man sich ja aussuchen..
wenn man den public key nun auch als private denkt (und geheim hält) 
sollte das ne Weile halten

Bei bidirektionaler Übertragung kann der public ver- und der private 
entschlüsseln;
ganz wie gewohnt.

Absurde bitlängen sind deswegen schön, weil man sie so schön mit Unfug 
füllen kann zB dem Rauschen auf nem analogen Pin ;)

Und wenn man sich jedes Jahr ne neue SemiPrime sucht ist man mE nach 
geschützt genug.

von Oliver S. (oliverso)


Lesenswert?

Anscheinend schickt das Terminal die Tastendrücke direkt an die Sau. Ob 
der hypothetische Keylogger jetzt im Klartext die PIN „1234“ mitliest, 
oder das als verschlüsselten Text „§/)(€93(…4@A“, ist Wurscht.

Beides kann der Keylogger mitschneiden, und dann jederzeit an die Sau 
senden, worauf hin die dann die Tür aufmacht (oder so).

Ist allerdings nur ein hypothetisches Problem, denn kein Einbrecher 
dieser Welt kommt mit einem Keylogger.

Oliver

von Cyblord -. (cyblord)


Lesenswert?

Oliver S. schrieb:
> Beides kann der Keylogger mitschneiden, und dann jederzeit an die Sau
> senden, worauf hin die dann die Tür aufmacht (oder so).

Exakt. Darum Challenge-Response. Mit Timestamp oder Zufallszahl drin.

Nur hat der TE das eben nicht korrekt formuliert. Er schrieb er will ein 
MITLESEN verhindern. Also schließt er eine Manipulation oder ein Senden 
durch den Angreifer aus. Was aber ja nicht korrekt ist.

Darum schrieb ich ja: Er muss sich über die tatsächlichen Szenarien mal 
klar werden. Aber das will er ja nicht. Stattdessen müssen wir dieses 
häppchenweisen Unsinn lesen.

> Ist allerdings nur ein hypothetisches Problem, denn kein Einbrecher
> dieser Welt kommt mit einem Keylogger.

Natürlich. Dieses ganze Projekt ist Humbug hoch drei.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Übrigens: Garagentoröffner mittels Pin Terminal machen das recht 
elegant: Die Senden einfach nur nach korrketer Pin Eingabe ihre feste 
Seriennummer per Funk, so wie jede andere Funkfernbedienung für dieses 
Tor auch.
Das Gerät ist zusätzlich noch vergossen und wird über einen 9V Block 
versorgt.

Ein Angriff über das Gerät selbst wird sehr schwer. Also dem Chip da 
drin dahin zu bringen, den Code ohne korrekte Pin Eingabe zu senden.

Bleibt nur das heimliche mitschneiden des Funk-Codes wenn der Besitzer 
öffnet. Das geht aber bei jeder Fernbedienung genau so. Das Code-Schloss 
hat diesbezüglich keine Nachteile.

von Stefan F. (Gast)


Lesenswert?

Ich hatte mal ein gerät gebaut, dass per Tastendruck aus dem Sleep Modus 
erweckt wird. Ich habe dort die Dauer des Tastendrucks als 
Initialisierungswert für den Zufallszahlen-Generator verwendet.

von Peter D. (peda)


Lesenswert?

M. K. schrieb:
> Also ganz ohne
> Anstrengung bekomm ich den internen ADC des AVRs bis aufs letzte Bit
> stabil hin, das ist nun bei 10 bit auch alles andere als schwer.

Das hat mich auch mal geärgert, daß der nicht rauscht. Ich wollte man 
eine 3000V Anzeige basteln mit Mittelwert über 256 Messungen. Die 
Anzeige wechselte aber stur in 3V Schritten, d.h. die 10Bit standen wie 
Ast.

von sid (Gast)


Lesenswert?

Oliver S. schrieb:
> Beides kann der Keylogger mitschneiden, und dann jederzeit an die Sau
> senden, worauf hin die dann die Tür aufmacht (oder so).

Naja sicherheitsrelevante Befehle ohne timecode zu senden ist auch 
ziemlicher Blödsinn..
timecode sei dank ist das auch recht schmalbandig zu senden

Und wenn der Tunichtgut am 29.Januar um 17:30 aufzeichnet kann er am 
30sten um 14:00 nix damit anfangen ;)... ich sag nur

von Wolfgang (Gast)


Lesenswert?

Cyblord -. schrieb:
> Bleibt nur das heimliche mitschneiden des Funk-Codes wenn der Besitzer
> öffnet. Das geht aber bei jeder Fernbedienung genau so.

Bei den primitiven magst du Recht haben. Ansonsten guckst du hier:
https://de.wikipedia.org/wiki/Rollingcode

von Chris K. (Gast)


Lesenswert?

Ben B. schrieb:
> Na dann mach mich doch mal schlau, wie es die Profis machen. Bin
> gespannt, das zu hören.

Genau wie beschrieben. Eine Rauschquelle per ADC sampeln und damit die 
Zuffallsszahl erstellen. Stichwort True Random Number Generator

https://en.wikipedia.org/wiki/Hardware_random_number_generator

Die Kunst ist für die Entscheidung 1 oder 0 möglichst 0.5 für die 
Wahrscheinlichkeit zu erreichen.

http://robertnz.net/true_rng.html

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

@Cyblord

Ich habe keine Ahnung wo Dein Problem liegt, eigentlich dachte ich, 
daß Du zu konstruktiven Beiträgen fähig bist. Das scheint aber auch von 
echtem Zufall abzuhängen. Schade.

Natürlich mache ich mir Gedanken drüber, daß replay-Attacken schwierig 
werden. Ich glaube aber, das bekommt man nur über einen 
Schlüsselaustausch hin, etwa sowas wie daß die Zentrale dem Terminal 
einen Startwert für einen Zufallszahlengenerator übermittelt. Den von 
der Zentrale gesendeten Zufallswert als Startwert kann der Angreifer 
nicht beeinflussen und kann dadurch ohne Kenntnis des zweiten 
Teilschlüssels im Flash keine korrekten Codes senden. Für eine 
Replay-Attacke dagegen bräuchte man dann Tabellen für jeden Startwert. 
Ich glaube wenn man das alles mit 256 Bit ausführt und überträgt, würden 
diese Tabellen so groß, daß niemand sie mit vertretbaren Mitteln auch 
nur speichern könnte. Wenn man diesen Startwert dann noch alle paar 
Minuten wechselt, veralten "frische" Einträge in solchen Tabellen auch 
so schnell, daß man damit effektiv nichts anfangen kann.

Beitrag #5718493 wurde von einem Moderator gelöscht.
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Der Controller, der den echten Zufallswert als Startwert liefern müsste 
ist ein ATMega1284. Der hat leider keinen Temperatursensor.

von Roland F. (rhf)


Lesenswert?

Hallo,
Anton M. schrieb im Beitrag #5718493:
> ... und hast keine Ahnung wie pseudo-zufällig diese Werte wirklich sind.

Du solltest dir besagte Funktion mal näher ansehen...

rhf

von michael_ (Gast)


Lesenswert?

Ben B. schrieb:
> Und noch eine Frage hinterher. Wie bekomme ich beim Start eines
> AVR-Controllers eine wirklich echte Zufallszahl,

Daran haben sich schon genug Mathematiker die Zähne ausgebissen.
Kannst du vergessen.

Für eine gute Pseudo-Zufallszahl findest du sicher etwas in den 
AVR-Applikationen.
Reicht für den Bastler locker.

Beitrag #5718522 wurde von einem Moderator gelöscht.
von michael_ (Gast)


Lesenswert?

Ach, wie groß setzt du die Zahlentiefe an?

Aber über die Mengenlehre und Wahrscheinlichkeitsrechnung.
Sag jetzt aber nicht, es ist keine Mathematik.

von Kurt (Gast)


Lesenswert?

Mit Amateurmitteln ist "Zufall" nicht so einfach.
Man darf davon auch keine "unknackbare" Verschlüsselung
erwarten.

Fassen wir mal die Ideen zusammen:

- Die "beiliegende Zufallsfunktion" ist Mist: Das ist oft nur
eine Modulo-Funktion, die bei gleichen Startbedingungen den
gleichen Startwert liefert. Wenn sie halbwegs gut ist, erwartet
sie einen Startwert (SEED), den man ja auch erst mal "zufällig"
erzeugen muss...

- Der offene ADC-Eingang liefert nur Zufallswerte, wenn man
es nicht erwartet. Oft wird er gegen MAX oder MIN gezogen,
oder verhält sich erstaunlich stabil.

- Die interne Temperaturmessung bei Atmel gibt nur ca.
1 LSB/°C, ist also unbrauchbar.

- Eine Rauschdiodenschaltung kann ECHTE Zufallswerte liefern,
benötigt aber ein paar zusätzliche Bauelemente, eine gute
Schirmung und einen ADC-Kanal, den du ja nicht mehr frei hast.

- Also: Aufforderung zum Taste-drücken.
Startet man einen 16-Bit-Zähler mit F = F-CPU, wird es
schon schwer, jedesmal zum gleichen Zählerstand die Taste
zu drücken.

- Wenn es ohne Nutzereingabe, loslaufen soll, käme ja
wirklich nur der temperaturabhängige Frequenz-Offset des
Watchdog-Timers gegenüber deiner Quarz-Frequenz in Frage.
Da sollte man aber ordentlich Zeit (einige Sekunden bis
Minuten!) einplanen, damit sich der Offset deutlich
mehrstellig zeigt.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Nochmal: Was ich gerade als Idee habe ist, ein RC-Glied mit einem 
digitalen AVR-Pin umzuladen und während der Umladezeit einen kleinen 
8Bit-Zähler laufen zu lassen. Der Zähler läuft extrem schnell, wird 
mehrere Mhz erreichen und sollte in der Umladezeit auch etliche Male 
überlaufen. Das Ergebnis dieses Zählers kann man dann in einen 
Zufallswert reinaddieren, schieben, XORen was immer man möchte, 
möglichst chaotisch halt.

z.B. 1..10nF Kondensator zwischen Pin und Masse, aufladen über den 
internen PullUp-Widerstand.

grobe Überlegung:
1
start:
2
<PinXY auf Eingang, PullUp aktiv>
3
count: inc    r16
4
       sbrs   PortX,Y
5
       rjmp   count
6
<PinXY auf Ausgang, aktiv low> entlädt den Kondensator
7
wait:  sbrc   PortX,Y
8
       rjmp   wait
9
<Ergebnis in R16 verwursten>
10
<if counts<1000 rjmp start>

Das ganze vielleicht 1000mal durchlaufen lassen. Der Zähler läuft mit 
etwa 3Mhz, läuft in einer Sekunde also 11718mal über. Wenn die Spannung 
am Kondensator mit 1kHz schwingt (dann dauern 1000 Durchläufe etwa eine 
Sekunde), dauert das ganze etwa eine Sekunde. Mich würde sehr wundern, 
wenn da jemand immer auf die gleichen Messergebnisse käme. Vielleicht 
auch nur die unteren zwei Bits einer jeden Zählung verwenden.

Wie hoch ist die Chance, daß da ein berechenbares, wiederholbares 
Ergebnis herauskommt?

Beitrag #5718543 wurde von einem Moderator gelöscht.
Beitrag #5718550 wurde von einem Moderator gelöscht.
von c-hater (Gast)


Lesenswert?

Ben B. schrieb:
> Der Controller, der den echten Zufallswert als Startwert liefern müsste
> ist ein ATMega1284. Der hat leider keinen Temperatursensor.

Aber einen RTC-Timer. Wenn man da einen Uhrenquarz dranhängt, kann man 
dessen Einschwingverhalten (im Vergleich zum Systemtakt) als 
Entropiequelle benutzen.

Außerdem hat der Mega1284 16kRAM, der beim PowerOn nicht initialisiert 
ist. Auch eine ganz brauchbare Quelle für Entropie.

Eine weitere Möglichkeit: der Analog-Komparator. Wenn man einen der 
beiden AINx offen läßt und das Potential des anderen über einen 
Zweipunktregler mit PWM-Ausgang "regelt", wird auch ein Haufen Zufall 
geliefert.

von Kolja (Gast)


Lesenswert?

Ben B. schrieb:
> Und noch eine Frage hinterher.

Wenn dieser Satz der erste Satz des ersten Artikels im Thread ist, finde 
ich das schon lustig :-)

von Cyblord -. (cyblord)


Lesenswert?

Ben B. schrieb:
> @Cyblord
>
> Ich habe keine Ahnung wo Dein Problem liegt, eigentlich dachte ich,
> daß Du zu konstruktiven Beiträgen fähig bist. Das scheint aber auch von
> echtem Zufall abzuhängen. Schade.

Bei dir ist leider alles zu spät. Du scheinst einfachste Einwürfe gar 
nicht zu verstehen.

> Natürlich mache ich mir Gedanken drüber, daß replay-Attacken schwierig
> werden.

Ja? Wo steht das?

> Ich glaube aber, das bekommt man nur über einen
> Schlüsselaustausch hin

UNSINN. Für den Schutz gegen Replay Attacken reicht eine vom Host 
generierte ID oder ein Timestamp.
Erfordert aber bidirektionale Kommunikation. Daher Challenge/Response 
Verfahren. Hab ich jetzt schon drei mal erwähnt.

Benutzer gibt PIN im Terminal ein.

1.) Terminal sendet KOMMANDO an Zentrale (z.B. Alarmanlage aus).
2.) Zentrale erzeugt eine ID/Timestamp und sendet an Terminal.
3.) Terminal erzeugt HASH (ID+KOMMANDO+PIN) und sendet an Zentrale
4.) Zentrale erzeugt ebenfalls diesen HASH und vergleicht.
5.) Wenn korrekt wird die Alarmanlage ausgeschaltet.

Die einfache HASH Funktion kann man durch das HMAC verfahren ersetzen.

Ein Angreifer kann durch mithören und manipulieren der Daten nichts 
erreichen. Replay durch die ID ausgeschlossen. PIN wird niemals im 
Klartext übertragen und kann nicht durch mitloggen rekontruiert werden.

Es gibt keine Geheimnisse im Terminal die ein Angreifer auslesen könnte. 
-> Terminal muss nicht gesondert geschützt werden.

Hat man mehrere Nutzer kann die Zentrale alle PINS durchprobieren oder 
man sendet die Benutzerkennung noch im Klartext mit, sofern diese dem 
Terminal bekannt ist.


Ich denke aber bei dir reichts leider nicht für eine kontruktive 
Diskussion zu diesem Thema. Daher fühlst du dich auch angepisst. Kann 
ich aber nichts dafür.

Und ja, leider ist das Zufallszahlproblem in Wirklichkeit gar nicht dein 
Hauptproblem. Für dein Szenario kommt man ohne Zufall aus.

: Bearbeitet durch User
von S. R. (svenska)


Lesenswert?

Nimm dir drei Inverter (mit Schmitt-Trigger-Eingang) und schalte die als 
schnellen Ringoszillator im Kreis. An einer Stelle baust du noch einen 
RC als Frequenzbremse ein, damit du die Inverter nicht überforderst. Als 
Abgriff nimmst du ein Latch, damit du die setup/hold-Zeiten vom AVR 
nicht verletzt. Braucht zwei Pins.

Die Oszillatorfrequenz ist temperaturabhängig und instabil, daher der 
Zufall.

von Peter D. (peda)


Lesenswert?

Stefanus F. schrieb:
> Ich habe dort die Dauer des Tastendrucks als
> Initialisierungswert für den Zufallszahlen-Generator verwendet.

Ich hab mal einen Würfel so aufgebaut. Die Drückdauer als Zufall 
funktioniert sehr gut.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

@Cyblord
Letzte Bemerkung an Dich: Wenn Du mich nicht verstehen willst dann 
gratuliere ich Dir zu Deinem tollen Erfolg!

@Rest
Danke für eure Beiträge, denke ich probiere die Methode mit dem RC-Glied 
einfach mal aus, scheint mir am vielversprechendsten.

Beim RAM weiß ich nicht inwiefern das beim Start des Controllers 
wirklich rein zufällige Werte enthält. Darüber habe ich auch nichts zu 
lesen gefunden, ansonsten wäre es klasse, wenn man den kompletten 
RAM-Inhalt einfach einmal zusammenaddieren könnte. Hat das schon jemand 
durchprobiert?

von 50c (Gast)


Lesenswert?

Ben B. schrieb:
> Darüber habe ich auch nichts zu
> lesen gefunden, ansonsten wäre es klasse, wenn man den kompletten
> RAM-Inhalt einfach einmal zusammenaddieren könnte.
1
unsigned int get_seed()
2
{
3
  uint16_t seed = 0;
4
  uint16_t *p = (uint16_t*) (RAMEND+1);
5
  extern uint16_t __heap_start;
6
  while (p >= &__heap_start + 1)
7
    seed ^= * (--p);
8
  return seed;
9
}

von Peter D. (peda)


Lesenswert?

Ben B. schrieb:
> Beim RAM weiß ich nicht inwiefern das beim Start des Controllers
> wirklich rein zufällige Werte enthält.

Fertigungsunterschiede können eine Vorzugslage bewirken.
Wenn man einen uninitialisierten RAM mal als Bild ausgibt, ergibt das 
oft sehr regelmäßige Muster.
SRAM kann seine Daten noch viele Sekunden ohne VCC behalten.

von sid (Gast)


Lesenswert?

wie was?
8bit; Was machste denn damit?
wie lange glaubst Du braucht ein Angreifer um 256 Werte durchzuprobieren
mit einem zweiten Microprozessor als Klon, wenn Dein Zähler in der 
Sekunde 11718mal überläuft?

Jaja Initialwert... aber ernsthaft,
ausgehend von einer sniffing Attacke... und seiner Kompetenz den 
zugrundeliegenden Code strukturell zu erahnen
halt ich das für keinen wirklich relevanten Sicherheitsaspekt.

Ich bleib dabei p/p keypair krummwertiges RSA macht mehr Sinn

Beitrag #5719218 wurde von einem Moderator gelöscht.
von Cyblord -. (cyblord)


Lesenswert?

Ben B. schrieb:
> @Cyblord
> Letzte Bemerkung an Dich: Wenn Du mich nicht verstehen willst dann
> gratuliere ich Dir zu Deinem tollen Erfolg!

Undank ist der Welten Lohn.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

@Cyblord

Das hat nichts mit Undank zu tun. Du unterstellst mir Sachen die nicht 
stimmen und das dann auch noch auf eine Weise, die mich als grenzdebil 
erscheinen lassen. Was hast Du denn gedacht, daß ich mich darüber freue 
und Luftsprünge mache, oder was?!

Genau wie sid ... vielleicht weiß er es nicht besser, aber könnte man 
sich nicht selbst denken, daß mir ein Schlüsselraum von 8 Bit bei weitem 
nicht reicht? Nöö, da wird erstmal unterstellt, ich bin mit 256 
verschiedenen Werten hoch zufrieden. Was soll das?

Das mit den Mustern im RAM kenne ich noch vom C64. Wenn man da in den 
Grafikmodus (HiRes) schaltete ohne vorher was ins RAM zu schreiben, 
ergab das regelmäßige Streifen von jeweils 8 Bit Länge, deren Zustand 
meistens horizontal und vertikal wechselte. Man konnte quasi die 
einzelnen Kästchen des Buchstabenrasters noch erkennen. Ich weiß aber 
nicht, ob der C64 das RAM vorher (oder beim Setzen des HiRes Mode) mit 
irgendwas initialisiert hat, es sah aber nicht so aus, als ob er es 
benutzt hätte.

Edit @Cyblord:
Übrigens hat das Terminal mit Absicht null Intelligenz. Es kennt die 
PIN-Codes nicht und kann demzufolge auch keine Kommandos senden. Das 
einzige Kommando was es senden kann ist eine Anforderung beim Start, 
doch bitte den aktuellen Zustand zu übermitteln, falls es mal einen 
Reset an einer länger laufenden Zentrale durchläuft. Der Rest sind nur 
die 12 Tasten, die direkt in die Ziffern und "#" und "*" gewandelt sind.

: Bearbeitet durch User
von georg (Gast)


Lesenswert?

Ben B. schrieb:
> Danke für eure Beiträge

Hier ein echt zufälliger Generator: Geigerzählrohr o.ä. auf 
Halbleiterbasis und ein Körnchen Plutonium. Wäre doch eine echt 
spannende Bastleraufgabe und nicht sinnloser als alles andere.

Georg

von c-hater (Gast)


Lesenswert?

Anton M. schrieb im Beitrag #5719218:

> Peter D. schrieb:
>> Wenn man einen uninitialisierten RAM mal als Bild ausgibt, ergibt das
>> oft sehr regelmäßige Muster.
>
> Das möchte ich auch bestätigen.

Ich nicht. Klar sind gelegentlich leichte Muster erkennbar, aber das ist 
noch nicht mal das Schlimmste, es sind dann bei jedem Kaltstart 
desselben Exemplars auch noch sehr ähnliche Muster.

Der Kernpunkt aber: es ist immer auch eine starke Zufallskomponente 
enthalten. Man muss den Kram also nur durch eine Hash-Funktion nudeln, 
um einen relativ gut zufälligen Wert zu erhalten, insbesondere dann, 
wenn man die Daten aus dem RAM auch noch mit denen aus anderen 
(unabhängigen) Entropiequellen mixt. Ich habe in meinem Posting zwei 
Mögliche genannt, die auf einem Atmega ohne großen Aufwand verfügbar 
gemacht werden können, die eine davon (RTC an Timer2) haben viele 
Anwendungen sowieso schon onboard, sie muss in der Startphase nur ein 
bissel anders genutzt werden, d.h.: reine Softwareänderungen können in 
diesem Fall den Job erledigen...

Wen ein konkretes Beispiel für die RAM-Geschichte interessiert:
https://hackaday.com/2015/06/29/true-random-number-generator-for-a-true-hacker/

Das stellt ziemlich genau dasselbe dar, was auch ich beobachtet habe.

> Als Zufallsquelle eher nicht geeignet.

Jaja, du hast mehr Ahnung als z.B. die Leute, die OpenSSL machen, ist 
schon klar...

Beitrag #5719472 wurde von einem Moderator gelöscht.
von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Den zweiten externen Oszillator zu beschalten würde ich mir gerne 
ersparen.

Spricht denn irgendwas dagegen, einfach einen 1..10nF Kondensator an 
einen oder zwischen zwei Pins zu hängen und diesen 500..1000mal 
umzuladen während man mit 3Mhz die "Zeit misst", die ein Umladevorgang 
dauert und sich aus den unteren Bits davon eine Zufallszahl bastelt?

Oder von mir aus auch 1..10nF in Reihe mit einem 1k Widerstand, dann 
rauscht's noch ein wenig mehr...

von Stefan F. (Gast)


Lesenswert?

Man könnte auch einfach einen Kondensator per I/O Pin auf LOW legen und 
danach den Pin als Eingang mit Pull-Up konfigurieren. Dann warten, bis 
er HIGH Pegel erreicht hat.

Wenn dafür kein Pin mehr frei ist, kann man den Pin auch doppelt 
belegen, zum Beispiel mit einem Schalter oder einem analogen Sensor 
kombinieren.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

@Stefanus

Hast Du diesen Beitrag von mir überhaupt gelesen:
Beitrag "Re: AVR: Zufallszahlengenerator - zufälliger Startwert"

??

von c-hater (Gast)


Lesenswert?

Ben B. schrieb:

> Spricht denn irgendwas dagegen, einfach einen 1..10nF Kondensator an
> einen oder zwischen zwei Pins zu hängen

Wenn du sowieso zwei Pins frei hast, kann ich nur die Sache mit dem 
Analog-Komparator empfehlen, das hat in meinen Versuchen mit diversen, 
mit der vorhandene Hardware einfach zu implementierenden Entropiequellen 
die mit weitem Abstand besten Ergebnisse geliefert. Musst du halt 
schlimmstenfalls die Funktionen von zwei Pins verlagern, um eben die 
AINx-Pins frei zu bekommen, dann bedeutet es Hardware-Änderungen.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

AIN0 und AIN1 sind beide noch frei und liegen "günstig" in der Nähe des 
GSM-Moduls mit seinen 1..2W Sendeleistung.

Kannst Du Deine Idee bitte nochmal erläutern oder beschreiben, wie Du 
das Problem damit gelöst hast?

von Dieter F. (Gast)


Lesenswert?

Ben B. schrieb:
> Autor:
>
>         Ben B.
>           (Firma: Funkenflug Industries)
>         (stromkraft)
>
>
>
>
>
>
>
>
>       Datum: 01.02.2019 18:49

Ich habe jetzt schon jede Menge Threads zu Deiner "AlarmSau" gesehen. 
Kann es sein, dass Du nur Werbung dafür machen möchtest? Irgendwie 
drängt sich mir das auf - Du kannst mich gerne korrigieren.

von Stefan F. (Gast)


Lesenswert?

Ben B. schrieb:
> @Stefanus
> Hast Du diesen Beitrag von mir überhaupt gelesen:
> Beitrag "Re: AVR: Zufallszahlengenerator - zufälliger Startwert" ??

Ähhhhhhh - Nein. Erwischt.

von c-hater (Gast)


Lesenswert?

Dieter F. schrieb:

> Ich habe jetzt schon jede Menge Threads zu Deiner "AlarmSau" gesehen.
> Kann es sein, dass Du nur Werbung dafür machen möchtest?

Das glaube ich kaum. Was ich bisher zu dieser "AlarmSau" gelesen habe, 
würde mich zumindest jedenfalls ganz sicher eher davon abhalten, das 
Teil zu kaufen, selbst wenn ich Bedarf für so eine Lösung hätte...

von Stefan F. (Gast)


Lesenswert?

Dieter F. schrieb:
> Kann es sein, dass Du nur Werbung dafür machen möchtest?

Er hat mal geschrieben, dass es sich dabei um ein Hobbyprojekt ist. Für 
ein kommerzielles Gerät hätte er einen gediegeneren Namen gewählt. 
Offensichtlich ist er sehr Stolz auf seine AlarmSau - warum auch nicht?

von sid (Gast)


Lesenswert?

ich für meinen Teil denke mir nur, dass BIS Du einen 'sicheren' Wert 
generiert hast (den dann mit der Gegenstelle abgeglichen hast)
hast Du mehr Zeilen Code verbraten als Du für ein fixed pair gebräucht 
hättest;
vorallem der Abgleich mit der Gegenstelle stellt ein zusätzliches Risko 
dar
(von wegen replay und sniffing und so)
Gleichst Du nicht mit der Gegenstelle ab, müsste der KeyCode einem 
'bekannten' Muster entsprechen, dann rennst Du wieder in dasselbe 
Problem,
weil jeder Code der demselben Muster entspricht ebenfalls valid wäre.
(und damit ist ein bisschen raten alles was es braucht)

Aber nun, Du willst random; prima..
sag nur nicht dass Du es brauchst um die Datenübertragung zu sichern;
den preshared keys sind da deutlich sicherer (und kürzer/effizienter im 
Programmablauf)
Rauschen ist super wenn Du 'EINMALIG' den Zufall erzeugen musst zur 
erstellung des keys, dann wiederum hilft aber notfalls random.org ;)

Naja, vielleicht bin ich da engstirnig,
vermutlich sogar; liegt am Job ... ignorier mich einfach wenn Du magst.

Ich lass Dich jetzt auch in Ruhe hier weitertüfteln ;)

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Werbung für die AlarmSau... kicher Da es bislang keine konkreten Pläne 
gibt, das Ding irgendwo zu verkaufen, weiß ich nicht was das für einen 
Sinn machen sollte.

Stolz... ich vertrete gerne meine Standpunkte. Die AlarmSau ist einer.

Ich will das Ding einfach nur so gut machen, wie es mit Hausmitteln 
möglich ist. Und auch wenn viele das hier für Blödsinn halten oder für 
Overkill oder mir Debilität unterstellen - ich wette das Ding kann mit 
kommerziellen Lösungen mehr als mithalten.

> Das glaube ich kaum. Was ich bisher zu dieser "AlarmSau" gelesen habe,
> würde mich zumindest jedenfalls ganz sicher eher davon abhalten, das
> Teil zu kaufen, selbst wenn ich Bedarf für so eine Lösung hätte...
Dann würdest Du auch kein Wasser trinken wenn Du wüsstest,
daß 8 Liter davon definitiv tödlich wären. Übrigens danke für Deine 
Erläuterung.

Egal, sehe schon ich werds selbst mit meiner RC-Variante probieren 
müssen.

Danke allen Leuten, die konstruktive Beiträge geliefert haben!

von c-hater (Gast)


Lesenswert?

Ben B. schrieb:

> AIN0 und AIN1 sind beide noch frei und liegen "günstig" in der Nähe des
> GSM-Moduls mit seinen 1..2W Sendeleistung.

Das ist egal. Die Gewinnung des Startwerts für einen RNG geschieht beim 
Startup des Systems. Da dürfte das GSM-Modul noch nicht senden. Und das 
ist auch gut so, denn das würde die Entropie eher deutlich verringern.

> Kannst Du Deine Idee bitte nochmal erläutern oder beschreiben, wie Du
> das Problem damit gelöst hast?

Ist doch simpel: du schnappst dir dem PWM-Ausgang eines Timers (wird nur 
in der Startup-Phase benötigt, kann dann zur eigentlichen Laufzeit der 
Anwendung ganz andere Funktionen erfüllen). Den Ausgang legst du über 
einen hochohmigen Widerstand (Größenordnung 100kOhm..1MOhm, bildet 
zusammen mit den parasitären Kapazitäten von AINx einen Tiefpass) 
entweder an AIN1 oder AIN0, das ist egal. Der verbleibende AINx bleibt 
offen, die digitale Eingangschaltung dafür sollte über DIDRx 
abgeschaltet werden.

Das war die Hardware, der Rest ist Software. Der Timer wird für Fast-PWM 
mit Systemtakt konfiguriert. Bit Null von TCNTx ist letztlich das 
Nutzdatum. Nun läßt du einen primitiven Zweipunktregler laufen, der 
entsprechend dem Status von ACO zu dem OCRx des Timers entweder eins 
addiert oder eins subtrahiert (je nachdem, ob du AIN0 oder AIN1 mit dem 
Timerausgang verbunden hast). Natürlich muss das mit "gesättigter" 
Arithmetik passieren.
Nun muss du nur noch jedesmal, wenn der Regler seinen Aktor-Increment 
zwischen +1 und -1 umschaltet das unterste Bit von TCNTx auslesen und an 
die Hash-Funktion verfüttern. Idealerweise läßt du den ganzen Salat 
parallel zur der Gewinnung der Entropie aus dem RAM laufen und fütterst 
das Bit in diesen Prozess mit ein. Sprich: du ersetzt einfach irgendein 
Bit des nächsten an die Hashfunktion zu verfütternden RAM-Bytes durch 
das TCNTx-Bit 0.

Natürlich sollte die ganze RAM-Sache erst dann starten, wenn der Regler 
das erste Mal umschaltet. Sollte (hoffentlich) klar sein...

von c-hater (Gast)


Lesenswert?

Anton M. schrieb im Beitrag #5719472:

> Man sollte aber aufpassen, um die Erzeugung von Zufallszahlen kein
> unnötig großes Brimborium zu veranstalten!

Aha. Du bist nicht zufällig der Debian-Maintainer für OpenSSL?

Nein. Der hat ja wenigstens noch versucht, sich aufzuschlauen, bevor er 
den ultimativen Schaden angerichtet hat. Er hat also zumindest eine 
Ahnung davon gehabt, wie wichtig ein zuverlässiger Zufall ist.

So weit bist DU offensichtlich noch nicht einmal näherungsweise...

von Anton M. (Gast)


Lesenswert?

c-hater schrieb:
> Aha. Du bist nicht zufällig der Debian-Maintainer für OpenSSL?

Du müsstest mal erklären wo wir hier OpenSSL brauchen. Wirst bestimmt 
gleich mit einer tollen Idee überraschen!

c-hater schrieb:

> Timer wird für Fast-PWM
> primitiven Zweipunktregler
> Natürlich mit "gesättigter" Arithmetik
> Hash-Funktion
> Gewinnung der Entropie aus dem RAM

> Ist doch simpel

Nein. Ist Brimbamborium. Aber wenns Spaß macht...

Wenn man einem (alten) AVR schon den Zufall zuführen muß besorgt man 
sich einen halbwegs zufälligen Puls, greift damit seine Werte in 
schönster Gleichverteilung von einem schnell laufenden Timer ab und 
spart sich damit überdrehte Software-Krämpfe.
Der Einschalt-Zustand des SRAM lässt sich ja vielleicht noch als 
individuelle Signatur gebrauchen.

von Jiri D. (Gast)


Lesenswert?

Anregungen:
TRNG: Kombiniere mehrere Entropiequellen, z.B.:
- ADC Noise: Wenn dein ADC differentiell ist und eine Gain Stage hat, 
dann kannst du eine Messung an beiden Kanälen vom selben Pin machen 
(ggf. geht auch intern GND). Dann ein Gain einstellen. Theoretisch sieht 
die Gain Stage dadurch 0V, praktisch ist es etwas anderes. Die 
differentielle Messung erlaubt dir zudem unabhängig von externen 
Eingaben zu sein (Angreifer könnte z.B. Pin auf GND legen); der konkrete 
Wert am ADC-Eingang kann dir egal sein.  Dadurch misst du den Fehler der 
Differenz und der Gain Stage, der idealerweise Toleranzen aus dem 
Fertigungsprozess und Temperatur unterworfen ist.
- Watchdog Jitter vs. Main Oscillator: Messe den Fehler zwischen 
Watchdog und CPU Oscillator, z.B. Timer starten und bei WDT Interrupt 
auslesen. WDT ist relativ großen Toleranzen aus Fertigung und Temperatur 
unterworfen. Qualität aber nicht überschätzen, mglw. langt das nur für 1 
bit/s (z.B. weil Temperatur relativ konstant).
- EEPROM/Flash seed: bringt nicht viel für die Sicherheit, lässt sich 
aber leicht einrichten.
- Validiere deine Entropiequellen, teste verschiedene Konfigurationen: 
siehe NIST Special Publication 800-22
Dies erlaubt dir auch, gute Einstellungen z.B. für das Gain zu finden, 
oder welche Bits vom Timer zu verwenden sind.

PRNG:
- Hashfunktion: AES 128 oder z.B. Keccak-f[200]
  - Kontinuierlich auf einen Zustand anwenden
  - Wenn neue TRNG-Werte verfügbar, auf PRNG-Zustand xoren ("re-seedable 
PRNG")
- PRNG Entropie ("Sicherheitsniveau") sollte zu deinem Cryptoverfahren 
passen (nicht: tolle Crypto mit 3 Bit PRNG). Bei AES 128 also > 128 bit 
Entropie.
  - PRNG mit NIST-Tools validieren (s.o.)

Crypto:
- Hast du dir Gedanken zu Seitenkanälen (Timing, DPA) und Gegenmaßnahmen 
gemacht?
- Zum Beispiel: AES 128 mit
  - Shuffling (Vorsicht: kein modulo % verwenden (bias), besser: 
Fisher-Yates Shuffle)
  - Masking (Angreifer muss damit mind. 2nd Order DPA machen)
  - Dummy S-Box Zugriffe
  - Zufälliges an-/ausschalten von anderen Peripherals, um zusätzlich 
Ungleichmäßig Strom zu verbrauchen
  - Clock Scaling
  - Verwende einen sicheren Cyphermode, kein AES-ECB.
- Lock-bits setzen, um Auslesen des Flash zu verhindern. Wirkt 
allerdings nur begrenzt, da Decapping immer noch möglich.

Bedenke bei alledem: AVRs sind nicht für Sicherheit gebaut. Sie haben 
keine symmetrischen Busse, keinen Decapping-Schutz etc.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Moin!

Gegen direkte Hardware-Angriffe lohnt sich ein Schutz nicht. Wenn der 
Angreifer das hinbekommt, da irgendwelche komplizierte Technik direkt an 
den µC der Zentrale anzuschließen oder gar den µC für's Decapping zu 
klauen ohne daß es jemand merkt, dann ist bereits so viel 
schiefgelaufen, daß ein Schutz nichts mehr bringt. Der Angreifer darf es 
gar nicht unbemerkt bis zur scharfgeschalteten Alarmzentrale schaffen. 
Wenn er es doch schafft: richtig schlecht, dann war der Aufbau in etwa 
so verhunzt, als hätte man eine Tür offen stehen lassen oder den Code 
gleich auf's Display geschrieben damit man ihn nicht vergisst.

Das einzige was ich zuverlässig verhindern möchte ist, daß ein Angreifer 
zerstörungsfrei einen Keylogger oder so an die USART-Verbindung klemmt 
und so alles mitliest, was an Tastenanschlägen übertragen wird. Dadurch 
kommt er sonst evtl. unbemerkt an einen gültigen PIN-Code und könnte 
damit die Anlage entschärfen ohne daß es jemand merkt oder weiß wer es 
war.

Der Rest sollte auffallen, entweder durch Alarm oder eine nicht 
funktionsfähige Anlage (wenn der Controller fehlt). Wenn der Controller 
oder die ganze Anlage fehlt braucht man sowieso was neues. Damit werden 
alle alten Codes hinfällig (nur ein Idiot würde nach so einem Vorkommnis 
die gleichen PINs nochmals verwenden) und man könnte den beiden neuen 
µCs auch ein anderes Schlüsselpaar mitgeben. Dann bekommt der Angreifer 
zwar das Programm und sämtliche im alten Controller gespeicherten Daten, 
aber für einen Angriff gegen das neue Controller-Paar sind diese Daten 
völlig nutzlos.

Hat jemand Infos wieviel solche Angriffe wie Decapping oder sonstwelches 
Brechen der Lockbits kosten?

von Jiri D. (Gast)


Lesenswert?

Ben B. schrieb:
> Hat jemand Infos wieviel solche Angriffe wie Decapping oder sonstwelches
> Brechen der Lockbits kosten?

Ist günstiger als man gemeinhin glaubt. Decapping kann man entweder 
selber machen (Rauchende Schwefelsäure, Abschleifen) oder man hat ein 
Uni-Institut, dass das für einen macht. Als Elektrotechniker an der TU 
München kann man solche Sachen z.B. von den TU Chemikern machen lassen, 
also eine interne Dienstleistung.
Gibt auch einige Youtube-Videos zum Decapping.

Wenn man weiß, wo die Fuses auf dem Die sind, kann man den Rest abdecken 
und mit einer UV-Lampe ein paar Stunden auf die Fuses leuchten. Je nach 
Strukturbreite des verwendeten IC ist das mehr oder weniger aufwändig.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Wie gesagt, ich könnte alternativ noch wichtige Pins von den 
Programmierinterfaces zu schießen probieren. Die sind bis auf TCK vom 
JTAG alle nicht belegt. Keine Ahnung wie sehr der Die davon in 
Mitleidenschaft gezogen wird, wenn man kurz mal ein paar Ampere durch 
die GND-Schutzdiode schickt oder so.

Naja egal, ein Schutz gegen sowas ist mir gar nicht so wichtig, da die 
Daten in dem µC nach dessen Verlust nichts mehr wert sind.

Das würde sich evtl. nur lohnen wenn jemand scharf auf das Programm ist 
um das Ding nachzubauen. Bezweifle ich aber, das kann er einfacher haben 
wenn ich ein gutes Angebot bekomme oder so. Und so wie's im Moment 
aussieht bleibts sowieso bei dem einen Prototypen... daß ausgerechnet 
hier jemand diesen einen µC klaut... nee!

von Jiri D. (Gast)


Lesenswert?

Gut. Angenommen es geht dir nur um Schutz vor Eavesdropping des PIN 
codes (confidentiality) und Manipulation auf dem Bus selbst (integrity, 
authenticity).

Sniffing verhindert man mit Verschlüsselung. Es gibt Block-Chiffren und 
Strom-Chiffren. In deinem Fall ist es vermutlich egal.
Manipulationen erkennt man mit MACs.
Replay verhindert man mit ausreichend großen Zählern (Nonces). Bevor 
diese Überlaufen muss man ein re-keying machen (vgl. counter/nonce 
reuse).

Schau dir mal Encrypt-then-MAC an, oder AEAD:
https://en.wikipedia.org/wiki/Authenticated_encryption

DH-Schlüsselaustausch wurde schon genannt. Alternativ Pre-Shared-Keys 
verwenden und regelmäßig neuen Session-Key aushandeln.

Wenn du die PIN über ein Ziffernblock eingibst, bedenke aber auch, dass 
man mit einer Wärmebildkamera ablesen kann, welche Tasten gedrückt 
wurden. Vgl. Geldautomaten...

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Yep, ich bekomme nur mein eigenes System sicher. Wenn jemand seinen 
PIN-Code verrät oder so oder wenn man eine Kamera über das Terminal 
baut, dagegen kann ich technisch nicht viel machen. Sowas zu verhindern 
liegt nicht in meiner Verantwortung, das muss durch Loyalität oder 
bauliche Maßnahmen sichergerstellt werden wenn man das möchte.

Allerdings können die Codes bis zu 10 Ziffern lang sein, nicht nur 4 wie 
beim Geldautomaten. Wenn da jemand ein paar Tasten kennt, muß er schon 
eine Weile probieren. Nach drei Fehlversuchen hat sich's auch erstmal 
für 5 Minuten erledigt. Nach weiteren drei Fehlversuchen bekommt der 
Administrator (und wenn man möchte noch weitere Teilnehmer) eine SMS, 
daß da jemand falsche Codes durchprobiert. Könnte man auch schon nach 
den ersten drei Fehlversuchen schicken. Dann kann man rechtzeitig 
Gegenmaßnahmen ergreifen oder ggf. mal auf das Überwachungsvideo schauen 
wenn man das Ganze so stark sichern möchte.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Schließe an den AVR per SPI oder TWI einen STM32 an. Der STM32 hat einen 
"TRNG" - Random Number Generator als Peripheriemodul drin. Nun brauchst 
du nur noch einen ein kleines Progrämmchen das den RNG aus liest und für 
den AVR bereit stellt.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

STM32 nur als Zufallszahlengenerator ...
und da unterstellt ihr mir Overkill?

von Jiri D. (Gast)


Lesenswert?

Wenn du auf re-keying vermeiden möchtest und dein System selten genug 
verwendet wird (bei Garagen-/Tor-/Türöffner und dergleichen von Menschen 
bedienten Systemen der Fall), kannst du das auch dadurch lösen, dass der 
Counter groß genug ist (z.B. 32-bit) also erst "nach Ewigkeiten" (real: 
nie) überläuft. Counter dann im EEPROM speichern und nach Stromausfall 
laden. Hat den weiteren Vorteil, dass du die Kommunikation nur in eine 
Richtung machen musst.

Beitrag #5720417 wurde von einem Moderator gelöscht.
von Jiri D. (Gast)


Lesenswert?

Mit Pre-Shared-Key und Counter als Nonces brauchst du keinen TRNG im uC 
mehr. Du generierst dir den key halt einmal aus /dev/random oder 
/dev/urandom und schreibst ihn ins Flash.

von Jiri D. (Gast)


Lesenswert?

Also eine Nachricht vom Tastenfeld könnte IMHO so aussehen:
1
SYNC | NONCE | ENC(HEADER | PIN) | MAC
2
3
SYNC := Sync Sequenz, z.B. 0x01 0x02 0x03 0x04
4
NONCE := 32-bit counter
5
ENC := AES-128 mit Pre-shared key, immer vollen Block (16 Byte) übertragen
6
HEADER := len(PIN) oder feste Länge von PIN verwenden oder PIN mit \0 terminieren.
7
PIN := Gedrückte Tasten z.B. "123456<CR>"
8
MAC := Hashfunktion oder ggf. AES-128 ("CMAC") mit separaten pre-shared key; mglw. kann man die Größe auch halbieren z.B. wenn man die oberen und unteren 8 Byte xored.

AES-128 auf einem ATmega644 bei 4.8 MHz benötigt so ca. 1.05ms. Eine 
Nachricht hat dann z.B. 32 Byte Größe (4B Sync, 4B Nonce, 16B ENC, 8B 
MAC). Da man zum Dekodieren 2x AES laufen lassen würde (MAC und 
Decrypt), also ca. 2.5ms je Nachricht.

(Die Implementierung ist aber definitiv anfällig gegen DPA Seitenkanal. 
AES mit weiter oben genannten DPA Countermeasures ist in ~4 bis 300 ms 
zu haben)

von Jiri D. (Gast)


Lesenswert?

Jiri D. schrieb:
> Also eine Nachricht vom Tastenfeld könnte IMHO so aussehen:
>
>
1
 SYNC | NONCE | ENC(HEADER | PIN) | MAC

Eigentlich könnte man auch die Nonce noch dazu packen, dann hat man 
nicht das Problem mit Wiederholungen des selben Cyphertext. Für die 
Sicherheit aber irrelevant (da Nonce+MAC).
1
SYNC | ENC(NONCE | HEADER | PIN) | MAC

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

AES wäre eine Möglichkeit. Gibts da Quellcode-Vorlagen für Assembler?

Es wird immer nur eine einzige Taste übertragen, daraus irgendwas 
zusammenzusetzen macht alles die Zentrale. Also da brauchts keinen 
komplexen CRC-Code oder so, wenn man mit AES drangeht muß man sowieso 
den kompletten Block übertragen und könnte die Taste 2..3mal 
hineinpacken bevor man den Block mit Schrott auffüllt. Bei 
Übertragungsfehlern geht die Entschlüsselung sowieso schief und dann 
merkt man das. Dann muss der Benutzer die Taste halt nochmal drücken, 
sehe ich nicht als Problem.

Für Seitenkanalangriffe bräuchte man definitiv direkten Zugang zur 
Zentrale. Das darf nicht gegeben sein, sonst könnte man sich den ganzen 
Umweg über das Terminal sparen. Ein Schutz gegen Seitenkanalangriffe 
bringt daher nicht viel, dann ist das System sowieso schon überwunden.

von Lötlackl *. (pappnase) Benutzerseite


Lesenswert?

Ben B. schrieb:
> AES wäre eine Möglichkeit. Gibts da Quellcode-Vorlagen für Assembler?

Sowas gabs anno dazumal bei so genannten Fun-Cards für die DBox2 
(Atmel-basiert). Damit wurde der wiederum genannte Cam-Key 
entschlüsselt. Frag mich aber nicht, wo man sowas heute noch finden 
kann.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Letztendlich ist die ganze Kryptografie und Identitäts Prüfung ein 
permanentes Kopf-An-Kopf Rennen mit den Bösewichten. Geräte, die nicht 
langfristig gepflegt werden, können da nur verlieren. Und das trifft 
leider auf den grössten Teil der Hausautomation zu.

Die allermeisten Leute verwenden Wohnungs-Schlösser mit 4-6 einfachen 
Stiften. Da kackt sich keiner ins Hemd, dabei weiss jedes Kind, dass 
jeder Schlüsseldienst diese Schlösser in wenigen Minuten öffnet, ohne 
sie zu beschädigen. Hinter der Türe liegt dann unser ganzes Hab und gut 
offen greifbar.

Dass bei vernetzten Geräten mehr Sicherheit angemessen ist (und auch bei 
Bens Keylogger) sehe ich ja ein. Aber man kann es auch übertreiben. Im 
Computer Bereich wird dem Normal-Verbraucher ständig erzählt, das Fort 
Knox unzureichend sei. Aber das Schloss an der Wohnungstüre, Auto und 
Fahrrad wird nicht kritisiert.

Wer wirklich reinkommen will, der kommt auch rein. Dagegen hat auch die 
klügste Mathematik keine finale Lösung. Im Bereich der Schliessanlagen 
versuchen wir gar nicht erst, uns vor diesen Leuten zu schützen. Da gibt 
es viel pragmatischere Lösungen: zum Beispiel keine Wertgegenstände 
anhäufen, im Alltag ein gewöhnliches Fahrrad (< 800€) benutzen, das Auto 
als Verbrauchsgegenstand betrachten, etc. Manchmal kommt was weg - so 
what?

Ich denke, dass wir bei unseren Daten auch mal ein bisschen lockerer 
werden sollten. Gerade erst hat eine Hotelkette Millionen Ausweisfotos 
verloren und wurde dafür nicht einmal bestraft. Dabei bestand keine 
Notwendigkeit, die Bilder (Wertgegenstände) in diesen Mengen so lange zu 
sammeln. Das Sammeln an sich war doch schon strafbar - zumindest nach 
heutigem Stand der Gesetze. Aber niemand bestraft die Sammler.

von test (Gast)


Lesenswert?

Stefanus F. schrieb:
> Die allermeisten Leute verwenden Wohnungs-Schlösser mit 4-6 einfachen
> Stiften. Da kackt sich keiner ins Hemd, dabei weiss jedes Kind, dass
> jeder Schlüsseldienst diese Schlösser in wenigen Minuten öffnet, ohne
> sie zu beschädigen.

Das Problem ist das es halt nicht allgm. bekannt ist. Ich denke die 
meisten gehen davon aus das Schlösser relativ sicher sind.

Im Prinzip genau wie bei Software, den meisten ist gar nicht bewusst wie 
unsicher viele Dinge sind. Wenn da mal wieder was in den Medien kommt 
wird halt ein Virenscanner installiert und dann ist ja alles gut ;-)


BTW: Interessante Theorie das der Schlüsseldienst Schlösser 
kostengünstig pickt. Ich hätte jetzt vermutet (keine eigenen Erfahrungen 
mit Schlüsseldiensten) das Zylinder lieber lohnend ausgebohrt werden.

von Stefan F. (Gast)


Lesenswert?

test schrieb:
> Interessante Theorie das der Schlüsseldienst Schlösser
> kostengünstig pickt.

Das tun sie wirklich. Auch Autos werden in der Branche üblicherweise 
schadensfrei geöffnet. Ich habe beides erlebt.

Mit super unknackbaren Schlössern und Türen würde ich eher mich selbst 
aussperren, als die Bösewichte.

von test (Gast)


Lesenswert?

Stefanus F. schrieb:
> test schrieb:
> Interessante Theorie das der Schlüsseldienst Schlösser
> kostengünstig pickt.
>
> Das tun sie wirklich. Auch Autos werden in der Branche üblicherweise
> schadensfrei geöffnet. Ich habe beides erlebt.

OK, da fehlen mir die praktischen Erfahrungen. Ich kenne bei Autos nur 
die Luftkissenvariante bei der die Tür weggebogen wird. Aber moderne 
Systeme sperren ja die Betätigung innen.
Nur gut das die Schließzylinder in Autos weiterhin minderwertig sind ;-) 
(Habe mal spaßeshalber geübt mein eigenes Auto zu picken, der 8€ Pick 
aus China geht super)


> Mit super unknackbaren Schlössern und Türen würde ich eher mich selbst
> aussperren, als die Bösewichte.

Die Bösewichte müssen ja nicht zerstörungsfei, das vereinfacht einiges.

Ferner müssen sie nicht zwingend in dein super abgesichertes Haus, sie 
können problemlos auf das Nachbarhaus (in das man problemlos mit dem 
Schraubenzieher kommt) ausweichen.

von Oliver S. (oliverso)


Lesenswert?

test schrieb:
> Ferner müssen sie nicht zwingend in dein super abgesichertes Haus, sie
> können problemlos auf das Nachbarhaus (in das man problemlos mit dem
> Schraubenzieher kommt) ausweichen.

So ist es. Die entscheidende Aussage ist „Schraubenzieher“.

Kein Einbrecher und auch kein Schlüsseldienst dieser Welt rückt mit 
einem Keylogger oder ähnlichen elektronischen Spionagegerätschaften an, 
die physisch an Drähte angeschlossen werden müssten, um eine Alarmanlage 
an einem normalen EFH oder gar einer Wohnung außer Gefecht zu setzen.

Oliver

von c-hater (Gast)


Lesenswert?

Ben B. schrieb:

> STM32 nur als Zufallszahlengenerator ...
> und da unterstellt ihr mir Overkill?

Zumal jeder Nachweis fehlt, dass dieser RNG wirklich zufällige Werte 
liefert.

Das gilt für jeden Closed-Source-RNG, egal ob Hardware oder Software.

Es ist nämlich relativ leicht, ein System hinter den Zufallszahlen so zu 
verstecken, dass es allein mit statistischen Methoden im Output des RNG 
praktisch nicht nachweisbar ist.

Für RNGs gilt: zeige mir deine Entropiequellen und den Quelltext, der 
sie verwurstet und ich sage dir, ob (und wie weit) ich dir trauen 
kann...

Alles andere ist "Prinzip Hoffnung", nicht mehr.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

So denn, ich glaube ich habe die AlarmSau soweit erstmal fertig, mit 
Ausnahme der Key-Crypto. 323kB Assembler-Quellcode, 11.044 Zeilen, 
nochmal 29kB Quelltext für's Terminal. Das ist mehr als ein C64 auf eine 
Diskette bekommt. Beidseitig. Und mir reichts dann langsam auch erstmal, 
nun ist wieder Hardware angesagt.

Wegen Einbrechern... Wenn jemand wirklich rein will, dann kommt er auch 
rein. Egal ob Alarmanlage oder nicht, egal was da für eine tolle Tür 
dran ist - die liegt hinterher samt Rahmen im Flur wenn man Pech hat. In 
manchen Gegenden der USA ist es besser, die Tür gleich offen zu lassen. 
Wenn jemand rein will, ist hinterher wenigstens die Tür noch heile.

von Stefan F. (Gast)


Lesenswert?

Ben B. schrieb:
> So denn, ich glaube ich habe die AlarmSau soweit erstmal fertig

Glaube ich nicht. Das ist doch dein Lebenswerk :-)

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Ja da könntest Du Recht haben. Ich hatte auch drüber nachgedacht, ob ich 
die CMA-Sternchen direkt selbst an den Satz dran mache.

Beitrag #5721378 wurde von einem Moderator gelöscht.
Beitrag #5721392 wurde von einem Moderator gelöscht.
von S. R. (svenska)


Lesenswert?

c-hater schrieb:
> Es ist nämlich relativ leicht, ein System hinter den Zufallszahlen so zu
> verstecken, dass es allein mit statistischen Methoden im Output des RNG
> praktisch nicht nachweisbar ist.

Stichwort: AES-Verschlüsselung mit geheimem Schlüssel.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Lesenswert?

Absolute Sicherheit gibts sowieso nicht. Aber es macht Spaß, zu 
versuchen, möglichst nahe dranzukommen. Erst recht bei einem 
Hobby-Projekt. Und ich finde es auch immer recht schade, bzw. weiß gar 
nicht was ich davon halten soll, wenn jemand sowas entwickelt, bei 
seiner eigenen Konstruktion eine Schwachstelle findet und dann nicht 
probiert, die zu schließen.

Wegen der Vermeidung von Wiederholungen beim Zufallszahlengenerator:
Wenn ich was baue, was den Zufall aus physikalischen Komponenten 
bezieht, kann ich den Startwert beliebig oft neu setzen. Bei der 
Alarmanlage reichen vermutlich schon Stunden, damit niemand eine 
Wiederholung feststellt. Ich kann ja auch bestimmte Parameter auf beiden 
Controllern nutzen, kann z.B. die Tastenanschläge zählen und mit in das 
Paket reinpacken... oder sonstewas. Bei AES muss ich sowieso den 
kompletten Block übertragen, obwohl ich nur ein einzelnes Byte wirklich 
brauche. Dann liefern verschiedene Startwerte verschiedenen Output, 
einfach schon aufgrund der Verschlüsselung. Das wäre dann wieder so 
sicher wie die Flash- oder EEPROM-Daten im anderen Thread. Das würde 
reichen, da ein Abhandenkommen von auch nur einem der beiden Controller 
die Daten darin unbrauchbar macht. Wenn man's richtig macht, sind alle 
Codes hinterher geändert und die neue Anlage mit den alten Codes nicht 
angreifbar.

Und letztlich finde ich auch lustig zu sehen, wie gut sowas 
funktionieren kann. Wenn mir am Anfang jemand gesagt hätte, das Ding 
soll scharfgeschaltet maximal 1W Strom an der Steckdose brauchen, hätte 
ich ihm einen Vogel gezeigt. Naja, das Ding braucht mit 4 testweise 
beschalteten Alarmschleifen nur 0,7W an der Steckdose... hätte nie 
gedacht, daß man das mit Hobby-Mitteln erreichen kann.

von Bauform B. (bauformb)


Lesenswert?

c-hater schrieb:
> Ben B. schrieb:
>
>> STM32 nur als Zufallszahlengenerator ...
>> und da unterstellt ihr mir Overkill?
>
> Zumal jeder Nachweis fehlt, dass dieser RNG wirklich zufällige Werte
> liefert.

Immerhin schreibt ST in der AN4230 wie man ihn testen könnte
https://www.st.com/content/ccc/resource/technical/document/application_note/4a/6a/82/05/8e/9e/4e/94/DM00073853.pdf/files/DM00073853.pdf/jcr:content/translations/en.DM00073853.pdf

> Es ist nämlich relativ leicht, ein System hinter den Zufallszahlen so zu
> verstecken, dass es allein mit statistischen Methoden im Output des RNG
> praktisch nicht nachweisbar ist.

Dann ist der Output doch zufällig genug? Für Alarmanlagen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.