3.4. Problems with Clocks and Serial Numbers (Probleme mit Uhren und Seriennummern)
3.4. Problems with Clocks and Serial Numbers (Probleme mit Uhren und Seriennummern)
Computeruhren und ähnliche Betriebssystem- oder Hardwarewerte bieten erheblich weniger echte Bits an Unvorhersagbarkeit, als aus ihren Spezifikationen hervorgehen könnte.
Tests wurden an Uhren auf zahlreichen Systemen durchgeführt, und es wurde festgestellt, dass ihr Verhalten stark und auf unerwartete Weise variieren kann. Eine Version eines Betriebssystems, das auf einem Satz Hardware läuft, kann tatsächlich beispielsweise Mikrosekundenauflösung in einer Uhr bieten, während eine andere Konfiguration des "gleichen" Systems möglicherweise immer die gleichen unteren Bits liefert und nur in den oberen Bits mit viel niedrigerer Auflösung zählt. Dies bedeutet, dass aufeinanderfolgende Lesevorgänge der Uhr identische Werte erzeugen können, selbst wenn genug Zeit vergangen ist, dass sich der Wert basierend auf der nominalen Uhrauflösung "ändern sollte". Es gibt auch Fälle, in denen häufiges Lesen einer Uhr künstliche sequenzielle Werte erzeugen kann, aufgrund von zusätzlichem Code, der überprüft, ob die Uhr zwischen zwei Lesevorgängen unverändert ist, und sie um eins erhöht! Die Entwicklung portablen Anwendungscodes zur Generierung unvorhersagbarer Zahlen basierend auf solchen Systemuhren ist besonders herausfordernd, da der Systementwickler die Eigenschaften der Systemuhr nicht immer kennt.
Die Verwendung einer Hardware-Seriennummer (wie einer Ethernet-MAC-Adresse) kann ebenfalls weniger Bits an Eindeutigkeit bieten, als man vermuten würde. Solche Größen sind normalerweise stark strukturiert, und Unterfelder können nur einen begrenzten Bereich möglicher Werte haben, oder Werte können leicht basierend auf ungefährem Herstellungsdatum oder anderen Daten erraten werden.
Zum Beispiel ist es wahrscheinlich, dass ein Unternehmen, das sowohl Computer als auch Ethernet-Adapter herstellt, zumindest intern seine eigenen Adapter verwenden wird, was den Bereich der eingebauten Adressen erheblich einschränkt.
Probleme wie die oben beschriebenen machen die Produktion von Code zur Generierung unvorhersagbarer Größen schwierig, wenn der Code über eine Vielzahl von Computerplattformen und Systemen portiert werden soll.