Hashovací funkce
Z MiS
(Rozdíly mezi verzemi)
m (Přidán zdroj.) |
(Doplněn příklad na začátek. Rozepsány scénáře použití. Přidány on-line stránky a příkazy v OS.) |
||
Řádka 4: | Řádka 4: | ||
== Hashovací funkce == | == Hashovací funkce == | ||
Je to matematické funkce s následujícími vlastnostmi: | Je to matematické funkce s následujícími vlastnostmi: | ||
− | *vstup: | + | * vstup: libovolná posloupnost byte (zpráva, soubor,...) |
− | *výstup: číslo pevné délky (daný počet bitů) | + | * výstup: číslo pevné délky (daný počet bitů) |
* splňuje [[Hashovací_funkce#Požadavky | požadavky]] viz dále. | * splňuje [[Hashovací_funkce#Požadavky | požadavky]] viz dále. | ||
− | + | ||
<div class="Poznamka">Různé vstupní texty tedy mohou generovat stejný výstup.</div> | <div class="Poznamka">Různé vstupní texty tedy mohou generovat stejný výstup.</div> | ||
+ | Výstup hashovací funkce nazýváme „otisk“ (fingerprint). | ||
+ | * Výstup obvykle zapisujeme v šestnáctkové soustavě. | ||
− | == Požadavky == | + | <div class="Priklad">Jako příklad použijme funkci SHA256: |
+ | * pro vstupní text: <code>pokus</code> | ||
+ | *je otiskem 256tibitové číslo: <code>483266AE0E0F9CF73864117EE7A2B14A3FCAF0158487F7E281C7A0BC0D9712CD.</code> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | == 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. | ||
+ | |||
+ | <div class="Poznamka"> | ||
+ | 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|požadavky]] by taková situace měla být nepravděpodobná. | ||
+ | </div> | ||
+ | |||
+ | === Elektronický (digitální) podpis === | ||
+ | * Viz [[Elektronický 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é: | Aby hashovací funkce plnila svou funkcí, musí být výpočetně složité: | ||
* získat z otisku vstupní text | * získat z otisku vstupní text | ||
Řádka 19: | Řádka 56: | ||
* stejný vstup generuje stejný otisk | * stejný vstup generuje stejný otisk | ||
* podobné vstupy generují velmi odlišné otisky (podobnost vstupů se neprojeví v podobnosti otisků) | * podobné vstupy generují velmi odlišné otisky (podobnost vstupů se neprojeví v podobnosti otisků) | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<div class="Poznamka"> | <div class="Poznamka"> | ||
Řádka 36: | Řádka 63: | ||
</div> | </div> | ||
− | == Příklady == | + | |
+ | == Příklady hashovacích funkcí == | ||
; SHA | ; SHA | ||
* Verze SHA-1, SHA-2 (délky klíčů 224, 256 a 512 bitů). | * Verze SHA-1, SHA-2 (délky klíčů 224, 256 a 512 bitů). | ||
Řádka 55: | Řádka 83: | ||
* Generování otisku souboru nebo zadaného textu. | * Generování otisku souboru nebo zadaného textu. | ||
* Podporuje mnoho hashovacích funkcí. | * Podporuje mnoho hashovacích funkcí. | ||
+ | * Odkaz ke stažení: [https://www.slavasoft.com/hashcalc/ https://www.slavasoft.com/hashcalc/] | ||
+ | ; On-line generátory otisků | ||
+ | * [http://www.xorbin.com/tools/sha256-hash-calculator XorBin.com → SHA256 Hash Calculator] | ||
+ | * [https://www.md5online.org/ → 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: <code>Get-FileHash ''soubor'' [-Algorithm MD5]</code> | ||
+ | Get-FileHash ''setup.exe'' | ||
== Zdroje == | == Zdroje == | ||
* [https://security.blogoverflow.com/2013/09/about-secure-password-hashing/ Security.BlogOverflow.com → About secure password hashing] | * [https://security.blogoverflow.com/2013/09/about-secure-password-hashing/ Security.BlogOverflow.com → About secure password hashing] |
Verze z 30. 3. 2020, 08:00
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