it-swarm-eu.dev

Šifruje AES samotné heslo bezpečnějším způsobem než SHA1?

To ve skutečnosti není praktická otázka, ale spíše otázka zvědavosti. Slyšel jsem, že profesor CS doporučil postupovat od hesel md5ing nikoli k SHA1, ale k šifrování AES pomocí vlastního klíče jako klíče. Má někdo nějakou představu o tom, zda je to skutečně víceméně bezpečné?

Několik myšlenek k této záležitosti:

  • SHA1 je jednosměrný, což by mělo zvýšit jeho bezpečnost než funkce, která uchovává data.
  • Na druhou stranu hacker nemůže využít výhody dešifrovatelné povahy AES, protože dosud nezná heslo.
  • Pokud to nehádá. Ale pak by nebyl v tom, jak jsem to šifroval.
  • Protože víte, že heslo AES'd je dešifrováno, když se dešifrovací klíč shoduje s výstupem, může být v počítači hackera hrubě vynucen.
  • Hacker ale neví, jak je šifrován, takže by se o to nesnažil.
  • Hacker však mohl mít také šifrovací kód, v takovém případě je to prostě otázka, která data budou trvat déle, než silou.
  • Většina webových stránek používá md5 nebo sha1 (správně?), Takže vyhledávací tabulky pro tyto hashe by byly mnohem rozšířenější než pro metodu AES. Tím je metoda AES bezpečnější.
  • Ale pokud bychom sůl obě metody, by se stejně imunní vůči vyhledávací tabulky.

Některé běžné body v odpovědích a kontrapunkty:

Šifrování AES není navrženo tak, aby bylo odolné proti kolizi, a bude tedy pravděpodobně mít více kolizí pro stejnou délku řetězce hash.

Používáme-li delší sůl, bude šifrované heslo delší než hash SHA1. To může stačit ke snížení kolizí na srovnatelnou úroveň - nebo možná ne.

Šifrování AES vám řekne, jak dlouho bylo heslo, do 16 bytů.

Metodu AES můžeme přidat: po jejím zašifrování vložíme nebo ořízneme na přiměřenou délku (která je delší než SHA1, aby nedošlo ke kolizím).

30
skier88

Krátká odpověď: špatný nápad, nedělej to.


Delší odpověď: - cílem cvičení je uložit něco, co umožňuje serveru ověřit ​​dané heslo, ale ne dovolte mu znovu sestavit ​​heslo; tato vlastnost je žádoucí, takže důsledky neoprávněného přístupu ke čtení do databáze serveru útočníkem zůstávají omezené.

Chceme tedy jednosměrná deterministická transformace, která převede dané heslo na ověřovací hodnotu. Transformace musí být:

  • konfigurovatelně pomalý, aby zmařil útoky na slovník;
  • odlišný pro každou instanci, aby se zabránilo útokům paralelních slovníků, včetně předběžných tabulek (o tom jsou soli).

Jediné vyvolání MD5 nebo SHA-1 selže na obou účtech, protože tyto funkce jsou velmi rychlé a nesolené. Pomalu lze dosáhnout hnízděním mnoha vyvolání (tisíce, možná miliony) a sůl může být injikována „někde“, i když existují dobré a špatné způsoby, jak to udělat. PBKDF2 je standardní transformace, která dělá právě to, a není na tom špatná (i když bcrypt by měl být poněkud výhodnější ).

Nicméně, MD5 a SHA-1 dělají alespoň jednu věc správně: byly navrženy, aby byly jednosměrné. To je těžké udělat; není ani teoreticky prokázáno, že jednosměrné funkce mohou skutečně existovat. Kryptografové po celém světě jsou v současné době zapojeni do soutěže za účelem vytvoření nové, lepší jednosměrné hašovací funkce.

Zdá se tedy, že váš profesor doporučuje nahradit funkci navrženou pro jednosměrnost, funkcí, která byla ne navržena pro jednosměrnost. Neopravuje nic o pomalosti a solení, ale odstraní jednu dobrou věc o MD5 a SHA-1. Navíc je známo, že AES je relativně slabý s ohledem na související klíčové útoky - to není problém, pokud je AES používán k tomu, na co měl být, tj. Šifrování, ale stává se důležitým problém, když je ponořen do stavebního bloku pro jednosměrnou hashovací funkci. Zdá se, že je možné vytvořit bezpečnou hashovací funkci opětovným použitím částí designu AES, ale vyžaduje značné přepracování (viz například Whirlpool a ECHO ).

Nepoužívejte proto domácí hašovací schéma založené na AES; nepoužívejte nic, co je „domácí“: to je recept na katastrofu. Bezpečnost nelze otestovat; Jediným známým způsobem, jak vytvořit bezpečný algoritmus, je nechat na něj několik let pečlivě zkoumat stovky vyškolených kryptografů. Nemůžete to udělat sami. Ani osamělý kryptograf to nebude riskovat.

Místo toho použijte bcrypt. Ani PBKDF2 není špatný.

32
Thomas Pornin

Většina webových stránek používala md5 nebo sha1 (správně?), Takže to hacker očekával. Tím je metoda AES bezpečnější.

I když většina webových stránek používá MD5 nebo SHA1, přepnutí na AES jen z toho důvodu, že se tam obvykle nepoužívá , by to nezlepšilo bezpečí - to je just security at temnotity , což obvykle nepřispívá účinně ke zvýšení bezpečnosti; bude mnohem bezpečnější použít dobrý algoritmus (který je pro daný účel dobře testován) a dokumentovat jej veřejně, než použít algoritmus, u kterého si nemůžete být jisti, zda je dobrý, a neříkat, že jste používat to.

V současné době si při používání AES nebo jiného šifrovacího algoritmu, jako je tento, vymyslím následující možné nevýhody:

  1. Šifrovací algoritmy obvykle nejsou navrženy tak, aby nedocházelo ke kolizím: Jak je uvedeno v poznámkách níže, nemusí to být problém kvůli očekávanému pseudonáhodnému chování blokové šifry. Ale stále používáte šifrovací algoritmus pro něco, pro co není určeno.
  2. Je možné si představit, že existují útoky na šifrovací algoritmy, které je mnohem snazší udělat, pokud člověk ví, že čistý text a heslo jsou ve skutečnosti jedno a totéž (pokud by skutečnost, že algoritmus používáte, nějakým způsobem uniká, což není tak nepravděpodobné) že je to například diskutováno zde).
  3. Šifrovací algoritmy produkují data, která se v mnoha případech liší podle délky čistého textu. To znamená, že ciphertext obsahuje informace o tom, jak dlouho je heslo. V případě AES je to násobek 16 bajtů, pokud můžu říct ; hodnoty hash na druhé straně mají pevnou velikost (např. 160 bit/20 bajtů pro SHA1); což znamená, že potenciální hacker má šanci získat více informací z šifrovaného textu než z hodnoty hash.
  4. V kryptografii je obvykle vždy méně bezpečné příliš vařit něco sami (což je následně pravděpodobně také jen pro vás) než použití něčeho, co je v komunitě dobře vyzkoušeno a na dlouhou dobu (což znamená, že měl čas být důkladně zkontrolován) několika kryptoanalyzátory).
  5. Chcete se ujistit, že váš algoritmus hashování hesel je pomalý, takže potenciálním útočníkům bude bráněno, aby si brutálně vynutili cestu do systému. Jedním ze způsobů, jak toho dosáhnout, je například iterativně provést hašování ve více kolech, jako například PKBDF2. Další podrobnosti viz http://security.blogoverflow.com/2013/09/about-secure-password-hashing/
17
codeling

Jedním z okamžitých problémů, který vidím s tímto přístupem, je pevná délka klíče AES. Při použití AES-128 by bylo omezeno na 16 bajtů hesla. A co delší hesla nebo dlouhé přístupové fráze?

Chcete-li se přizpůsobit libovolné délce hesla, budete potřebovat hashovací funkci, takže zpět k počátečnímu bodu.

Všimněte si, že existují dobře prozkoumané a bezpečné * způsoby přeměny blokové šifry na hašovací funkci, takzvané PGV režimy jako Davies-Meyer, Matyas-Meyer-Oseas nebo Miyaguchi-Preneel.

(*) Pro příslušnou definici „bezpečného“.

7
Krystian

Zvažte však toto:

Vstoupím na vaše stránky a získám dostatečný přístup, abych si všiml, že máte pro váš systém nakonfigurované klíče AES, jediná věc, která vypadá „zašifrovaná“, je vaše hesla ... hádejte, co udělám.

Nechal bych je hashovat, ponechává mnohem méně místa pro snadné stírání celé databáze hesel.

Kromě toho jako majitel webu NECHCEJEM chtít v první řadě dešifrovat hesla mého uživatele, jinak se možnost „obnovit hesla“ stane možnou funkcí, o kterou mohou vyšší uživatelé požádat, a technicky může to udělat, protože základní systém je postaven pomocí šifrovacího systému namísto hašovacího systému (chromý důvod, ale vývojáři softwaru se zabývají takovými požadavky).

Hlavně: Pokud jde o bezpečnost, nesnažte se dělat něco šíleného a vyřazeného z krabice, pravděpodobně si napíšete obrovskou bezpečnostní díru, protože nebudete schopni dát množství výzkumu týmu lidí, kteří pracují na algoritmu. pro konkrétní účel by musel.

5
StrangeWill

Správná odpověď zní: Na tom vůbec nezáleží.

V případě hesel je jediným praktickým útokem vyzkoušet seznam hesel, dokud nenajdete to pravé pomocí brutální síly. Nikdo se nebude snažit zaútočit přímo na SHA1 ani na AES. Dokonce i v současném bodě výzkumu by útoky na SHA1 byly deset tisíckrát jednodušší než AES, oba jsou stále zcela nemožné (pro obrácení hashe hesel, protože zde nehrají srážky). A když vědec najde další způsob, jak zaútočit na jiný algoritmus, šance se mohou příští rok obrátit.

Záleží na tom, jak rychle odvodíte hash/zašifrovat své heslo. Ale pokud např. SHA1 je rychlejší a chcete, aby to bylo pomalejší (odrazit útoky hrubou silou), stačí hash několikrát.

To, co hacker „neočekává“, není tak důležité, dělat něco „neočekávaného“ je jen nejasnost. Je to jako říct: „Obrátím všechna hesla, nyní je to bezpečnější“. To nebude. Pokud hacker může přistupovat k vaší databázi hesel, jak si můžete být jisti, že nemá přístup k funkci odvození hesla hash?

Jedna chyba při „šifrování hesla sama o sobě“: Délka šifrového textu může útočníkovi poskytnout vodítko o délce hesla. To je příšerné.

V každém případě byste měli heslo osolit, nejlépe s něčím jedinečným pro uživatele.

4
Kosta

Z blokových šifrů jsou vytvořeny MAC (Message Authentication Codes); nejznámější je pravděpodobně CBC-MAC . Ve srovnání s hash-mac má problémy, zejména:

Vzhledem k šifrování zabezpečeného bloku je protokol CBC-MAC bezpečný pro zprávy s pevnou délkou. Sama o sobě však není bezpečná pro zprávy s proměnnou délkou. Útočník, který zná správné páry zpráv (tj. CBC-MAC) (m, t) a (m ', t'), může vygenerovat třetí zprávu m '', jejíž CBC-MAC bude také t '.

[...]

Tento problém nelze vyřešit přidáním bloku velikosti zprávy (např. Posílením Merkle-Damgarda), a proto se pro ochranu integrity zpráv s proměnnou délkou doporučuje použít jiný způsob operace, například CMAC.

Kratší odpověď: Zabezpečení MAC vytvořeného z blokové šifry závisí na tom, jak ji sestavíte. Naivní konstrukce bude mít téměř jistě významné nedostatky.

4
Nick Johnson

Skutečnost, že jste navrhli neobvyklý algoritmus, neznamená, že je bezpečný. "vlastní" algoritmy jsou nebezpečné, protože je nikdo neprovedl kryptografickou analýzou.

Jak již napsal @Thomas Pornin výše, AES nebyl navržen tak, aby byl odolný proti kolizi. Kromě toho je AES relativně rychlý, což zjednodušuje útoky.

SHA1 je navržen tak, aby byl odolný proti kolizi, ale SHA1 je také navržen tak, aby byl velmi rychlý, protože jeho účelem je generovat hashování velkých objemů dat nebo souborů v krátkém čase. Jeho účelem není zabránit útokům na hashovaná hesla.

Pokud chcete vygenerovat hash hesla, který je odolný vůči různým druhům útoků, zvažte prodloužení hesla. V závislosti na vašem technologickém zásobníku a dostupných knihovnách zvažte bcrypt, scrypt, argon2.

1
mentallurg