it-swarm-eu.dev

Jaká je výhoda použití PBKDF2 vs SHA256 k vygenerování šifrovacího klíče AES z přístupové fráze?

Dívám se na dva srovnatelné kusy softwaru, které šifrují data na disku pomocí přístupové fráze. Jeden používá PBKDF2 k vygenerování šifrovacího klíče z přístupové fráze, zatímco druhý používá dvě kola SHA256. Jaký je v tom rozdíl? Je jeden preferován před druhým?

82
Andrey Fedorov

Rozdíl je v tom, že:

  • PBKDF2 záměrně je pomalý
  • SHA256 je dobrá hashovací funkce; není to pomalé, záměrně

Takže pokud by někdo chtěl vyzkoušet spoustu různých možných přístupových frází, řekněme celý slovník, pak se připojí každé slovo s číslicí, potom každé slovo s odlišným velkým písmenem, pak dvě slova slovníku atd. Pak by byl tento proces s PBKDF2 mnohem pomalejší .

Pokud je však vaše přístupová fráze skutečně bezpečná, je velmi dlouhá, docela náhodná a je mimo dosah jakéhokoli systematického výčtu, pak to nebude mít žádný praktický rozdíl, kromě toho, že útočník může utratit více prostředků, aby se pokusil rozbít vaše přístupové fráze (nebo možná méně, pokud rozhodnou se vzdát dříve).

93
curiousguy

Algoritmy hashování hesel, jako je PBKDF2, bcrypt a scrypt, jsou určeny pro použití s ​​hesly a jsou záměrně pomalé. Kryptografické hashovací algoritmy jsou rychlé. Rychlost je ve většině situací dobrá, ale ne zde. Zpomalení algoritmu (obvykle iterací) ztěžuje práci útočníka. Heslo hash také přidává hodnotu soli do každého hashe, aby byl jedinečný, takže útočník nemůže zaútočit na více hashe současně.

Útočníci se pokusí obnovit hesla provedením útoků slovníkem a hrubou silou, kde uhodnou hesla hashováním a porovnáním s uloženým heslem, aby zjistili, zda se shodují. S běžnými kryptografickými hashovacími funkcemi (např. MD5, SHA256) může útočník hádat miliardy hesel za sekundu. S PBKDF2, bcrypt nebo scrypt může útočník provést pouze několik tisíc odhadů za sekundu (nebo méně, v závislosti na konfiguraci).

To znamená, že každé heslo je mnohem silnější, pokud jsou místo běžné hashovací funkce použity PBKDF2, bcrypt nebo scrypt.

Kromě toho všechny PBKDF2, bcrypt a scrypt používají velké náhodné hodnoty „soli“, aby se zajistilo, že heslo každého uživatele je jedinečně hashováno. Útok 100 hashů hesel bude trvat 100krát déle než útočit na jeden hash. Útočení milionu zabere milionkrát déle atd. SHA256 se útočník může pokusit popraskat tisíce nebo miliony hashů současně s velmi malým zpomalením.

Pro hesla byste měli vždy používat hash hesla nebo „vzorec pro odvozování klíčů“, než obyčejný kryptografický hash. Je velmi těžké vybrat hesla, která jsou dostatečně silná, aby odolala speciálnímu praskajícímu úsilí, pokud jsou hashována něčím jako SHA nebo MD5). S PBKDF2, bcrypt nebo scrypt mohou být hesla tak krátká jako 7 nebo 8 znaků, ale u MD5 nebo SHA musí být alespoň 13–14 znaků.

52
Steven Alexander

Výše jsou dobré odpovědi, ale okamžitým důvodem je to, že sha256 není osolený a dvě kola jsou žalostně slabá stejným způsobem, jako jsou 4místná hesla výpočetně slabá:

  • Moderní nastavení GPU může snadno spočítat všechny nesolené čtyřmístné hash sha256 (v milisekundách)
10
Bradley Kreider