Jaký je ' rozdíl mezi PBKDF a SHA a proč je používat společně?

V poslední době jsem četl něco o hašování a podle AgileBits , používají „ SHA512 v PBKDF2 “ ve svém novém souboru úložiště.

Díval jsem se na Wikipedii na obě jména a vím, že PBKDF2 je klíčová derivační funkce a SHA je kryptografická hashovací funkce, ale nemohu pochopit rozdíl a proč se oba používají společně s jedním uvnitř druhého.

Může to někdo vysvětlit pro osobu bez zkušeností s kryptografií?

(Můžete předpokládat, že vím jen o matematice, pokud je to nutné.)

Komentáře

  • PBKDF2 je záměrně mnohem pomalejší než SHA, takže je lepší vhodné pro hašování hesel, protože útok slovníku nebo hrubou silou trvá mnohem déle.
  • @puzzlepalace, takže dělají v podstatě totéž a používají složení PBKDF2 (SHA (heslo)), takže to trvá déle útočníci?
  • Ve většině případů používá PBKDF2 primitiv s názvem HMAC jako funkce psuedo-random, která zase v sobě používá kryptografickou hashovací funkci ‚ s interními v tomto případě SHA512. Složení tedy opravdu vypadá spíše jako PBKDF2(HMAC_SHA512, password, ...).
  • PBKDF2 je auto, HMAC je motor, SHA512 je píst
  • druhý řeší to i část moje odpověď na dřívější otázku .

Odpověď

SHA-512 je kryptograficky bezpečný hash , PBKDF2 je to, čemu říkáme funkce odvození klíče podle hesla. Pokud výsledné tajemství není použito jako klíč, ale jako hash hodnota, nazývá se také hash hesla . Hodnoty hash hesla se liší od bezpečných hodnot hash v tom smyslu, že obsahují sůl a počet pracovních faktorů / iterací.

Kryptografické hashe i hashe hesla jsou jednosměrné funkce určené k vytvoření krátkého výstupu pevné velikosti z daný vstup. V případě hash hesla bude vstupem heslo a sůl. Velikost soli a počet iterací se běžně považují za konfigurační parametry; obojí samozřejmě ovlivňuje výstup hodnoty hash hesla.

Hodnoty hash hesla se obvykle staví na vrcholu pseudonáhodných funkcí nebo PRF. Obvyklou formou PRF je kód ověřování zpráv založený na HMAC nebo Hash, který zase interně používá hash. Pokud se používají hash založené PRF, jako je HMAC, pak je typ / velikost použitého hash často konfigurovatelný. Hodnoty hash hesla však není nutné vytvářet pomocí hodnot hash. Může to udělat jakýkoli jiný PRF, například ten, který je založen na symetrických šiferách. Například bcrypt je postaven na Blowfish, blokové šifře.

Hesla hesel potřebují sůl, takže identická hesla nebudou mapována na stejný hash. Zabraňují proto také duhovým tabulkám (obsahující předpočítané heslo / hash pair), aby byly užitečné. Dále obsahují pracovní faktor / počet iterací, takže útočník potřebuje provést více práce, aby vypočítal hash každého možného hesla. To je nutné, protože většina hesel není dostatečně náhodná. Bez pracovního faktoru útočník by byl schopen otestovat obrovské množství možných hesel hrubou silou nebo slovníkovým útokem.

Komentáře

  • mnohem více informací zde … nevejde se ‚ do prostoru odpovědí.

Odpověď

Chcete-li parafrázovat mou odpověď na dřívější otázku , PBKDF2 je obecný algoritmus na vysoké úrovni, který interně volá pseudonáhodnou funkci (PRF) pro zpracování jejího vstupu. Specifikace PBKDF2 neřídí žádný konkrétní PRF, takže implementátoři si mohou zvolit jakýkoli PRF, který chtějí (pokud splňují definici zabezpečeného PRF a mohou přijmout vstup, který PBKDF2 dává).

Jak se stává, zdaleka nejběžnější volbou PRF pro PBKDF2 je HMAC , což je další konstrukce na vysoké úrovni, která interně používá a kryptografická hash funkce . Specifikace HMAC opět nezadává žádnou konkrétní hashovací funkci, * takže implementátoři si mohou vybrat libovolný hash, který chtějí. Pravděpodobně nejběžnější volbou je dnes jeden z SHA-2 rodiny hashů, které zahrnují SHA-256 a SHA-512.

Takže „SHA512 v PBKDF2“ téměř jistě znamená, že „používá PBKDF2 s HMAC jako PRF a s SHA-512 jako hash uvnitř HMAC. **

Může být matoucí, že letmý pohled, tento PBKDF2-s-HMAC-s-SHA512 může vypadat, že dělá něco velmi podobného jako obyčejný SHA-512: oba vezmou jako vstup libovolné heslo a přemění je na pseudonáhodný bitový řetězec, ze kterého původní heslo nemůže lze snadno rekonstruovat.Ve skutečnosti však existuje několik rozdílů, z nichž nejdůležitější jsou tyto:

  • SHA-512 je rychlý. Velmi rychle. PBKDF2 je záměrně výpočetně pomalý a jeho pomalost lze regulovat úpravou parametru počtu iterací.

  • Přímým důsledkem jeho rychlosti je SHA Samotný -512 je náchylný k útokům na hádání hesel hrubou silou pomocí softwaru jako hashcat , který jednoduše generuje spoustu hesel a hashuje je, dokud nenajdou takové, které vytvoří odpovídající hash . Jediný moderní procesor může snadno hashovat miliony hesel za sekundu a GPU jsou ještě rychlejší.

Kromě toho existuje několik dalších drobných rozdílů s poznámkou:


*) Původní definice HMAC a bezpečnostní důkazy skutečně předpokládají, že použitá hash funkce je konkrétní typ známý jako hashovací funkce Merkle – Damgård . Jak se stalo, všechny nejpopulárnější kryptografické hashovací funkce za posledních několik desetiletí, včetně rodiny SHA-2, byly tohoto typu, takže toto omezení není v praxi velkým problémem. To se může postupně měnit se standardizací SHA-3 (aka Keccak), což není hash Merkle – Damgård, ale pohodlně přichází s vlastním nárokem na zabezpečení pro HMAC-SHA3 .

**) Toto je pokuta a tradiční volba, pokud to jde. Není tak odolný vůči GPU a jiným paralelním útokům jako modernější KDF jako scrypt nebo Argon2 by bylo, ale stále je to mnohem lepší než obyčejný starý ne-iterovaný hash. To znamená, že abychom správně vyhodnotili jeho bezpečnost, potřebovali bychom také znát počet iterací použitých pro PBKDF2. Mnoho implementací PBKDF2 má bohužel tendenci používat staré „doporučené minimum“ 1 000 iterací, což je v dnešní době jen o málo víc než rychlostní rána. Osobně na moderním CPU dávám přednost něčemu blíže 1 000 000 nebo 1 000 000 000 iterací .

Komentáře

  • Otázka: Používá se PBKDF2 pouze ke zpomalení počtu odhadů (je-li bruteforce)? Nebo je třeba mít na paměti nějaká další specifika?
  • @NaveenNiraula : Kromě zpomalení hádání hrubou silou má PBKDF2 sekundární účel převádění hesel libovolné délky a formátu na rovnoměrně pseudonáhodné bitové řetězce. Toho by ale mohlo dosáhnout i prosté hašování. Parametr salt také umožňuje odvodit několik odlišných klíčů od stejného heslo a zabrání některým útokům pomocí předpočítaných slovníků, jako jsou “ duhové tabulky „. Ale opět, pokud jste ‚ Nepotřebujete ochranu PBKDF2 hádáním hrubou silou, můžete k tomu použít obyčejný HMAC nebo dokonce jen zřetězit sůl heslem před hašováním to.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *