La risposta breve è sì. La lunga risposta è anche sì. /dev/urandom
produce dati che sono indistinguibili dalla casualità vera, data la tecnologia esistente. Ottenere una casualità "migliore" rispetto a quanto fornito da /dev/urandom
non ha senso, a meno che non si stia utilizzando uno dei pochi algoritmi crittografici "teorici dell'informazione", che non è il tuo caso (lo sapresti).
La pagina man per urandom
è in qualche modo fuorviante, probabilmente decisamente errata, quando suggerisce che /dev/urandom
potrebbe "esaurire l'entropia" e /dev/random
dovrebbe essere preferito; l'unico istante in cui /dev/urandom
potrebbe implicare un problema di sicurezza dovuto a bassa entropia è durante i primi momenti di una nuova installazione automatica del sistema operativo; se la macchina si è avviata fino a un punto in cui ha iniziato ad avere attività di rete, ha raccolto abbastanza casualità per fornire casualità di qualità abbastanza elevata per tutti gli usi pratici (sto parlando di Linux qui, su FreeBSD, quell'istante momentaneo di lieve la debolezza non si verifica affatto). D'altra parte, /dev/random
ha la tendenza a bloccare in tempi inopportuni, causando problemi di usabilità molto reali e fastidiosi. Oppure, per dirlo in parole povere: usa /dev/urandom
e sii felice; usa /dev/random
e si dispiace.
( Modifica: questa pagina Web spiega le differenze tra /dev/random
e /dev/urandom
abbastanza chiaramente.)
Allo scopo di produrre un "cookie": tale cookie dovrebbe essere tale che nessuno degli utenti condivida lo stesso cookie e che sia computazionalmente impossibile da parte di chiunque "indovinare" il valore di un cookie esistente. Una sequenza di byte casuali funziona bene, a condizione che utilizzi casualità di qualità adeguata ( /dev/urandom
va bene) e che è abbastanza lungo . Come regola generale, se hai meno di 2 n utenti ( n = 33 se l'intera popolazione terrestre potrebbe utilizzare il tuo sistema), quindi una sequenza di bit n + 128 è sufficientemente ampia; non è nemmeno necessario verificare una collisione con valori esistenti: non la vedrai nel corso della tua vita. 161 bit si adattano a 21 byte.
Ci sono alcuni trucchi che sono fattibili se vuoi biscotti più corti e desideri ancora evitare di cercare collisioni nel tuo database. Ma questo dovrebbe essere difficilmente necessario per un cookie (presumo un contesto basato sul Web). Inoltre, ricorda di mantenere riservati i tuoi cookie (ad esempio, utilizza HTTPS e imposta i cookie "sicuro" e "HttpOnly").