it-swarm-eu.dev

Nejbezpečnější algoritmy algoritmů hašování hesel?

Co je/jsou v současné době nejvíce kryptograficky bezpečné hashovací algoritmy? ( k dispozici v PHP )

Rychlost není relevantní, protože opakuji hash přes pevný čas (spíše než pevný počet iterací). To, co mě zajímá, je matematická síla.

Moje intuice mi říká, že je to vířivá vana , která je největší a nejpomalejší ze svazku. To nebo SHA-512. Ale kde na síti vidím, co odborníci doporučují?

41
Core Xii

Kryografové by mohli poukázat na to, že když čtete drobný tisk, neexistuje žádný důkaz, že bezpečné hashovací funkce skutečně existují. Jedinou věcí, kterou nyní máme, jsou kandidáti, u kterých zatím nebyla nalezena žádná slabost.

To nejlepší, na co můžete doufat, je funkce, která přežila kontrolu mnoha kryptografů po dlouhou dobu. Také je potřeba mít dostatečně široký výstup (256 bitů stačí, pokud chcete dosáhnout „128bitové bezpečnosti“ a překonat to nemá smysl). Právě teď, od léta 2011, to ukazuje na SHA-256 nebo SHA-512, nikoli na Whirlpool.

Zakládat počet iterací na době, kterou zabere typický stroj, je dobrý nápad - ale založit jej na době, kdy je opravdu trvá vaše stroj je není dobrý nápad. Jinak byste mohli skončit s nízkým počtem iterací pro některá hesla, protože stroj v tu chvíli zpracovával mnoho požadavků (situace, kterou by útočník mohl mimochodem vynutit). Použití mnoha iterací má za cíl zmařit útočníky tím, že zpomalí hašování hesla na počítači útočník - že to také zpomaluje váš systém, je nešťastným vedlejším produktem; ale skutečným cílem je jakákoli síla stroje, kterou by útočník mohl shromáždit. Protože nemůžete opravdu udělat měřítka na útočníkovi stroji, musíte se uchýlit k hrubým odhadům, tedy k pevnému počtu, co nejvyšším, dokud je průměrná zátěž tolerovatelná ve vašem systému (důležité slovo zde je „průměrné“, což je diskvalifikuje dynamické měřítko, jak hodláte provést).

Také útočníkův stroj nemusí vypadat jako váš; může to být např. GPU nebo FPGA , které nabízí odlišné výpočty schopnosti z toho, co můžete získat na typickém serveru. Chcete funkci, pro kterou útočník nebude schopen získat obrovské zvýšení výkonu pomocí hardwaru jiného než PC. I zde to propaguje SHA-256 nebo SHA-512, které jsou určeny pro efektivitu CPU (s 32bitovými nebo 64bitovými aritmetickými operacemi), nikoli Whirlpool, které mohou těžit z hardwarových optimalizací podobných těm, pro které byl AES navržen.

Nakonec jsou iterace pouze součástí práce; Také potřebujete dostatečně dlouhou, jedinečnou sůl. Iterace a solení mohou být trochu složité dělat současně; jste vřele vyzváni, abyste použili standardní konstrukci, jako je PBKDF2 (ačkoli to bylo míněno jako funkce odvození klíče, nikoli jako hash hesla, PBKDF2 se v tom také zdá být docela dobře).

33
Thomas Pornin

Z komentáře OP:

„Bezpečný“ jako v, založený na matematickém problému, který nemá žádné známé rychlé řešení. "Nejbezpečnější" jako v, na základě nejsložitějších takových problémů. Algoritmus hashování je považován za „silný“, když jej zlomí, bude to vyžadovat hlavní příspěvek do kryptologie/matematiky.

Zní to, jako byste četli „Dost s duhovými tabulkami: Co potřebujete vědět o bezpečných schématech hesel“ od Thomase Ptaceka , a nyní se ptáte, který moderní kryptografický hash optimalizovaný pro ukládání hesel je považován za „nejbezpečnější“.

Nemyslím si, že existuje jasná odpověď. Pokud vím, některé ze současných oblíbených v programovací komunitě (scrypt & bcrypt) nebyly přísně přezkoumávány jako funkce hashování heslem. Přinejmenším nebyly přezkoumány velkým počtem kryptografů srovnatelných s tím, jak jsou přezkoumány soutěžní záznamy hash funkce NIST .

To znamená, že aktuální konsenzus Hacker News je, že pořadí je:

  1. scrypt . Protože je náročná na paměť i na CPU, předpokládá se, že scrypt má nejvyšší bezpečnostní rezervu současných hashe hesel . Můžete více o jeho designu zde .
  2. bcrypt byl předchozí šampión, jak je uvedeno v blogový příspěvek Thomase Ptaceka výše .
  3. PBKDF2 a několik kol SHA2 (fx nix Crypt s SHA256 ) jsou považovány za třetí nejlepší (který z nich je „nejlepší“ závisí do značné míry na počtu iterací použitý).

(Všimněte si, že „Hacker News“ je většinou programovací komunita, a ne jak by název mohl znamenat pro nějakou komunitu specializovanou na zabezpečení (i když někteří z nich tam také visí).)

Pokud se na tomto webu rozhlédnete, pod značkami kryptografiehesla a hashování fx uvidíte, že obvykle neexistuje jediný 'hash' hash hesla zmíněn. Myslím, že je to zčásti proto, že skuteční kryptografové nemají jednoznačný konsensus o tom, který z nich je „nejsilnější“, kvůli relativně omezenému vzájemnému hodnocení.

Tady je poměrně párové a snadno čitelné srovnání (které nezahrnuje scrypt, pravděpodobně proto, že je stále příliš nové).

Rychlost je irelevantní, protože opakuji hash v pevném čase (spíše než v pevném počtu iterací).

S některými z těchto hashů to opravdu nemůžete udělat. Při volání do knihovny zadáte „pracovní faktor“ a knihovna se postará o zbytek.

20
Jesper M

CRYPT_BLOWFISH (OpenBSD bcrypt, založený na symetrické šifře blowfish, ale je to skutečný hashovací algoritmus, zdá se, že o tom existuje mnoho nejasností) a CRYPT_SHA512 jsou nejlepší. Obě možnosti poskytují možnost změnit počet použitých „kol“, což vám umožní zvolit kompromis mezi bezpečností a výkonem.

Například výchozí počet kol pro blowfish je 7 (rozsah hodnot je 4-31). Tato hodnota je logaritmická, takže každé zvýšení vede k tomu, že algoritmus je spuštěn 10krát více. Hodnota 13 trvá téměř 1 minutu za hash na Core2Duo 2.4ghz

Vyladění této úrovně na nejvyšší možnou úroveň výkonu povede k nejsilnější bezpečnosti.

poznámka: Nedávno byla v některých implementacích bcrypt nalezena chyba, a proto byste místo toho mohli použít SHA-512.

Poznámka: SHA-512 se počítá rychleji než SHA-256 na 64bitových procesorech (zejména pokud je optimalizováno w/SSE2_64. Konkrétně byste to měli zvážit a použít další kola, abyste zajistili, že vaše hashe jsou dostatečně silné pro svůj účel.

Aplikace s otevřeným zdrojovým kódem hashkill zveřejnila několik výkonnostních kritérií, jak rychle by se moderní GPU mohly protrhnout pomocí moderních hashovacích algoritmů. Konkrétně může Radeon HD 6990 udělat: 11001 megahashů/s přímého MD5 (CRYPT_MD5 je soleno a implementace FreeBSD používá 100 kol). Rovný SHA1 rychlostí 3444 megahashů/s.

7
Allan Jude

Doporučuji použít phpass

Jedná se o přenosný rámec pro hašování hesel ve veřejné doméně, který lze použít v aplikacích PHP. Je určen pro práci s PHP 3 a vyšší) a byl skutečně otestován. s alespoň PHP 3.0.18 až 5.3.0).

Upřednostňovanou (nejbezpečnější) hašovací metodou podporovanou phpassem je bcrypt založený na OpenBSD ve stylu Blowfish, podporovaný také naším crypt_blowfish balíčkem ve veřejné doméně (pro aplikace C) a známý v PHP jako CRYPT_BLOWFISH) , s rezervou k rozšířeným hashům založeným na DES ve stylu BSDI, známým v PHP jako CRYPT_EXT_DES), a posledním řešením pro záložní hesla hashů založených na MD5 na solených a proměnných iteracích implementovaných v samotném phpassu ( označováno také jako přenosné hashovací zařízení).

Stejně jako na webových stránkách se říká, že nejbezpečnější hašování je na blowrytu. Věřím, že je to pravda, protože je to „ Mooreův zákonný důkaz “, zatímco většina ostatních tomu tak není.

0
Alfred