Hashovací funkce
Z MiS
Obsah |
Hashovací funkce
Je to matematické funkce s následujícími vlastnostmi:
- vstup: libovolná posloupnost byte (zpráva, soubor,...)
- výstup: číslo pevné délky (daný počet bitů)
- splňuje požadavky viz dále.
Různé vstupní texty tedy mohou generovat stejný výstup.
Výstup hashovací funkce nazýváme „otisk“ (fingerprint).
- Výstup obvykle zapisujeme v šestnáctkové soustavě.
Jako příklad použijme funkci SHA256:
- pro vstupní text:
pokus
- je otiskem 256tibitové číslo:
483266AE0E0F9CF73864117EE7A2B14A3FCAF0158487F7E281C7A0BC0D9712CD.
Použití
Ukládání hesel
- Na servery se dnes běžně přihlašujeme. To ale znamená, že naše heslo musí být někde na serveru uloženo.
- Přitom ale nechceme, aby správce serveru mohl heslo vidět. Vadí nám také, že kdyby se útočník dostal k databázi hesel, mohl by hesla přečíst a zveřejnit, nebo zneužít.
- Proto do databáze ukládáme pouze otisk hesla, vygenerovaný hashovací funkcí.
- Postup při přihlašování
- Zadáte do vstupního okénka heslo.
- Počítač vygeneruje otisk hesla a porovná ho s otiskem, který je v databázi již uložen.
- Pokud se otisky shodují, přihlásí vás.
Všimněte si, že teoreticky se může stát, že někdo zadá jiný text než vaše heslo, a přesto ho systém přihlásí, protože se náhodou budou shodovat otisky vašeho hesla a zadaného textu.
U dobrých hashovacích funkcí splňujících požadavky by taková situace měla být nepravděpodobná.
Elektronický (digitální) podpis
Ověření správnosti staženého souboru
- Výrobce software na webu publikuje kromě souboru ke stažení i jeho otisk.
- Dnes je celkem běžné, že pro úsporu přenosové kapacity může prohlížeč soubor stáhnout z jiného, bližšího serveru (tzv. zrcadla/mirror), kde je kopie dokumentu také uložená. Přitom by se ale teoreticky mohlo stát, že kopie bude záměrně poškozená, například do ní někdo přidá malware.
- Po stažení souboru ze serveru třetí strany proto vygenerujeme otisk staženého souboru a porovnáme ho s originálním otiskem od výrobce software.
- Pokud by s dokumentem někdo manipuloval, otisky by se lišily. Zároveň jsme zbytečně nezatěžovali server výrobce SW, protože otisk je malý (obvykle do 512 B), takže jeho stažení je rychlé.
- Na velikosti původního souboru přitom nezáleží, ten může mít klidně několik GB. Velikost otisku je pořád stejná.
Požadavky na hashovací funkce
Aby hashovací funkce plnila svou funkcí, musí být výpočetně složité:
- získat z otisku vstupní text
- vyrobit (libovolný) text se zadaným otiskem
- vyrobit dva texty se stejným otiskem
Dále:
- stejný vstup generuje stejný otisk
- podobné vstupy generují velmi odlišné otisky (podobnost vstupů se neprojeví v podobnosti otisků)
Při použití hashovacích funkcí neříkejte, že zprávu zašifrujeme!!!
Viz také: Kódování-šifrování-hashování
Příklady hashovacích funkcí
- SHA
- Verze SHA-1, SHA-2 (délky klíčů 224, 256 a 512 bitů).
- V nových aplikacích se nedoporučuje používat SHA-1 (2012: V tuto chvíli považována ještě za bezpečnou, ale délka klíče 160 bitů nejspíš do budoucna bezpečná nebude.)
- MD5
- dnes už není považována za bezpečnou
- 128bitový otisk
- Tiger
- Stejní autoři jako šifrovací metoda Serpent
Zkuste si spočítat hashovací funkci SHA 256 pro své jméno a příjmení, nebo pro jiný text:
Nástroje
- HashCalc
- Generování otisku souboru nebo zadaného textu.
- Podporuje mnoho hashovacích funkcí.
- Odkaz ke stažení: https://www.slavasoft.com/hashcalc/
- On-line generátory otisků
- XorBin.com → SHA256 Hash Calculator
- → MD5 on-line
- ... a další.
- Generátory v příkazovém řádku
- V GNU/Linuxu bývají zahrnuty příkazy pro generování otisků
sha256 text
- Ve Windows Powershellu je commandlet:
Get-FileHash soubor [-Algorithm MD5]
Get-FileHash setup.exe