Myslím, je to jen otázka „jak obtížné je obrátit funkci se současnou technologií“?
Nebo existuje matematický koncept nebo vlastnost, která je činí odlišnými?
Pokud je to otázka „jak obtížné je obrátit funkci“, pak je správné říci, že s postupem technologie přestávají být některé kryptografické hašovací funkce kryptografické jen pro hašovací funkce? Stalo se to, co se stalo s MD5?
Každá kryptografická hašovací funkce je hašovací funkce. Ale ne každá hashovací funkce je kryptografický hash.
Cílem kryptografické hašovací funkce je zaručit řadu bezpečnostních vlastností. Nejdůležitější je, že je těžké najít kolize nebo předběžné obrazy a že výstup se zdá být náhodný. (Existuje několik dalších vlastností a "tvrdý" má v tomto kontextu dobře definované hranice, ale to zde není důležité.)
Nekryptografické hašovací funkce se snaží zabránit kolizím pro vstup, který není škodlivý. Někteří si kladou za cíl odhalit náhodné změny v datech (CRC), jiní se snaží umístit objekty do různých kbelíků v hašovací tabulce s co nejmenším počtem kolizí.
Výměnou za slabší záruky jsou obvykle (mnohem) rychlejší.
Stále bych nazval MD5 kryptografickou hašovací funkcí, protože jejím cílem bylo zajistit bezpečnost. Ale je to rozbité, a proto už není použitelné jako kryptografické hash. Na druhou stranu, pokud máte nekryptografickou hashovací funkci, nemůžete ji opravdu nazvat „zlomenou“, protože se nikdy vůbec nepokusila o bezpečí.
Existují některé vlastnosti, které kryptograficky zabezpečené hashovací funkce silně vyžadují, které nejsou pro kryptograficky zabezpečené hashovací funkce vyžadovány:
h
musí být obtížné najít zprávu m
, která při hašování vydá h
m1
musí být obtížné najít jinou zprávu m2
aby m1
a m2
dát stejný hash)m1
a m2
, které poskytují stejný hash)V těchto bodech vidíte hodně obtížné, což je kvalitativní míra namísto kvantitativní. Nejlepší odpovědí je proveditelnost: existuje nejasná čára, když se něco stane proveditelným a tyto čáry se pohybují v průběhu času (protože výpočetní schopnosti rostou exponenciálně podle Mooreova zákona, jakmile váš mobilní telefon může nyní vyřešit obtížné problémy).
Obecně je dobré předpokládat, že obtížné znamená, že čas k dosažení určitého cíle je NP-kompletní. To znamená, že čas potřebný k přerušení hašování silně roste se zvyšováním délky hashe.
Dalším bodem je to, že kryptograficky bezpečný hashovací algoritmus může být užitečný v některých aplikacích, ale ne v jiných. Závisí to na modelu vašeho útočníka, povaze informací, které chcete chránit, a na věcech, jako jsou požadavky na výkon (obecně platí, že čím lepší jsou kryptografické vlastnosti hashe, tím horší je běhové chování).
Řekl bych, že dvě klíčové věci, kterým je třeba porozumět, jsou:
Termín „kryptografická hashovací funkce“ se běžně používá k označení toho, co by mohlo být lépe označeno jako hašovací funkce odolné proti kolizi , které jsou veřejné funkce ("public" = nevyžadují tajný klíč), které musí mít tyto tři vlastnosti:
m1
Vybranou čestnou stranou je pro útočníka velmi nákladné najít jakoukoli hodnotu m2 ≠ m1
Takový, že hash(m1) = hash(m2)
.h
vybranou čestnou stranou je pro útočníka velmi nákladné najít jakoukoli hodnotu m
takové, že hash(m) = h
.m1 ≠ m2
Tak, aby hash(m1) = hash(m2)
.Čtvrtá vlastnost, kterou starší kryptografické hashovací funkce triviálně selhávají, ale které novější jako SHA-3 a Blake2 jsou navrženy tak, aby dosáhly:
Náhodná vlastnost Oracle (pokud je správně formulována) znamená tři předchozí vlastnosti, stejně jako další, jako je absence účinných útoky s prodloužením délky . (Rozšíření délky jsou nejzřetelnějším důvodem, proč starší hashovací funkce, jako jsou SHA-256 a SHA-512, selhávají v náhodné vlastnosti Oracle.)