Argon2 |
---|
Argon2 je klíčová derivační funkce vyvinutá Alexem Biryukovem , Danielem Dinu a Dmitrijem Khovratovičem z Lucemburské univerzity v roce 2015 [1] .
Jedná se o moderní jednoduchý algoritmus zaměřený na vysokou rychlost zaplňování paměti a efektivní využití více výpočetních jednotek [2] . Algoritmus je vydán pod licencí Creative Commons .
V roce 2013 byla vyhlášena soutěž Password Hashing Competition s cílem vytvořit novou funkci hashování hesel. Požadavky na nový algoritmus byly množství použité paměti, počet průchodů paměťovými bloky a odolnost vůči kryptoanalýze.
V roce 2015 byl Argon2 vyhlášen vítězem soutěže [1] . Od té doby prošel algoritmus 4 zásadními změnami. Byly opraveny některé popisy algoritmů pro generování některých bloků a překlepů, přidány doporučené parametry [1] [3] .
Argon2 používá základní a pokročilé parametry pro hashování:
Hlavní:
Další:
Existují dvě verze algoritmu:
Argon2 funguje na následujícím principu:
, , kde
— indexační funkce , — paměťové pole, — kompresní funkce, — zpráva (heslo), — hašovací funkce Blake2b .
Funkce indexování závisí na verzi algoritmu Argon2:
V případě sekvenčního provozu se kompresní funkce použije jednou. U verze Argon2d je v -tém kroku blok s indexem určeným předchozím blokem přiveden na funkční vstup . U verze Argon2i se bere hodnota generátoru náhodných čísel ( v režimu čítače).
V případě paralelního režimu (algoritmus je paralelizován do vláken ) jsou data distribuována po blocích matice , kde první bloky jsou výsledkem hashování vstupních dat a další jsou nastaveny kompresní funkcí. pro předchozí bloky a referenční blok :
, kde je počet paměťových bloků o velikosti 1024 bajtů, je hašovací funkce, která jako vstup přebírá 32bitovou reprezentaci vstupních parametrů, jejímž výstupem je 64bitová hodnota, je hašovací funkce proměnné délky from , je množství paměti, je počet iterací.
Nakonec:
Dále se určí index řádku, ze kterého blok pochází. Když , je hodnota brána jako aktuální číslo řádku . Pak je sada indexů určena podle 2 pravidel:
V důsledku toho se číslo bloku vypočítá z , což se bere jako reference:
Blake2b je 64bitová verze funkce BLAKE , takže je postavena takto:
Celkově je výstupní hodnota funkce postavena na prvních 32 bitech bloků – a na posledním bloku :
Na základě funkce komprese Blake2b. Jako vstup přijímá dva 8192bitové bloky a vytváří 1024bitový blok. Nejprve se přidají dva bloky ( ), poté se matice zpracuje řádek po řádku ( ), poté se výsledná matice zpracuje sloupec po sloupci ( ) a výstupem je [6] .
Ochrana proti kolizi : Samotná funkce Blake2b je považována za kryptograficky bezpečnou. Autoři algoritmu také s odkazem na pravidla indexování prokázali absenci kolizí v datových blocích a nízkou pravděpodobnost jejich výskytu při aplikaci kompresní funkce.
Útok na nalezení předobrazu : nechejte útočníka zvednout tak, žepak, aby mohl pokračovat v útoku, musí zvednout předobraz:, což je nemožné. Stejná úvaha se hodí i pro útok nalezení druhého předobrazu.
Časové útoky: Pokud se uživatel potřebuje přizpůsobit časovacímu útoku , pak by měla být použita verze Argon2i, protože používá nezávislou paměť [7] .
Dan Bonet , Henry Corrigan-Gibbs a Stuart Schechter ukázali ve své práci zranitelnost Argon2i verze 1.2. U jednoprůchodové verze jejich útok snížil spotřebu paměti o faktor 4, aniž by zpomalil provádění. Pro víceprůchodovou verzi - 2,72 krát. Později, ve verzi 1.3, byla operace přepsání nahrazena XOR [8] .
Joel Alwen a Jeremiah Blocki ve své práci dokázali, že jejich algoritmus útoku AB16 je účinný nejen pro Argon2i-A (od první verze specifikace), ale také pro Argon2i-B (od nejnovější verze 1.3). Ukázali, že útok na Argon2 s 1 GB RAM zkracuje dobu výpočtu na polovinu. Pro účinnou ochranu je třeba zadat více než 10 průchodů. Ale s doporučeným přístupem pro výběr parametrů algoritmu lze v praxi často vybrat pouze 1 průchod. Vývojáři Argon2 tvrdí, že použitím útoku AB16 na Argon2i-B v , se čas zkrátí maximálně 2krát až na 32 GB paměti a doporučují použít počet průchodů, který přesahuje binární logaritmus velikosti.[ objasnit ] použitá paměť [9] .
Tento útok je pro Argon2d jedním z nejúčinnějších. Zkracuje dobu zpracování 1,33krát. Pro Argon2i at je koeficient 3 [10] .
Hlavní podmínkou pro prezentovaný útok je přístup útočníka do vnitřní paměti cílového stroje, a to buď po ukončení hashovacího schématu, nebo v určitém okamžiku, kdy je samotné heslo stále přítomno v paměti. Díky přepisování informací pomocí funkce jsou Argon2i a Argon2d vůči těmto útokům odolné [11] .
Argon2 je optimalizován pro architekturu x86 a může být implementován na Linuxu , OS X , Windows .
Argon2d je určen pro systémy, kde útočník pravidelně nepřistupuje k systémové paměti nebo procesoru. Například pro backend servery a kryptomery . Při použití jednoho jádra na 2GHz CPU a 250 MB RAM s Argon2d (p=2) trvá kryptominace 0,1 s a při použití 4 jader a 4 GB paměti (p=8) trvá ověření na backend serveru 0,5 s .
Argon2i je vhodnější pro frontend servery a šifrování pevných disků . Generování klíče pro šifrování na 2GHz CPU pomocí 2 jader a 6 GB RAM s Argon2i (p=4) trvá 3 s, zatímco ověřování na frontend serveru pomocí 2 jader a 1 GB paměti s Argon2i (p=4) , trvá 0,5 s [12] .
Hashovací funkce | |
---|---|
obecný účel | |
Kryptografický | |
Funkce generování klíčů | |
Kontrolní číslo ( srovnání ) | |
Hashe |
|