Jan Štráfelda - Průvodce online -projektem
Praha/Mělník  |  776 678 044  |  jan@strafelda.cz  |  Pošlete mi poptávku

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á).

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ímRozdí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:

Zaujal jsem vás? Přihlašte se do mailingu a mé další texty už vám neuniknou:

 

Zprávy posílám cca 8 × ročně. Odhlásit se můžete kdykoliv. Více informací.