Algoritmus Yarrow je kryptograficky bezpečný generátor pseudonáhodných čísel . Jako název byl zvolen řebříček , jehož sušené natě slouží jako zdroj entropie při věštění [1] .
Algoritmus vyvinuli v srpnu 1999 Bruce Schneier , John Kelsey a Niels Ferguson z Counterpane Internet Security.[2] . Algoritmus není patentovaný a bez licenčních poplatků ak jeho použití není vyžadována žádná licence. Yarrow je zahrnut v únoru2002 sFreeBSD, OpenBSD a Mac OS X jako implementace zařízení /dev/random [3] .
Dalším vývojem Yarrowa bylo vytvoření algoritmu Fortuna od Ferguse a Schneiera , popsaného v jejich knize „Practical Cryptography“ [4] .
Většina moderních kryptografických aplikací používá náhodná čísla. Jsou potřeba ke generování klíčů , získávání jednorázových náhodných čísel , vytváření soli atd. Pokud jsou náhodná čísla nebezpečná, pak to znamená výskyt zranitelností v aplikacích, které nelze uzavřít pomocí různých algoritmů a protokolů [5] .
V roce 1998 provedli tvůrci Yarrow výzkum dalších PRNG a identifikovali v nich řadu zranitelností. Sekvence náhodných čísel, které produkovaly, nebyly bezpečné pro kryptografické aplikace [5] .
V současné době je algoritmus Yarrow vysoce bezpečný generátor pseudonáhodných čísel. To vám umožňuje používat jej pro širokou škálu úkolů: šifrování , elektronický podpis , integrita informací atd. [5] .
Při vývoji algoritmu se tvůrci zaměřili na následující aspekty [6] :
Algoritmus Yarrow se skládá ze 4 nezávislých částí [7] :
Akumulace entropie je proces , při kterém PRNG získává nový, nepředvídatelný vnitřní stav [8] . V tomto algoritmu je entropie akumulována ve dvou poolech: rychle a pomalu [9] . V tomto kontextu je fond úložištěm inicializovaných bitů připravených k použití. Rychlý fond přináší časté klíčové komplikace . Tím je zajištěno, že kompromis klíče má krátké trvání. Pomalý fond poskytuje vzácné, ale významné klíčové komplikace. To je nezbytné pro zajištění bezpečné komplikace i v případech, kdy jsou odhady entropie značně nadhodnoceny. Vstupní vzorky jsou střídavě odesílány do rychlého a pomalého fondu [10] .
Mechanismus komplikacíKomplikační mechanismus propojuje ukládání entropie s mechanismem generování. Když mechanismus řízení složitosti určí, že je potřeba složitost, pak modul složitosti využívající informace z jednoho nebo obou fondů, aktualizuje klíč, který používá mechanismus generování. Pokud tedy útočník nezná aktuální klíč nebo fondy, bude mu klíč po komplikaci neznámý. Je také možné, že složitost bude vyžadovat velké množství zdrojů , aby se minimalizoval úspěch útoku na základě hádání vstupních hodnot [11] .
Ke generování nového klíče používá složitost rychlého fondu aktuální klíč a hodnoty hash všech vstupů rychlého fondu od poslední složitosti klíče. Jakmile je toto provedeno, odhaduje se entropiepro rychlý fond bude nastaven na nulu [11] [12] .
Komplikace pomalého fondu používá aktuální klíč a hash rychlých a pomalých vstupů fondu. Po vygenerování nového klíče se odhady entropie pro oba fondy vynulují [13] .
Generační mechanismusMechanismus generování dává výstupu sekvenci pseudonáhodných čísel. Musí být takové, aby útočník, který nezná klíč generátoru, jej nemohl odlišit od náhodné bitové sekvence .[14] .
Generovací mechanismus by měl mít následující vlastnosti [15] :
Aby bylo možné zvolit dobu propracovanosti, musí kontrolní mechanismus zohlednit různé faktory. Například příliš častá změna klíče zvyšuje pravděpodobnost iterativního útoku [16] . Příliš pomalé naopak poskytuje více informací útočníkovi, který kompromitoval klíč. Proto musí být kontrolní mechanismus schopen najít střední cestu mezi těmito dvěma podmínkami [17] .
Jak vzorky dorazí do každého bazénujsou uloženy odhady entropie pro každý zdroj. Jakmile tento odhad pro jakýkoli zdroj dosáhne limitní hodnoty, nastává komplikace z rychlého poolu. V naprosté většině systémů se to děje mnohokrát za hodinu. Komplikace z pomalého fondu nastává, když skóre pro kterýkoli ze zdrojů v pomalém fondu překročí práh [17] .
V Yarrow-160 je tento limit 100 bitů pro rychlý fond a 160 bitů pro pomalý fond. Ve výchozím nastavení musí být alespoň dva různé zdroje v pomalém fondu větší než 160 bitů, aby z pomalého fondu nastala komplikace [18] .
Jednou z možných implementací Yarrow algoritmu je Yarrow-160. Hlavní myšlenkou tohoto algoritmu je použití jednosměrné hašovací funkce a blokové šifry [19] . Pokud jsou oba algoritmy bezpečné a PRNG obdrží dostatek počáteční entropie , pak výsledkem bude silná sekvence pseudonáhodných čísel [20] .
Hašovací funkce musí mít následující vlastnosti [21] :
Yarrow-160 používá algoritmus SHA-1 jako [19] .
Bloková šifra musí mít následující vlastnosti [22] :
Yarrow-160 používá algoritmus 3-KEY Triple DES jako [19] .
Generátor je založen na použití blokové šifry v režimu čítače (viz obr. 2) [23] .
Existuje n-bitová hodnota čítače . Pro vygenerování dalších -bitů pseudonáhodné sekvence se čítač zvýší o 1 a zašifruje se blokovou šifrou pomocí klíče [24] :
kde je výstup PRNG a je aktuální hodnota klíče .
Pokud je v určitém okamžiku klíč kompromitován , je nutné zabránit úniku předchozích výstupních hodnot, které může útočník získat. Tento mechanismus generování nemá ochranu proti útokům tohoto druhu, takže se dodatečně počítá počet výstupních bloků PRNG. Jakmile je dosaženo určitého limitu ( nastavení zabezpečení systému, ), pak se vygeneruje -bitový výstup PRNG, který se pak použije jako nový klíč [15] .
V Yarrow-160 je to 10. Tento parametr je záměrně nastaven na nízkou hodnotu, aby se minimalizoval počet výstupů, které lze naučit pomocí backtracking attack [ 25 ] .
Doba provedení mechanismu komplikací závisí na parametru . Tento parametr lze nastavit pevně nebo dynamicky změnit [26] .
Tento mechanismus se skládá z následujících kroků [26] :
Funkce je definována pomocí funkce takto [27] :
Ve skutečnosti je to funkce přizpůsobení velikosti, to znamená, že převádí vstup libovolné délky na výstup zadané délky. Pokud vstup přijal více dat, než se očekávalo, funkce vezme úvodní bity. Pokud jsou velikosti vstupu a výstupu stejné, pak je funkce funkcí identity . Pokud je velikost vstupních dat menší, než se očekávalo, jsou pomocí této hashovací funkce generovány další bity . Jedná se o výpočetně poměrně nákladný algoritmus PRNG, ale pro malé velikosti jej lze bez problémů použít [28] .
Nastavení nové hodnoty čítače se neprovádí z bezpečnostních důvodů, ale pro zajištění větší flexibility implementace a zachování kompatibility mezi různými implementacemi [26] .
V dnešní implementaci algoritmu Yarrow-160 velikost bazénůakumulace entropie je omezena na 160 bitů. Je známo, že útoky na algoritmus 3-KEY Triple DES jsou účinnější než vyčerpávající vyhledávání . I u brute-force backtracking útoků se však klíče mění poměrně často a k zajištění bezpečnosti v praxi stačí 160 bitů [29] .
Předmětem pokračujícího výzkumu je zlepšování mechanismů odhadu entropie. Podle tvůrců Yarrow-160 může být algoritmus zranitelný právě kvůli špatným odhadům entropie, a ne z hlediska kryptoanalýzy [30] .
Tvůrci mají do budoucna plány na využití nového standardu blokové šifry AES . Nová bloková šifra může snadno zapadnout do základního návrhu algoritmu Yarrow. Jak však vývojáři zdůrazňují, bude nutné buď změnit hashovací funkci složitosti, nebo přijít s novou hashovací funkcí, která zajistí zaplnění entropického fondu více než 160 bity. U AES se 128 bity to nebude problém, ale u AES se 192 nebo 256 bity bude nutné tento problém vyřešit. Je třeba poznamenat, že základní strukturou Yarrow algoritmu je kombinace blokové šifry AES a 256bitové hashovací funkce [31] .
Soubor pravidel pro mechanismus zvládání komplikací je zatím provizorní, nicméně další studie jej může zlepšit. Z tohoto důvodu je předmětem probíhajícího výzkumu [30] .