3.6. Non-hardware Sources of Randomness (Fonti Non-Hardware di Casualità)
3.6. Non-hardware Sources of Randomness (Fonti Non-Hardware di Casualità)
La migliore fonte di entropia di input sarebbe una sorgente casuale basata su hardware come oscillatori ad anello, temporizzazione dell'unità disco, rumore termico o decadimento radioattivo. Tuttavia, se nessuna di queste è disponibile, ci sono altre possibilità. Queste includono clock di sistema, buffer di sistema o input/output, numeri di serie o indirizzi di utente/sistema/hardware/rete e temporizzazione, e input dell'utente. Sfortunatamente, ciascuna di queste fonti può produrre valori molto limitati o prevedibili in alcune circostanze.
Alcune delle fonti elencate sopra sarebbero abbastanza forti su sistemi multi-utente, dove ogni utente del sistema è in sostanza una fonte di casualità. Tuttavia, su un piccolo sistema single-utente o embedded, specialmente all'avvio, potrebbe essere possibile per un avversario assemblare una configurazione simile. Questo potrebbe dare all'avversario input al processo di miscelazione che erano abbastanza ben correlati a quelli utilizzati originariamente da rendere pratica la ricerca esaustiva.
Si raccomanda l'uso di più input casuali con una forte funzione di miscelazione e può superare la debolezza in qualsiasi particolare input. La temporizzazione e il contenuto dei colpi di tasti "casuali" richiesti dall'utente possono produrre centinaia di bit casuali, ma devono essere fatte assunzioni conservative. Ad esempio, un'assunzione ragionevolmente conservativa sarebbe che un intervallo inter-keystroke fornisca al massimo pochi bit di casualità, ma solo quando l'intervallo è unico nella sequenza di intervalli fino a quel punto. Un'assunzione simile sarebbe che un codice di tasto fornisca pochi bit di casualità, ma solo quando il codice è unico nella sequenza. Pertanto, un intervallo o un codice di tasto che duplicasse un valore precedente sarebbe assunto non fornire casualità aggiuntiva. I risultati della miscelazione di queste temporizzazioni con i caratteri digitati potrebbero essere ulteriormente combinati con valori di clock e altri input.
Questa strategia può rendere pratico il codice portabile per produrre buoni numeri casuali per la sicurezza, anche se alcuni degli input sono molto deboli su alcuni dei sistemi target. Tuttavia, può ancora fallire contro un attacco di alto livello su sistemi piccoli, single-utente o embedded, specialmente se l'avversario è mai stato in grado di osservare il processo di generazione in passato. Una sorgente casuale basata su hardware è ancora preferibile.