Sůl (kryptografie) - Salt (cryptography)
![]() | Tento článek má několik problémů. Prosím pomozte vylepši to nebo diskutovat o těchto otázkách na internetu diskusní stránka. (Zjistěte, jak a kdy tyto zprávy ze šablony odebrat) (Zjistěte, jak a kdy odstranit tuto zprávu šablony)
|
v kryptografie, a sůl je náhodný data, která se používají jako další vstup do a jednosměrná funkce že hash data, a Heslo nebo přístupová fráze. Soli se používají k ochraně hesel v úložišti. Historicky bylo heslo uloženo v prostý text v systému, ale postupem času byla vyvinuta další ochranná opatření na ochranu hesla uživatele před čtením ze systému. Jednou z těchto metod je sůl.
Pro každé heslo je náhodně vygenerována nová sůl. V typickém nastavení je sůl a heslo (nebo jeho verze po) protahování klíčů ) jsou zřetězené a zpracovány pomocí a kryptografická hashovací funkce a výstupní hash hodnota (ale ne původní heslo) je uložena se solí v databázi. Hashing umožňuje pozdější autentizaci bez zachování, a tedy s rizikem vystavení prostý text heslo v případě narušení úložiště autentizačních dat.
Soli se brání před vypočítaným hashovým útokem, např. duhové stoly.[1] Vzhledem k tomu, že si solí nemusejí lidé pamatovat, mohou velikost hašovací tabulky potřebné pro úspěšný útok neúměrně zvětšit, aniž by zatěžovali uživatele. Vzhledem k tomu, že soli se v každém případě liší, chrání také běžně používaná hesla nebo uživatele, kteří používají stejné heslo na několika webech, tím, že všechny solené instance hash pro stejné heslo navzájem odlišují.
Kryptografické soli jsou široce používány v mnoha moderních počítačových systémech, od Unix pověření systému do Internetová bezpečnost.
Soli úzce souvisí s konceptem a kryptografická nonce.
Příklad použití
Zde je neúplný příklad hodnoty soli pro ukládání hesel. Tato první tabulka má dvě kombinace uživatelského jména a hesla. Heslo není uloženo.
Uživatelské jméno | Heslo |
---|---|
uživatel1 | heslo123 |
uživatel2 | heslo123 |
Hodnota soli je generována náhodně a může mít libovolnou délku, v tomto případě je hodnota soli dlouhá 16 bytů. Hodnota soli je připojena k heslu prostého textu a poté je výsledek hašován, toto se označuje jako hašovaná hodnota. Uloží se jak hodnota soli, tak hodnota hash.
Uživatelské jméno | Hodnota soli | Řetězec k hašování | Hashovaná hodnota = SHA256 (Heslo + hodnota soli) |
---|---|---|---|
uživatel1 | E1F53135E559C253 | heslo123E1F53135E559C253 | 72AE25495A7981C40622D49F9A52E4F1565C90F048F59027BD9C8C8900D5C3D8 |
uživatel2 | 84B03D034B409D4E | heslo12384B03D034B409D4E | B4B6603ABC670967E99C7E7F1389E40CD16E78AD38EB1468EC2AA1E62B8BED3A |
Jak ukazuje tabulka výše, různé hodnoty solí vytvoří zcela odlišné hodnoty hash, i když jsou hesla prostého textu přesně stejná. Dodatečně, slovníkové útoky jsou zmírněny do určité míry jako útočník nemůže prakticky předpočítat hashe. Sůl však nemůže chránit běžná nebo snadno uhodnutá hesla.
Obyčejné chyby
Opětovné použití soli
Pevná sůl je, když programátor používá stejnou sůl pro každé hashované heslo.
I když to bude aktuální duhové stoly k ničemu (pokud je sůl správně zvolena), pokud je sůl pevně zakódována do populárního produktu, který lze extrahovat a pomocí této soli lze generovat nový duhový stůl.
Použití jedné pevné soli také znamená, že každý uživatel, který zadá stejné heslo, bude mít stejný hash (pokud hash hesla nezávisí také na uživatelském jménu). Díky tomu je snazší zaútočit na více uživatelů prolomením pouze jednoho hashe.
Krátká sůl
Pokud je sůl příliš krátká, bude pro útočníka snadné vytvořit duhový stůl skládající se ze všech možných solí připojených ke každému pravděpodobnému heslu. Použití dlouhé soli zajistí, že duhový stůl pro databázi bude neúměrně velký.[2]
Výhody
Chcete-li pochopit rozdíl mezi prolomením jediného hesla a jejich množiny, zvažte jeden soubor hesel, který obsahuje stovky uživatelských jmen a hashovaná hesla. Bez soli by mohl útočník vypočítat hodnotu hash (pokus [0]) a poté zkontrolovat, zda se tato hodnota hash objevuje kdekoli v souboru. Pravděpodobnost shody, tj. Prolomení jednoho z hesel při tomto pokusu, se zvyšuje s počtem hesel v souboru. Pokud jsou přítomny soli, pak by útočník musel vypočítat hash (sůl [a], pokus [0]), porovnat se záznamem A, pak hash (sůl [b], pokus [0]), porovnat se záznamem B a již brzy. Tím se poruší „opětovné použití“ hashů při pokusech o prolomení více hesel.
Soli také bojují proti použití hash tabulek a duhové stoly prolomení hesel.[3] Tabulka hash je velký seznam předem vypočítaných hodnot hash pro běžně používaná hesla. U souboru hesel bez solí může útočník projít každou položku a vyhledat hašované heslo v hašovací tabulce nebo duhové tabulce. Pokud je vyhledávání podstatně rychlejší než hashovací funkce (což často je), podstatně to urychlí crackování souboru. Pokud je však soubor s heslem solený, pak hash tabulka nebo duhová tabulka by musela obsahovat pre-hash „sůl. Heslo“. Pokud je sůl dostatečně dlouhá a dostatečně náhodná, je to velmi nepravděpodobné. Nesolená hesla vybraná lidmi mají tendenci být zranitelná vůči slovníkovým útokům, protože musí být dostatečně krátká a smysluplná, aby si je bylo možné zapamatovat. I malý slovník (nebo jeho hashovaný ekvivalent, hash tabulka) významně pomáhá při prolomení nejčastěji používaných hesel. Vzhledem k tomu, že si lidé nemusí soli pamatovat, mohou neúměrně zvětšit velikost duhového stolu potřebného pro úspěšný útok, aniž by zatěžovali uživatele.
Techničtěji, soli chrání před hashovacími tabulkami a duhovými tabulkami, protože ve skutečnosti prodlužují délku a potenciálně složitost hesla. Pokud duhové tabulky nemají hesla odpovídající délce (např. 8bajtové heslo a 2bajtová sůl, ve skutečnosti je to 10bajtové heslo) a složitost (nealfanumerická sůl zvyšuje složitost přísně alfanumerických hesel) solené heslo, pak heslo nebude nalezeno. Pokud bude nalezen, bude nutné nejprve odstranit sůl z hesla, než bude možné jej použít.
Moderní stínové heslo systém, ve kterém jsou hash hesel a další bezpečnostní data uložena v neveřejném souboru, tyto obavy poněkud zmírňuje. Zůstávají však relevantní v instalacích s více servery, které používají centralizované systémy pro správu hesel k zasílání hesel nebo hashů hesel do více systémů. V takových zařízeních je vykořenit účet v každém jednotlivém systému může být považován za méně důvěryhodný než správci centralizovaného systému hesel, takže je stále užitečné zajistit, aby byla bezpečnost algoritmu hašování hesel, včetně generování jedinečných hodnot soli, adekvátní.[Citace je zapotřebí ]
Soli také slovníkové útoky a útoky hrubou silou pro prolomení velkého počtu hesel mnohem pomalejší (ale ne v případě prolomení pouze jednoho hesla). Bez solí musí útočníkovi, který prolomí mnoho hesel současně, stačit hash každého hesla jednou uhádnout a porovnat ho se všemi hashe. U solí však bude mít každé heslo pravděpodobně jinou sůl; takže každý odhad by musel být hashován zvlášť a porovnáván pro každou sůl, což je podstatně pomaleji než porovnávat stejný jediný hash s každým heslem.
Další (menší) výhoda soli je následující: dva uživatelé si mohou zvolit stejný řetězec jako jejich heslo, nebo stejný uživatel může použít stejné heslo na dvou počítačích. Bez soli by toto heslo bylo uloženo jako stejný hash řetězec v souboru hesla. Tím by se odhalila skutečnost, že oba účty mají stejné heslo, což umožňuje komukoli, kdo zná jedno z hesel účtu, přístup k druhému účtu. Solením hesel dvěma náhodnými znaky, i když dva účty používají stejné heslo, to nikdo nemůže zjistit pouhým čtením hodnot hash.
Unixové implementace
70. – 80. Léta
Starší verze Unix použitý a soubor hesla / etc / passwd
k uložení hashe solených hesel (hesla s předponou dvoumístných náhodných solí). V těchto starších verzích Unixu byla sůl také uložena v souboru passwd (jako cleartext) spolu s hash soleného hesla. Soubor hesla byl veřejně čitelný pro všechny uživatele systému. To bylo nutné, aby softwarové nástroje privilegované pro uživatele mohly najít uživatelská jména a další informace. Zabezpečení hesel je proto chráněno pouze jednosměrnými funkcemi (šifrování nebo hashování) použitými pro tento účel. Dřívější implementace Unixu omezovaly hesla na osm znaků a používaly 12bitovou sůl, což umožňovalo 4096 možných hodnot soli.[4] To byla vhodná rovnováha pro výpočetní a skladovací náklady 70. let.[5]
Osmdesátá léta -
The stínové heslo systém se používá k omezení přístupu k hashům a solím. Sůl má osm znaků, hash je 86 znaků a délka hesla je neomezená.
Implementace webových aplikací
Je běžné, že webová aplikace ukládá v databázi hashovací hodnotu hesla uživatele. Bez soli, úspěšný Vložení SQL útok může přinést snadno prolomitelná hesla. Protože mnoho uživatelů znovu používá hesla pro více webů, je použití soli důležitou součástí celku zabezpečení webových aplikací.[6] Některé další odkazy na použití soli k zabezpečení hodnot hash hesla ve specifických jazycích (PHP, .NET atd.) Lze najít v externí odkazy níže.
Viz také
- Prolomení hesla
- Kryptografická nonce
- Inicializační vektor
- Polstrování
- „Spice“ v ukvapené pudinkové šifře
- Duhové stoly
- Pepř (kryptografie)
Reference
- ^ „Na heslech záleží“. Citováno 2016-12-09.
- ^ „Zabezpečené zasolení hesla - jak na to správně“.
- ^ „Jak fungují duhové tabulky“. kestas.kuliukas.com.
- ^ Morris, Robert; Thompson, Ken (03.04.1978). „Zabezpečení heslem: Historie případů“. Murray Hill, NJ, USA: Bell Laboratories. Archivovány od originál dne 21. 8. 2013. Citovat deník vyžaduje
| deník =
(Pomoc) - ^ „Jak Unix implementuje hesla [Kniha]“.
- ^ „Deník ISC - hashování hesel“. Dshield.org. Citováno 2011-10-15.
externí odkazy
- Wille, Christoph (01.01.2004). „Ukládání hesel - hotovo!“.
- Kryptografický podvodník OWASP
- jak šifrovat hesla uživatelů