Krátká odpověď je ano. Dlouhá odpověď je také ano. /dev/urandom
poskytuje data, která jsou vzhledem k existující technologii nerozeznatelná od skutečné náhodnosti. Získání "lepší" náhodnosti než /dev/urandom
poskytuje nemá smysl, pokud nepoužíváte jeden z mála "informačně teoretických" kryptografických algoritmů, což není váš případ (to byste věděli).
Manuál pro urandom
je poněkud zavádějící, pravděpodobně přímo nesprávné, když naznačuje, že /dev/urandom
může "docházet entropie" a /dev/random
by měl být upřednostňován; jediný okamžik, kde je /dev/urandom
možná naznačovat bezpečnostní problém kvůli nízké entropii je během prvních okamžiků nové, automatické instalace OS; pokud se stroj nabootoval do bodu, kdy začal vykazovat nějakou síťovou aktivitu, pak nashromáždil dostatek fyzické náhodnosti, aby poskytl náhodnost dostatečně vysoké kvality pro všechna praktická použití (zde mluvím o Linuxu; na FreeBSD je ten momentální okamžik nepatrné slabost se vůbec nevyskytuje). Na druhou stranu /dev/random
má tendenci se blokovat v nevhodnou dobu, což vede k velmi reálným a nepříjemným problémům s použitelností. Nebo, abych to řekl méně slovy:použijte /dev/urandom
a buď šťastný; použijte /dev/random
a omlouvám se.
(Upravit: tato webová stránka vysvětluje rozdíly mezi /dev/random
a /dev/urandom
zcela jasně.)
Pro účely vytvoření „cookie“:takový soubor cookie by měl být takový, aby žádní dva uživatelé nesdíleli stejný soubor cookie a že je výpočetně nemožné, aby kdokoli „uhádl“ hodnotu existujícího souboru cookie. Sekvence náhodných bajtů to dělá dobře za předpokladu, že používá náhodnost odpovídající kvality (/dev/urandom
je v pořádku) a že je dostatečně dlouhá . Obecně platí, že pokud máte méně než 2 uživatelů (n =33 pokud by váš systém mohla používat celá populace Země), pak sekvence n+128 bity jsou dostatečně široké; nemusíte ani kontrolovat kolizi s existujícími hodnotami:za svého života ji neuvidíte. 161 bitů se vejde do 21 bajtů.
jsou některé triky, které jsou proveditelné, pokud chcete kratší cookies a přesto se chcete vyhnout hledání kolizí ve vaší databázi. Ale to by pro soubor cookie nemělo být nutné (předpokládám webový kontext). Nezapomeňte také zachovat důvěrnost svých souborů cookie (tj. použít protokol HTTPS a nastavit příznaky cookie „secure“ a „HttpOnly“).
Ano, je to skvělý způsob.
@Thomasovo vysvětlení to trefuje. A má naprostou pravdu, když kritizuje /dev/urandom
manuálová stránka. Na místě.
Ale přeskočte "kontrolu, zda již existuje". Ta kontrola je zbytečná. To se nestane. (Pravděpodobnost, že k tomu dojde, je nižší než pravděpodobnost, že vás zasáhne blesk – vícekrát – ve stejný den.)