Jaký je hlavní rozdíl mezi klíčem, IV a nonce?
Klíč je v kontextu symetrické kryptografie něco, co držíte v tajnosti. Kdokoli, kdo zná váš klíč (nebo ho dokáže uhodnout), může dešifrovat jakákoli data, která jste jím zašifrovali (nebo zfalšovat autentizační kódy, které jste jím vypočítali atd.).
(Existuje také „asymetrická“ kryptografie neboli kryptografie s veřejným klíčem, kde se klíč fakticky skládá ze dvou částí: soukromého klíče, který umožňuje dešifrování a/nebo podepisování, a veřejného klíče (odvozeného z příslušného soukromého klíče), který umožňuje šifrování a/nebo ověřování podpisu.)
Klíč IV neboli inicializační vektor je v nejširším slova smyslu pouze počáteční hodnota použitá k zahájení nějakého iterovaného procesu. Tento termín se používá v několika různých kontextech a v každém z nich implikuje jiné bezpečnostní požadavky. Například kryptografické hašovací funkce mají obvykle pevný IV, což je jen libovolná konstanta, která je obsažena ve specifikaci hašovací funkce a používá se jako počáteční hodnota haše před vložením jakýchkoli dat:
Naopak většina způsobů fungování blokových šifer vyžaduje IV, který je náhodný a nepředvídatelný nebo alespoň jedinečný pro každou zprávu šifrovanou daným klíčem. (Samozřejmě, pokud je každý klíč vždy použit pouze k zašifrování jediné zprávy, lze se obejít bez použití pevného IV.) Tento náhodný IV zajišťuje, že se každá zpráva zašifruje jinak, takže zobrazení více zpráv zašifrovaných stejným klíčem neposkytne útočníkovi více informací než zobrazení jediné dlouhé zprávy. Zejména zajišťuje, že při dvojím zašifrování téže zprávy získáme dva zcela odlišné šifrové texty, což je nezbytné pro sémantickou bezpečnost šifrovacího schématu.
V každém případě IV nikdy nemusí být tajný – kdyby tomu tak bylo, jednalo by se o klíč, nikoli o IV. Ve většině případů by totiž utajení IV nebylo praktické, ani kdybyste chtěli, protože příjemce ho potřebuje znát, aby mohl dešifrovat data (nebo ověřit hash atd.).
Nonce v širším slova smyslu je pouze „číslo použité pouze jednou“. Jediné, co se od nonce obecně požaduje, je, aby nebyla nikdy použita dvakrát (v příslušném rozsahu, např. při šifrování s určitým klíčem). jedinečné IV používané pro šifrování blokovou šifrou se kvalifikují jako nonce, ale různá další kryptografická schémata používají nonce také.
Existují určité rozdíly v tom, který z termínů „IV“ a „nonce“ se používá pro různé způsoby fungování blokové šifry: někteří autoři používají výhradně jeden nebo druhý, zatímco někteří mezi nimi rozlišují. Zejména pro režim CTR někteří autoři vyhrazují termín „IV“ pro celý vstupní blok šifry tvořený spojením nonce a počáteční hodnoty čítače (obvykle blok všech nulových bitů), zatímco jiní raději termín „IV“ pro režim CTR vůbec nepoužívají. To vše je komplikováno skutečností, že existuje několik variant, jak se nonce/IV zaslaná se zprávou v režimu CTR skutečně mapuje do vstupního bloku šifry.
Naopak pro jiné režimy než CTR (nebo příbuzné režimy, jako je EAX nebo GCM) se téměř všeobecně upřednostňuje termín „IV“ před „nonce“. To platí zejména pro režim CBC, protože ten má na své IV požadavky (konkrétně, aby byly nepředvídatelné), které jdou nad rámec obvyklého požadavku jedinečnosti očekávaného od nonces.
.