Kryptografická hashovací funkce (CHF) je algoritmus, který lze spustit na datech, jako je jednotlivý soubor nebo heslo, za účelem vytvoření hodnoty zvané kontrolní součet.
Hlavním použitím CHF je ověření pravosti dat. Dva soubory lze považovat za identické pouze v případě, že kontrolní součty generované z každého souboru pomocí stejné kryptografické hašovací funkce jsou totožné.
Některé běžně používané kryptografické hašovací funkce zahrnují MD5 a SHA-1, ačkoli existuje mnoho dalších. Tyto funkce jsou často označovány jako „hashovací funkce“, ale to není technicky správné. Hashovací funkce je obecný termín, který zahrnuje CHF spolu s dalšími druhy algoritmů, jako jsou cyklické kontroly redundance.
Kryptografické hashovací funkce: případ použití
Řekněme, že si stahujete nejnovější verzi prohlížeče Firefox. Z nějakého důvodu jste jej potřebovali stáhnout z jiné stránky než Mozilla. Protože není hostován na webu, kterému jste se naučili důvěřovat, chtěli byste se ujistit, že instalační soubor, který jste právě stáhli, je přesně stejný jako ten, který nabízí Mozilla.
Pomocí kalkulátoru kontrolního součtu vypočítáte kontrolní součet pomocí konkrétní kryptografické hašovací funkce, jako je SHA-2, a poté jej porovnáte s tou, která je zveřejněna na webu Mozilly. Pokud jsou stejné, můžete si být přiměřeně jisti, že stažený soubor, který máte, je ten, který Mozilla zamýšlela mít.
Lze kryptografické hashovací funkce obrátit?
Kryptografické hašovací funkce jsou navrženy tak, aby zabránily možnosti obrátit kontrolní součty, které vytvářejí, zpět na původní texty. Nicméně, i když je prakticky nemožné vrátit zpět, není 100% zaručeno, že ochrání data.
Hackeři mohou použít duhovou tabulku, aby zjistili prostý text kontrolního součtu. Duhové tabulky jsou slovníky, které uvádějí tisíce, miliony nebo dokonce miliardy kontrolních součtů spolu s odpovídající hodnotou prostého textu.
I když to technicky není obrácení kryptografického hašovacího algoritmu, mohlo by to tak být, vzhledem k tomu, že je to tak jednoduché. Ve skutečnosti, protože žádná duhová tabulka nemůže vypsat všechny možné existující kontrolní součty, jsou obvykle užitečné pouze pro jednoduché fráze, jako jsou slabá hesla.
Zde je zjednodušená verze duhové tabulky, která ukazuje, jak by fungovalo při použití kryptografické hašovací funkce SHA-1:
Příklad duhového stolu | |
---|---|
Plaintext | SHA-1 Kontrolní součet |
12345 | 8cb2237d0679ca88db6464eac60da96345513964 |
password1 | e38ad214943daad1d64c102faec29de4afe9da3d |
ilovemydog | a25fb3505406c9ac761c8428692fbf5d5ddf1316 |
Jenny400 | 7d5eb0173008fe55275d12e9629eef8bdb408c1f |
dallas1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
Hacker musí vědět, který kryptografický hašovací algoritmus byl použit ke generování kontrolních součtů, aby zjistil hodnoty.
Některé webové stránky, které ukládají uživatelská hesla, pro větší ochranu provádějí další funkce v kryptografickém hashovacím algoritmu po vygenerování hodnoty, ale před jejím uložením. Tento proces vytváří novou hodnotu, které rozumí pouze webový server a která neodpovídá původnímu kontrolnímu součtu.
Například po zadání hesla a vygenerování kontrolního součtu může být rozděleno na několik částí a přeskupeno před uložením do databáze hesel nebo mohou být určité znaky zaměněny za jiné. Při pokusu o ověření při příštím přihlášení uživatele server tuto dodatečnou funkci obrátí a znovu se vygeneruje původní kontrolní součet, aby se ověřilo, že heslo uživatele je platné.
Provedení těchto kroků omezuje užitečnost hacku, při kterém jsou ukradeny všechny kontrolní součty. Cílem je provést funkci, která je neznámá, takže pokud hacker zná kryptografický hašovací algoritmus, ale ne vlastní, pak znalost kontrolních součtů hesla není užitečná.
Hesla a kryptografické hashovací funkce
Databáze ukládá uživatelská hesla způsobem podobným duhové tabulce. Po zadání hesla se vygeneruje kontrolní součet a porovná se s tím, který je v záznamu s vaším uživatelským jménem. Poté vám bude udělen přístup, pokud jsou oba totožné.
Vzhledem k tomu, že CHF vytváří nevratný kontrolní součet, je pro vás bezpečné vytvořit heslo tak jednoduché jako 12345 místo 12@34 $5, jednoduše proto, že samotným kontrolním součtům nelze rozumět? Ne a tady je důvod.
Tato dvě hesla nelze rozluštit pouhým pohledem na kontrolní součty:
MD5 pro 12345: 827ccb0eea8a706c4c34a16891f84e7b
MD5 za 12@34$5: a4d3cc004f487b18b2ccd4853053818b
Na první pohled si můžete myslet, že je v pořádku použít kterékoli z těchto hesel. To platí, pokud se útočník pokusil zjistit vaše heslo uhodnutím kontrolního součtu MD5, což nikdo neudělá, ale neplatí to, pokud je proveden útok hrubou silou nebo slovníkový útok, což je běžná taktika.
Útok hrubou silou nastane, když je při uhodnutí hesla provedeno několik náhodných bodnutí. V tomto případě by bylo snadné uhodnout 12345, ale docela obtížné náhodně zjistit ten druhý. Slovníkový útok je podobný v tom, že útočník může vyzkoušet každé slovo, číslo nebo frázi ze seznamu běžných (a ne tak běžných) hesel a 12345 je jedno z těch běžných hesla.
Přestože kryptografické hašovací funkce vytvářejí kontrolní součty obtížně až nemožné uhodnout, měli byste stále používat složité heslo pro všechny své online a místní uživatelské účty.
Další informace o kryptografických hashovacích funkcích
Mohlo by se zdát, že kryptografické hašovací funkce souvisejí se šifrováním, ale obě fungují odlišným způsobem.
Šifrování je obousměrný proces, při kterém se něco zašifruje, aby se stalo nečitelným, a později se dešifruje, aby se mohlo znovu normálně používat. Uložené soubory můžete zašifrovat tak, aby je nemohl použít kdokoli, kdo k nim přistoupí, nebo můžete použít šifrování přenosu souborů k zašifrování souborů, které se přesouvají po síti, jako jsou ty, které nahráváte nebo stahujete online.
Kryptografické hašovací funkce fungují odlišně v tom, že kontrolní součty nejsou určeny k tomu, aby byly obráceny pomocí speciálního dehashovacího hesla. Jediným účelem CHF je porovnat dva kusy dat, například při stahování souborů, ukládání hesel a stahování dat z databáze.
Je možné, že kryptografická hašovací funkce vytvoří stejný kontrolní součet pro různé části dat. Když k tomu dojde, nazývá se to kolize, což je obrovský problém, vezmeme-li v úvahu, že smyslem této funkce je vytvořit jedinečné kontrolní součty pro každý vstup dat do ní.
Kolize může nastat proto, že každý CHF vytváří hodnotu pevné délky bez ohledu na vstupní data. Například kryptografická hašovací funkce MD5 generuje 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 a e10adc3949ba058 zcela odlišných bloků dat8e.f3f305
První kontrolní součet je z 12345. Druhý byl vygenerován z více než 700 písmen a číslic a třetí je z 123456. Všechny tři vstupy mají různé délky, ale výsledky jsou vždy dlouhé pouze 32 znaků, protože byl použit kontrolní součet MD5.
Počet kontrolních součtů, které lze vytvořit, není omezen, protože každá malá změna na vstupu má vytvořit zcela jiný kontrolní součet. Protože existuje limit na počet kontrolních součtů, které může vytvořit jeden CHF, vždy existuje možnost, že narazíte na kolizi.
Proto byly vytvořeny další kryptografické hašovací funkce. Zatímco MD5 generuje hodnotu 32 znaků, SHA-1 generuje 40 znaků a SHA-2 (512) generuje 128. Čím větší počet znaků má kontrolní součet, tím menší je pravděpodobnost, že dojde ke kolizi.