Ich habe mal in einer Anwendung mit ATmega644 einen CSPRNG gebaut, der
kontinuierlich den Vorgängerwert durch AES oder Keccak laufen gelassen
hat. Dieser Wert selbst wurde gelegentlich (d.h. mit viel langsamerer
Rate) mit den Werten eines TRNG gexort. Der TRNG hatte mehrere Quellen:
* Rauschen der ADC gain stage: ADC pos. und neg. Kanal auf den selben
Eingang (-> Ein Angreifer kann den Pegel von außen nicht kontrollieren,
Differenz ist ja immer 0), max gain einstellen, max. sampling rate. Man
erhält also den temperatur- und fertigungsabhängigen internen
Offsetfehler der Gain Stage. Davon das unterste Bit verwendet.
* Jitter des Watchdog timers: WdT einschalten und zusätzlich normalen
Timer laufen lassen. Wenn WDT fertig, dann den Timerwert auslesen und
verwenden. Der WDT läuft aber sehr langsam und Temperaturänderungen sind
ebenfalls langsam, bringt also nur sehr begrenzt Entropie ein.