3.4. Problems with Clocks and Serial Numbers (Problemi con Clock e Numeri di Serie)
3.4. Problems with Clocks and Serial Numbers (Problemi con Clock e Numeri di Serie)
I clock dei computer e valori simili del sistema operativo o dell'hardware forniscono significativamente meno bit reali di imprevedibilità di quanto potrebbe apparire dalle loro specifiche.
Sono stati effettuati test sui clock su numerosi sistemi ed è stato scoperto che il loro comportamento può variare ampiamente e in modi inaspettati. Una versione di un sistema operativo in esecuzione su un insieme di hardware può effettivamente fornire, diciamo, risoluzione al microsecondo in un clock, mentre una configurazione diversa dello "stesso" sistema può sempre fornire gli stessi bit inferiori e contare solo nei bit superiori a risoluzione molto più bassa. Questo significa che letture successive del clock possono produrre valori identici anche se è passato abbastanza tempo che il valore "dovrebbe" cambiare in base alla risoluzione nominale del clock. Ci sono anche casi in cui leggere frequentemente un clock può produrre valori sequenziali artificiali, a causa di codice aggiuntivo che verifica se il clock non è cambiato tra due letture e lo aumenta di uno! Progettare codice applicativo portabile per generare numeri imprevedibili basati su tali clock di sistema è particolarmente impegnativo perché il progettista del sistema non conosce sempre le proprietà del clock di sistema.
L'uso di un numero di serie hardware (come un indirizzo MAC Ethernet) può anche fornire meno bit di unicità di quanto si potrebbe indovinare. Tali quantità sono solitamente fortemente strutturate e i sottocampi possono avere solo una gamma limitata di valori possibili, o i valori possono essere facilmente indovinabili in base alla data approssimativa di produzione o ad altri dati.
Ad esempio, è probabile che un'azienda che produce sia computer che adattatori Ethernet utilizzerà, almeno internamente, i propri adattatori, il che limita significativamente la gamma di indirizzi integrati.
Problemi come quelli descritti sopra rendono difficile la produzione di codice per generare quantità imprevedibili se il codice deve essere portato su una varietà di piattaforme e sistemi informatici.