I browser moderni fanno la cosa intelligente: chiedono al sistema operativo. Il sistema operativo interagisce con l'hardware per tutto il giorno; questo è il suo scopo principale. Quindi è nel posto giusto raccogliere la casualità e mescolarla con un generatore di numeri casuali crittografici appropriatamente sicuro. Sui sistemi Windows, questo è reso disponibile per l'applicazione attraverso la funzione CryptGenRandom()
. Linux ha il file speciale /dev/urandom
per quello. Alcuni linguaggi di programmazione offrono la propria API per quello (che alimenta internamente sul sistema operativo), ad es. java.security.SecureRandom
per Java.
Le fonti hardware che il sistema operativo può utilizzare includono principalmente il tempo preciso al ciclo in cui si verificano gli eventi hardware (ad esempio il preciso nanosecondo con cui si preme un tasto o un pacchetto di rete viene ricevuto). Il sistema operativo può quindi ottenere una "sufficiente" casualità per alimentare un RNG, che poi produrrà una buona alea dal megabyte ("buono"="indistinguibile dalla vera casualità, fino a un fattore di lavoro travolgente"="buono per cripto").