Secure Hash Algorithm
SHA (Secure Hash Algorithm) je rozšířená hašovací funkce, která vytváří ze vstupních dat výstup (otisk) fixní délky. Otisk je též označován jako miniatura, kontrolní součet (v zásadě nesprávné označení), fingerprint, hash (česky někdy psán i jako haš). Jeho hlavní vlastností je, že ze znalosti otisku je prakticky nemožné rekonstruovat vstupní data; malá změna na vstupu vede k velké změně na výstupu, tj. k vytvoření zásadně odlišného otisku.
Popis
SHA navrhla organizace NSA (Národní bezpečnostní agentura v USA) a vydal NIST (Národní institut pro standardy v USA) jako americký federální standard (FIPS). SHA je rodina pěti algoritmů: SHA-1, SHA-224, SHA-256, SHA-384 a SHA-512. Poslední čtyři varianty se souhrnně uvádějí jako SHA-2. SHA-1 vytvoří obraz zprávy dlouhý 160 bitů. Čísla u ostatních čtyř algoritmů značí délku výstupního otisku v bitech.
SHA se používá u několika různých protokolů a aplikací, včetně TLS a SSL, PGP, SSH, S/MIME a IPsec, ale i pro kontrolu integrity souborů nebo ukládání hesel. Je považována za nástupce hašovací funkce MD5.
Bezpečnost
Hašovací algoritmy jsou „bezpečné“, pokud je velmi obtížné (tj. se současnými prostředky prakticky nemožné):
- najít zprávu, která odpovídá svému otisku
- najít dvě rozdílné zprávy, které mají stejný otisk
Bezpečnost SHA-1 byla poněkud zpochybněna kryptografickými odborníky[1] nebo například i firmou Google,[2] ačkoli nebyly oznámeny žádné útoky na varianty SHA-2. Varianty SHA-2 jsou algoritmicky stejné s algoritmy SHA-1 (ten v roce 2014 používalo 90 % webů). Proto jsou snahy o vývoj vylepšených hašovacích funkcí.[3][4] Veřejná výběrová soutěž pro novou SHA-3 funkci byla formálně oznámena 2. listopadu 2007 ve Federal Register[5] – „NIST usiluje o zavedení jednoho nebo více nových hašovacích algoritmů pomocí veřejné konkurence stejně jako u vývoje pro Advanced Encryption Standard (AES)[6].“ Roku 2012 zvítězil algoritmus Keccak.
SHA-0 a SHA-1
Algoritmus SHA-0 stejně jako algoritmus SHA-1 vytváří 160bitový obraz zprávy s maximální délkou 264 − 1 bitů. Je založen na principech, které používal Ronald L. Rivest z Massachusettského technologického institutu (MIT) v návrhu algoritmů MD4 a MD5.
Původní specifikace algoritmu byla publikována v roce 1993 jako SHA (Secure Hash Standard, FIPS PUB 180) vedením americké normalizační agentury NIST. Tato verze je dnes známá jako SHA-0. NSA ji stáhla krátce po vydání a nahradila ji upravenou verzí, vydanou v roce 1995 (FIBS PUB 180-1) obvykle uváděnou jako SHA-1. SHA-1 se liší od SHA-0 pouze jednou bitovou rotací provedenou pomocí jednocestné funkce. Změna byla udělána podle NSA. Oprava vady v původním algoritmu zvyšuje šifrovací bezpečnost. NSA neposkytla žádné další objasnění nebo vysvětlení, jaká vada byla opravena. Slabé stránky byly následovně ohlášeny v SHA-0 i v SHA-1. SHA-1 se zdá být více obranyschopná proti útokům, to podporuje tvrzení NSA, že změnami stoupá bezpečnost.
V roce 2005 byl nalezen útok na SHA-1, což naznačuje, že SHA-1 nebude pro budoucí použití bezpečná.[7] Proto americká vládní instituce NIST (Národní institut standardů a technologie) vyžaduje, aby vládní agentury po roce 2010 používaly SHA-2.[8] Přestože je SHA-2 algoritmicky podobná SHA-1, nebyly na SHA-2 dosud ohlášeny žádné úspěšné útoky, avšak z jejich podobnosti vyplývá jisté riziko. V roce 2012 proto zvolil NIST algoritmus Keccak pro nadcházející použití jako funkci SHA-3.[9][10] V roce 2013 oznámila firma Microsoft, že v roce 2017 budou označeny SHA-1 za zastaralé a nebudou dále v systémech Windows NT pro potřeby SSL akceptovány.[11] Roku 2015 vydal NIST standard pro SHA-3.[12]
SHA-2
NIST zveřejnila čtyři další hashovací funkce SHA, které jsou pojmenovány podle své délky (v bitech): SHA-224, SHA-256, SHA-384 a SHA-512. Algoritmy jsou společně označovány jako SHA-2.
Algoritmy byly poprvé zveřejněny v roce 2001 v návrhu standardu FIPS PUB 180-2, který obsahoval i SHA-1 a byl vydán jako oficiální standard v roce 2002. V únoru 2004 byla zveřejněna změna, která definovala další variantu SHA-224, která odpovídá délkou klíče dvou-klíčovému Triple DES. Tyto varianty jsou patentovány v patentu US 6829355 a Spojené státy je uvolnily k použití bez licenčních poplatků.
Zastaralý standard SHA-1 je průběžně nahrazován novějšími hashovacími funkcemi z rodiny SHA-2. Například SHA-256 se používá k ověřování softwarových balíků linuxové distribuce Debian.[13] SHA-256 a SHA-512 jsou navrženy pro použití v DNSSEC. Rovněž datové schránky v České republice používají SHA-2.[14] Podle směrnice NIST mají americké vládní agentury přestat používat SHA-1 po roce 2010. Také dokončení standardizace SHA-3 mohou urychlit odchod od SHA-1.
Prolamování
Ideální hašovací funkce porušující první výše uvedené kritérium, nalezení zprávy, která koresponduje se svým otiskem, může být použita jako hrubá síla při hledání 2L výpočtů, kde L je velikost bitů v otisku zprávy. Toto se nazývá vzorový útok (preimage attack). Druhé kritérium, nalezení dvou rozdílných zpráv, které mají stejný otisk, nazýváme kolize. Ta vyžaduje jen 2L/2 výpočtů k provedení tzv. narozeninového útoku (birthday attack). Pro pozdější důvody síly hašovací funkce je obvyklé srovnání se symetrickou šifrou o poloviční délce otisku zprávy. Z tohoto důvodu se SHA-1 považuje za hašovací algoritmus se sílou 80 bitů. Kryptoanalytici vytvořili kolizní pár pro SHA-0 a našli algoritmus, který může vytvořit SHA-1 kolizi ve značně méně než ve zmiňovaných 280 výpočtech.
Zdá se, že tento případ rozpoutal častou migraci k silnějším hashům. Některé z aplikací, které používají šifrovací hashe jako heslo paměti, jsou jen minimálně ovlivněny kolizním útokem. Postavení hesla, které použijeme pro účet, vyžaduje vzorový útok a přístup k hashi z originálního hesla, které může a nemusí být triviální. Obrácené šifrovací heslo není možné vytvořit při útoku.
V případě podpisu dokumentu, nemůže útočník jednoduše padělat podpis z již existujícího dokumentu. Útočník by měl vytvořit dva dokumenty, jeden neškodný a druhý škodlivý, a požádat držitele privátního klíče o podpis na neškodném dokumentu. Jsou zde praktické okolnosti, kdy je to možné použít.
Reference
V tomto článku byly použity překlady textů z článků SHA-1 na anglické Wikipedii a SHA na anglické Wikipedii.
- http://www.schneier.com/blog/archives/2005/02/cryptanalysis_o.html
- https://konklone.com/post/why-google-is-hurrying-the-web-to-kill-sha-1 - Why Google is Hurrying the Web to Kill SHA-1
- http://www.schneier.com/blog/archives/2005/11/nist_hash_works_4.html
- http://www.heise-security.co.uk/articles/75686/2
- http://csrc.nist.gov/groups/ST/hash/documents/FR_Notice_Nov07.pdf
- www.csrc.nist.gov [online]. [cit. 10-01-2008]. Dostupné v archivu pořízeném dne 05-02-2008.
- Schneier on Security: Cryptanalysis of SHA-1
- Archivovaná kopie. csrc.nist.gov [online]. [cit. 2014-05-12]. Dostupné v archivu pořízeném dne 2011-06-25.
- Schneier on Security: NIST Hash Workshop Liveblogging (5)
- Hash cracked – heise Security
- SHA1 Deprecation Policy [online]. Microsoft, 2013-11-12 [cit. 2013-11-14]. Dostupné v archivu pořízeném dne 2013-11-13. (anglicky)
- http://crypto-world.info/news/index.php?prispevek=22544&sekce=s - NIST vydal standard pro SHA3 (FIPS - 202)
- Debian codebase in Google Code. google.com [online]. [cit. 2009-12-30]. Dostupné v archivu pořízeném dne 2011-11-07.
- Datové schránky přešly na SHA-2