Jan Štráfelda - Průvodce internetovými projekty
celá ČR (přes video)  |  776 678 044  |  jan@strafelda.cz

Hash

Jako hash označují vývojáři krátký řetězec písmen a číslic, který vznikne tím, že proženeme jiný řetězec (vstupní data) tzv. hashovací funkcí. Jde o jednosměrnou funkci, kdy řetězec na vstupu vygeneruje vždy stejný hash, ale při znalosti hashe nelze zpětně zjistit, o jaký řetězec se jednalo. Hash tedy funguje podobně jako unikátní otisk vstupních dat.

Hashování se uplatňuje v asymetrické kryptografii a důležité je také při vývoji aplikací, kde slouží například k ukládání hesel nebo k ověřování integrity dat.

Vlastnosti hashů

  1. Hashovací funkce pro daný vstupní řetězec vygeneruje vždy stejný výstupní hash.
  2. Hashovací funkce pro různá data vždy produkuje hash o stejné délce.
  3. Z výstupního hashe nelze nijak získat původní vstupní data (hashovací funkce je skutečně jednosměrná).
  4. Nelze nalézt různá vstupní data pro tentýž výstupní hash (pokud se je podaří nalézt, říká se tomu kolize a znamená to, že hashovací funkce není bezpečná).

E-book za mail

Získejte podrobný návod Jak na e-mail marketing (52 stran). Více informací.

Žádný spam, jen užitečný obsah. Newsletter posílám cca 8× ročně. Odhlásíte se kdykoliv.

Kdy se hash hodí – příklady použití

Ukládání hesel do databáze

Kdybychom heslo uložili do databáze v čisté podobě, tak jak ho zadává uživatel, hrozí, že kdokoliv získá přístup k databázi (jiný programátor, správce serveru, útočník zvnějšku apod.), dozví se tak všechna hesla našich uživatelů. Proto heslo proženeme hashovací funkcí a uložíme si až výsledný hash, například z hesla „ahoj“ se tak stane řetězec 79c2b46ce2594ecbcb5b73e928345492. A z něj není možné zpětně zjistit heslo, které by pak mohl útočník využít například k přihlášení k jiné službě.

Rozdíl mezi hashováním a šifrováním
Rozdíl mezi hashováním a šifrováním v praxi.

Celá problematika ukládání hesel je však pochopitelně mnohem složitější. Například ve výše uvedeném příkladu by útočník mohl heslo zjistit poměrně snadno – prohnal by danou hashovací funkcí postupně celý slovník a získal by tzv. duhovou tabulku (angl. rainbow table), v níž by pak hash snadno vyhledal a podle něj určil i samotné heslo. Tyto tabulky již mívají útočníci připravené pro nejrůznější kombinace písmen a číslic. A mnohé hashe lze dokonce snadno vygooglit.

Proto se ještě před zaheshováním přidává k heslu tzv. kryptografická sůl, další řetězec unikátní pro každé heslo (například login), díky níž je pak nelze využít předpřipravené duhové tabulky k získání hesla z hashe. Útočník by musel znát tuto sůl (což je pravděpodobné, má-li databázi, mohl se dostat i ke zdrojovým kódům aplikace) a z ní by musel spočítat vlastní tabulky. Což však při dostatečné délce hesla (delší než 12) dnes představuje několik staletí výpočtů i při použití těch nejvýkonnějších počítačů.

Verifikace obsahu e-mailu

Věnujete-li se e-mail marketingu, patrně víte, že pro vyšší doručitelnost musíte mít zprávy podepsané pomocí standardu DKIM. Ten umožňuje ověřit odesílatele a integritu e-mailu. Dělá to tak, že vytvoří hash pro celý e-mail (tělo i hlavičky) a ten pak pomocí soukromého klíče vytvoří podpis, který vloží do speciální hlavičky e-mailu.

SMTP server, který zprávu přijímá, pak udělá totéž – vytvoří hash z e-mailu (bez té speciální hlavičky), pomocí veřejného klíče, který si stáhne z DNS záznamů domény, vytvoří podpis. A pokud tento podpis odpovídá podpisu ve speciální hlavičce, je jisté, že obsah e-mailu nikdo nezměnil.

Nejznámější hashovací funkce

Při vývoji internetových aplikací se můžete nejčastěji setkat s následujícími třemi funkcemi pro vytváření hashe. Implementují je přímo různé programovací jazyky, například PHP:

  • MD5 – algoritmus vytváří otisk o velikosti 32 znaků. Vznikl v roce 1991, dlouhou dobu se používal k ukládání hesel v internetových aplikacích. Od roku 1996 již není považován za dostatečně bezpečný, od roku 2004 dokonce za velmi nebezpečný, protože lze velmi rychle najít dva vstupní řetězce, pro které vytvoří shodný otisk. Proto se doporučuje tuto funkci vůbec nepoužívat.
  • SHA1 – nástupce hashovací funkce MD5, která produktuje výstup o délce 40 znaků, vznikl v roce 1995, v roce 2005 však byla nalezena jeho slabina a jeho použití pro ukládání hesel tak není dále doporučováno. Hodí se však stále pro ověřování integrity dat (zde je výhodou, že je funkce rychlá).
  • Bcrypt – hashovací funkce založená na šifře Blowfish, vznikla v roce 1999. Dnes se doporučuje k ukládání hesel v aplikacích, neboť v sobě zahrnuje kryptografickou sůl a hlavně ji lze nastavit tak, že se vykonává opakovaně, tedy pomalu – a tím značně zvyšuje ochranu proti útokům hrubou silou.

O autorovi

Jsem Jan Štráfelda a působím jako průvodce online projekty. Potřebujete předělat web či e-shop? Nebo posunout internetový marketing? Poradím s obojím. 14 let budování vlastní digitální agentury mě skvěle vyškolilo – a rád se o zkušenosti podělím.

S čím také umím pomoci:

Své znalosti sdílím i na LinkedIn. Přidejte se k 3 881 marketérům, kteří z nich již pravidelně těží.