Jsem začátečník v kryptografii a velmi jednoduchým způsobem se snažím pochopit, co je kryptografický “ sůl “ je, když ji možná budu muset použít, a proč bych ji měl nebo neměl používat.
Mohu získat velmi jednoduchý a jasné vysvětlení (úroveň pro začátečníky)?
Pokud víte o jakýchkoli odkazech na toto téma, byly by také užitečné.
Odpovědět
Důvodem, proč se používají soli, je to, že lidé mají tendenci volit stejná hesla, a ne vůbec náhodně. Mnoho použitých hesel obsahuje krátká skutečná slova, která si je snadno zapamatují, ale také umožňuje útok.
Jak možná víte, hesla se obvykle neukládají v čistém textu, nýbrž se hashují. Pokud si nejste jisti účelem funkce hash, přečtěte si nejprve tuto informaci.
Útočníci nyní mohou jednoduše vygenerovat seznam běžných hesel a jejich odpovídajících hash. Porovnání Pokud hash, který web uložil v tabulce, odhalí útočníkovi hesla, pokud se používají běžná hesla.
A salt se jednoduše přidá k jedinečnému výstupu hash hesla i pro uživatele přijímání běžných hesel . Jeho účelem je učinit útoky založené na před výpočtech neužitečnými. Pokud je vaše heslo uloženo s jedinečnou solí, pak jakákoli předem vypočítaná tabulka hash hesel zaměřená na nesolené hash hesel nebo cílení na účet s jinou solí nepomůže při prolomení hesla vašeho účtu. Dlouhá náhodně generovaná sůl (pomocí /dev/urandom
) bude globálně jedinečný . K přípravě solí lze tedy použít soli -počítačové útoky jsou zcela neúčinné.
Nejjednodušší způsob, jak kombinovat sůl a heslo, je jednoduše je zřetězit, tj. uložená hodnota hash je Hash(salt||password)
. heslo password1
se nyní magicky stává, např. 6$dK,3gCA%Jpassword1
, které v tabulce crackerů hesel pravděpodobně nenajdete.
Sůl může být zcela uložena na volném místě v databázi, vedle hašované hodnoty. Jakmile má útočník databázi a chce najít hesla, musí vygenerovat předem vypočítanou tabulku pro každou sůl zvlášť, což je nákladná operace.
Další způsob, jak se bránit proti prolomení hesla offline, je provést protažení hesla, tzn. pomalejší výpočet hodnoty hash hesla pro jakoukoli osobu, včetně služby přihlášení a crackerů hesel. Jednou z metod používaných k roztažení hesel je dosaženo mnohonásobnou iterací hašovací funkce, tj. Uložením Hash(Hash(Hash(Hash…(Hash(salt||password)))…)
.
Další běžná myšlenka týkající se solení se nazývá pepř . To znamená další náhodná hodnota spojená s heslem, takže uložená hodnota je Hash(pepper||salt||password)
. Pepř se potom vůbec neukládá . Přihlašovací server i cracker hesel musí hrubou silou vynést neznámou hodnotu pepře, což zpomaluje srovnání hodnot hash hesla pro obě strany.
Od roku 2013 do roku 2015 se hashování hesel proběhla soutěž o hledání lepšího algoritmu protahování hesel. Vítězem se stal algoritmus Argon2 . Programátorům se doporučuje používat Argon2 místo implementace vlastního algoritmu .
Komentáře
- Takže pokud máte v databázi uloženo pouze jedno nebo 2 hesla, je použití soli v podstatě zbytečné? Chápu, že je to užitečné pouze v případě, že počet hesel uložených v databázi není malý.
- @AbhinavChoudhury: Ne, brání se proti duhovým tabulkám – tj. Předpočítaným tabulkám pro konkrétní hash. Příklad: Vezměte si heslo “ heslo1 „. Pokud ‚ nesolíte, ‚ uložíte HASH (“ heslo1 „) ve vaší databázi. Nyní, pokud útočník získá vaše záznamy a předem vypočítá HASH (*) pro všechna hesla o 9 znacích, může heslo obnovit. Pokud jste místo toho solili heslo, HASH (‚ somesaltforyou ‚ || ‚ heslo1 ‚) NEBUDE v duhové tabulce útočníků (protože ‚ má více než 9 znaků).
- “ Sůl může být uložena zcela na volném místě v databázi, vedle hašované hodnoty “ – – tato část mi nikdy nedávala smysl; Zajímalo by mě, jestli byste to mohli rozšířit
- Cílem soli je zajistit, aby hash nebyl nalezen v předpočítané tabulce. Musí být uloženo, aby bylo možné ověřit heslo (v opačném případě ‚ sa “ pepper „). Sůl by neměla být “ tajná „, pouze aby bylo heslo jedinečné. To samozřejmě znamená, že každé uložené heslo musí mít svoji vlastní, jedinečnou (a náhodnou) sůl.
Odpověď
Pomůžete mi pochopit, co je kryptografická „sůl“?
V kontextu hesla vytvoření, „sůl“ jsou data (náhodná nebo jiná) přidaná k hašovací funkci, aby se hashovaný výstup hesla těžší prolomil.
Kdy jej možná budu muset použít?
Vždy.
Proč měl bych nebo neměl bych to použít?
Z hashových funkcí byste měli vždy používat slanou hodnotu, z důvodů vysvětlených níže.
Je obecně pravda, že lidé volí slabá hesla, a je jistě pravda, že existují gigabajty veřejně dostupných duhových tabulek přeplněných hašovanými hodnotami, které je představují. Takže když si někdo ve vaší službě vytvoří účet a vybere heslo k zabezpečení své identity, můžete se obvykle vsadit, že zvolené heslo bude 1) běžné, 2) nezabezpečené a 3) dostupné pro křížové odkazy ve vyhledávacích tabulkách.
Například heslo Nowayin1 při hašování prostřednictvím MD5 je 6f367d65bc74b88e21fb9959487ffa3a a zjevně to není dobrá volba. I když to může vypadat dobře (a také to není), skutečnost, že se hash MD5 hesla objevuje v otevřených databázích, ho činí bezcenným.
Ale to je jen 128bitový MD5. A co něco silnější, jako SHA1 (160 bitů) nebo dokonce Whirlpool (512 bitů)?
Stejný problém.
Například P @ $$ word se SHA1 je 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 a 1qazXSW @ čárkovaná s Whirlpool znamená 0bf7545b784665d23b9c174ca03688a405f05b048e9d6c49bfc2721a1fa872bbd6576273d002e56d7c2a9c378efe607af36eea9d708a776e6f60ecb26e081cdf .
Kořenovým problémem všech těchto hesel a miliard podobných jim je skutečnost, že jejich běžně používané hashe se staly běžně známými.
Heslo sůl to mění.
Pokud byla k vybranému heslu uživatele přidána náhodná hodnota (sůl), pak hash SHA1 1e69e0a615e8cb813812ca797d75d4f08bdc2f56 už by neodhalil P jako heslo uživatele, protože hodnota hash v duhové tabulce by mu již neodpovídala.
A nezabralo by to mnoho. Například malá 16bitová náhodná hodnota by ve vyhledávacích tabulkách přinesla 65 536 variant každé hašované hodnoty. Databáze 15 miliard položek by nyní potřebovala více než 983 miliard hashů, aby se zohlednila sůl.
Takže to je důvod solení vašich hashů, aby zmařily vyhledávání a duhové stoly. „Nezavěšujte svůj klobouk na slaný hash, protože hackeři neztrácejí čas používáním duhových tabulek k zjišťování vašich hesel.
Použijí pětserverový klastrový systém s 25 GPU , na kterém je spuštěn Hashcat, který dokáže vypálit až 350 miliard odhadů za sekundu prolomení hashů pro každé představitelné osmimístné heslo obsahující malá a velká písmena, číslice a speciální znaky, těsně pod šest hodin. (A to bylo v roce 2012.)
K vyrovnání rychlosti takového hardwaru lze použít techniky, jako je protahování klíčů, díky nimž hashe běží pomaleji, takže slovníky a útoky hrubou silou jsou příliš pomalé, aby to stálo za to , ale hardware se stále zrychluje.
AKTUALIZACE 2018:
Mezi aktuální doporučené postupy patří bezpečné hašování hesel pomocí Argon2i (upřednostňováno před scryptem), což je funkce velmi náročná na paměť, která je velmi odolný na FPGA, GPU s více jádry a vyhrazené moduly ASIC sloužící ke snadnému prolomení neroztažených přístupových frází. V PHP7 implementaci Argon2 se sůl zpracovává interně za vás.
Odpověď
Pokusím se odpovědět na část vaší otázky, která byla dosud opomíjena:
kdy jej možná budu muset použít a proč bych ho měl / neměl používat.
Krátká odpověď je, že jako amatér byste neměli používat kryptografii na úrovni, která vyžaduje přímé jednání se solemi.
Například bcrypt
Algoritmus hashování hesel používá interně soli. Ale tuto skutečnost nevystavuje vývojářům, kteří jej používají – heslo jednoduše předáte bcrypt
(a volitelně parametru, který nastavuje úroveň úsilí CPU „potřebné k vygenerování hash) a vrátí hash. Pokud potřebujete ověřit, zda je heslo správné, předáte bcrypt
heslo i dříve vygenerovaný hash. Udává, zda heslo bylo nebo nebylo použito ke generování hash.
Ne řiďte se zde uvedenými radami a zkuste hashovat svá hesla pomocí soli. Jedná se o detail implementace na nízké úrovni a pokud zjistíte, že pracujete na úrovni, kde jsou tyto druhy věcí potřebné, pracujete na příliš nízké úrovni abstrakce. Kryptografie je velmi obtížné provést správně a internet je naprosto posetý dobře míněnými vývojáři „zcela nezabezpečenými domácími schématy hašování hesel.
Odpovědět
Citace „ Zkouška č. 70-486 Vývoj webových aplikací ASP.NET MVC 4 (MCSD): Vývoj webových aplikací ASP.NET MVC 4 “ autor: William Penberthy, Pearson Education, 15. září 2013:
Solení je proces, který posiluje šifrování a hašování souborů, což ztěžuje jejich prolomení. Salting dodává náhodný řetězec na začátek nebo konec vstupního textu před hašováním nebo zašifrováním hodnoty. Při pokusu o rozbití seznamu hesel musí například hackeři zohlednit sůl a možné informace o heslech, než budou moci prolomit Pokud je každé solené hodnotě přiřazena jiná hodnota soli, je možné vytvořit tabulku potenciálních hodnot hesla pro pa program ssword-cracking se stává nepraktickým.
Odpověď
Sůl je náhodné číslo, které je potřebné k přístupu k šifrovaným datům, spolu s heslem.
Pokud útočník nezná heslo a snaží se ho uhádnout útokem hrubou silou, pak každé heslo, které zkusí je třeba vyzkoušet s každou hodnotou soli.
Takže u jednobitové soli (0 nebo 1) je šifrování dvakrát tak obtížné. Díky dvoubitové soli je to čtyřikrát těžší, třikrát osmkrát těžší atd. Dokážete si představit, jak obtížné je prolomit hesla pomocí šifrování, které používá 32bitovou sůl!
Komentáře
- Ne. O soli se obvykle předpokládá, že je útočníkovi známa. V tomto případě přesáhne nějaký nízký práh sůl nezlepší zabezpečení.
- “ Předpokládá se, že sůl útočník zná “ – > Kdo to předpokládá?
- @Mike: Kdo? Někdo říká “ Vždy byste měli předpokládat, že útočník zná sůl. „. Lidé na jiné stránce říkají “ Soli jsou veřejné “ a později říká, že “ jsou soli známé, protože ‚ je průmyslovým standardem používání slova sůl. “ Další říká, že “ sůl je veřejně známá, nebo s ní by se mělo zacházet alespoň jako s veřejností znalosti. „.