Co je to kryptografická hashovací funkce?

Kryptografická hašovací funkce je algoritmus, který lze spustit na datech, jako je jednotlivec soubor nebo heslo k vytvoření hodnoty zvané kontrolní součet.

Hlavním využitím kryptografické hašovací funkce 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 identické.

Některé běžně používané kryptografické hašovací funkce zahrnují MD5 a SHA-1, i když existuje mnoho dalších.

Kryptografické hashovací funkce se často označují jako „hashovací funkce“, ale to není technicky správné. Hašovací funkce je obecný termín, který zahrnuje kryptografické hašovací funkce spolu s dalšími druhy algoritmů, jako jsou cyklické kontroly redundance.

Kryptografické hashovací funkce: Případ použití

Řekněme, že si stáhnete nejnovější verzi prohlížeče Firefox. Z nějakého důvodu jste jej potřebovali stáhnout z jiné stránky než od Mozilly. 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 je ten, který Mozilla zamýšlela mít.

Fotografie vzorců a obrázků na tabuli
Yagi Studio / Digitální vidění / Getty Images

Mohou být kryptografické hashovací funkce obráceny?

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. I když je prakticky nelze vrátit zpět, není 100% zaručeno, že ochrání data.

Hackeři mohou použít duhovou tabulku k určení prostého textu 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 hashovací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 člověk fungoval při použití kryptografické hašovací funkce SHA-1:

Příklad duhového stolu
Prostý text Kontrolní součet SHA-1
12345 8cb2237d0679ca88db6464eac60da96345513964
heslo 1 e38ad214943daad1d64c102faec29de4afe9da3d
miluji svého psa 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.

Pro větší ochranu některé weby, které ukládají uživatelská hesla provádět další funkce na 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 toto heslo rozděleno do několika částí a přeuspořádat před uložením do databáze hesel nebo mohou být zaměněny určité znaky ostatní. Při pokusu o ověření při příštím přihlášení uživatele to webový server obrátí další funkce a původní kontrolní součet se vygeneruje znovu, aby se ověřilo, že heslo uživatele je platná.

Provedení těchto kroků omezuje užitečnost hacku, kde jsou ukradeny všechny kontrolní součty. Cílem je provést funkci, která je neznámá, takže pokud hacker zná kryptografický hashovací algoritmus, ale ne vlastní, pak není znalost kontrolních součtů hesel 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 zobrazí kontrolní součet je vygenerován a porovnán se záznamem s vaším uživatelským jménem. Pokud jsou oba identické, pak vám bude udělen přístup.

Vzhledem k tomu, že kryptografická hašovací funkce vytváří nevratný kontrolní součet, je pro vás bezpečné vytvořit heslo tak jednoduché jako 12345, namísto 12@34$5, jednoduše proto, že samotné kontrolní součty nelze pochopit? Ne, a tady je důvod.

Obě 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 jedno 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.

K útoku hrubou silou dochází, když je při uhodnutí hesla provedeno několik náhodných bodnutí. V tomto případě by to 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 nepříliš běžných) hesel a 12345 je jedním z těch běžných hesel.

I když kryptografické hašovací funkce produkují obtížně až nemožné uhodnout kontrolní součty, přesto byste měli používat složité heslo pro všechny vaše 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í s š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. Můžeš šifrovat soubory, které jste uložili aby je nemohl používat kdokoli, kdo k nim přistupuje, nebo je můžete používat vy šifrování přenosu souborů k š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 kryptografických hashovacích funkcí 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á hashovací 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 celý smysl kryptografické hašovací funkce, je vytvořit jedinečné kontrolní součty pro každý vstup dat do ní.

Ke kolizím může dojít proto, že každá kryptografická hashovací funkce vytváří hodnotu pevné délky bez ohledu na vstupní data. Například kryptografická hašovací funkce MD5 generuje 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 a e10adc3949ba59abbe56e057f20f883e pro tři zcela odlišné bloky dat.

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ůznou délku, ale výsledky mají od té doby vždy pouhých 32 znaků Kontrolní součet MD5 byl použit.

Počet kontrolních součtů, které lze vytvořit, není omezen, protože každá drobná 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 jedna kryptografická hašovací funkce, vždy existuje možnost, že narazíte na kolizi.

To je důvod, proč byly vytvořeny další kryptografické hashovací 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.