Aká je funkcia hashingu. Cryptographic Hash Funkcie

Algoritmy vyhľadávania, ktoré sme zvažovali, sú zvyčajne založené na abstraktnom porovnávacom operácii. Z tejto série, metóda distribúcie opísaná v "symbolových tabuľkách a binárnych vyhľadávacích stromoch", ktorá je uložená v i-Th polohe tabuľky, ktorá vám umožní odkazovať na ňu priamo. S distribúciou vyhľadávania sa kľúče používajú ako index poľa, a nie operandy porovnávacieho operácie; Samotná metóda je založená na tom, že kľúče sú rôzne celé čísla z rovnakého rozsahu ako indexy tabuľky. V tejto kapitole sa pozrieme na Hashing (Hashing) - rozšírená verzia vyhľadávania distribúcie, ktorá sa používa v typickejších vyhľadávacích aplikáciách, kde kľúče nemajú tak pohodlné vlastnosti. Konečný výsledok aplikácie tento prístup Nie je absolútne podobné metódam založeným na porovnaní - namiesto pohybu pomocou slovníkových dátových štruktúr porovnávaním kľúčových kľúčov v prvom prvkoch sa snažíme odkazovať na položky v tabuľke priamo vykonaním konverzie aritmetických kľúčov na adresy tabuľky.

Vyhľadávanie algoritmov pomocou hashingu sa skladajú z dvoch samostatných častí. Prvým krokom je vypočítanie funkcie Hash (funkcia Hash), ktorá konvertuje vyhľadávací kľúč k tabuľke. V ideálnom prípade by sa na rôznych adries museli zobraziť rôzne klávesy, ale často dvaja alebo viac rôznych tlačidiel môže poskytnúť rovnakú adresu v tabuľke. Preto druhá časť vyhľadávania metódami hashingu je proces riešenia kolízií (rozlíšenie kolízie), ktoré spracúvajú takéto kľúče. V jednom z metód rozlíšenia konfliktov, ktoré sa zvážime v tejto kapitole, sa používajú pripojené zoznamy, takže nájde priame použitie v dynamických situáciách, keď je ťažké predpovedať počet vyhľadávacích kľúčov. V ďalších dvoch metódach riešenia kolízií, vysoko dosiahnuté výkon Vyhľadávanie, pretože prvky sú uložené v pevnom poli. Považujeme za spôsob zlepšenia týchto metód, čo vám umožní používať a v prípadoch, keď nie je možné predpovedať veľkosť tabuľky vopred.

Hashing je dobrým príkladom rovnováhy medzi časom a pamäťou. Ak by neexistovali žiadne obmedzenia množstva použitého množstva pamäte, akékoľvek vyhľadávanie by sa mohlo vykonávať pomocou jedného prístupu pamäte, jednoducho pomocou tlačidla ako pamäťovej adresy, as s distribúciou vyhľadávania. Tento ideálny prípad je však zvyčajne nedosiahnuteľný, pretože dlhé klávesy môžu vyžadovať obrovské množstvo pamäte. Na druhej strane, ak neexistovali žiadne obmedzenia čas, Bolo by možné dosiahnuť minimálnu pamäť pomocou metódy sekvenčného vyhľadávania. Hashing je spôsob, ako používať prijateľný objem pamäte a času a dosiahnutie rovnováhy medzi týmito dvoma extrémnymi požiadavkami. Najmä môžete podporiť akúkoľvek zostatok, jednoducho zmeniť veľkosť tabuľky a nie prepisovať kód a bez výberu iných algoritmov.

Hashing je jednou z klasických úloh počítačových vedy: jeho rôzne algoritmy sa podrobne študujú a sú široko používané. Uvidíme, že u všetkých žiadnych tvrdých predpokladov, môžete dúfať, že na podporu operácií nájsť a prilepiť v tabuľkách symbolov s konštantným časom vykonávania, bez ohľadu na veľkosť tabuľky.

Táto očakávaná hodnota je teoretický výkon optimálne pre akékoľvek vykonávanie tabuľky symbolov, ale hash ešte nie je všeliek na dva hlavné dôvody. Po prvé, čas Záleží na dĺžke kľúčov, ktorá môže byť významná v reálnych aplikáciách pomocou dlhých tlačidiel. Po druhé, Hashing neposkytuje účinnú implementáciu iných operácií so symbolovými tabuľkami, ako je výber alebo triedenie. V tejto kapitole sa podrobne zvážime tieto a ďalšie otázky.

Funkcia Hash

V prvom rade je potrebné vyriešiť úlohu výpočtu funkcie Hash, ktorá konvertuje tlačidlá na adresu tabuľky. Typicky, implementácia tohto aritmetického výpočtu nepredstavuje zložitosť, ale je stále potrebné dodržiavať starostlivosť, aby sa nestiahli do rôznych nízko náročných úskalia. Ak existuje tabuľka, ktorá môže obsahovať prvky M, potrebujete funkciu, ktorá konvertuje kľúče k celé čísla v rozsahu. Ideálna funkcia hash by mala byť ľahko vypočítať a byť podobná náhodnej funkcii: pre akékoľvek argumenty, výsledky v istom zmysle by mali byť ekvivalentné.

Funkcia Hash závisí od typu kľúča. Stručne povedané, samostatná funkcia hash vyžaduje samostatný typ kľúča. Ak chcete zvýšiť efektívnosť, je zvyčajne žiaduce, aby sa zabránilo výslovne konverziu typov, kontaktovanie myšlienky zváženia binárnej prezentácie klávesov v strojovom texte ako celé číslo, ktoré sa môžu použiť v aritmetických výpočtoch. Hashing sa objavil pred jazykmi na vysokej úrovni - na začiatku počítačov bola obvyklá záležitosť, aby zvážila akúkoľvek hodnotu ako reťazec kľúč, potom ako celé číslo. V niektorých jazykoch na vysokej úrovni je ťažké vytvoriť programy, ktoré závisia od prezentácie kľúčov v konkrétnom počítači, pretože takéto programy sú v podstate závislé od strojov, a preto sú ťažké preniesť do iného počítača. Typicky, hash funkcie závisia od procesu konverzie kľúčov na celé čísla, preto je ťažké súčasne poskytnúť samostatne nezávislosť a efektívnosť v implementáciách hashovania. Jednoduché kľúčové klávesy alebo tlačidlá typu plávajúceho bodu je spravidla možné konvertovať pomocou len jednej prevádzky stroja, ale stručné klávesy a iné typy kombinovaných kľúčov vyžadujú vysoké náklady a väčšiu pozornosť účinnosti.

Pravdepodobne najjednoduchšia situácia je, keď sú kľúče čísla s plávajúcim bodom z pevného rozsahu. Napríklad, ak sú kľúče čísla, veľké 0 a menšie 1, možno jednoducho vynásobiť M, zaokrúhliť výsledok k menšiemu celému a dostať adresu v rozsahu medzi 0 a m - 1; Tento príklad je znázornený na obr. 14.1. Ak sú kľúče väčšie ako S a menšie ako t, môže byť zmenšený, odpočítaním s a delenie na TS, v dôsledku ktorej spadajú do rozsahu hodnôt medzi 0 a 1, a potom sa množia na M a get adresu v tabuľke.


Obr. 14.1.

Ak chcete previesť numerics s plávajúcim bodom v rozsahu medzi 0 a 1 na tabuľkové indexy, ktorých veľkosť je 97, vynásobením týchto čísel do 97. V tomto príklade došlo k tromi konfliktom: pre indexy rovnajúce sa 17, 53 a 76. hodnoty hash sú určené k starším kľúčových výbojov, mladší vypúšťanie nehrajú žiadnu rolu. Jedným z cieľov vzniku funkcie Hash je odstrániť takúto nerovnováhu tak, aby sa počas výpočtu zohľadnilo každé absolutórium.

Ak sú kľúče W-bitová celé čísla, ktoré môžu byť prevedené do čísel s plávajúcou desatinnou čiarkou a delené 2 W, čím sa získa čísel s plávajúcou desatinnou čiarkou v rozmedzí medzi 0 a 1, a potom sa množia na M, ako v predchádzajúcom odseku. V prípade, že s plávajúcou desatinnou čiarkou operácie zaberajú veľa času a čísla nie sú tak vysoké, aby viedlo k pretečeniu, rovnaký výsledok možno získať pomocou číslo aritmetické operácie: musíte násobiť kľúč k M a vykonajte posun k priamo na W vypúšťanie rozdeliť 2 w (alebo, v prípade, multiplikačných vedie k pretečeniu, posun, a potom sa násobenie). Takéto metódy sú zbytočné pre hash, pokiaľ nie sú kľúče rovnomerne distribuované rozsahom, pretože hodnota hash je určená len poprednými číslicami kľúča.

Jednoduchšie I. Účinná metóda Pre w-bitové celé čísla - jeden z možných najčastejšie používaných metód hashovania - voľba ako veľkosti M tabuľky jednoduchého čísla a výpočet zvyšku z delenia na m, t.j. h (k) \u003d k Mod m pre ľubovoľný integer kľúč k. Táto funkcia sa nazýva modulárna hash funkcia. Je veľmi ľahko vypočítať (K% M v C ++) a je účinný na dosiahnutie rovnomernej distribúcie kľúčových hodnôt medzi hodnotami menšieho M. Malý príklad je znázornený na obr. 14.2.


Obr. 14.2.

V troch pravého stĺpcoch je výsledok 7-bitových tlačidiel uvedených vľavo zobrazený pomocou nasledujúcich funkcií:

v% 97 (vľavo)

v% 100 (stred) a

(int) (a * v)% 100 (vpravo),

kde A \u003d .618033. Veľkosti tabuľky týchto funkcií sú 97, 100 a 100. Hodnoty vyzerajú náhodne (pretože kľúče sú náhodné). Druhá funkcia (V% 100) používa iba dve extrémne správne číslice kľúčov, a preto pre neadonúrovne kľúče môžu vykazovať nízky výkon.

Modulárne hashing sa vzťahuje na klávesy s pohyblivou bodom. Ak kľúče patria do malého rozsahu, môžu byť zmenšené do čísel z rozsahu medzi 0 a 1, 2 W, aby sa získali hodnoty celého čísla W-bit a potom použite modulárnu funkciu hash. Ďalšou možnosťou je jednoducho použiť modulárnu hash-funkciu binárnu kľúčovú prezentáciu (ak je k dispozícii).

Modulárny hash sa aplikuje vo všetkých prípadoch, keď prístup k bitom, z ktorých kľúče spočívajú bez ohľadu na to, či sú celé čísla reprezentované strojovým slovom, postupnosť symbolov balených v strojovom slovom, alebo sú reprezentované akoukoľvek inou možná možnosť. Sekvencia náhodných symbolov zabalených do Strojového slova nie je presne rovnaká ako kľúčové premeny, pretože nie všetky vypúšťacie výboje sa používajú na kódovanie. Ale obidve tieto typy (a akýkoľvek iný typ kódu kódovaného takým spôsobom, aby sa zmestili do stroja), môžu byť vyrobené tak, aby vyzerali ako náhodné indexy v malom stole.

Hlavným dôvodom pre výber ako veľkosť M Hash Tabuľka jednoduchého čísla pre modulárne hashovanie je znázornené na obr. 14.3. V tomto príklade symbolické dáta s 7-bitovým kódovaním je kľúč interpretovaný ako číslo so základňou 128 - jedným číslom pre každý znak v kľúči. Teraz slovo zodpovedá číslu 1816567, ktorý môže byť tiež napísaný ako

pretože symboly kódu ASCII N, O a W zodpovedajú číslam 1568 \u003d 110, 1578 \u003d 111 a 1678 \u003d 119. Veľkosť tabuľky M \u003d 64 pre tento typ kľúča je neúspešné, pretože pridanie do hodnôt x, viacnásobné 64 (alebo 128), nemení hodnotu x MOD 64 - pre každý kľúč, hodnota hash funkcia je Hodnota posledných 6 číslic tohto tlačidla. Samozrejme, dobrá funkcia Hash musí brať do úvahy všetky kľúčové výboje, najmä pre symbolické kľúče. Podobné situácie sa môžu vyskytnúť, keď m obsahuje multiplikátor, ktorý je stupeň 2. Najjednoduchší spôsob Vyhnite sa tomu - Vyberte si jednoduché číslo.


Obr. 14.3.

V každom riadku tejto tabuľky ste: 3 písmeno Word, prezentácie tohto slova v ASCII kóde, ako 21-bitové číslo v oktánovým číslom a desatinná uľahčenie použité formuláre a štandardných modulárnych hashovacie funkcie pre veľkosti tabuliek 64 a 31 (dve extrémny stĺpec vpravo). Veľkosť stola 64 vedie k nežiaducim výsledkom, pretože len najviac vpravo kľúčové vypúšťanie sa používajú na získanie hodnoty hash, a písmená v slovách obvyklého jazyka sú rozložené nerovnomerne. Napríklad všetky slová, ktoré sú vybavené písmenom y zodpovedajú hashovej hodnote 57. A naopak, jednoduchá hodnota 31 spôsobuje menej konfliktov v tabuľke viac ako dvakrát menej ako menšie.

Modulárne Hashing je veľmi ľahko implementovať, okrem toho, že veľkosť tabuľky musí byť jednoduchým číslom. Pre niektoré aplikácie môžete byť spokojní s malým známym jednoduchým číslom alebo vyhľadávaním v zozname slávnych prvočískových čísel, ktoré je blízko požadovanej veľkosti stola. Napríklad čísla sú 2 t - 1, sú jednoduché t \u003d 2, 3, 5, 7, 13, 17, 19 a 31 (a bez iných hodnôt t< 31 ): это известные простые числа Мерсенна. Чтобы динамически распределить таблицу нужного размера, нужно вычислить простое число, близкое к этому значению. Такое вычисление нетривиально (хотя для этого и существует остроумный алгоритм, который будет рассмотрен в части 5), поэтому на практике обычно используют таблицу заранее вычисленных значений (см. рис. 14.4). Использование модульного хеширования - не jediný dôvodna ktorom veľkosti tabuľky stojí za to urobiť jednoduché číslo; Ďalší dôvod sa posudzuje v oddiele 14.4.


Obr. 14.4.

Táto tabuľka je najväčšie jednoduché čísla menšie ako 2 n, pre Môže byť použitý na distribúciu dynamického hash tabuľky, keď je potrebné, aby veľkosť tabuľky bola jednoduchým číslom. Pre akúkoľvek danú pozitívnu hodnotu v rozsahu, sa môže táto tabuľka použiť na určenie jednoduchého čísla, ktoré sa od neho líši menej ako 2 krát.

Ďalším prevedením celé číslo kľúča je kombináciou multiplikatívnej a modulárnych metód: treba násobiť kľúč k konštantou v rozsahu medzi 0 a 1, a potom sa na delenie module M. Inými slovami, je nutné použiť funkciu. Medzi hodnotami, m a efektívnou základňou systému kľúča je vzťah, ktorý teoreticky môže viesť k anomálne správanie, ale ak používate ľubovoľnú hodnotu A, v reálna príloha Je nepravdepodobné, že by mal nejaký problém. Často je vybratá hodnota F \u003d 0,618033 ... (Zlatá časť).

Na túto tému bola študovaná mnoho ďalších variácií, najmä hash funkcie, ktoré možno realizovať pomocou takých účinných inštrukcií stroja, ako je napríklad výber posunu a masky (pozri odkazy).

V mnohých aplikáciách, ktoré používajú symbolové tabuľky, kľúče nie sú čísla a nie sú nevyhnutne krátke; Častejšie sú alfanumerické čiary, ktoré môžu byť veľmi dlhé. Ako vypočítať funkciu hash pre slovo ako avelalongkey?

V 7-bitovom kódexe ASCII, toto slovo zodpovedá 84-bitovému číslu (ALIGN *) 97 CDOT 128 ^ (11) & + 118 CDOT 128 ^ (10) + 101 CDOT 128 ^ (9) + 114 \\ cdot 128 ^ (8) + 121 \\ cdot 128 ^ (7) \\\\ & + 108 \\ cdot 128 ^ (6) + 111 \\ cdot 128 ^ (5) + 110 \\ cdot 128 ^ (4) + 103 \\ cdot 128 ^ (3) \\\\ & + 107 \\ cdot 128 ^ (2) + 101 \\ cdot 128 ^ (1) + 121 \\ cdot 128 ^ (0), \\ end (zarovnanie *),

ktorý je príliš veľký, takže zvyčajné aritmetické funkcie je možné vykonať s ním vo väčšine počítačov. A často je potrebné zvládnuť a oveľa dlhšie kľúče.

Na výpočet modulárnej funkcie hash pre dlhé kľúče sa konvertujú na fragment na fragment. Môžete použiť aritmetické vlastnosti funkcie modulu a použiť gorner algoritmus (pozri časť 4.9 "Abstraktné typy údajov"). Táto metóda je založená na inom spôsobe nahrávania čísel zodpovedajúcich klávesom. Pre príklad uvažovaného sme písať nasledujúce výraz: \\ begin (zarovnanie *) ((((((((((97 \\ cdot 128 ^ (11) + 118) \\ cdot 128 ^ (10) + 101) \\ cdot 128 ^ (9) + 114) \\ cdot 128 ^ (8) + 121) \\ cdot 128 ^ (7) \\\\ & + 108) \\ cdot 128 ^ (6) + 111) \\ cdot 128 ^ (5) + 110) \\ cdot 128 ^ (4) + 103) \\ cdot 128 ^ (3) \\\\ & + 107) \\ cdot 128 ^ (2) + 101) \\ cdot 128 ^ (1) + 121. \\ END (Align *)

To znamená, že desatinné číslo zodpovedajúce znakovi kódovaniu reťazca je možné vypočítať pri ich zobrazení zľava doprava, vynásobením nahromadenej hodnoty na 128 a potom pridaním kódovej hodnoty nasledujúceho symbolu. V prípade dlhého reťazca bude táto metóda výpočtu nakoniec viesť k veľkej, ktorý môže byť predložený vôbec v počítači. Toto číslo však nie je potrebné, pretože len (malý) zvyšok sa vyžaduje z jeho rozdelenia na M. Výsledok je možné získať, bez toho, aby sa zabránilo nahromadenej hodnote, pretože Výpočet môže byť kedykoľvek zlikvidovaný viacerými m - pri každom vykonaní násobenia a pridávania, je potrebné uložiť iba zvyšok z modulu divízie M. Výsledok bude rovnaký, ako keby sme mali možnosť vypočítať dlhý rad a potom vykonať rozdelenie (pozri napr. cvičebný 14.10). Toto pozorovanie vedie k priamym aritmetickým spôsobom pre výpočet modulárnych hash funkcií pre dlhé linky - pozri program 14.1. Tento program používa iný, posledný uzdenie: namiesto základne 128, používa jednoduché číslo 127. Dôvodom tejto zmeny sa zváži v nasledujúcom odseku.

Existuje mnoho spôsobov, ako vypočítať hash funkcie približne s rovnakými nákladmi, pokiaľ ide o modulárne hashing pomocou metódy Gorner (jedna alebo dva aritmetické operácie Pre každý symbol v tlačidle). Pre náhodné kľúče sa tieto metódy prakticky neodlišujú od seba, ale skutočné kľúče sú zriedka náhodné. Možnosť nákladov na nízke náklady, aby sa real kľúče náhodný typ vedie k zváženiu randomizovaných algoritmov hashovania, pretože potrebujeme hash funkcie, ktoré vytvárajú náhodné indexy tabuliek bez ohľadu na kľúčovú distribúciu. Nie je ťažké organizovať randomizácie, pretože nie je nutné doslovne dodržiavať definície modulárneho zatrieďovanie - je len nutné vypočítať celý rad menších M, boli použité všetky kľúčové výboja.

M \u003d 96 a A \u003d 128 (v hornej časti)

M \u003d 97 a A \u003d 128 (Stred) a

M \u003d 96 a A \u003d 127 (nižšie)

Nerovná distribúcia v prvom prípade je výsledkom nerovného používania listov a zachovanie nerovnosti z dôvodu skutočnosti, že veľkosť tabuľky a multiplikátor multiplikátor 32. Dva ďalšie príklady vyzerajú náhodne, pretože veľkosť stola a multiplikátor sú vzájomne jednoduché čísla.

Program 14.1 zobrazuje jeden zo spôsobov, ako to urobiť: pomocou jednoduchej základne namiesto stupňa 2 a celé číslo zodpovedajúce reprezentácii ASCII reťazca. Na obr. 14.5 Obr. 14.5 Zobrazí sa, ako táto zmena zlepšuje distribúciu pre typické klávesy reťazec. Teoreticky hashové hodnoty vytvorené programom 14.1 môžu dať zlé výsledky pre veľkosti stolov, ktoré sú viacnásobné 127 (hoci v praxi bude pravdepodobne takmer nepostrehnuteľné); Ak chcete vytvoriť randomizovaný algoritmus, bolo by možné vybrať hodnotu násobku multiplikátora. Ešte efektívnejším prístupom je použitie náhodných hodnôt koeficientov vo výpočte a rôznych náhodných hodnotách pre každé číslo kľúča. Tento prístup dáva randomizovaný algoritmus s názvom Universal Hashing (Universal Hashing).

Teoreticky je ideálna univerzálna hash funkcia funkcia, pre ktorú je pravdepodobnosť kolízie medzi dvoma rôznymi klávesmi v tabuľke s rozmerom M je presne rovná 1 / m. Môže sa preukázať, že použitie ako koeficient A v programe 14.1 nie je pevná ľubovoľná hodnota a sekvencie náhodných rôznych hodnôt konvertujú modulárne hashovanie do univerzálnej hash funkcie. Avšak náklady na generovanie nového náhodného čísla pre každý symbol v kľúčovom kľúči sú zvyčajne neprijateľné. V praxi je možné dosiahnuť kompromis zobrazené v programe 14.1, bez toho, aby sa rad rôznych náhodných čísel pre každý symbol kľúča, a rôzne koeficienty pomocou generovanie jednoduchého pseudonáhodnej postupnosti.

Budeme zhrnúť: Ak chcete implementovať abstraktnú tabuľku znakov, aby sme použili Hashing, musíte najprv rozšíriť rozhranie abstraktného typu, otočením na hash operáciu, ktorá zobrazuje kľúče k negatívnym celé čísla, menšia veľkosť tabuľky M.

Ako súčasť tohto článku vám poviem čo je hashPrečo je to potrebné, kde a ako sa používa, ako aj najznámejšie príklady.

Mnohé výzvy v oblasti informačných technológií sú veľmi kritické pre objem dát. Napríklad, ak potrebujete porovnať dva súbory s veľkosťou 1 kB a dvomi súbormi 10 GB, potom je to úplne odlišný čas. Preto algoritmy, ktoré umožňujú fungovať s kratšími a najvýznamnejšími hodnotami, sa považujú za veľmi populárne.

Jedným z takýchto technológií je hash, ktorý zistil, že pri riešení hmoty úloh. Ale myslím si, že ako obyčajný používateľ je stále nepochopiteľný, aký druh šelmy je to za to, čo potrebuje. Preto sa budem snažiť vysvetliť všetky najjednoduchšie slová.

Poznámka: Materiál je určený pre bežných používateľov a neobsahuje mnoho technických aspektov, avšak pre základné oboznámenie sa viac než dosť.

Čo je hash alebo hash?

Začnem s podmienkami.

Funkcia Hash, Funkcia Convit - Toto je špeciálna funkcia, ktorá vám umožní previesť ľubovoľné dĺžkové texty na kód pevnej dĺžky (zvyčajne krátky digitálny záznam).

Hash - Toto je proces transformácie zdrojových textov.

Hash, hash kód, hodnota hash, hash-suma - Toto je výstupná hodnota funkcie Hash, to znamená, že výsledný blok je pevná dĺžka.

Ako vidíte, podmienky majú niekoľko tvarovaných popisov, z ktorých je ťažké pochopiť, prečo je to všetko potrebné. Preto okamžite uvediem malý príklad (o iných aplikáciách povie o niečo neskôr). Predpokladajme, že máte 2 súbory 10 GB. Ako môžete rýchlo zistiť, ktorý jeden potrebuje? Môžete použiť názov súboru, ale je ľahko ho premenovať. Môžete sledovať dátumy, ale po kopírovaní súborov súborov môže byť rovnaké alebo v iných sekvenciách. Veľkosť, ako sa vám porozumieť, málo môže pomôcť (najmä ak sa rozmery zhodujú, alebo ste sa nepozerali na presné hodnoty bajtov).

Je to tu, že potrebujete tento hash, ktorý je krátky blok, ktorý je generovaný zo zdroja textu súboru. Tieto dva súbory 10 GB budú mať dva rôzne, ale krátky hash kód (niečo ako "ACCAC43535" a "BBB3232A42"). Pomocou ich môžete rýchlo zistiť požadovaný súbor.Dokonca aj po kopírovaní a zmene menách.

Poznámka: Vzhľadom k tomu, že hash v počítači sveta a na internete je veľmi dobre známym konceptom, potom je to často všetko, čo súvisí s hash, je na toto slovo redukované. Napríklad fráza "Používam hash MD5" v preklade znamená, že na mieste alebo niekde inde používa algoritmus Hashingu štandardu MD5.

Hash vlastnosti

Teraz vám poviem o vlastnostiach hash funkcií, takže je pre vás jednoduchšie pochopiť, kde sa používa a za to, čo potrebujete. Ale prvá ďalšia definícia.

Zrážka - Toto je situácia, keď sa dosiahne jedna a rovnaká suma hash pre dve rôzne texty. Ako viete, akonáhle blok pevnej dĺžky má obmedzený počet možných hodnôt, a preto sú možné opakovania.

A teraz k vlastnostiam funkcií hash:

1. Text je možné dodať do textu ľubovoľnej veľkosti a výstup je dátový blok pevných dĺžok. Vyplýva z definície.

2. Hash-suma rovnakých textov by mal byť rovnaký. V opačnom prípade sú takéto funkcie jednoducho zbytočné - to je podobné náhodnému číslu.

3. Dobrá distribúcia musí mať dobrú distribúciu. Súhlasíte s tým, že ak veľkosť výstupu hash, napríklad, je 16 bajtov, potom, ak funkcia vráti iba 3 rôzne hodnoty pre všetky texty, potom žiadny vplyv na takúto funkciu a tieto 16 bajtov (16 bajtov sú 2 ^ 128 Možnosti, ktoré sú približne 3, 4 * 10 ^ 38 stupňov).

4. Ako dobre funkcia reaguje na najmenšie zmeny v zdrojovom texte. Jednoduchý príklad. Zmenil 1 písmeno v 10 GB súboru, hodnota funkcie by mala byť odlišná. Ak to tak nie je, potom je veľmi problematické aplikovať takúto funkciu.

5. Pravdepodobnosť výskytu kolízie. Veľmi zložitý parameter vypočítaný za určitých podmienok. Ale jeho podstatou je, že to, čo je bod hash funkcie, ak výsledný hash sumy sa často zhoduje.

6. Rýchlosť výpočtu hasha. Aký je veľa z funkcie Convolution, ak je už dlho vypočítať? Nie, pretože potom sú súbory jednoduchšie porovnávať alebo používať iný prístup.

7. Zložitosť obnovenia zdrojových údajov z Hashovej hodnoty. Táto vlastnosť je špecifickejšia ako celková, pretože nie je potrebná všade. Pre najznámejšie algoritmy sa však vyhodnotí táto charakteristika. Napríklad zdrojový súbor, ktorý môžete ťažko získať z tejto funkcie. Ak sa však problém zrážok uskutočňuje (napríklad, musíte nájsť akýkoľvek text, ktorý zodpovedá takejto hash), potom táto vlastnosť môže byť dôležitá. Napríklad heslá, ale o niečo neskôr.

8. Otvorený alebo uzavretý zdrojový kód pre takúto funkciu. Ak kód nie je otvorený, zložitosť zhodnocovania dát, konkrétne kryptošnosť, zostáva v pochybnosť. Čiastočne je to problém s šifrovaním.

Teraz môžete ísť na otázku "a prečo je to všetko?".

Prečo potrebujete hash?

Hlavné ciele funkcií hash sú len tri (alebo skôr ich účel).

1. Skontrolujte integritu údajov. V tento prípad Všetko je jednoduché, takáto funkcia by mala byť vypočítať rýchlo a umožniť vám rýchlo skontrolovať, že napríklad súbor prevzatý z internetu nebolo poškodené počas prevodu.

2. Pestovanie rýchlosti vyhľadávania údajov. Veľkosť pevnej bloku vám umožňuje získať veľa výhod pri riešení úloh vyhľadávania. V tomto prípade hovoríme o tom, čo je čisto technicky, používanie hash funkcií môže mať pozitívny vplyv na výkon. Pre takéto funkcie je veľmi dôležitá pravdepodobnosť kolízií a dobrej distribúcie.

3. Pre kryptografické potreby. Tento druh Funkcie konvolúcie sa používajú v oblastiach bezpečnosti, kde je dôležité, aby výsledky boli ťažké nahradiť alebo tam, kde je potrebné ich komplikovať úlohu získať čo najviac možnosti. užitočná informácia z hash.

Kde a ako sa hash aplikuje?

Ako ste pravdepodobne už uhádli, že Hash platí pri riešení veľmi mnohých úloh. Tu sú niektoré z nich:

1. Heslá sa zvyčajne ukladajú v otvorenej forme, ale vo forme hashových súm, čo umožňuje zabezpečiť vyšší stupeň bezpečnosti. Koniec koncov, aj keď útočník dostane prístup k takejto databáze, stále bude musieť stráviť veľa času na vyzdvihnutie vhodných textov na tieto hashové kódy. Tu je charakteristika "zložitosť obnovenia počiatočných údajov z hashových hodnôt".

Poznámka: Odporúčam vám, aby ste sa oboznámili s článkom niekoľkými tipmi na zlepšenie bezpečnosti hesiel.

2. Pri programovaní vrátane databáz. Samozrejme, najčastejšie hovoríme o dátových štruktúrach, ktoré umožňujú rýchle vyhľadávanie. Čistý technický aspekt.

3. Keď údaje prenášajú údaje (vrátane internetu). Mnoho protokolov, ako napríklad TCP / IP obsahujú špeciálne kontrolné polia obsahujúce hashové množstvo zdrojovej správy tak, aby ak sa niekde vyskytla zlyhanie, neovplyvnilo prenos údajov.

4. Pre rôzne algoritmy súvisiace s bezpečnosťou. Napríklad, hash sa používa v elektronických digitálnych podpisoch.

5. Ak chcete overiť integritu súborov. Ak ste venovali pozornosť, je často možné splniť súbory na internete (napríklad archívy) Ďalšie popisy s hashovým kódom. Toto opatrenie sa aplikuje nielen, aby ste náhodne nespustili súbor, ktorý bol poškodený pri sťahovaní z internetu, ale aj existuje jednoduchosť hostingu. V takýchto prípadoch môžete rýchlo skontrolovať hash av prípade potreby, potom preháňať súbor.

6. Niekedy sa hash funkcie používajú na vytvorenie jedinečných identifikátorov (ako súčasť). Napríklad pri ukladaní obrázkov alebo jednoduchých súborov zvyčajne používate hash v menách spolu s dátumom a časom. To vám umožní neprepísať súbory s rovnakým názvom.

V skutočnosti, ďalej, tým častejšie sa hash funkcie používajú informačné technológie. Najmä vzhľadom na to, že množstvo údajov a silu najviac jednoduché počítače Dôrazne zavrčal. V prvom prípade sme viac o hľadaní a v druhom sme viac o bezpečnostných otázkach.

Slávne funkcie hash

Najznámejšie sú nasledujúce tri hash funkcie.

Anotácia: V tejto prednáške je formulovaná koncepcia hash funkcie, ako aj krátka recenzia Algoritmy pre tvorbu hash funkcií. Okrem toho sa zvažuje možnosť použitia blokových algoritmov pre šifrovanie na vytvorenie funkcie Hash.

Účel prednášky: oboznámiť sa s koncepciou "hash funkcie", ako aj s princípmi takýchto funkcií.

Koncepcia hash funkcie

Funkcia Hash (funkcia Hash) Nazýva sa matematická alebo iná funkcia, ktorá pre línie ľubovoľnej dĺžky vypočíta niektoré celé číslo alebo nejaký iný reťazec pevnej dĺžky. Matematicky, to môže byť napísané takto:

kde m je pôvodná správa súčasnýa H \u200b\u200b- výsledok nazývaný hash funkcie (ako aj hash kód alebo hnacia správa (z angličtiny. správu.)).

Význam funkcie Hash je určiť charakteristický znak vzorky - význam funkcie Hash. Táto hodnota má zvyčajne určitú pevnú veľkosť, napríklad 64 alebo 128 bitov. Hash kód možno ďalej analyzovať na vyriešenie akúkoľvek úlohu. Hashing môže byť napríklad použitý na porovnanie údajov: Ak sú dvaja hash-kódy odlišné, sú zaručené polia; Ak sú rovnaké - polia s najväčšou pravdepodobnosťou rovnaké. Všeobecne platí, že jednoznačná korešpondencia medzi zdrojovými údajmi a hashovým kódom nie je spôsobená skutočnosťou, že počet funkcií hash je vždy menší ako vstupné možnosti. Preto existuje mnoho vstupných správ, ktoré poskytujú rovnaké kódy hash (takéto situácie kolízie). Pravdepodobnosť výskytu kolízií zohráva dôležitú úlohu pri hodnotení kvality hashových funkcií.

Funkcie hash sú široko používané v modernej kryptografii.

Najjednoduchšia funkcia Hash je možné pripraviť pomocou funkcie "Súčet modulu 2" nasledovne: Získavame vstupný reťazec, preložíme všetky bajty podľa modulu 2 a bajtový výsledok sa vracia ako hash fuch. Dĺžka funkcie Hash bude v tomto prípade 8 bitov bez ohľadu na veľkosť vstupnej správy.

Nechajte si napríklad pôvodnú správu preloženú do digitálneho zobrazenia, nasledujúceho (v hexadecimálnom formáte):

Správa prenesieme na binárny vzhľad, napíšte bajty na seba a položíme bity do každého stĺpca modulom 2:

0011 1110 0101 0100 1010 0000 0001 1111 1101 0100 ---------- 0110 0101

Výsledok (0110 0101 (2) alebo 65 (16)) a bude hodnota funkcie Hash.

Takáto hashová funkcia však nemôže byť použitá na kryptografické účely, napríklad na tvarovanie elektronický podpisKeďže je ľahké zmeniť obsah podpísanej správy bez zmeny hodnôt kontrolného súčtu.

Preto je zvážená funkcia hash nie je vhodná na kryptografické aplikácie. V kryptografii sa hashová funkcia považuje za dobro, ak je ťažké vytvoriť dva typy s rovnakou funkciou hash, ako aj v prípade, že výstup funkcie nie je výslovne závislý od vchodu.

Formátujeme základné požiadavky na kryptografické hash funkcie:

  • funkcia Hash musí byť použiteľná na posolstvo akejkoľvek veľkosti;
  • výpočet hodnoty funkcie sa musí vykonať dostatočne rýchlo;
  • s dobre známym hash funkcie by malo byť ťažké (takmer nemožné) nájsť vhodný prototyp M;
  • s dobre známej správe, M by mal byť ťažké nájsť inú správu M 's rovnakou hodnotou funkcie hash, ako je zdrojová správa;
  • malo by byť ťažké nájsť ľubovoľný pár náhodných správ s rovnakou funkciou Hash.

Vytvorte funkciu hash, ktorá spĺňa všetky uvedené požiadavky, nie je ľahká úloha. Je tiež potrebné si uvedomiť, že funkcia funkcie je prijatá na funkcii ľubovoľnej veľkosti a výsledok hash by nemal byť rovnako rovnaký pre tieto rôzne veľkosti.

V súčasnej dobe, v praxi, funkcie spracovanie vstupnej správy sa používajú ako hash funkcie a výpočet hash hodnoty h I pre každý blok vstupnej správy na závislosti typu

h i \u003d h (m, h I-1)

kde h I-1 je výsledok získaný pri výpočte funkcie hash predchádzajúci blok Vstupné Data.

Výsledkom je, že hash funkčný výnos H n je funkcia zo všetkých n vstupných blokov.

Použite blokové šifrovanie algoritmov na vytvorenie funkcie hash

Môžete použiť blok ako funkciu Hash. Ak bloky používané blokovým algoritmom kryptograficky, potom bude hash funkcia založená na to bude spoľahlivá.

Najjednoduchší spôsob, ako použiť blokový algoritmus na získanie hashového kódu je šifrovanie správy v režime CBC. V tomto prípade je správa reprezentovaná ako sekvencia blokov, ktorých dĺžka sa rovná dĺžke bloku šifrovacieho algoritmu. V prípade potreby je posledná jednotka doplnená správnym nulami, takže jednotka požadovanej dĺžky je. Hash bude posledným šifrovaným textovým blokom. S výhradou použitia spoľahlivého algoritmu šifrovania bloku bude mať výsledná hodnota hash nasledujúce vlastnosti:

  • takmer nemožné, bez toho, aby sme vedeli výpočet kľúča šifrovania hashových hodnôt pre dané otvorené množstvo informácií;
  • je prakticky nemožné, bez toho, aby ste vedeli, že kľúča šifrovania otvorených dát podľa zadanej hodnoty Hash.

Takto vytvorená hodnota hojdania sa zvyčajne nazýva imitovka alebo autentifikátor a používa sa na kontrolu integrity správy. Takto simulátor je teda kontrolná kombinácia, ktorá závisí od otvorených údajov a tajných kľúčových informácií. Účelom použitia IMITOVKA je zistiť všetky náhodné alebo úmyselné zmeny v oblasti informácií. Hodnota získaná funkciou Hash pri spracovaní vstupnej správy je pripojená k správe v okamihu, keď je známe, že správa je správna. Príjemca kontroluje integritu správy vypočítaním imitácie prijatej správy a porovnaním s výsledným hashovým kódom, ktorý musí byť prenášaný bezpečným spôsobom. Jeden z tých bezpečné spôsoby Možno šifrovanie Imitovka zatvorený kľúč odosielateľa, t.j. Vytvorenie podpisu. Je tiež možné šifrovať získaný algoritmus Hash Code pre symetrické šifrovanie, ak odosielateľ a príjemca majú všeobecný kľúč symetrických šifrovacích.

Zadaný proces získavania a používania Imitovky je opísaný v domácej norme GOST 28147-89. Štandardné ponuky na používanie mladších 32 bitov bloku získaného na výstupe šifrovacieho fungovania celej správy v režime Cipher Block Clutch na monitorovanie integrity prenášanej správy. Rovnakým spôsobom môže byť akýkoľvek blok použitý na generovanie imitavky algoritmus symetrického šifrovania.

Ďalším možným spôsobom, ako používať blokový šifier na generovanie hashového kódu je nasledovné. Zdrojová správa sa spracováva v sériových blokoch. Posledný blok, ak je to potrebné, je doplnené nuly, niekedy v poslednom bloku, ktorý pripisuje dĺžku správy vo formulári binárne čísla. V každej fáze zašifruje hash hodnotu získanú v predchádzajúcom štádiu, pričom zaberá aktuálny blok správy ako kľúč. Posledná zadaná šifrovaná hodnota bude konečný hash.

V skutočnosti niekoľko ďalších schém na použitie blokovej šifry na vytvorenie funkcie Hash. Nech m je zdrojový blok blok, hi - hodnota hash funkcie v štádiu úrovne I-úrovni, F je blok šifrovacieho algoritmu používaného v jednoduchom režime náhrady - pridávanie modulu 2. Potom sú možné, Napríklad nasledujúce schémy tvorby funkcie hash:

Vo všetkých týchto diagramoch sa dĺžka generovanej hashovej hodnoty rovná dĺžke bloku počas šifrovania. Všetky tieto, ako aj niektoré ďalšie schémy na používanie blokového algoritmu pre šifrovanie na výpočet hodnôt hash môžu byť použité v praxi.

Hlavná nevýhoda hashových funkcií určených na základe blokových algoritmov je relatívne pomalá rychlosť Práca. Požadovaný kryptoroskop môže byť zabezpečený aj pre menší počet operácií na vstupných údajoch. Existujú rýchlejšie hashové algoritmy navrhnuté nezávisle od nuly, založené na požiadavkách na kryptické odolnosť (najčastejšie z nich - MD5, SHA-1, SHA-2 a GOST R 34.11-94).


Čo je hash?Funkcia Hash sa nazýva matematická transformácia informácií v krátkom, určitom reťazci dĺžky.

Prečo to potrebujete?Analýza pomocou funkcií hash sa často používa na monitorovanie integrity dôležitých súborov. operačný systém, dôležité programy, dôležité údaje. Kontrola môže byť vykonaná podľa potreby a pravidelne.

Ako to urobí?Najprv určiť, ktoré integrita, ktorej musia byť monitorované súbory. Pre každý súbor sa vypočíta na výpočet hodnoty jeho hash cez špeciálny algoritmus pri zachovaní výsledku. Po požadovanom čase sa vykoná podobný výpočet a výsledky sa porovnávajú. Ak sa hodnoty líšia, znamená to, že informácie obsiahnuté v súbore boli zmenené.

Aké vlastnosti by mali mať hash funkciu?

  • musí byť schopný vykonávať transformácie údajov ľubovoľnej dĺžky na pevné;
  • musí mať otvorený algoritmus tak, aby sa mohol preskúmať jeho kryptooskop;
  • musí byť jednostranný, to znamená, že by nemali existovať matematické schopnosti stanovením zdrojových údajov;
  • musí "odolávať" konfliktom, to znamená, že by nemala vydať rovnaké hodnoty s rôznymi vstupnými údajmi;
  • by nemali vyžadovať veľké výpočtové zdroje;
  • s najmenšou zmenou vstupných údajov sa výsledok musí výrazne zmeniť.

Aké sú populárne hashové algoritmy?V súčasnosti sa používajú nasledujúce funkcie hash:

  • CRC - Cyklický prebytočný kód alebo kontrolný súčet. Algoritmus je veľmi jednoduchý, má veľký počet Varianty v závislosti od požadovanej dĺžky výstupu. Nie kryptografické!
  • MD 5 je veľmi populárny algoritmus. Mať ho rád predošlá verzia MD 4 je kryptografická funkcia. Hesca veľkosť 128 bitov.
  • SHA -1 je tiež veľmi populárnou kryptografickou konštrukciou. Hesca veľkosť 160 bitov.
  • GOST R 34.11-94 - Ruský kryptografický štandard pre výpočet hash funkcií. Hesca veľkosť 256 bitov.

Kedy môžu tieto algoritmy používať správcu systému?Pri sťahovaní akéhokoľvek obsahu, ako sú programy od výrobcu, hudby, filmov alebo iných informácií. kontrolné sumyvypočítané podľa špecifického algoritmu. Z bezpečnostných dôvodov, po stiahnutí, je potrebné vykonať nezávislý výpočet funkcie hash a porovnať hodnotu s tým, čo je uvedené na webovej stránke alebo v aplikácii do súboru. Urobil si to niekedy?

Čo je pohodlnejšie počítať hash?Teraz existuje veľký počet podobných pomôcok platených a bezplatných. Osobne sa mi páčilo Hashtab. Po prvé, utility počas inštalácie je vložený vo forme karty na vlastnosti súborov, po druhé, umožňuje vybrať si veľký počet hashových algoritmov a po tretie je zadarmo pre súkromné \u200b\u200bnekomerčné použitie.

Čo je ruština?Ako už bolo uvedené vyššie v Rusku, existuje štandard HASHING GOST R 34.11-94, ktorý sa používa všade v mnohých výrobkoch nástrojov na informačnú bezpečnosť. Jedným z týchto fondov je program stanovenia a kontroly pôvodného stavu. softvérový balík "Fix". Tento program je prostriedkom na kontrolu účinnosti aplikácie SZI.

Oprava (verzia 2.0.1) pre Windows 9x / NT / 2000 / XP

  • Vypočítajte kontroly zadaných súborov podľa jedného z 5 implementovaných algoritmov.
  • Fixácia a následná kontrola pôvodného stavu softvérového balíka.
  • Porovnanie verzií softvérového balíka.
  • Fixáciu a kontrolu katalógov.
  • Monitorovanie zmien v určených súboroch (adresáre).
  • Formácia správ v TXT, HTML, SV formátoch.
  • Produkt má osvedčenie o FSTEC na NDV 3 č. 913 do 1. júna 2013.

A čo eds?Výsledok výpočtu funkcie spolu s tajným kľúčom užívateľa vstupuje do vstupu kryptografického algoritmu, kde sa vypočíta elektronicky digitálny podpis. Prísne povedané, hash funkcia nie je súčasťou algoritmu EDS, ale často sa to robí konkrétne, aby sa zabránilo útoku pomocou verejného kľúča.

V súčasnosti vám mnoho aplikácií e-commerce umožňujú uložiť tajný kľúč používateľa v uzavretom tokenovej oblasti (RUTOKEN, Etokoken) bez technickej schopnosti ich extrahovať odtiaľ. Token sám má veľmi obmedzený priestor pamäte, meraný v kilobajtoch. Ak chcete podpísať dokument, nie je možné preniesť dokument na samotný token, ale preniesť hash dokumentu k tokenu a na výstupe, aby ste získali EDS, je veľmi jednoduché.

Otázky:

1. Koncepcia funkcie Hash.

2. Použite blokové algoritmy pre šifrovanie na vytvorenie funkcie Hash.

3. Preskúmanie algoritmov na vytvorenie funkcií hash.

1. Koncepcia hash funkcie

Funkcia Hash(Hash Funkcia) sa nazýva matematická alebo iná funkcia, ktorá pre línie ľubovoľnej dĺžky vypočíta niektoré celé číslo alebo nejaký iný reťazec pevnej dĺžky. Matematicky, to môže byť napísané takto:

h. \u003d H (m) ,

kde M. - Niekedy súčasný , ale h. - Výsledok nazval hodnotu funkcie hash (ako aj hash kód alebo hnacia správa (z angličtiny. správu.)).

Význam funkcie Hash je určiť charakteristický znak vzorky - význam funkcie Hash. Táto hodnota má zvyčajne určitú pevnú veľkosť, napríklad 64 alebo 128 bitov. Hash kód možno ďalej analyzovať na vyriešenie akúkoľvek úlohu. Hashing môže byť napríklad použitý na porovnanie údajov: Ak sú dvaja hash-kódy odlišné, sú zaručené polia; Ak sú rovnaké - polia s najväčšou pravdepodobnosťou rovnaké. Všeobecne platí, že jednoznačná korešpondencia medzi zdrojovými údajmi a hashovým kódom nie je spôsobená skutočnosťou, že počet funkcií hash je vždy menší ako vstupné možnosti. Preto existuje mnoho vstupných správ, ktoré poskytujú rovnaké kódy hash (takéto situácie kolízie ). Pravdepodobnosť výskytu kolízií zohráva dôležitú úlohu pri hodnotení kvality hashových funkcií.

Funkcie hash sú široko používané v modernej kryptografii.

Najjednoduchšia funkcia Hash je možné zostaviť pomocou operácie "súčet modulu 2" nasledovne: Získavame vstupný reťazec, zložíme všetky bajty podľa modulu 2 a bajtový výsledok sa vracia ako hodnota Hash Fuch. Dĺžka funkcie Hash bude v tomto prípade 8 bitov bez ohľadu na veľkosť vstupnej správy.

Nechajte si napríklad pôvodnú správu preloženú do digitálneho zobrazenia, nasledujúceho (v hexadecimálnom formáte):

2 B.1 4 A.9 5 F.E.4

Správa prenesieme na binárny vzhľad, napíšte bajty na seba a položíme bity do každého stĺpca modulom 2:

0010 1011

0001 0100

1010 1001

0101 1111

1110 0100

——————-

0010 1101

Výsledok: 0010 1101 alebo 2 D. A bude to hodnota funkcie hash.

Takáto funkcia hash sa však nemôže použiť na kryptografické účely, napríklad na vytvorenie elektronického podpisu, pretože je pomerne ľahké zmeniť obsah podpísanej správy bez zmeny hodnôt kontrolného súčtu.

Preto funkcia testovacej hash nie je vhodná na kryptografické aplikácie. V kryptografii je hashová funkcia považovaná za dobro, ak je ťažké vytvoriť dva typy s rovnakou funkciou hash, ako aj v prípade, že výstup funkcie nemá explicitnú závislosť od vchodu.

Formátujeme základné požiadavky na kryptografické hash funkcie:

· Funkcia Hash musí byť použiteľná na posolstvo akejkoľvek veľkosti;

· Výpočet hodnoty funkcie musí byť vykonaná dostatočne rýchlo;

· S známym významom funkcie hash by mal byť ťažké (takmer nemožné) nájsť vhodný prototyp M. ;

· S dobre známej správe M. Malo by byť ťažké nájsť inú správu. M ' s rovnakou hodnotou funkcie hash, ako je zdrojová správa;

· Malo by byť ťažké nájsť ľubovoľný pár náhodných rôznych správ s rovnakou funkciou hash.

Vytvorte funkciu hash, ktorá spĺňa všetky uvedené požiadavky, nie je ľahká úloha. Je tiež potrebné si uvedomiť, že funkcia funkcie je prijatá na funkcii ľubovoľnej veľkosti a výsledok hash by nemal byť rovnako rovnaký pre tieto rôzne veľkosti.

V súčasnosti sa v praxi používajú funkcie ako hash funkcie, spracovanie bloku vstupnej správy za jednotkou a výpočet hash- aHOJ. Pre každý blok M I. Vstupná správa o závislosti

h i \u003d h (m, h I-1)

kde h I-1 - výsledok získaný pri výpočte funkcie hash pre predchádzajúci blok vstupných údajov.

Výsledkom je výnos funkcie hash h N. je funkcia od všetkých n. Vstupných blokov.

2. Použite blokové algoritmy šifrovanie na vytvorenie funkcie Hash.

Ako funkcia Hash môžete použiť blokový algoritmus pre symetrické šifrovanie. Ak je použitý blokový algoritmus je kryptografický vzpery, potom bude hash-funkcia založená na tom bude spoľahlivá.

Najjednoduchší spôsob, ako použiť blokový algoritmus na získanie hashového kódu je šifrovanie správy v režime CBC ( CIPHER BLOCK CHINGING - CIPHERTEX CLUTCH MODE). V tomto prípade je správa reprezentovaná ako sekvencia blokov, ktorých dĺžka sa rovná dĺžke bloku šifrovacieho algoritmu. V prípade potreby je posledná jednotka doplnená správnym nulami, takže jednotka požadovanej dĺžky je. Hash bude posledným šifrovaným textovým blokom. S výhradou použitia spoľahlivého algoritmu šifrovania bloku bude získaný hash nasledujúce vlastnosti:

· Prakticky nemožné bez toho, aby ste poznali výpočtu kľúča šifrovania hashovej hodnoty pre daný otvorený rad informácií;

· Je to prakticky nemožné, bez toho, aby sme vedeli výber klávesu šifrovania otvorených údajov pre zadanú hodnotu hash.

Týmto spôsobom sa zvyčajne tvorí pokorný imitovka alebo autentifikátor a používa sa na kontrolu integrity správy. Takto simulátor je teda kontrolná kombinácia, ktorá závisí od otvorených údajov a tajných kľúčových informácií. Účelom použitia IMITOVKA je zistiť všetky náhodné alebo úmyselné zmeny v oblasti informácií. Hodnota získaná funkciou Hash pri spracovaní vstupnej správy je pripojená k správe v okamihu, keď je známe, že správa je správna. Príjemca kontroluje integritu správy vypočítaním imitácie prijatej správy a porovnaním s výsledným hashovým kódom, ktorý musí byť prenášaný bezpečným spôsobom. Jedným z týchto bezpečných spôsobov môže byť šifrovanie imitácie odosielateľa uzavretým kľúčom, t.j. Vytvorenie podpisu. Je tiež možné šifrovať získaný algoritmus Hash Code pre symetrické šifrovanie, ak odosielateľ a príjemca majú všeobecný kľúč symetrických šifrovacích.

Zadaný proces získavania a používania Imitovky je opísaný v domácej norme GOST 28147-89. Štandardné ponuky na používanie mladších 32 bitov bloku získaného na výstupe šifrovacieho fungovania celej správy v režime Cipher Block Clutch na monitorovanie integrity prenášanej správy. Rovnakým spôsobom môže byť akýkoľvek blokový algoritmus pre symetrické šifrovanie použiť na vytvorenie IMITAVKY.

Ďalším možným spôsobom, ako používať blokový šifier na generovanie hashového kódu je nasledovné. Zdrojová správa sa spracováva v sériových blokoch. Posledný blok je doplnený o nuly, ak je to potrebné, niekedy sa dĺžka správy vo forme binárneho čísla pripisuje poslednému bloku. V každej fáze zašifruje hash získaný v predchádzajúcom štádiu, pričom zaberá aktuálny blok správy ako kľúč. Posledná zadaná šifrovaná hodnota bude konečný hash.

Ak teda bežná schéma šifrovania správy M. Použitie bloku šifru f. na kľúč Na Zaznamenali sme ako E \u003d f (m, k) potom schéma kódu Hash h. Podľa vyššie uvedeného algoritmu si dokážete predstaviť, ako

aHOJ. = f. ( aHOJ. -1 , M. )

Ako počiatočný hash kód h 0. Trvať nejakú konštantu. Šifrovanie sa vykonáva v jednoduchom režime náhrad. Použitím špecifikovaná metóda Veľkosť bloku sa zhoduje s dĺžkou kľúča a veľkosť hashovej hodnoty bude dĺžka jednotky.

Je tiež možné aj iný spôsob, ako používať blokový šifier v jednoduchom režime náhrady: prvky správ sú šifrované hashovými hodnotami získanými v predchádzajúcom štádiu:

aHOJ. = f. ( M. , aHOJ. -1 ,)

V skutočnosti niekoľko ďalších schém na použitie blokovej šifry na vytvorenie funkcie Hash. Byť M I. - blok zdrojovej správy, aHOJ. - hodnota funkcie hash i. -pódium, f. - Blokový algoritmus pre šifrovanie používané v jednoduchom režime náhrad - pridávanie prevádzky modulu 2. Potom možné, napríklad nasledujúce schémy formovania hashových funkcií:

Vo všetkých týchto diagramoch sa dĺžka generovanej hashovej hodnoty rovná dĺžke bloku počas šifrovania. Všetky tieto, ako aj niektoré ďalšie schémy na používanie blokového algoritmu pre šifrovanie na výpočet hodnôt hash môžu byť použité v praxi.

Hlavná nevýhoda hash funkcií určených na základe blokových algoritmov je relatívne nízka rýchlosť. Požadovaný kryptoroskop môže byť zabezpečený aj pre menší počet operácií na vstupných údajoch. Existujú rýchlejšie hashové algoritmy (najbežnejšie - MD5, SHA-1, SHA-2 a GOST R 34.11-94).

3. Prehľad algoritmov na vytvorenie funkcií hash.

V súčasnosti sa ponúkajú rôzne špeciálne algoritmy a prakticky používané na výpočet funkcie Hash. Najznámejšie algoritmy sú MD5, SHA-1, SHA-2 a iné verzie SHA, ako aj domáci algoritmus uvedený v GOST R 34.11-94.

Algoritmus Md5 Zdá sa, že na začiatku 90. rokov dvadsiateho storočia v dôsledku zlepšenia algoritmu tvorby MD4 Hash. Symboly v názve "MD" priemerné hlásenie - zhrnutie správy. Autor algoritmov MD4 a MD5 - R. RIVEST (R.RIVEST). V dôsledku použitia MD5 je vytvorený 128-bitový hash pre ľubovoľnú správu. Vstupné údaje spracovávajú 512 blokov bitov. Algoritmus používa elementárny logické operácie (Inverzia, konjunkcia, pridanie modulu 2, cyklické posuny atď.), Ako aj obyčajný aritmetický pridávanie. Komplexné opakovanie týchto elementárnych funkcií algoritmu zabezpečuje, že výsledok je po spracovaní dobre zmiešaný. Preto je nepravdepodobné, že by dve správy vybrané náhodou mali rovnaký hash kód. Algoritmus MD5 má nasledujúcu vlastnosť: Každý bit výslednej hodnoty hash je funkciou z každého vstupného bity. Predpokladá sa, že MD5 je najsilnejšia funkcia hash pre 128-bitovú hashovú hodnotu.

Algoritmus Sha Bezpečný hash algoritmus - bezpečný hash-algoritmus) bol vyvinutý Národným inštitútom noriem a technológií (NIST) Spojených štátov a publikoval ako americký federálny informačný štandard v roku 1993. SHA-1, ako aj MD5, na základe algoritmu MD4. SHA-1 tvorí 160-bitový hash založený na spracovaní zdrojov 512 blokov bitov. Algoritmus SHA-1 tiež používa jednoduché logické a aritmetické operácie. Najdôležitejším rozdielom medzi SHA-1 z MD5 je, že hashový kód SHA-1 je 32 bitov dlhší ako hash kód MD5. Ak predpokladáme, že oba algoritmy sú rovnaké v ťažkostiach pre kryptanalýzy, potom SHA-1 je odolnejší algoritmus. Pomocou útoku hrubým silou (frontálny útok), je ťažšie vytvoriť ľubovoľnú správu, ktorá má daný hash kód, a to je tiež ťažšie vytvoriť dve správy, ktoré majú rovnaký hash kód.

V roku 2001 Národný inštitút noriem a technológií Spojených štátov prijal tri hash fungovať ako štandard s väčšou dĺžkou hashového kódu ako na SHA-1. Tieto hashové funkcie sa často nazývajú SHA-2 alebo SHA-256, SHA-384 a SHA-512 (dĺžka hash-kód vytvoreného algoritmami je uvedený v názve). Tieto algoritmy sa líšia nielen na dĺžku vytvoreného hashového kódu, ale tiež používané vnútorné funkcie a dĺžku spracovaného bloku (na SHA-256 Dĺžka jednotky - 512, a dĺžka bloku SHA-384 a SHA-512 je 1024 bitov). Postupné zlepšenie algoritmu SHA vedú k zvýšeniu jej kryptickej rezistencie. Napriek rozdielom v algoritmoch, ktoré sa navzájom posudzujú, sú všetky z nich ďalší rozvoj SHA-1 a MD4 a majú podobnú štruktúru.

V Rusku sa prijíma GOST P34.11-94, ktorá je domáci štandard pre funkcie hash. Jeho štruktúra je veľmi odlišná od štruktúry algoritmov SHA-1,2 alebo MD5, ktorá je založená na algoritme MD4. Dĺžka hashového kódu vytvoreného algoritmom GOST R 34.11-94 je 256 bitov. Algoritmus je postupne spracovaný zdrojovou správou blokov 256 bitov vpravo doľava. Parameter algoritmu je východiskový vektor hash - ľubovoľná pevná hodnota je tiež 256 bitov. V algoritme, GOST R 34.11-94, operácie permutácie, šmykové, aritmetické pridávanie, pridanie modulu 2. ako pomocná funkcia GOST 34.11-94 používa algoritmus podľa GOST 28147-89 v jednoduchom režime náhrad.

4. Požiadavky na funkcie hash

Funkcia Hash sa nazýva jednosmerná funkcia určená na prijímanie diskusie alebo "odtlačkov prstov", správy alebo niektorý dátový blok.

Hash kód je vytvorený funkciou N. :

h \u003d h (m)

Kde M. je posolstvo ľubovoľnej dĺžky a h. Je to hashový kód s pevnou dĺžkou.

Zvážte požiadavky, na ktoré sa musí hash funkcia zhodovať, aby sa mohol použiť ako autentifikátor správy. Zvážte veľmi jednoduchý príklad funkcie Hash. Potom analyzujeme niekoľko prístupov k výstavbe funkcie Hash.

Funkcia Hash N. Toto sa používa na autentifikáciu správ, musí mať tieto vlastnosti:

1. Funkcia Hash N. Malo by sa aplikovať na dátový blok akejkoľvek dĺžky.

2. HASH FUNKCIA N. Vytvorí výkon pevnej dĺžky.

3. N (m) Pomerne ľahko (pre polynómový čas) sa vypočíta pre akúkoľvek hodnotu M. .

4. Pre každý daný kód hash h. Je zjavne nemožné nájsť M. také, že H (m) \u003d h .

5. Za akékoľvek uvedené h. Je to výpočtovo nemožné nájsť to

H. y) \u003d h (x).

6. Vypočíta sa, že nie je možné nájsť ľubovoľný pár ( h. , y. ) H (y) \u003d h (x) .

Prvé tri vlastnosti vyžadujú funkciu hash na vytvorenie hashového kódu pre akúkoľvek správu.

Štvrtý majetok určuje požiadavku jednostrannosti funkcií hash: ľahko vytvoriť hash kód pre túto správu, ale nie je možné obnoviť správu na tomto hashovom kóde. Táto vlastnosť je dôležitá, ak autentifikácia pomocou funkcie Hash obsahuje tajnú hodnotu. Samotná tajná hodnota však nemusí byť odoslaná, ak funkcia Hash nie je jednostranná, nepriateľ môže ľahko odhaliť tajnú hodnotu nasledovne. Pri zadržaní prevodu, útočník dostane správu M. a hash kód C \u003d h (sab || m) . Ak útočník môže invertovať hash funkciu, potom sa môže dostať SAB || M \u003d h-1 (c) . Keďže útočník teraz vie a M. a SAB || M. , prijímanie Sab. celkom jednoduché.

Piaty majetok zaisťuje, že nie je možné nájsť inú správu, ktorej hodnota funkcie hash by sa zhodovala s hodnotou funkcie Hash táto správa. To zabraňuje falošnému autentifikáciu pri použití šifrovaného hashového kódu. V tomto prípade môže protivník prečítať správu, a preto vytvoriť svoj hash kód. Ale pretože nepriateľ nevlastní tajný kľúč, nemá schopnosť zmeniť správu tak, že príjemca ho nenájde. Ak táto vlastnosť nie je vykonaná, útočník má možnosť vykonávať nasledujúcu sekvenciu akcií: Ak chcete zachytiť správu a jeho šifrovaný hashový kód, vypočítajte hash hash, vytvorte alternatívnu správu s rovnakým kódom hash, nahradiť pôvodnú správu k falošnému. Keďže hash kódov týchto správ sa zhodujú, príjemca nebude detekovať substitúciu.

Hash funkcia, ktorá spĺňa prvé päť vlastností, sa nazýva jednoduchá alebo slabá funkcia hash. Ak sa vykonáva šiesty vlastnosť, táto funkcia sa nazýva silná funkcia hash. Šiesty majetok chráni pred útokmi triedy, známy ako útok "narodeniny".

5. Jednoduché hash funkcie

Všetky funkcie hash sa vykonávajú nasledovne. Vstupná hodnota (správa, súbor atď.) Je považovaná za sekvenciu n. Bloky. Vstupná hodnota sa spracováva sekvenčne blok za jednotkou a je vytvorený. m. Hodnota kódu Hash.

Jedným z najjednoduchších príkladov funkcie Hash je XORT-ROZDELENÝ KAŽDÝ BLOKU:

S I. - i. Bit hash, 1 <= i <= n .

k. - číslo n. Vstup blokov.

b ij. i. Bit B. j. Blok.

Potom je celá správa šifrovaná, vrátane hashového kódu, v režime CCS vytvoriť šifrované bloky Y1, Y2, ..., YN + 1. Podľa definície mám:

Ale XN + 1 je hash kód:

Vzhľadom k tomu, komponenty v predchádzajúcej rovnosti sa môžu vypočítať v ľubovoľnom poradí, preto sa hash kód nezmení, ak budú šifrované bloky preskupené.

Počiatočný štandard navrhnutý NIST používal jednoduchý XOR, ktorý bol použitý na 64-bitové bloky správ, potom je celá správa šifrovaná pomocou režimu CCS.

"Birthday Paradox"

Pred zvážením zložitejších funkcií hash je potrebné analyzovať jeden konkrétny útok na jednoduché funkcie hash.

Takzvané "narodeninové paradox" je nasledovné. Predpokladajme, že počet výstupných hodnôt funkcie Hash N. rovnako n. . Čo by malo byť číslo k. špecifickej hodnoty X. a hodnoty Y1 Yk. Pravdepodobnosť, že aspoň jedna YI bola vykonaná rovnosť

H (x) \u003d h (y)

by bolo viac ako 0,5.

Pre jedného Y. pravdepodobnosť, že H (x) \u003d h (y) , rovnocenné 1 / N. .

Preto, pravdepodobnosť, že , rovnocenné 1 - 1 / n .

Ak vytvoríte k. Hodnoty, pravdepodobnosť, že žiadna náhodnosť sa rovná produktu pravdepodobnosti zodpovedajúcich jednej hodnote, t.j. (1 - 1 / n) k .

V dôsledku toho je pravdepodobnosť aspoň jednej zhody rovná

1 - (1 - 1 / n) k

Takže sme zistili, že m. -Shone Hash Code je dosť na výber 2m-1 Správy tak, že pravdepodobnosť náhody hashových kódov bola väčšia ako 0,5.

Teraz zvážte nasledujúcu úlohu: označiť P (n, k) pravdepodobnosť, že v súbore k. prvky, z ktorých každý môže trvať n. Hodnoty, existujú aspoň dve s rovnakými hodnotami. Čo by malo byť rovnaké k. na P (n, k) by bolo viac 0,5 ?

Počet rôznych spôsobov, ako vybrať prvky takým spôsobom, že nemá dvojité, rovné

n (n - 1) ... (n - k + 1) \u003d n! / (n-k)!

Všetky možné spôsoby, ako si vybrať prvky rovnaké n K.

Pravdepodobnosť, že nie sú žiadne dvojité n! / (N - k)! N K

Pravdepodobnosť, že existuje duplikát, resp.

1 - n! / (N-k)! Nk P (n, k) \u003d 1 - n! / ((n - k)! x nk) \u003d 1 - (n x (n - 1) x ... x (N - K-1)) / NK \u003d 1 - [(n-1) / n x (n-2) / n x ... X (N-K + 1) / N] \u003d 1 - [(1- 1 / n) x (1 - 2 / n) x ... x (1 - (K-1) / n)]

Ak má hash kód dĺžku m. Bit, t.j. súhlasiť 2m. Hodnoty, T.

Podobný výsledok sa nazýva "narodeninové paradox", pretože v súlade s vyššie uvedenými argumentmi, aby sa pravdepodobnosť náhody narodenín dvoch ľudí mala väčšia ako 0,5, mala by existovať len 23 ľudí v skupine. Tento výsledok sa zdá úžasný, možno preto, že pre každého jednotlivého človeka v skupine pravdepodobnosť, že narodeniny niekoho iného v skupine sa zhoduje s jeho narodeninami, je pomerne malý.

Vráťme sa k zváženiu vlastností hashových funkcií. Predpokladajme, že sa používa 64-bitový hashový kód. Možno zvážiť, že je to dosť dostatočné, a preto bezpečná dĺžka pre hashový kód. Napríklad, ak kód šifrovaného hash Z Prenášané s príslušnou nešifrovanou správou M. , potom bude potrebné nájsť nepriateľa M ' také, že

N (m) \u003d n (m) ,

ak chcete nahradiť správu a podieľať príjemcu. V priemere by mal nepriateľ prelomiť 263 správ, aby ste zistili, že kód hash sa rovná zadržanej správe.

Napriek tomu sú možné rôzne druhy útokov založené na "narodeninových paradoxoch". Možná je táto stratégia:

1. nepriateľ vytvára 2 m / 2 Možnosti správy, z ktorých každý má určitý zmysel. Nepriateľ pripravuje rovnaký počet správ, z ktorých každý je falošný a je určený na nahradenie tejto správy.

2. Dva súbory správ sa porovnávajú pri hľadaní páru správ, ktoré majú rovnaký hash kód. Pravdepodobnosť úspechu v súlade s "narodeninovým paradoxom" je väčšia ako 0,5. Ak sa nenašiel príslušný pár, vytvoria sa dodatočný zdroj a falošné správy, kým sa nenájde para.

3. Útočník ponúka odosielateľovi počiatočnú verziu správy pre podpis. Tento podpis môže byť potom pripojený k falošnej možnosti pre prenos príjemcu. Keďže obe možnosti majú rovnaký hash kód, vytvorí sa rovnaký podpis. Nepriateľ bude istí v úspechu, ani nevedel šifrovací kľúč.

Ak sa teda používa 64-bitový hash kód, potrebná zložitosť výpočtov je približne 232.

Na záver sme si všimli, že dĺžka hashového kódu musí byť dosť veľká. Dĺžka rovná 64 bitov sa v súčasnosti nepovažuje za bezpečnú. Je vhodnejšie, aby dĺžka tvorí rád 100 bitov.

Použitie reťazca šifrovaných blokov

Existujú rôzne hash funkcie založené na vytvorení reťazca šifrovaných blokov, ale bez použitia tajného kľúča. Jedna z týchto hashových funkcií navrhla Rabin. Správa M. rozdelené na bloky pevnej dĺžky M1, M2 ,. . . , Mn. a pomocou symetrického šifrovacieho algoritmu, ako napríklad DES, na výpočet hashového kódu G. Nasledujúcim spôsobom:

H 0 - Počiatočný význam N I. = E mi G. = H N.

Je to podobné používaniu šifrovania v režime CSA, ale v tomto prípade neexistuje žiadny tajný kľúč. Rovnako ako v prípade ľubovoľnej jednoduchej funkcie hash, tento algoritmus je náchylný na "útok narodenín", a ak je šifrovací algoritmus des a len 64-bitový hashový kód je vytvorený, systém sa považuje za dosť zraniteľný.

Môžu existovať iné útoky ako "narodeniny", ktoré sú možné, aj keď má nepriateľ prístup len na jednu správu a zodpovedajúci šifrovaný hash kód a nemôže prijímať niekoľko párov správ a šifrovaných hashových kódov. Nasledujúci scenár je možný: Predpokladajme, že nepriateľ zachytil správu s autentifikátorom vo forme šifrovaného hashového kódu a je známe, že nešifrovaný hash kód má dĺžku m. bity. Ďalej musí nepriateľ vykonať tieto akcie:

· Použitie vyššie opísaného algoritmu, vypočítajte nešifrovaný hashový kód G. .

· Vytvorte falošnú správu vo formulári Q1, Q2 ,. . . , Qn-2 .

· Vypočítajte N i \u003d e qi pre 1 <= i <= N-2 .

· Vytvoriť 2 m / 2 Náhodné bloky H. A pre každý taký blok H. vypočítať E H. . Navyše 2 m / 2 Dostatok bloku Y. a pre každý blok Y. vypočítať D y [g] kde D. - Zdobenie funkcie zodpovedajúce E. . Na základe "narodeninových paradox" môžeme povedať, že s vysokým stupňom pravdepodobnosti bude táto sekvencia obsahovať bloky H. a Y. také, že E x \u003d d y [y] .

· Vytvorte správu Q1, Q2 ,. . . , Qn-2, X, Y . Táto správa má kód hash G. A preto môže byť použitá so šifrovaným autentifikátorom.

Táto forma útoku je známa ako útok "stretnutie v strede". V rôznych štúdiách sa ponúka viac jemných metód na zvýšenie prístupu na základe blokového reťazca. Napríklad Devis a cena popísali nasledujúcu možnosť:

Ďalšia možnosť je možná:

Avšak, obe tieto systémy majú tiež zraniteľné miesta na rôznych útokoch. Vo všeobecnejšom prípade je možné preukázať, že nejaká forma "útok narodenín" je úspešný s akýmkoľvek hash algoritmom, ktorý zahŕňa použitie reťazca šifrovaných blokov bez použitia tajného kľúča.

Ďalší výskum bol zameraný na nájdenie iných prístupov k vytváraniu funkcií hashovania.

Funkcia MD5 Hash

Zvážte, že MD5 hovoru Digest Algorithm (RFC 1321) vyvinutý Ron Rivesom z MIT.

MD5 Realizácia Logika

Algoritmus prijíma ľubovoľnú dĺžku na vstup a vytvára 128 dávkovú správu, ktorá je vzdialená ako výstup. Algoritmus pozostáva z nasledujúcich krokov:

Obr. 8.1.MD5 Realizácia Logika

Krok 1: Pridanie chýbajúcich bitov

Správa je doplnená tak, že jej dĺžka sa rovná 448 Modulo 512 (). To znamená, že dĺžka pridanej správy o 64 bitov je menšia ako číslo, viacnásobné 512. Pridanie sa vždy vykonáva, aj keď má správa požadovaná dĺžka. Napríklad, ak je dĺžka správy 448, je doplnená o 512 bitov na 960 bitov. Počet pridaných bitov je teda v rozsahu od 1 do 512.

Pridanie sa skladá z jednotky, pre ktorú nasleduje požadovaný počet nuly.

Krok 2: Dĺžka pridania

64-bitové znázornenie zdrojovej dĺžky (pred pridaním) správy v bitoch je spojené s výsledkom prvého kroku. Ak je počiatočná dĺžka väčšia ako 2,64, používa sa len posledných 64 bitov. Pole teda obsahuje dĺžku zdrojovej správy modulom 2 64.

V dôsledku prvých dvoch krokov sa vytvorí správa, ktorej dĺžka je viacnásobné 512 bitov. Táto rozšírená správa je reprezentovaná ako sekvencia 512-bitových blokov y 0, y 1 ,. . , Y L-1, zatiaľ čo celková dĺžka rozšírenej správy sa rovná l * 512 bitov. Dĺžka prijatej pokročilej správy je teda viac ako šestnásť 32-bitových slov.

Obr. 8.2.Štruktúra rozšírenej správy

Krok 3: Inicializácia MD-Buffer

Používa sa 128-bitový pufor na ukladanie medziproduktov a konečných výsledkov hashovej funkcie. Buffer môže byť reprezentovaný ako štyri 32-bitové registre (A, B, C, D). Tieto registre sa inicializujú nasledujúcimi hexadecimálnymi číslami:

A \u003d 01234567 B \u003d 89ABCDEF C \u003d FEDCBA98 D \u003d 76543210

Krok 4: Spracovanie sekvencie 512-bitových (16-lyrických) blokov

Základom algoritmu je modul pozostávajúci zo štyroch cyklických ošetrení, označených ako HMD5. Štyri cykly majú podobnú štruktúru, ale každý cyklus používa svoju elementárnu logickú funkciu, označuje F, F, F G, F H a F I.

Obr. 8.3.Spracovanie ďalšieho 512-bitového bloku

Každý cyklus berie ako vstupný prúd 512-bitový blok y Q, aktuálne spracovaný a 128-bitovou hodnotou tlmivky ABCD, ktorý je medziľahlou hodnotou digestov a mení obsah tohto pufra. Každý cyklus tiež používa štvrtú časť tabuľky t t, na základe funkcie hriechu. I-TH prvok t, označený t [i], sa rovná celej časti 2 32 * ABS (SIN (I)), I je v Radiáriach. Keďže ABS (SIN (I)) je číslo medzi 0 a 1, každý prvok T je celý, ktorý môže byť reprezentovaný 32 bitmi. Tabuľka poskytuje "náhodnú" sadu 32-bitových hodnôt, ktoré musia eliminovať akúkoľvek pravidelnosť vo vstupných údajoch.

Na získanie MD Q + 1 je výťažok štyroch cyklov tvorený modulom 2 32 s MD Q. Pridanie sa vykonáva nezávisle pre každú zo štyroch slov v pufri.

CLS S je cyklický posun vľavo od 32-bitových argumentových bitov.

X [K] - M - M - K-o 32-bitové slovo v Q-OHM 512 Blok správ.

T [i] - I-O, 32-bitové slovo v matrici T.

+ - Prídavok modulu 2 32.

Na každom zo štyroch cyklov algoritmu sa používa jedna zo štyroch elementárnych logických funkcií. Každá elementárna funkcia prijíma tri 32-bitové slová na vstup a výstup vytvára jeden 32-bitový slova. Každá funkcia je množstvom dávkových logických operácií, t.j. Nový výstup bit je funkcia z bitov n-B troch vstupov. Základné funkcie sú nasledovné:

Pole 32-bitových slov X obsahuje hodnotu aktuálneho 512-bitového vstupného bloku, ktorý je v súčasnosti spracovaný. Každý cyklus beží 16-krát a pretože každý blok vstupnej správy je spracovaný v štyroch cykloch, potom sa každá vstupná jednotka spracováva podľa diagramu znázorneného na obr. 4, 64 krát. Ak odošlete vstup 512-bitový blok vo forme šestnástich 32-bitových slov, každý vstup 32-bitové slovo sa používa štyrikrát, jedenkrát v každom cykle, a každý prvok tabuľky t, pozostávajúci zo 64 32-bitových Slová, používa sa len raz. Po každom kroku cyklu sa vyskytuje cyklický posun vľavo od štyroch slov A, B, C a D. Pri každom kroku, len jeden zo štyroch slov sa mení ABCD. V dôsledku toho každé vyrovnávacie slovo sa mení 16-krát a potom na 17. čas na konci, aby sa získal konečný výstup tohto zariadenia.

stráviť.

2. Rýchlosť: Program implementácia algoritmu musí byť vykonaná pomerne rýchlo. Najmä algoritmus musí byť dostatočne rýchly na 32-bitovej architektúre. Preto je algoritmus založený na jednoduchej sade základných operácií cez 32-bitové slová.

3. Jednoduchosť a kompaktnosť: Algoritmus by mal byť jednoduchý v popise a jednoduché program, bez veľkých programov alebo zástupných znakov. Tieto charakteristiky nemajú len zrejmé výhody programu, ale tiež žiaduce z hľadiska bezpečnosti, pretože na analýzu možných slabých miest je lepšie mať jednoduchý algoritmus.

4. Požadovaná malým architektúrou: Niektoré architektúry procesorov (napr. Linka Intel 80xxx) Skladujte slová, ktoré zanechávajú vedľajšie vedľajšie adresy (Little-Endian). Iní (napríklad Sun Sparcstation) Skladujte správne bajty slova v pozícii Junior Byte Address (Big MD4 Dodatočná konštanta v prvom cykle neplatí. Podobná ďalšia konštanta sa používa pre každý krok v druhom cykle. Ďalšie ďalšie Konštanta sa používa pre každý z krokov v treťom cykle., Hashový kód je funkcia z každej bitky vstupu. Komplexné opakovanie základných funkcií FF F, FG, FH a FI zabezpečuje, že výsledok je dobre zmiešaný; To znamená, že je nepravdepodobné, že je nepravdepodobné, že dve správy vybrané náhodou, aj keď majú očividne podobné vzory, mali rovnaký trávenie, ktoré vytvárajú rovnakú výstupnú hodnotu. To znamená, že vykonanie MD5 cez jedno blok 512 bitov bude viesť k Rovnaký výkon pre dve rôzne vstupné hodnoty v nárazníku ABCD. Zatiaľ čo spôsob rozširovania tohto prístupu na úspešný útok MD5 neexistuje.