Hashovací funkce

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Přidán požadavek - výpočet hashovací funkce nesmí být příliš náročný. Zpřehlednění stránky, upřesnění použití, přidány funkce programovacích jazyků.)
m (Nesmí být ani příliš málo náročné.)
Řádka 60: Řádka 60:
 
Aby hashovací funkce plnila svou funkcí, potřebujeme, aby splňovala následující požadavky:
 
Aby hashovací funkce plnila svou funkcí, potřebujeme, aby splňovala následující požadavky:
  
; 1) Musí být výpočetně složité získat z otisku vstupní text.
+
; 1) Musí být výpočetně náročné získat z otisku vstupní text.
 
: Například aby z otisku v databázi nešlo zjistit původní heslo.
 
: Například aby z otisku v databázi nešlo zjistit původní heslo.
  
; 2) Musí být výpočetně složité vyrobit (libovolný) text se zadaným otiskem
+
; 2) Musí být výpočetně náročné vyrobit (libovolný) text se zadaným otiskem
 
: Potom by ten, kdo zná otisk hesla, sice nemohl zjistit heslo, ale vyrobil by si nějaký vstup, který bude mít stejný otisk jako heslo.
 
: Potom by ten, kdo zná otisk hesla, sice nemohl zjistit heslo, ale vyrobil by si nějaký vstup, který bude mít stejný otisk jako heslo.
  
; 3) Musí být výpočetně složité vyrobit dva texty se stejným otiskem
+
; 3) Musí být výpočetně náročné vyrobit dva texty se stejným otiskem
 
: Pak by jeden text šel podsunout za druhý, aniž by se to poznalo pomocí otisku.
 
: Pak by jeden text šel podsunout za druhý, aniž by se to poznalo pomocí otisku.
  
; 4) Výpočet hashovací funkce nesmí být příliš výpočetně náročný.
+
; 4) Výpočet hashovací funkce (získání otisku ze vstupu) nesmí být příliš výpočetně náročný.
 
: Například: Pokud se k velkým serverům přihlašují desítky uživatelů, ověřování otisků nesmí přetížit server.
 
: Například: Pokud se k velkým serverům přihlašují desítky uživatelů, ověřování otisků nesmí přetížit server.
 +
: Na druhou stranu postup nesmí být ani příliš rychlý, protože pak by bylo snazší útočit „hrubou silou“ &mdash; zkoušet postupně různé vstupy tak dlouho, až objevím vstup se správným otiskem.<br />(Například pokud získám otisk hesla, pak hledat heslo postupným zkoušením všech možných vstupů.)
  
 
; 5) Stejný vstup musí generovat vždy stejný otisk
 
; 5) Stejný vstup musí generovat vždy stejný otisk

Verze z 6. 4. 2020, 08:35


Při použití hashovacích funkcí neříkejte, že zprávu zašifrujeme!!!

Viz také: Kódování-šifrování-hashování


Obsah

Hashovací funkce

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

Různé vstupní texty tedy mohou generovat stejný výstup. Nelze se tomu úplně vyhnout, ale snažíme se, aby to bylo co nejméně pravděpodobné. Označuje se to jako kolize.

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í, potřebujeme, aby splňovala následující požadavky:

1) Musí být výpočetně náročné získat z otisku vstupní text.
Například aby z otisku v databázi nešlo zjistit původní heslo.
2) Musí být výpočetně náročné vyrobit (libovolný) text se zadaným otiskem
Potom by ten, kdo zná otisk hesla, sice nemohl zjistit heslo, ale vyrobil by si nějaký vstup, který bude mít stejný otisk jako heslo.
3) Musí být výpočetně náročné vyrobit dva texty se stejným otiskem
Pak by jeden text šel podsunout za druhý, aniž by se to poznalo pomocí otisku.
4) Výpočet hashovací funkce (získání otisku ze vstupu) nesmí být příliš výpočetně náročný.
Například: Pokud se k velkým serverům přihlašují desítky uživatelů, ověřování otisků nesmí přetížit server.
Na druhou stranu postup nesmí být ani příliš rychlý, protože pak by bylo snazší útočit „hrubou silou“ — zkoušet postupně různé vstupy tak dlouho, až objevím vstup se správným otiskem.
(Například pokud získám otisk hesla, pak hledat heslo postupným zkoušením všech možných vstupů.)
5) Stejný vstup musí generovat vždy stejný otisk
(To platí u každé matematické funkce.)
Pokud zadáme správné heslo, otisk se samozřejmě musí shodovat.
6) Podobné vstupy musí generovat velmi odlišné otisky (podobnost vstupů se neprojeví v podobnosti otisků)
Aby nešlo „tipovat“ a postupnými úpravami se snáze dopracovat k původnímu vstupu, který generuje daný otisk.


Příklady hashovacích funkcí

MD5
Tiger
SHA
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 pro výpočet funkcí

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


Zdroje

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