SHA-2, MD5 či BLAKE3: víte, jaké hashovací algoritmy jsou bezpečné?
Šifrování dat je pro kybernetickou bezpečnost zásadní. Výrazně totiž ztěžuje hackerům proces odcizení citlivých dat, hesel nebo čtení cizích zpráv. Hlavní roli při převodu původního řetězce do zašifrované podoby hrají hash algoritmy. Těch ovšem existuje celá řada a některé z nich obsahují závažné zranitelnosti. Víte, které algoritmy raději nepoužívat?
Přes hash algoritmus se provádí jednosměrná matematická operace, která mění vstupní data do unikátního řetězce znaků – tzv. hash. Ten má obvykle, v závislosti na svém typu, předem daný počet znaků a bitovou velikost. Hash algoritmy lze využít k šifrování hesel, zpráv nebo třeba k ověřování kryptoměnových transakcí.
Zabezpečete svá firemní data
Hashovací algoritmy se používají i pro šifrování v rámci VPN připojení. Vaše zprávy, soubory a další data tak budou chráněna před odcizením.
Aby byl hashovací algoritmus použitelný, musí splňovat určité vlastnosti. V prvé řadě by určitá hodnota na vstupu měla vždy odpovídat stejnému hashi na výstupu. Například vstupní hodnota „heslo123” bude přes hash algoritmus typu SHA-1 pokaždé převedena do této konkrétní podoby: „849B28DCBE2C37B2C60D994E5DBD4B21535D0701”.
Rovněž by mělo platit, že dva různé vstupy nemohou po zašifrování dávat stejný výsledek, respektive že pro každý unikátní řetězec na vstupu bude vždy vytvořený jedinečný hash. Pokud tato podmínka není splněna, jedná se o tzv. kolizi. Celý výpočet hashe musí být také rychlý, aby v praxi zbytečně nezpomaloval například proces přihlašování nebo odesílání zpráv.
Pro bezpečnost hashe je navíc zásadní, aby nebylo možné odhadnout, jaké slovo mohlo figurovat na vstupu před jeho zašifrováním. Je proto důležité, aby i při drobné změně původního textu byl výsledný hash nepředvídatelně odlišný. Například u výrazu „heslo1234” bude odpovídající SHA-1 hash vypadat takto: „A94FA3469C96D6938B0A8DAFC50D73C47309DB5E”. Při srovnání s hashem vytvořeným z podobného řetězce „heslo123” (viz výše) zde nelze vysledovat žádnou výraznější podobnost či pravidelnost.
MD5 algoritmus už není bezpečný
Matematici a IT specialisté vymysleli celou řadu hashovacích algoritmů. Žádný z nich ale není úplně dokonalý. Některé se však alespoň blíží ideálu, který naplňuje vlastnosti popsané výše. Jednotlivé typy hash algoritmů se od sebe liší například velikostí výsledného hashe, pravděpodobností kolize a využitelností pro kryptografii (šifrování).
Na začátku devadesátých let byl vytvořen známý hashovací algoritmus MD5 (Message-Digest). Původně se sice používal pro kryptografii, časem se ale ukázalo několik zásadních zranitelností a dnes už je MD5 pro bezpečné šifrování nedostatečný.
Stále se ale hojně používá pro nekryptografické účely, například pro kontrolu integrity dat jako pojistka proti neúmyslnému poškození. Výsledný MD5 hash má 128 bitů a je dlouhý 32 znaků, je proto méně náročný na výpočetní výkon než hashovací algoritmy ze skupiny SHA, což je i důvod proč se MD5 stále používá.
Hlavní zranitelnost MD5 představují případy, v nichž je dvěma rozdílným vstupním řetězcům přidělen totožný hash. Vznikají tak četné kolize, které je navíc možné dohledat i na běžně výkonném počítači.
Přestože jej bezpečnostní experti jednoznačně označili jako nevhodný pro šifrování, stále je na mnoha stránkách pro tento účel používán. Podle reportu od zpravodajského IT webu ZDNet používala v roce 2019 zhruba čtvrtina CMS systémů algoritmus MD5 pro hashování hesel.
SHA hash algoritmy jsou nejpoužívanější
Zranitelný MD5 začal být z velké části nahrazován algoritmy patřící do skupiny SHA (Secure Hash Algorithm). Ty byly navrženy Národní bezpečnostní agenturou v USA (NSA) a vytvořeny ve spolupráci s Národním institutem pro standardy v USA (NIST).
První verze z rodiny SHA algoritmů byla uvedena v roce 1993 a dnes je označovaná jako SHA-0. Tuto verzi však NSA rychle stáhla a nahradila upravenou SHA-1. Obě varianty vycházely z podobných principů jako MD5 a stejně jako u MD5 se v průběhu času ukázalo, že obsahují odhalitelné kolize, takže nejsou vhodné pro kryptografické užití.
Od roku 2005 proto přestal být SHA-1 považován za bezpečný a v roce 2011 doporučil NIST jeho nahrazení hash algoritmy SHA-2 nebo SHA-3. Ačkoliv by se SHA-1 už neměl k šifrování používat, stále slouží například k identifikaci verzí v Gitu.
U skupiny algoritmů SHA-2 dochází ve výpočtu hashe k výrazným úpravám oproti SHA-1 či MD5, díky čemuž nedochází ke kolizím. Pod SHA-2 spadá šest konkrétních algoritmů, které jsou označeny podle své velikosti v bitech – SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 a SHA-512/256. U posledních dvou jmenovaných je velikost 224, respektive 256 bitů a jedná se o zkrácené verze SHA-512.
Hash algoritmus SHA-2, narozdíl od SHA-1 a MD5, splňuje kryptografické požadavky. Je tak široce používán v bezpečnostních protokolech a aplikacích jako je například SSL, TLS, PGP nebo SSHSSHSSH (Secure Shell) je protokol pro šifrovanou komunikaci v počítačové síti.více.
Algoritmus SHA-256 se také využívá pro ověřování softwarových balíčků u OS Debian nebo k podepisování e-mailů pomocí validační technologie DKIM. Některé kryptoměny, včetně Bitcoinu, ověřují s pomocí SHA-256 míru vynaloženého výpočetního výkonu (tzv. PoW – Proof of Work).
Společně s SHA-512 se pak SHA-256 používá pro bezpečné hashování hesel v unixových a linuxových operačních systémech. Oba algoritmy figurují také v procesu ověřování u DNSSEC (Domain Name System Security Extensions).
Nejnovější hash algoritmus z této skupiny – SHA-3 – byl poprvé zveřejněn v roce 2015 a není odvozený od SHA-2, ale od algoritmu Keccak, který vyhrál veřejnou soutěž vypsanou NIST. Jeho síla spočívá především ve vícekolové permutaci při vytváření hashe. Algoritmus SHA-3 má, podobně jako SHA-2, několik variant, které se označují podle počtu bitů, příkladem může být SHA3-256 nebo SHA3-512.
Skupina hashovacích algoritmů SHA-3 nemá za cíl nahradit SHA-2, ale spíš ho doplnit a přinést nové možnosti. Jejich hlavní výhodou je vyšší rychlost v hardwarových implementacích. Jsou proto vhodné například pro zabezpečení různých vestavěných systémů nebo pro komunikaci zařízení v rámci IoT.
BLAKE, RIPEMD a Whirlpool
Jedním z 5 nejvážnějších kandidátů na základ pro SHA-3 byl také hash algoritmus BLAKE. Ten má podobně jako SHA různé varianty podle velikosti v bitech (třeba BLAKE-224, BLAKE-256 či BLAKE-512). Z původního algoritmu BLAKE se postupem času rovněž vytvořily další modernější verze, z nichž byl jako poslední uveden v roce 2020 BLAKE3.
Algoritmy z rodiny BLAKE šifrují vstupní řetězec v několika kolech. Právě počet kol je hlavním rozdílem mezi novým BLAKE3 (7 kol) a jeho předchůdcem BLAKE2 (12 kol) či původnímu algoritmu BLAKE (16 kol). Díky tomu vypočítává BLAKE3 výsledný hash mnohem rychleji, aniž by ztrácel na bezpečnosti.
Dalších hashovacích algoritmů existuje celá řada. Příkladem může být RIPEMD, který vychází z podobných principů jako MD4 nebo SHA-1, narozdíl od nich v něm ale nebyly zatím nalezeny podstatnější zranitelnosti. Od algoritmu RIPEMD byly také odvozeny varianty s různou bitovou velikostí.
Používaný je také algoritmus Whirlpool vytvářející hashe o velikosti 512 bitů a lze jím zašifrovat zprávu o maximálním počtu znaků, který je přibližně roven číslu 1,15, za nímž je 77 nul. To znamená, že třeba i knihu s biliardami stránek lze zašifrovat do unikátního standardizovaného hashe o 128 hexadecimálních znacích.
Přehled oblíbených hash algoritmů
Rok vydání | Bitové velikosti | Odvozeno od | |
MD5 | 1992 | 128 | MD4 |
SHA-1 | 1995 | 160 | SHA-0 |
SHA-2 | 2002/2004 (dle bitové varianty) | 224, 256, 384 nebo 512 | SHA-1 |
SHA-3 | 2008 | libovolná | Keccak |
BLAKE | 2008 | 224, 256, 384 nebo 512 | ChaCha20 |
BLAKE2 | 2012 | max. 512 ?Pro 64bitové systémy /max. 256?Pro 32bitové systémy | BLAKE |
BLAKE3 | 2020 | libovolná (výchozí je 256) | BLAKE2 |
RIPEMD | 1992/1996 (dle bitové varianty) | 128, 160, 256 nebo 320 | MD4 |
Whirlpool | 2004 | 512 | Square, AES |
Proč se vyhnout nejčastějším heslům?
Pokud se hacker dostane k databázi hashů, jež představují hesla uživatelů, neměl by být schopen je převést do vstupního řetězce. Pokud však uživatel používá slabé heslo, může ho hacker prolomit automatizovaným zkoušením všech možností dokud se hashe nebudou shodovat.
O úspěchu či neúspěchu hackera rozhoduje náhodnost, délka řetězce a pestrost používaných znaků v hesle uživatele. Zatímco krátké heslo v podobě konkrétního slova složeného jen z malých písmen zjistí hacker i s průměrným výpočetním výkonem a jednoduchým skriptem za pár sekund, náhodně generovaná dlouhá hesla využívající malá a velká písmena, čísla a speciální znaky by i s vysokým výpočetním výkonem dešifroval klidně roky či dokonce desetiletí.
Vůbec nejjednodušší je pak uhádnout často používaná hesla. Jejich hashe jsou totiž známé a není tak problém dohledat, že při šifrování SHA-256 bude mít heslo „123456” hash: „8D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92”.
Problematice bezpečných hesel a jejich skladování jsme se podrobněji věnovali v článku o password managerech. Na internetu rovněž existuje mnoho online nástrojů, kde si můžete zkusit vygenerovat hash na libovolný řetězec slov, například PasswordGenerator.net.
Hashovací algoritmy hrají důležitou roli nejen u hesel, ale používají se například i pro ověřování transakcí u kryptoměn, v SSL certifikátech nebo pro šifrování v rámci VPN komunikace. Při výběru konkrétních technologií či nástrojů proto vždy dbejte na to, aby neobsahovaly zranitelné hashovací algoritmy jako třeba MD5 nebo SHA-1. Ty se hodí jen pro nekryptografické účely, jako je třeba identifikace verzí v Gitu nebo záznamů v databázi.