Perfektní bezpečnost je samozřejmě jen těžko dosažitelná, přesto současné algoritmy nabízejí poměrně spolehlivý stupeň utajení – ať už v podobě obligátního šifrování, steganografie, nebo dalších technik. Základem bezpečnosti se v mnoha případech stávají dostatečně náhodná data, jejichž pořízení nemusí být vždy až tak jednoduché. Ucelené informace o snadno dostupných zdrojích entropie, jejich využití i (pseudo) náhodných číslech shrnuje RFC s pořadovým číslem 4086 a výmluvným názvem Randomness Requirements for Security.
Kolik náhody je zapotřebí?
Současný návrh kryptografického softwaru velice často trpí nedostatkem zdrojů náhodných dat, což představuje velký problém pro celou navazující oblast bezpečnosti. Nemálo bezpečnostních systémů je totiž pouze natolik bezpečných jako generování odpovídajících tajných a zároveň náhodných parametrů. Za použití pseudonáhodných postupů pro generování tajných veličin je možné dospět až do kritické situace nežádané „pseudobezpečnosti“.
Požadavky na náhodné veličiny se odvíjejí od povahy konkrétní kryptografické funkce. Například klasický algoritmus RSA požaduje unikátní náhodné veličiny pouze při prvotním generování nové dvojice šifrovacích klíčů, s jejichž pomocí v budoucnu může být podepsáno libovolné množství zpráv. Naproti tomu algoritmus DSS si vynucuje použití náhodných veličin při každém podpisu a konečně perfektní „one-timepad“ vyžaduje náhodnost během celého průběhu šifrování původní zprávy.
Další problém je v kvantifikaci dostatečné entropie, tedy kolik náhodnosti je a do budoucna ještě bude zapotřebí. Pohledem na současné počítače lze nalézt několik poměrně (za určitých okolností) spolehlivých zdrojů náhodnosti, které pokrývají například data získaná ze zvukových a video zařízení, rotujících pevných disků apod.
V hlavní roli hardware i software
Podle odkazovaného RFC 4086 je možné ze zvukového vstupu získat náhodná data analýzou dat bez připojeného vstupního zařízení, tedy například zachytáváním a následnou digitalizací analogového zvukového vstupu bez zapojeného mikrofonu. Podobná situace nastává také v případě video vstupu, kdy lze použít a dále zpracovat obraz z objektivu cloněného nepropustnou krytkou. V obou případech se jedná o zdroj potenciálně náhodných dat, nicméně je zapotřebí ověřit jejich korektnost – entropie může být ovlivněna chybou hardwaru, vlivem vnějšího prostředí a dalšími okolnostmi.
Běžný počítačový hardware však poskytuje také celou řadu dalších unikátních informací, jež ale nemusejí být natolik náhodné, jak se na první pohled zdá. Kupříkladu odvozování jakýchkoli dalších „náhodných“ dat z MAC adresy síťového adaptéru není zdaleka nepředvídatelné – pokud obchodní společnost bude zároveň vyrábět síťové adaptéry i celé počítačové sestavy, dá se předpokládat, že do druhého artiklu vhodně zařadí svůj prvně jmenovaný produkt. Tím se na určitých sestavách značně snižuje náhodnost spektra dat získaných z informací síťové karty.
Svět entropie samozřejmě není a ani nemůže být živ z čistě hardwarových zdrojů dat. Asi každý pokročilý koncový uživatel si již setkal s výzvou softwaru o co možná nejnáhodnější pohyb myší nebo psaní na klávesnici. Jedná se o efektivní využití běžné interakce počítač-uživatel, která může přinést požadované ovoce. Bohužel zde platí známá pravda, že uživateli může být výrazně doporučováno, nikoliv striktně přikazováno, takže náhodnost závisí čistě na spolehlivosti lidského faktoru.
Náhodně napříč platformami
Pokud nelze zajistit zdroj dostatečně náhodných dat, přichází na řadu výpomoc v podobě takzvané mixující funkce. Opět s odkazem na původní RFC 4086 ji lze definovat jako funkci, která zachovává jakoukoli entropii obsaženou v libovolném z původních zdrojů, při silnějším požadavku pak na výstupu dává nelineární kombinaci všech vstupů. Jinými slovy se dá říct, že změna jednoho vstupního bitu zajistí změnu kolem poloviny výstupních bitů, přičemž nelze předpovědět korespondenci mezi změnou a výstupem. Za jeden z příkladů mixujících funkcí lze zvolit třeba kryptografický standard AES či některé hashovaní funkce. Jakmile je k dispozici dostatečně kvalitní zdroj náhodných dat, lze je použít jako takzvané semínko (seed) pro další generování.
Například Americký DoD pro tvorbu hesel doporučuje použití DES v módu OFB (Output Feedback), kdy je prvotní inicializační vektor vytvořen z aktuálních systémových hodnot (datum, čas, identifikátor uživatele atd.). Poté je podobným způsoben určen klíč, například z hodnot registrů přerušení či systémových čítačů. Konečně jako otevřený text do celého šifrovacího soukolí vstupuje 64 bitů, které mohou odpovídat 8 osmibajtovým znakům napsaným na klávesnici.
Z dalších příkladů generátorů stojí za zmínku třeba unixový /dev/random, který svou nepředvídatelnost staví na událostech zpracovávaných jádrem. Jedná se tak o přerušení při stisku kláves, zápis na disk, pohyb myší apod. Na platformě Windows zdroj náhodnosti představuje CryptAPI, které uchovává semínko spojené s každým uživatelem. Při zavolání konkrétní funkce CryptGenRandom je toto semínko spojeno s aktuálními hodnotami, kterými mohou být identifikátory procesu, vlákna, obsah paměti apod.
Generování náhodných dat představuje velkou výzvu a na jeho spolehlivosti ve velké míře závisí bezpečnost celého softwaru. Za použití hardwarových zdrojů je nutné brát v úvahu možné poruchy, aktuální prostředí provozu a nezanedbávat testování. V případě softwarového řešení velká část generování spadá na bedra aktuálních hodnot systémových proměnných, stejně tak interakce s uživatelem. Pokud už se podaří získat dostatečně náhodná data, nic nebrání jejich použití v kryptografických algoritmech a budování zase o něco bezpečnějšího softwaru.