485 / 736MIX-H

Entropy Mixing

Míchání entropie

Míchání entropie spojuje více vstupů při tvorbě tajemství. Může pomoci, ale dva zdroje automaticky neznamenají dvojnásobnou bezpečnost. Záleží na tom, co o nich útočník ví a jak spolu souvisejí.

Entropy Mixing je postup, při kterém generátor zpracuje několik vstupů společně. Cílem může být využít nejistotu z různých zdrojů, místo aby systém spoléhal pouze na jeden. Přidaná data však nejsou totéž co přidaná entropie: kopie už známého údaje nepřináší nové tajemství. Bezpečnost stojí na konkrétních zdrojích a ověřeném způsobu jejich kombinování.

Představte si dva záznamy téže události. Mají jiné názvy souborů, ale druhý záznam nepřidává další nezávislou neznámou. Podobně mohou souviset časy síťových paketů a přístupů k disku. NIST SP 800-90B upozorňuje, že entropii závislých zdrojů nelze jednoduše sečíst. Nejdřív je třeba zjistit, co zůstává nejisté, když útočník zná i ostatní vstupy. [1]

Hash je vypočtený otisk dat. Pokud však útočník zná všechny vstupy, spočítá tentýž výsledek. Dlouhý hash ani přidaná veřejná konstanta z nich neudělají tajemství. RFC 4086 rozlišuje míchání dostupné nejistoty a deterministické vytváření dalších hodnot. Správně navržené míchání pomáhá využít to, co zdroje skutečně poskytují; nenahradí chybějící entropii. [2]

Operace XOR porovnává bity: stejné dají nulu, různé jedničku. Proto X XOR X = 0 — smíchání hodnoty s její kopií zde odstraní veškerou nejistotu. Je-li naopak jeden vstup rovnoměrně náhodný a nezávislý na druhém, výsledek zůstane rovnoměrný. RFC 4086 tím ukazuje důležitost předpokladů. Není to návod, jak si doma poskládat generátor pro peněženku. [2]

Při posuzování konkrétního řešení se ptejte, odkud vstupy přicházejí a co s nimi může útočník udělat. HKDF, postup pro odvozování kryptografických klíčů, používá například pomocný vstup salt. Ten nemusí být tajný, ale podle RFC 5869 má být nezávislý na výchozích datech pro klíč a aplikace musí zabránit tomu, aby jej zvolil či změnil útočník. Salt je zde název parametru. Seznam zdrojů ani náhodně vypadající výsledek samy nezaručí bezpečnost při poruše některého zdroje. [4]

NIST SP 800-90B pracuje s hlavním zdrojem šumu. Dovoluje k jeho datům připojit výstupy dalších zdrojů, pokud společně projdou ověřeným postupem zpracování, označovaným jako conditioning. V tomto režimu jim však nepřiznává další entropii. Více vstupů tedy automaticky nezvýší uznanou hodnotu. Jde o pravidlo konkrétního hodnocení, nikoli o tvrzení, že ostatní zdroje nikdy nemohou pomoci. [1]

Rozdíl je vidět v kryptografické knihovně OpenSSL 3.5, kterou mohou programy používat pro práci se šifrováním a náhodnými čísly. Funkce RAND_add() přimíchá data uložená v bufferu, tedy vyhrazeném úseku paměti. Parametr num říká, kolik bajtů čte; randomness odhaduje jejich entropii v bajtech od nuly do num. Velikost paměťového úseku tento odhad neprokazuje. Výchozí generátor se běžně inicializuje a doplňuje entropii automaticky ze systémových zdrojů. [3]

Doplnění čerstvé entropie do generátoru se označuje jako reseeding. Není to totéž jako přidat libovolná data. Dokumentace OpenSSL 3.5 uvádí, že v režimu FIPS, který se řídí pravidly pro kryptografické moduly, se data dodaná aplikací neuznávají jako důvěryhodný zdroj entropie. Přimíchají se pouze jako dodatečný vstup a nepočítají se jako plný reseed. Samotné zavolání RAND_add() proto nedokládá takové obnovení. [3]

HKDF podle RFC 5869 rozděluje práci na HKDF-Extract a HKDF-Expand. První krok soustředí dostupnou entropii vstupu do pracovního klíče, druhý z něj odvodí data požadované délky. Nejde o získání dalšího nezávislého tajemství. Pomocí parametru info lze výsledek spojit s účelem použití, například určit, k čemu má odvozený klíč sloužit. Takový kontext nenahradí kvalitní výchozí data a nedokazuje vznik nové entropie. [4]

Pro nejúplnější obraz čtěte toto heslo společně s Cryptographic Entropy, CSPRNG, True Random Number Generator, Seed Generation. Opačným směrem na něj odkazují také Dice Roll Entropy, True Random Number Generator.

DOC · 001NIST SP 800-90B — Additional noise sourcesSpecifikace DOC · 002RFC 4086 — Mixing and randomness requirementsSpecifikace DOC · 003OpenSSL 3.5 — RAND_add and FIPS reseedingDokumentace DOC · 004RFC 5869 — HKDF extraction, expansion and independenceSpecifikace
Revidováno: Primární zdroje · Nejde o investiční doporučení