ALTE DOCUMENTE
|
||||||||||
Hashing - hasování: v oblasti databází technika řesící přístup k datovým záznamům na základě znalosti klíče. V kryptografii se hasovací algoritmy pouzívají zejména pro potřeby zajistění integrity přenásených zpráv či uchovávaných dat. V rámci operačních systémů se hasovací techniky pouzívají i pro potřeby evidence hesel.
S anglickým termínem hashing, v českém překladu nepřílis libě znějícím jako "hasování", jsme se doposud setkávali předevsím v oblasti databází a hromadné 11311p157l ho zpracování dat. Zde se týká způsobu, jak se dostat k místu, kde je ulozen určitý konkrétní datový záznam, od kterého je znám jeho klíč. V kazdé databázi, obecně vsude tam kde je nashromázděn určitý objem dat, musí být jednotlivé datové záznamy určitým způsobem uspořádány, tak aby bylo vzdy mozné najít konkrétní záznam, který je právě pozadován. Jednou z mozností je uspořádat jednotlivé záznamy sekvenčně podle hodnoty hodného klíče, a pak mezi nimi vyhledávat také sekvenčně, tedy postupným procházením. Alternativou je předem znát pro kazdý jednotlivý záznam jeho přesné umístění, a pak "jít na jistotu", bez nutnosti jakéhokoli vyhledávání. Kompromisním řesením je právě myslenka hasování: z klíče, podle kterého má být záznam vyhledán, se nepřílis náročným způsobem (pomocí tzv. hasovací funkce) vypočítá konkrétní adresa, na které by hledaný záznam měl být umístěn. "Měl" proto, ze právě kvůli jednoduchosti a celkové efektivnosti ulození dat je hasovací funkce koncipována tak, ze pro různé klíče můze dávat stejné výsledky, neboli dvěma různým datovým záznamům můze přisoudit stejné fyzické umístění. To je konflikt, který se řesí sekvenčním ulozením, resp. sekvenčním vyhledáváním: jednotlivé datové záznamy, pro jejichz klíče dává hasovací funkce stejné výsledky, jsou ulozeny za sebou, a jejich vyhledávání znamená "jít na určité místo přímo" (na základě adresy poskytnuté hasovací funkcí), a odsud pak hledat sekvenčně.
S principem "hasování", či spíse s "hasovacími algoritmy", se vsak lze setkat i v kryptografii, kde se pouzívají pro potřeby zabezpečení. Také zde je hasovací funkce, resp. hasovací algoritmus chápán jako určitá transformace vstupního textu, která je relativně jednoduchá a rychlá, a lze ji snadno aplikovat například na celou zprávu. Výsledkem pak je funkční hodnota, které se říká také "message digest" (coz lze velmi volně přelozit jako "výcuc zprávy") - jde typicky o datovou polozku konstatní (a předem pevně dané délky), bez ohledu na velikost původní zprávy, resp. zdrojového textu. Uz z tohoto samotného faktu by měla být zřejmá jedna základní vlastnost "hasování" v kryptografii: různé zprávy mohou stejný "message digest", neboli stejný "výcuc". Konkrétním důsledkem pak je fakt, ze celé hasování je na rozdíl od větsiny sifrovacích algoritmů pouze jednosměrným a nevratným procesem - nesnazí se činit taková opatření, aby byla mozná i zpětná transformace, neboli odvození původní zprávy na základě znalosti jejího "výcucu" (message digest). Vzhledem k faktu, ze různé zprávy mohou mít stejné "výcuc-y", by to ani nebylo principiálně mozné.
K čemu je pak ale hasování v kryptografii vůbec dobré? Pokud se hasovací algoritmus zvolí dostatečně sikovně, lze "výcuc" konkrétní zprávy pouzít například k tomu, aby se zajistila její integrita - tedy aby příjemce měl jistotu, ze samotná zpráva nebyla při svém přenosu přes nezabezpečené přenosové cesty jakkoli pozměněna. Jelikoz samotné hasovací algoritmy jsou obvykle veřejně známé, nemělo by smysl posílat "výcuc-y" spolu s vlastními zprávami v nezabezpečeném tvaru - protoze ten, kdo by chtěl zprávu pozměnit, by jednoduse vypočítal nový "výcuc" a ten připojil ke zfalsované zprávě. V praxi se proto samotné hasování jestě kombinuje se sifrováním - například při symetrických technikách na bázi tajného klíče sdíleného oběma komunikujícími stranami je mozné vzít zdrojovou zprávu, pro potřeby výpočtu k ní připojit zmíněný tajný klíč, z výsledného celku vypočítat příslusný "výcuc", a ten přenést spolu se zdrojovým tvarem zprávy. Případný nepřítel pak bez znalosti tajného klíče nemůze pozměnit zprávu a vypočítat k ní nový (a hlavně správný) "výcuc" - příjemce totiz vezme zdrojový tvar zprávy, připojí k ní svou kopii tajného klíče, sám si vypočítá "výcuc", a ten porovná s "výcuc-em", který přísel od druhé strany. Pokud se shodují, má příjemce velkou míru jistoty, ze zpráva (přenásená třeba i v nezasifrovaném tvaru) nebyla jakkoli pozměněna.
Samotný hasovací algoritmus, jehoz mozné vyuzití jsme si právě naznačili, by měl být volen tak, aby výpočet "výcuc-u" byl dostatečně rychlý a jednoduchý, ale na druhé straně bylo nesmírně tězké najít různé zdrojové texty, které budou mít stejný "výcuc", či najít alespoň jeden zdrojový text, jehoz "výcuc" by se shodoval s předem známým "výcuc-em" - zde se v podstatě chce, aby to neslo dělat nijak rozumněji a efektivněji, nez postupným vyzkousením vsech mozností, které připadají v úvahu.
Různé hasovací techniky se s oblibou pouzívají i pro četné dalsí účely související se zabezpečením, nejen se zajistěním integrity (neporusenosti) přenásených zpráv, případně dat uchovávaných na určitém konkrétním místě. S oblibou se pouzívají například pro potřeby evidence hesel vsude tam, kde je třeba nějaká hesla skladovat. Není totiz moc rozumné uchovávat je v jejich zdrojovém tvaru, například v jediném textovém souboru - jeho získáním by si případný narusitel doslova otevřel vsechny dveře dokořán! Místo samotných hesel vsak lze uchovávat například jen jejich "výcuc-y" - vzhledem k charakteru hasovacího algoritmu pak bude nesmírně slozité odvodit původní heslo, ale pro "strázce systému" (tj. pro operační systém) bude naopak velmi jednoduché ověřit si podle seznamu "výcuc-ů", zda konkrétní uzivatelem zadané heslo je správné či nikoli.
|