Vlastnosti hashů
- Hashovací funkce pro daný vstupní řetězec vygeneruje vždy stejný výstupní hash.
- Hashovací funkce pro různá data vždy produkuje hash o stejné délce.
- Z výstupního hashe nelze nijak získat původní vstupní data (hashovací funkce je skutečně jednosměrná).
- 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ě.
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.