Hashovací funkce

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
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: libovolný text
+
* 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.
Výstup nazýváme „otisk“ (fingerprint).
+
 
 
<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&nbsp;databázi hesel, mohl by hesla přečíst a&nbsp;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&nbsp;porovná ho s&nbsp;otiskem, který je v&nbsp;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&nbsp;přesto ho systém přihlásí, protože se náhodou budou shodovat otisky vašeho hesla a&nbsp;zadaného textu.
 +
 
 +
U&nbsp;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&nbsp;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&nbsp;porovnáme ho s&nbsp;originálním otiskem od výrobce software.
 +
* Pokud by s&nbsp;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&nbsp;otisku vstupní text
 
* získat z&nbsp;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ů)
 
 
== Použití ==
 
* ukládání hesel
 
* elektronický (digitální) podpis
 
* ověření správnosti staženého dokumentu
 
** na stránkách je dokument a jeho otisk
 
** stáhneme dokument
 
** vygenerujeme otisk
 
** porovnáme se správným otiskem.
 
  
 
<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 &rarr; SHA256 Hash Calculator]
 +
* [https://www.md5online.org/ &rarr; MD5 on-line]
 +
* ... a další.
  
 +
; Generátory v&nbsp;příkazovém řádku
 +
* V&nbsp;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 &rarr; About secure password hashing]
 
* [https://security.blogoverflow.com/2013/09/about-secure-password-hashing/ Security.BlogOverflow.com &rarr; About secure password hashing]

Verze z 30. 3. 2020, 08:00


Obsah

Hashovací funkce

Je to matematické funkce s následujícími vlastnostmi:

Různé vstupní texty tedy mohou generovat stejný výstup.

Výstup hashovací funkce nazýváme „otisk“ (fingerprint).

Jako příklad použijme funkci SHA256:
  • pro vstupní text: pokus
  • je otiskem 256tibitové číslo: 483266AE0E0F9CF73864117EE7A2B14A3FCAF0158487F7E281C7A0BC0D9712CD.


Použití

Ukládání hesel

Postup při přihlašování

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


Požadavky na hashovací funkce

Aby hashovací funkce plnila svou funkcí, musí být výpočetně složité:

Dále:

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
MD5
Tiger
Zkuste si spočítat hashovací funkci SHA 256 pro své jméno a příjmení, nebo pro jiný text:

XorBin.com → SHA256 Hash Calculator


Nástroje

HashCalc
On-line generátory otisků
Generátory v příkazovém řádku
sha256 text
Get-FileHash setup.exe

Zdroje

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje