Mi a funkciója a hasításnak. Kriptográfiai hash funkciók

A vizsgált keresési algoritmusok általában absztrakt összehasonlító műveleten alapulnak. Ebből a sorozatból, az elosztási módszer leírása a „Symbol asztalok és bináris keresés fák”, amely tárolja az i-edik pozícióban az asztal, amely lehetővé teszi, hogy olvassa el közvetlenül. A keresés terjesztésével a kulcsokat tömb indexként használják, és nem az összehasonlító művelet operandusai; Maga a módszer azon a tényen alapul, hogy a kulcsok különböző egész számok ugyanolyan tartományból, mint a táblázat indexek. Ebben a fejezetben megnézzük a hasing (hashing) - az elosztási keresés kiterjesztett változatát, amelyet tipikusabb keresési alkalmazásokban használnak, ahol a kulcsok nem rendelkeznek olyan kényelmes tulajdonságokkal. Az alkalmazás végeredménye ez a megközelítés Egyáltalán nem hasonlít a módszerek összehasonlítása alapján - ahelyett, hogy mozog keresztül szótárban adatstruktúrák összehasonlításával legfontosabb keresési kulcsok elemek, igyekszünk utalni a terméket a táblázatban közvetlenül végző aritmetikai gomb átalakítás az asztalra a címeket.

A keresési algoritmusok használata a hasing két különálló részből áll. Az első lépés a hash funkció (hash funkció) kiszámítása, amely átalakítja a keresési kulcsot az asztalra. Ideális esetben különböző kulcsokat kell megjeleníteni különböző címeken, de gyakran két vagy több különböző kulcs adhat ugyanazt a címet az asztalon. Ezért a keresés második része a hashing módszerével az ütközések (ütközési felbontás) megoldásának folyamata, amely ilyen kulcsokat feldolgoz. Az egyik konfliktus megoldási módszerek, amelyek figyelembe vesszük ebben a fejezetben, a csatlakoztatott listákat használnak, ezért úgy találja, közvetlen felhasználásra dinamikus helyzetekben, amikor nehéz előre megjósolni a számát keresési kulcsok. Az ütközések megoldásának más két módszere, nagyon elért teljesítmény Keresés, mivel az elemeket rögzített tömbben tárolják. Figyelembe vesszük az ilyen módszerek javításának módját, lehetővé téve Önnek, hogy használja őket, és olyan esetekben, amikor lehetetlen előre megjósolni a táblázat méretét előre.

Hashing jó példa az egyensúly az idő és a memória között. Ha nincs korlátozás a használt memória mennyiségére, bármely keresést csak egy memória hozzáféréssel lehet végrehajtani, egyszerűen a kulcsot memóriacímként használva, mint a keresés terjesztése mellett. Azonban ez az ideális esetben általában elérhetetlen, mivel a hosszú kulcsok hatalmas mennyiségű memóriát igényelhetnek. Másrészt, ha nincs korlátozás vezetési idő, Lehetőség lenne a minimális memóriával, a szekvenciális keresési módszerrel. A hashing a memória és az idő elfogadható mennyisége, valamint a két szélsőséges követelmény közötti egyensúly elérése. Különösen támogathatja az egyensúlyt, egyszerűen megváltoztathatja az asztal méretét, és nem írja át a kódot, és más algoritmusok kiválasztása nélkül.

A Hashing a számítógépes tudományok egyik klasszikus feladata: a különböző algoritmusokat részletesen tanulmányozzák, és széles körben használják. Látni fogjuk, hogy egyáltalán nem kemény feltételezéseknél reménykedhet a műveletek támogatására, hogy megtalálja és illessze be a szimbólumasztalokat állandó végrehajtási idővel, függetlenül az asztal méretétől.

Ez a várt érték az elméleti teljesítmény optimum a szimbólumtábla bármilyen megvalósításához, de a hash még mindig nem csodák két fő okból. Először, vezetési idő A legfontosabb hosszúságtól függ, amely a hosszú kulcsok segítségével valódi alkalmazásokban jelentős lehet. Másodszor, a Hashing nem biztosít hatékony végrehajtását más műveletek szimbólum táblázatokkal, például válasszon vagy válogatás. Ebben a fejezetben részletesen megvizsgáljuk ezeket és más kérdéseket.

Hash funkció

Először is meg kell oldani a Hash funkció kiszámításának feladatát, amely átalakítja a gombokat az asztali címre. Jellemzően az aritmetikai számítás megvalósítása nem jelent bonyolultságot, de még mindig szükséges az ellátás betartása, hogy ne váljon különböző alacsony kihívást jelentő buktatókba. Ha van egy táblázat, amely M elemeket tartalmazhat, olyan funkcióra van szüksége, amely kulcsokat konvertál az egész számokhoz a tartományban. Az ideális hash funkciót könnyű kiszámítani, és hasonlónak kell lennie egy véletlenszerű funkcióhoz: bármilyen érv esetében az eredménynek megfelelő eredménynek egyenértékűnek kell lennie.

A hash funkció a kulcs típusától függ. Szigorúan beszélve egy külön hash funkciót külön kulcsfontosságú típust igényel. A hatékonyság növelése érdekében általában kívánatos, hogy ne kifejezetten átalakítása típusok, kapcsolatfelvétel az ötlet venni a bináris bemutatása kulcs a gépi szó, mint egy egész, hogy lehet használni a számtani számítások. A hash előtt megjelent a magas szintű nyelvek - a korai számítógépek volt a szokásos kérdés, hogy bármely értéke, mint egy húr gombot, majd egy egész szám. Néhány magas szintű nyelven nehéz létrehozni olyan programokat, amelyek az adott számítógépen lévő kulcsok bemutatásától függenek, mivel az ilyen programok lényegében gépfüggőek, ezért nehézkesek egy másik számítógépre. Jellemzően hash függvények függenek a legfontosabb átalakítási folyamatot egészek, ezért nehéz egyidejűleg biztosítja a gép függetlensége és hatékonysága a megvalósítások a hasítás. Szabályként az egyszerű egész kulcsokat vagy lebegőpontos típusú kulcsokat csak egy gépi működéssel lehet átalakítani, de a karakterláncgombok és más típusú összetett gombok magas költségeket és nagyobb figyelmet igényelnek a hatékonyságra.

Valószínűleg a legegyszerűbb helyzet az, amikor a kulcsok rögzített tartományú lebegőponttal rendelkeznek. Például, ha a gombok számok, nagy és kisebb 1 számok, egyszerűen meg lehet szorozni M, kerekítsük az eredményt egy kisebb egész számhoz, és kapja meg a címet a 0 és m - 1 közötti tartományban; Ezt a példát az 1. ábrán mutatjuk be. 14.1. Ha a gombok nagyobbak, mint S és kevesebb, mint t, akkor méretezhetők, levonhatják az S-t és a TS-ot, aminek következtében a 0 és 1 közötti értéktartományba esnek, majd szaporodnak m és kapsz a cím a táblázatban.


Ábra. 14.1.

A numerikusok átalakítása a 0 és az 1 közötti tartományban a táblázat indexei között, amelynek mérete 97, akkor ezeket a számokat 97-re szorozza. Ebben a példában három konfliktus történt: 17, 53 és 76 indexek esetén. A hash értékeket a vének kulcsfontosságú kibocsátás határozza meg, a fiatalabb kibocsátások nem játszanak szerepet. A hash funkció fejlesztésének egyik célja, hogy megszüntesse az ilyen egyensúlyhiányt, hogy minden kisütést figyelembe vesszük a számítás során.

Ha a kulcsok W-bites egész számok, lebegőpontos számokká alakíthatók, és 2 W-vel oszthatók le, hogy lebegőpontos számokat kapjanak a 0 és 1 közötti tartományban, majd mulippen m-re, mint az előző bekezdésben. Ha a lebegőpontos műveletek sok időt foglalnak el, és a számok nem olyan magasak, hogy a túlcsorduláshoz vezethessenek, ugyanazt az eredményt az egész számtani műveletek segítségével lehet elérni: Meg kell szednie a kulcsot m-re, majd hajtsa végre a Jobbra a W-on a 2 W-os megosztására (vagy ha a sokszorosítás túlcsordulásához, eltolódáshoz, majd szorzáshoz vezet). Az ilyen módszerek haszontalanok a hasításhoz, kivéve, ha a kulcsokat egyenletesen osztják el a tartományban, mivel a hash értékét csak a kulcs vezető számjegyei határozzák meg.

Egyszerűbb I. hatékony módszer A W-bit egész számokhoz - az egyik leggyakrabban használt hashing módszere - a választás, mint egy egyszerű számú táblázat, és kiszámítja a maradékot az M, I.E. h (k) \u003d k mod m bármely egész velemhez. Ezt a funkciót moduláris hash funkciónak nevezik. Nagyon könnyű kiszámolni (K% M C ++), és hatékony, hogy a kisebb M-értékek közötti egyenletes értékek egyenletes eloszlása \u200b\u200blegyen. Egy kis példa látható az 1. ábrán. 14.2.


Ábra. 14.2.

A három jobb oldali oszlopban a bal oldalon látható 7 bites gombok eredménye a következő funkciók használatával jelenik meg:

v% 97 (balra)

v% 100 (központ) és

(INT) (A * V)% 100 (jobbra),

ahol a \u003d .618033. Az ilyen funkciók táblázatának mérete 97, 100 és 100. Az értékek véletlenszerűen jelennek meg (mivel a kulcsok véletlenszerűek). A második funkció (V% 100) csak két extrém jobb oldali számot használ, ezért a nem véletlenszerű kulcsok esetében alacsony teljesítményt mutathatnak.

A moduláris hasházás a lebegőpontos kulcsokra vonatkozik. Ha a kulcsok egy kis tartományba tartoznak, akkor a 0 és az 1, 2 W közötti tartományba méretezhető, hogy megkapja a W-bit egész értékét, majd használja a moduláris hash funkciót. Egy másik lehetőség az, hogy egyszerűen használjon moduláris hash-funkció bináris bináris bemutatót (ha rendelkezésre áll).

A moduláris hashajtást minden esetben alkalmazzák, ha olyan bitekhez való hozzáférés, ahonnan a kulcsok a gépszó által képviselt egész számok, a gép szóban csomagolt szimbólumok sorrendje, vagy bármely más ábrázolása lehetséges opció. A gépi szóba csomagolt véletlenszerű szimbólumok szekvenciája nem pontosan ugyanaz, mint a véletlenszerű egész kulcsok, mivel a kódoláshoz nem minden kisütést használnak. De mindkettő ilyen típusú (és bármely más típusú kulcs, amely oly módon, hogy illeszkedjen a gépi szóba), úgy tűnik, hogy úgy néz ki, mint a véletlenszerű indexek egy kis asztalnál.

Ennek fő oka a kiválasztás, mint egy méretű m hash tábla egy egyszerű szám moduláris hashelés ábrán látható. 14.3. Ebben a példában a 7 bites kódolású szimbolikus adatok, a kulcsot számként úgy értelmezik, mint egy 128 bázissal - az egyes karakterek egyik számjegyével. Most a szó megfelel az 1816567-es számnak, amely is írható

mivel az N, O és W ASCII kód \u200b\u200bszimbólumok megfelelnek a 1568 \u003d 110, 1578 \u003d 111 és 1678 \u003d 119 számnak. Az M \u003d 64, az ilyen típusú kulcs méretének mérete sikertelen, mivel az x értékekhez, több 64 (vagy 128) hozzáadásával nem változtatja meg az X MOD 64 értéket - bármely gombra, a hash funkció értéke a a kulcs utolsó 6 számjegyének értéke. Természetesen egy jó hash funkciónak figyelembe kell vennie az összes kulcsfontosságú kibocsátást, különösen a szimbolikus kulcsok számára. Hasonló helyzetek fordulhatnak elő, ha M tartalmaz egy szorzót, ami 2 fok. A legegyszerűbb út Kerülje el ezt - válassza ki, mint egy egyszerű számot.


Ábra. 14.3.

A táblázat minden sorában Ön: 3 -es betűs szó, ennek a szónak a bemutatása ASCII-kódban, mint 21 bites szám az oktánban és a decimális formában és a normál moduláris hash funkciókban a 64. és a 31. táblázat méreteihez (kettő) szélsőséges oszlop a jobb oldalon). A 64. táblázat mérete nemkívánatos eredményekhez vezet, mivel csak a jobboldali kulcsfontosságú kibocsátásokat használják a hash érték megszerzéséhez, és a szokásos nyelv szavaival kapcsolatos betűk egyenetlenek. Például az Y betűvel ellátott összes szó megfelel az 57-es hash értéknek. És éppen ellenkezőleg 31 egyszerű értéke kevesebb konfliktus van az asztalnál több mint kétszer annyi.

A moduláris hasházás nagyon könnyű megvalósítható, kivéve, hogy az asztal mérete egyszerű számnak kell lennie. Bizonyos alkalmazások esetén egy kis ismert egyszerű számmal rendelkező, vagy a híres elsődleges számok listáján található, amely közel van az asztal kívánt méretéhez. Például a számok 2 t - 1, egyszerűek t \u003d 2, 3, 5, 7, 13, 17, 19 és 31 (és nincs más érték t< 31 ): это известные простые числа Мерсенна. Чтобы динамически распределить таблицу нужного размера, нужно вычислить простое число, близкое к этому значению. Такое вычисление нетривиально (хотя для этого и существует остроумный алгоритм, который будет рассмотрен в части 5), поэтому на практике обычно используют таблицу заранее вычисленных значений (см. рис. 14.4). Использование модульного хеширования - не az egyetlen okamelyen a táblázat mérete érdemes egyszerű számot készíteni; A 14.4. Szakaszban egy másik okot kell figyelembe venni.


Ábra. 14.4.

Ez a táblázat a legnagyobb egyszerű szám kisebb, mint 2 N, mert Használható a dinamikus hash táblázat terjesztéséhez, ha szükséges, hogy a táblázat mérete egyszerű szám. A fedett tartományban lévő bármely pozitív értéknél ez a táblázat használható olyan egyszerű szám meghatározására, amely kevesebb, mint 2 alkalommal eltér.

Az egész számok egy másik kiviteli alakja a multiplikatív és moduláris módszerek kombinációja: Meg kell szednie a kulcstartót a 0 és az 1 közötti tartományban, majd a M. Module M. Más szóval. Más szóval a funkciót kell használnia. Értékek között, M \u200b\u200bés a tényleges alapja a kulcs száma rendszer, van olyan kapcsolat, amely elméletileg vezethet rendellenes viselkedés, de ha be tetszőleges értéket egy, az igazi melléklet Nem valószínű, hogy bármilyen problémája van. Gyakran, mint a, az F \u003d 0,618033 ... (Golden Section) érték van kiválasztva.

Számos más változatot vizsgáltunk ezen a témakörben, különösen a HASH funkciókat, amelyek ilyen hatékony gépi utasításokkal, például műszakdal és maszkválasztással rendelkezhetnek (lásd a linkeket).

Sok alkalmazásban, amelyek szimbólum táblázatokat használnak, a kulcsok nem számok, és nem feltétlenül rövidek; Gyakrabban alfanumerikus vonalak, amelyek nagyon hosszúak lehetnek. Nos, hogyan kell kiszámítani a hash funkciót egy szót AveryLongkey-nek?

A 7 bites ASCII-kódban ez a szó megfelel a 84 bites szám megkezdéséhez (igazítás *) 97 \\ cdot 128 ^ (11) és + 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), \\ VÉG (Igazítás *),

amely túl nagy ahhoz, hogy a szokásos aritmetikai funkciókat a legtöbb számítógépen végezzük. És gyakran kell kezelni és sokkal hosszabb kulcsokat.

A hosszú kulcsok moduláris hash funkciójának kiszámításához töredékre fragmensre alakulnak át. Használhatja a modul funkció aritmetikai tulajdonságait, és használja a Gorner algoritmust (lásd 4.9 pont "Absztrakt adattípusok"). Ez a módszer a kulcsok megfelelő rögzítési számát alapul. A Például megfontolás alatt, írunk a következő kifejezés: \\ kezdődik (align *) ((((((((((97 \\ cdot 128 ^ (11) és + 118) \\ cdot 128 ^ (10) + 101) \\ CDOT 128 ^ (9) + 114) \\ CDOT 128 ^ (8) + 121) \\ CDOT 128 ^ (7) \\ & + 108) \\ CDOT 128 ^ (6) + 111) + 110) \\ CDOT 128 ^ (4) + 103) \\ CDOT 128 ^ (3) \\ & + 107) \\ CDOT 128 ^ (2) + 101) \\ CDOT 128 ^ (1) + 121. \\ VÉG (igazítsa igazítsa) *)

Vagyis a karakterlánc karakterkódolásának megfelelő decimális szám kiszámítható, ha balról jobbra tekinthető, a felhalmozott érték 128-ra, majd a következő szimbólum kódértékének hozzáadásával. Hosszú karakterlánc esetén ez a számítási módszer végül olyan nagyot eredményez, amelyet egyáltalán be lehet nyújtani a számítógépen. Ez a szám azonban nem szükséges, mert csak (kicsi) maradékra van szükség az M megosztásakor az M. Az eredmény beszerezhető anélkül, hogy a felhalmozott értéket tartja, mert Bármikor, a számítás több méterrel eldobható, minden egyes szorzást végez, és kiegészítve, csak a maradékot kell tárolni az M megosztási modulból. Az eredmény ugyanaz lesz, mintha kiszámolnánk hosszú szám, majd végezze el a divíziót (lásd: 14.10 gyakorlat). Ez a megfigyelés, hogy a közvetlen számtani kiszámításának módja, moduláris hash függvények hosszú sorok - lásd a programot 14.1. Ez a program egy másik, az utolsó csomózás: a 128 alap helyett egy egyszerű 127-es számot használ. Ennek a változtatásnak az oka a következő bekezdésben szerepel.

Számos mód van arra, hogy a hash funkciókat kb. számtani műveletek A kulcs minden szimbólumához). A véletlenszerű kulcsok esetében ezek a módszerek gyakorlatilag nem különböznek egymástól, de a valódi kulcsok ritkán véletlenek. Az a lehetőség, az ára alacsony költségek, így igazi kulcs véletlenszerű jellege vezet figyelembevételével randomizált darabolási algoritmus, hiszen szükségünk van hash függvények létrehozása véletlen táblaindexek függetlenül a legfontosabb elosztó. Ez nem nehéz megszervezni randomizálás, hiszen nem kell szó szerint betartani a meghatározása moduláris tördelő - arra van szükség, hogy kiszámítja a teljes több kisebb M, az összes kulcsfontosságú kibocsátás használtunk.

M \u003d 96 és a \u003d 128 (a tetején)

M \u003d 97 és A \u003d 128 (központ) és

M \u003d 96 és A \u003d 127 (alább)

Az egyenetlen eloszlás az első esetben az egyenetlen betűk egyenetlen használata és az egyenlőtlenség megőrzésének eredménye az, hogy az asztal és a multiplikátor multiplikátorsága 32. két másik példa véletlenszerűen néz ki, mivel az asztal és a szorzó mérete kölcsönösen egyszerű számok.

A 14.1 program azt mutatja, hogy az egyik módja ennek: Egy egyszerű bázis használata a 2. fokozat helyett, és a karakterlánc ASCII képviseletének megfelelő egész szám. Ábrán. 14.5 ábra. 14.5 Megmutatjuk, hogy ez a változás javítja a tipikus karakterláncok elosztását. A 14.1 program által létrehozott elméletileg hash értékek rossz eredményeket adhatnak a 127-es többszörös méretméretekhez (bár a gyakorlatban valószínűleg szinte észrevehetetlenek lesznek); Véletlenszerű algoritmus létrehozásához lehetőség lenne véletlenszerűen kiválasztani a szorzó értékét. Még hatékonyabb megközelítés az, hogy az együtthatók véletlenszerű értékeit használják a számításban és különböző véletlenszerű értékek minden egyes kulcsszámhoz. Ez a megközelítés egy véletlenszerű algoritmust ad univerzális hasítónak (univerzális hasítónak).

Elméletileg az ideális univerzális hash funkció olyan függvény, amelyhez a két különböző kulcs közötti ütközés valószínűsége az M méretű táblázatban pontosan egyenlő 1 / m. Belátható, hogy a felhasználásra együttható A programban 14,1 nincs rögzítve tetszőleges értéket, és a szekvenciák véletlenszerű különböző értékeket átalakítja moduláris tördelő egy univerzális hash függvény. Azonban az egyes szimbólumok új véletlenszámának létrehozásának költsége általában elfogadhatatlan. A gyakorlatban a 14.1 programban bemutatott kompromisszumot lehet elérni anélkül, hogy minden egyes kulcsszimbólumra különböző véletlen számokat tartana, és az együtthatókat egy egyszerű pszeudo-véletlen szekvencia generálásával változtatják meg.

Összefoglaljuk: Egy absztrakt jellegű táblázat végrehajtása a hashing használatához először ki kell terjesztenie az absztrakt típusú felületet, és bekapcsolja a hash működését, amely megjeleníti a kulcsokat a nem negatív egész számokhoz, kisebb táblázatmérethez M.

E cikk részeként elmondom mi van hashMiért van szükség, hol és hogyan használják, és a legismertebb példák.

Számos kihívás az információs technológiák területén nagyon kritikus az adatmennyiségek számára. Például, ha meg kell összehasonlítani két fájlt, amelynek mérete 1 kb és két fájlt a 10 GB-os, akkor ez teljesen más időben. Ezért olyan algoritmusok, amelyek lehetővé teszik, hogy rövidebb és tágas értékekkel működjenek, nagyon népszerűek.

Az ilyen technológiák hashing, amely a feladatok tömegének megoldása során megtalálta. De azt hiszem, mint egy hétköznapi felhasználó, még mindig érthetetlen, milyen fenevad van az, amire szüksége van. Ezért megpróbálom megmagyarázni az összes legegyszerűbb szót.

jegyzet: Az anyag célja az egyszerű felhasználók számára, és nem tartalmaz sok technikai szempontból azonban alapvető megismerése is több mint elég.

Mi van hash vagy hash?

Feltételekkel kezdem.

Hash funkció, konvolúciós funkció - Ez egy különleges funkció, amely lehetővé teszi, hogy megtérít tetszőleges hosszúságú szöveg egy fix hosszúságú kód (általában rövid digitális felvétel).

Hashajtás - Ez a forrásszövegek átalakításának folyamata.

Hash, hash kód, értékhiány, hash összegű - Ez a hash funkció kimeneti értéke, azaz a kapott blokk rögzített hosszúságú.

Amint láthatja, a kifejezések néhány formájú leírással rendelkeznek, amelyből nehéz megérteni, hogy miért szükséges. Ezért azonnal adok egy kis példát (az egyéb alkalmazásokról egy kicsit később fognak mondani). Tegyük fel, hogy 2 fájlja van 10 GB-ról. Hogyan tudod gyorsan megtudni, melyiknek szüksége van? Használhatja a fájl nevét, de könnyen átnevezhető. Nézheti a dátumokat, de a fájlfájlok másolása után ugyanaz lehet, vagy más szekvenciákban. A méret, hogyan érted magad, kevés segíthet (különösen, ha a dimenziók egybeesnek, vagy nem néztek meg a bájt pontos értékeit).

Itt van, hogy szüksége van erre a Hash, amely egy rövid blokk, amely a fájl forrásszövegéből származik. Ez a két 10 GB fájl két különböző, de rövid hash kóddal rendelkezik (valami, mint az "Accac43535" és a "BBB3232A42"). Használja őket, gyorsan megtudhatja a kívánt fájl.Még a másolás és a nevek megváltoztatása után is.

jegyzet: Annak a ténynek köszönhetően, hogy a világ számítógépén és az interneten található hash egy nagyon jól ismert fogalom, akkor gyakran minden, ami a hash-hoz kapcsolódik, ez a szóra csökken. Például az „Én a Hash MD5” fordításban azt jelenti, hogy a helyszínen, vagy valahol máshol által használt algoritmus az MD5 szabvány.

Hash tulajdonságok

Most elmondom neked a hash funkciók tulajdonságairól, hogy könnyebb legyen megérteni, hogy hol használják, és amire szüksége van. De először egy másik definíció.

Ütközés - Ez a helyzet, ha egy és ugyanazon hash összeg két különböző szöveget kap. Mint tudod, ha egy blokk a fix hosszúságú, korlátozott számú lehetséges érték, ezért ismétlések lehetségesek.

És most a hash funkciók tulajdonságai:

1. A szöveg bármilyen méretű szöveghez szállítható, és a kimenet egy fix hosszúságú adatblokk. Ez a meghatározásból következik.

2. Az azonos szövegek hash összegének meg kell felelnie. Ellenkező esetben az ilyen funkciók egyszerűen haszontalanok - ez hasonló a véletlen számhoz.

3. A jó konvolúciós funkciónak jó elosztásra van szüksége. Egyetértek azzal, hogy ha a kimenet mérete, például 16 bájt, akkor ha a funkció csak 3 különböző értéket ad vissza semmilyen szöveghez, akkor nincs hatás az ilyen funkcióra, és ezek a 16 bájt (16 bájt 2 ^ 128 Opciók, amelyek körülbelül 3, 4 * 10 ^ 38 fok).

4. Mennyire jól reagál a funkció a legkisebb változásokra a forrásszövegben. Egyszerű példa. Megváltozott 1 betű egy 10 GB-os fájlban, a funkció értékének eltérőnek kell lennie. Ha nem így van, akkor nagyon problémás az ilyen funkció alkalmazásához.

5. Az ütközés előfordulásának valószínűsége. Egy nagyon összetett paraméter bizonyos körülmények között számítva. De a lényege, hogy mi a hash funkció lényege, ha a kapott hash összeg gyakran egybeesik.

6. Hasha számítási arány. Mi a tétel a konvolúciós funkcióból, ha sokáig kiszámítani? Nem, mert a fájlok könnyebb összehasonlítani vagy használni egy másik megközelítést.

7. A forrásadatok visszaállításának összetettsége a hash értékről. Ez a jellemző pontosabb, mint a teljes, mivel nem szükséges mindenhol. A leghíresebb algoritmusok esetében azonban ezt a jellemzőt értékelik. Például a forrásfájl alig kaphat ebből a funkcióból. Ha azonban az ütközések problémája történik (például olyan szöveget kell találnia, amely megfelel ilyen hash), akkor ez a jellemző fontos lehet. Például, jelszavak, de egy kicsit később.

8. Megnyitott vagy zárt forráskód ilyen funkcióhoz. Ha a kód nem nyitott, az adatok helyreállításának összetettsége, nevezetesen a cryptostility, a kérdéses. Részben ez a probléma a titkosítással.

Most mehetsz a kérdésre ", és miért van ez?".

Miért van szüksége egy hashra?

A hash funkciók fő célkitűzései csak három (vagy inkább céljuk).

1. Ellenőrizze az adatok integritását. BAN BEN ez az eset Minden egyszerű, ilyen funkciót kell kiszámítani gyorsan és lehetővé teszi, hogy gyorsan ellenőrizni, hogy például a fájl letölthető az internetről nem sérült az átvitel során.

2. Az adatkeresési sebesség növekedése. A fix blokk méret lehetővé teszi, hogy sok előnyt kapjon a keresési feladatok megoldásában. Ebben az esetben arról beszélünk, hogy mi tisztán technikailag, a hash funkciók használata pozitív hatással lehet a teljesítményre. Ilyen funkciókhoz nagyon fontos az ütközések valószínűsége és a jó elosztás.

3. A kriptográfiai igényekhez. Ez a faj A konvolúciós függvények olyan területeken használják, a biztonság, ahol fontos, hogy az eredmények nehezen helyettesíthető, vagy ahol szükséges, hogy bonyolítja a feladat, hogy megszerezze a lehető legnagyobb mértékben. hasznos információ Hash.

Hol és hogyan alkalmazzák a hash-t?

Ahogy valószínűleg már kitalálta, hogy a hash nagyon sok feladatot megold. Itt van néhány közülük:

1. A jelszavakat általában nem nyitott formában tárolják, hanem hash összegek formájában, amelyek lehetővé teszik a nagyobb biztonság fokozását. Végül is, még akkor is, ha a támadó hozzáférést kap az ilyen adatbázishoz, még mindig sok időt kell töltenie ahhoz, hogy felvegye a megfelelő szövegeket ezeknek a hash kódoknak. Itt van a jellemző "A komplexitás a Hash-értékek kezdeti adatai visszaállítása".

jegyzet: Azt tanácsolom, hogy megismerje a cikket néhány tipp segítségével a jelszavak biztonságának javítása érdekében.

2. A programozásban, beleértve az adatbázisokat is. Természetesen a leggyakrabban az adatszerkezetekről beszélünk gyors keresés. Tiszta technikai szempont.

3. Az adatok továbbítása (beleértve az internetet). Számos protokoll, mint például a TCP / IP olyan speciális ellenőrzési mezők, amelyek a forrásüzenet hash mennyiségét tartalmazzák, hogy ha valahol hiba történt, akkor nem befolyásolta az adatátvitelt.

4. Különböző biztonsági algoritmusok esetén. Például a hash-t elektronikus digitális aláírásokban használják.

5. A fájlok integritásának ellenőrzése. Ha figyelmet fordított, gyakran az interneten található fájlok (például Archívum) további leírások hash kóddal. Ezt az intézkedést nemcsak úgy kell alkalmazni, hogy véletlenül ne vezesse a fájlt, amely sérült az internetről való letöltés során, de a tárhely egyszerűsége is van. Ilyen esetekben gyorsan ellenőrizheti a hash-t és szükség esetén, majd túllépi a fájlt.

6. Néha a hash funkciókat egyedi azonosítók létrehozására használják (részben). Például, amikor képeket vagy egyszerűen fájlok mentésekor általában használja a HASH-t a nevekben a dátummal és az idővel együtt. Ez lehetővé teszi, hogy ne legyőzze az azonos nevű fájlokat.

Valójában a távolabb, annál gyakrabban használják a hash funkciókat információs technológiák. Elsősorban annak a ténynek köszönhető, hogy az adatok mennyisége és a legtöbb hatalom egyszerű számítógépek Erősen morogott. Az első esetben inkább a keresésről van szó, és a második pedig a biztonsági problémákról van szó.

Híres hash funkciók

A leghíresebbek a következő három hash funkció.

Jegyzet: Ebben az előadásban a hash funkció fogalmát megfogalmazzák, valamint rövid áttekintés Algoritmusok a hash funkciók kialakításához. Ezenkívül a blokk algoritmusok használatának lehetősége van a titkosításhoz, hogy hash funkciót képezzen.

Az előadás célja: megismerkedni a "hash funkció" fogalmával, valamint az ilyen funkciók elveivel.

A hash funkció fogalma

Hash funkció (hash funkció) Matematikai vagy más funkciót neveznek, amely tetszőleges hosszúságú vonalakra számolnak ki valamennyi egész számot vagy néhány rögzített hosszúságot. Matematikailag így írható:

ahol m az eredeti üzenet néha hívott ajándékés h - az eredmény, amelyet a hash funkciónak neveznek (valamint hash kód vagy emésztési üzenet (angolról. Üzenet feldolgozása)).

A hash funkció jelentése a minta jellegzetes jellemzőjének meghatározása - a hash funkció jelentése. Ez az érték általában bizonyos fix méretű, például 64 vagy 128 bit. Hash kódot tovább lehet elemezni bármely feladat megoldásához. Például a hashing használható az adatok összehasonlítására: ha két hash kód eltérő, tömbök garantáltak; Ha ugyanazok a tömbök valószínűleg ugyanazok. Általánosságban elmondható, hogy a forrásadatok és a hash kód közötti egyértelmű levelezés nem az a tény, hogy a hash funkciók száma mindig kevesebb, mint a bemeneti lehetőségek. Ezért számos bemeneti üzenet van, amelyek ugyanazokat a hash kódokat adják (az ilyen helyzeteket hívják collisia). Az ütközések előfordulásának valószínűsége fontos szerepet játszik a hash funkciók minőségének értékelésében.

A Hash funkciók széles körben használják a modern kriptográfiában.

A legegyszerűbb hash függvény segítségével állíthatók elő az „összeg modul 2” művelet a következő: Mi kapjuk a bemeneti karakterlánc, akkor hajtsa minden bájt 2 modul és a byte eredmény hozamot, mint egy hash Fuch. A hash funkció hossza ebben az esetben 8 bit, függetlenül a bemeneti üzenet méretétől.

Például, hagyja, hogy az eredeti üzenet lefordítsa a digitális nézetbe, a következő (hexadecimális formátumban):

Az üzenetet a bináris megjelenéshez továbbítjuk, írjuk egymáshoz, és a biteket minden oszlopba helyezzük a 2. modul szerint:

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

Az eredmény (0110 0101 (2) vagy 65 (16)), és a hash funkció értéke lesz.

Az ilyen hash funkció azonban nem használható kriptográfiai célokra, például a kialakításhoz elektronikus aláírásMivel könnyen megváltoztathatja az aláírt üzenet tartalmát anélkül, hogy megváltoztatná az ellenőrzőumértékeket.

Ezért a figyelembe vett hash funkció nem alkalmas kriptográfiai alkalmazásokra. A kriptográfia során a hash funkció jónak tekinthető, ha nehéz kétféle típus létrehozása ugyanazzal a hash funkcióval, valamint ha a funkció kimenete nem kifejezetten a bejárattól függ.

A kriptográfiai hash funkciók alapvető követelményeit megfogalmazzuk:

  • a hash funkciónak bármilyen méretű üzenetre kell alkalmaznia;
  • a függvényérték kiszámítását elég gyorsan kell végrehajtani;
  • egy jól ismert hash funkcióval nehéznek kell lennie (szinte lehetetlen), hogy megtalálja az M megfelelő prototípust;
  • egy jól ismert üzenettel az M-nek nehéz megtalálni egy másik m 'üzenetet, ugyanolyan értékkel, mint a hash funkció, mint a forrásüzenet;
  • nehéz megtalálni a véletlenszerű különböző üzeneteket ugyanazzal a hash funkcióval.

Hozzon létre egy hash funkciót, amely megfelel az összes felsorolt \u200b\u200bkövetelményeknek, nem könnyű feladat. Szintén meg kell emlékezni, hogy a funkció függvénye az önkényes méret függvényében érkezik, és a hash eredmény nem lehet ugyanolyan ugyanazon a különböző méretekben.

Jelenleg a gyakorlatban a bemeneti üzenet feldolgozása Hash funkcióként használatos, és a HE I számítási HASH értékét a bemeneti üzenet minden egyes blokkolására a típus függéseire

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

ahol a h I-1 a hash funkció kiszámításakor kapott eredmény korábbi blokk Beviteli adat.

Ennek eredményeképpen a H N hash funkciója az összes N bemeneti blokkok függvénye.

Használja az algoritmusok titkosítását, hogy hash funkciót képezzen

Használhat egy blokkot hash funkcióként. Ha a kriptográfiai blokk-algoritmus által használt blokkok, akkor a hash funkció megbízható lesz.

A blokk algoritmusának legegyszerűbb módja a hash kód megszerzéséhez az üzenet titkosítása CBC módban. Ebben az esetben az üzenet olyan blokkok sorozataként jelenik meg, amelyek hossza megegyezik a titkosítási algoritmus blokk hosszával. Szükség esetén az utolsó egységet a megfelelő nullák kiegészíti, így a kívánt hosszúságú egység. Hash lesz az utolsó titkosított szövegblokk. A megbízható blokk titkosítási algoritmus használatának függvényében a kapott hash érték a következő tulajdonságokkal rendelkezik:

  • szinte lehetetlen anélkül, hogy tudná a hash értékek titkosítási kulcs kiszámítását egy adott nyílt információhoz;
  • gyakorlatilag lehetetlen a nyílt adatok titkosítási kulcs kiválasztása nélkül a megadott hash érték alatt.

Az ilyen módon kialakított háztartási értéket általában hívják imitovka vagy hitelesítő és az üzenet integritásának ellenőrzésére szolgál. Így a szimulátor olyan vezérlési kombináció, amely a nyitott adatoktól és a titkos kulcsfontosságú információktól függ. Az Imitovka használatának célja az összes véletlenszerű vagy szándékos változás észlelése az információtárban. A HASH funkció által a bemeneti üzenet feldolgozása során kapott érték az üzenethez pillanatnyilag csatlakozik, amikor ismert, hogy az üzenet helyes. A címzett ellenőrzi az üzenet integritását a fogadott üzenet imitanciájának kiszámításával, és összehasonlítja azt a kapott hash kóddal, amelyet biztonságos módon kell továbbítani. Azok közül egy biztonságos módon Talán az imitovka titkosítása zárt kulcs SENDER, I.E. Aláírás létrehozása. Lehetőség van a kapott hash kód algoritmus titkosítására a szimmetrikus titkosításhoz, ha a feladó és a címzettnek általános kulcsfontosságú a szimmetrikus titkosítás.

Az Imitovka megszerzésének és használatának meghatározott folyamatát a 28147-89 belföldi szabványos szabványban ismertetjük. A szabványos 32 bitet használó blokk használata a teljes üzenet titkosítási működésének kimenetén kapott blokk kimeneténél a Cipher blokk tengelykapcsoló módban a továbbított üzenet integritásának figyelemmel kíséréséhez. Ugyanígy minden blokk használható imitavka létrehozására szimmetrikus titkosítás algoritmusa.

A Hash kód létrehozásához egy másik lehetséges módja a Hash kód létrehozásához. A forrásüzenet sorozatblokkokban dolgozik. Az utolsó blokk, ha szükséges, a nullák kiegészítik, néha az utolsó blokkban az üzenet hosszát adja meg az űrlapon bináris számok. Minden egyes szakaszban titkosítsa az előző szakaszban kapott hash értéket, és az aktuális üzenetblokkot kulcsként. Az utolsó beírt titkosított érték lesz az utolsó hash.

Valójában több különböző rendszer a blokk titkosítás használatához, hogy hash funkciót képezzen. Legyen m Forrásblokkegység, hi - a hash funkció értéke az I-szintű szakaszban, az F egy egyszerű csere módban használt titkosítási algoritmus blokkja - a 2. modul hozzáadása. Ezután lehetséges, Például a következő hash funkció képződési rendszerei:

Mindezen diagramokban a generált hash érték hossza megegyezik a blokk hosszával a titkosítás során. Mindezek, valamint néhány más, a blokk algoritmus használata a titkosításhoz a hash értékek kiszámításához a gyakorlatban alkalmazhatók.

A blokk algoritmusok alapján tervezett hash funkciók fő hátránya viszonylag alacsony sebesség Munka. A szükséges kriptoszkópot a bemeneti adatoknál kisebb számú műveletre is biztosíthatjuk. Vannak gyorsabb algoritmusok tördeljük tervezett függetlenül a semmiből alapján rejtélyes ellenállás követelmények (a leggyakoribb közülük - MD5, SHA-1, SHA-2 és GOST R 34,11-94).


Mi van hash?A hash funkciót az információ matematikai átalakításának nevezik rövid, bizonyos hosszúságú karakterláncban.

Miért van rá szükséged?Az elemzés a hash funkciókat gyakran használják a fontos fájlok integritásának figyelemmel kísérésére. operációs rendszer, Fontos programok, fontos adatok. A kontroll végezhető mind a szükséges, mind rendszeresen.

Hogyan történik?Először határozza meg, hogy melyik fájlokat kell ellenőrizni. Minden egyes fájl esetében kiszámításra kerül, hogy kiszámítsa a hash értékét egy speciális algoritmus felett, miközben fenntartja az eredményt. A szükséges idő után hasonló számítás történt, és az eredményeket összehasonlítjuk. Ha az értékek eltérőek, akkor a fájlban szereplő információkat megváltoztatták.

Milyen jellemzőkkel kell rendelkeznie a hash funkcióval?

  • képesnek kell lennie az önkényes hosszúságú adatok átalakítására;
  • nyitott algoritmusnak kell lennie, hogy a kriptoszkóp feltárható legyen;
  • egyoldalúnak kell lennie, vagyis nincs matematikai képességek a forrásadatok meghatározásával;
  • kell "ellenállni" konfliktusok, vagyis nem adhat ugyanazokat az értékeket különböző bemeneti adatokkal;
  • nem igényel nagy számítástechnikai erőforrásokat;
  • a bemeneti adatok legkisebb változásával az eredménynek jelentősen meg kell változtatnia.

Melyek a népszerű hasító algoritmusok?A következő hash funkciókat jelenleg használják:

  • CRC - ciklikus felesleges kód vagy ellenőrző összeg. Az algoritmus nagyon egyszerű, van nagyszámú A szükséges kimeneti hossztól függően változások. Nem kriptográfiai!
  • Az MD 5 nagyon népszerű algoritmus. Mint ő előző verzió Az MD 4 kriptográfiai funkció. Hesha méret 128 bit.
  • Az SHA -1 is nagyon népszerű kriptográfiai zavar. Hesha méret 160 bit.
  • GOST R 34.11-94 - Orosz kriptográfiai szabvány a hash funkciók kiszámításához. Hesha méret 256 bit.

Ha ezek az algoritmusok rendszergazdát használhatnak?Gyakran a tartalom letöltésekor, például a gyártó, a zene, a filmek vagy más információk programjainak letöltésekor jelen van. ellenőrző összegekegy adott algoritmus szerint számítva. Biztonsági okokból a letöltés után a hash funkció független számítását kell végeznie, és összehasonlítani kell az értéket a weboldalon vagy az alkalmazásban feltüntetett értékkel. Csináltad valaha?

Mi a kényelmesebb számolni hash?Most számos, mind a fizetett, mind a szabadon használható számos segédprogram létezik. Én személy szerint tetszett hashtab. Először is, a segédprogram a telepítés során beágyazódik a fájlok tulajdonságaihoz, másodsorban, lehetővé teszi, hogy válasszon nagyszámú hasító algoritmust, és harmadszor ingyenes a magán nem kereskedelmi célú használatra.

Mi az orosz?Amint azt Oroszországban említettük, van egy szabványos hashing gost R 34.11-94, amelyet mindenhol számos információbiztonsági eszköz gyártója használnak. Az egyik ilyen alap az eredeti állapot rögzítésének és ellenőrzésének programja. szoftver csomag "Fix". Ez a program az SZI-alkalmazás hatékonyságának ellenőrzésének eszköze.

Fix (2.0.1 verzió) Windows 9x / NT / 2000 / XP rendszerhez

  • Számítsa ki a megadott fájlok ellenőrzését az 5 végrehajtott algoritmus egyikével.
  • A szoftvercsomag eredeti állapotának rögzítése és későbbi ellenőrzése.
  • A szoftvercsomag verzióinak összehasonlítása.
  • A katalógusok rögzítése és ellenőrzése.
  • A megadott fájlok (könyvtárak) változásai.
  • Jelentések kialakítása TXT, HTML, SV formátumokban.
  • A termék tanúsítványt FSTEC az NDV 3 No. 913-ig június 1, 2013.

És mi a helyzet az EDS-hez?A funkció kiszámításának eredménye a felhasználó titkos kulcsával, a kriptográfiai algoritmus bemenetéhez, ahol az elektronikusan digitális aláírást kiszámítják. Szigorúan beszélve a hash funkció nem része az EDS algoritmusnak, de gyakran ez kifejezetten, annak érdekében, hogy kizárja a támadást a nyilvános kulcs használatával.

Jelenleg sok e-kereskedelmi alkalmazások lehetővé teszi, hogy tárolja a felhasználó titkos kulcsot a zárt token terület (Rutoken, eToken) anélkül, hogy a technikai képesség kivonat onnan. A token maga is nagyon korlátozott memória területe van, kilobájtban mérve. A dokumentum aláírásához nincs lehetőség a dokumentumra a tokenbe történő átvitelére, de a dokumentum hash áthelyezése a tokenbe és a kijáratnál, hogy az EDS nagyon egyszerű legyen.

Kérdések:

1. A hash funkció fogalma.

2. Használja a blokk algoritmusokat a titkosításhoz, hogy hash funkciót képezzen.

3. Az algoritmusok áttekintése a hash funkciók kialakításához.

1. A hash funkció fogalma

Hash funkció(Hash függvény) matematikai vagy más funkciónak nevezhető, amely tetszőleges hosszúságú vonalak esetében kiszámít néhány egész számot vagy más rögzített hosszúságot. Matematikailag így írható:

h. \u003d H (m) ,

hol M. - A forrás üzenet néha hívott ajándék , de h. - az eredmény a hash funkció értékének (valamint a hash kód vagy emésztési üzenet (angolról. Üzenet feldolgozása)).

A hash funkció jelentése a minta jellegzetes jellemzőjének meghatározása - a hash funkció jelentése. Ez az érték általában bizonyos fix méretű, például 64 vagy 128 bit. Hash kódot tovább lehet elemezni bármely feladat megoldásához. Például a hashing használható az adatok összehasonlítására: ha két hash kód eltérő, tömbök garantáltak; Ha ugyanazok a tömbök valószínűleg ugyanazok. Általánosságban elmondható, hogy a forrásadatok és a hash kód közötti egyértelmű levelezés nem az a tény, hogy a hash funkciók száma mindig kevesebb, mint a bemeneti lehetőségek. Ezért számos bemeneti üzenet van, amelyek ugyanazokat a hash kódokat adják (az ilyen helyzeteket hívják collisia ). Az ütközések előfordulásának valószínűsége fontos szerepet játszik a hash funkciók minőségének értékelésében.

A Hash funkciók széles körben használják a modern kriptográfiában.

A legegyszerűbb hash funkció összeállítható a "2. modul összege" művelet használatával az alábbiak szerint: A bemeneti karakterláncot megkapjuk, az összes bájtot a 2. modul és a byte eredmény megtérül, mint a hash fuch érték. A hash funkció hossza ebben az esetben 8 bit, függetlenül a bemeneti üzenet méretétől.

Például, hagyja, hogy az eredeti üzenet lefordítsa a digitális nézetbe, a következő (hexadecimális formátumban):

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

Az üzenetet a bináris megjelenéshez továbbítjuk, írjuk egymáshoz, és a biteket minden oszlopba helyezzük a 2. modul szerint:

0010 1011

0001 0100

1010 1001

0101 1111

1110 0100

——————-

0010 1101

Eredmény: 0010 1101 vagy 2 D. És ez lesz a hash funkció értéke.

Az ilyen hash-funkció azonban nem használható kriptográfiai célokra, például elektronikus aláírás létrehozásához, mivel meglehetősen könnyen megváltoztatható az aláírt üzenet tartalma anélkül, hogy megváltoztatná az ellenőrzőumértékeket.

Ezért a Test hash funkció nem alkalmas kriptográfiai alkalmazásokra. A kriptográfiában a hash funkció jónak tekinthető, ha nehéz két típust létrehozni ugyanazon hash funkcióval, valamint ha a funkció kimenete nem rendelkezik kifejezett függőséggel a bejáratnál.

A kriptográfiai hash funkciók alapvető követelményeit megfogalmazzuk:

· A hash funkciónak bármilyen méretű üzenetre kell alkalmaznia;

· A függvényérték kiszámítása elég gyors végrehajtásra kerül;

· A hash funkció ismert jelentésével nehéz (szinte lehetetlen), hogy megfelelő prototípust találjon M. ;

· Egy jól ismert üzenettel M. Nehéz meg kell találni egy másik üzenetet. M ' ugyanolyan értékű hash funkcióval, mint a forrásüzenet;

· Nehéz megtalálni a véletlenszerű különböző üzeneteket ugyanazzal a hash funkcióval.

Hozzon létre egy hash funkciót, amely megfelel az összes felsorolt \u200b\u200bkövetelményeknek, nem könnyű feladat. Szintén meg kell emlékezni, hogy a funkció függvénye az önkényes méret függvényében érkezik, és a hash eredmény nem lehet ugyanolyan ugyanazon a különböző méretekben.

Jelenleg a gyakorlatban a funkciókat hash funkcióként használják, feldolgozzák a bemeneti üzenet blokkját az egység mögött és kiszámításával sZIA. Minden blokk esetében M I. Bemeneti üzenet a függőségre

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

hol h i-1 - A hash funkció kiszámításakor az előző bemeneti adatok blokkjának kiszámításakor kapott eredmény.

Ennek eredményeként a hash funkció hozama h. az összes funkció n. Bemeneti blokkok.

2. Használja az algoritmusok titkosítását, hogy hash funkciót képezzen.

Hash funkcióként egy blokk algoritmust használhat a szimmetrikus titkosításhoz. Ha az alkalmazott blokk algoritmus kriptográfiai rúd, akkor a hash-funkciója megbízható lesz.

A blokk algoritmus használatának legegyszerűbb módja a hash kód megszerzéséhez az üzenet titkosítása CBC módban ( Cipher blokk lánc - CIPHERTEX Tengelykapcsoló mód). Ebben az esetben az üzenet olyan blokkok sorozataként jelenik meg, amelyek hossza megegyezik a titkosítási algoritmus egység hosszával. Szükség esetén az utolsó egységet a megfelelő nullák kiegészíti, így a kívánt hosszúságú egység. Hash lesz az utolsó titkosított szövegblokk. A megbízható blokk titkosítási algoritmus használatának függvényében a kapott hash a következő tulajdonságokkal rendelkezik:

· Gyakorlatilag lehetetlen anélkül, hogy ismerné a hash értékének titkosítási kulcsszámítását egy adott nyílt információhoz;

· Gyakorlatilag lehetetlen, anélkül, hogy tudnád a nyílt adatok titkosítási kulcs kiválasztását egy meghatározott hash értékre.

Az ilyen módon kialakított alázatos állapotot általában hívják imitovka vagy hitelesítő és az üzenet integritásának ellenőrzésére szolgál. Így a szimulátor olyan vezérlési kombináció, amely a nyitott adatoktól és a titkos kulcsfontosságú információktól függ. Az Imitovka használatának célja az összes véletlenszerű vagy szándékos változás észlelése az információtárban. A HASH funkció által a bemeneti üzenet feldolgozása során kapott érték az üzenethez pillanatnyilag csatlakozik, amikor ismert, hogy az üzenet helyes. A címzett ellenőrzi az üzenet integritását a fogadott üzenet imitanciájának kiszámításával, és összehasonlítja azt a kapott hash kóddal, amelyet biztonságos módon kell továbbítani. Ezen biztonságos módok egyike a feladó imitanciáját zárt kulcsmal, azaz Aláírás létrehozása. Lehetőség van a kapott hash kód algoritmus titkosítására a szimmetrikus titkosításhoz, ha a feladó és a címzettnek általános kulcsfontosságú a szimmetrikus titkosítás.

Az Imitovka megszerzésének és használatának meghatározott folyamatát a 28147-89 belföldi szabványos szabványban ismertetjük. A szabványos 32 bitet használó blokk használata a teljes üzenet titkosítási működésének kimenetén kapott blokk kimeneténél a Cipher blokk tengelykapcsoló módban a továbbított üzenet integritásának figyelemmel kíséréséhez. Ugyanígy a szimmetrikus titkosítás bármely blokk algoritmus használható az imitavka kialakítására.

A Hash kód létrehozásához egy másik lehetséges módja a Hash kód létrehozásához. A forrásüzenet sorozatblokkokban dolgozik. Az utolsó blokkot szükség esetén nullákkal egészítik ki, néha az üzenet hossza bináris szám formájában az utolsó blokknak tulajdonítható. Minden egyes szakaszban titkosítsa az előző szakaszban kapott hashot, és az aktuális üzenetblokkot kulcsként. Az utolsó beírt titkosított érték lesz az utolsó hash.

Így, ha a szokásos üzenet titkosítási rendszer M. A blokk titkosítás használata f. a kulcs NAK NEK Rögzítettük E \u003d f (m, k) Ezután a hash kódrendszer h. A fent leírt algoritmus szerint el lehet képzelni, hogyan

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

Kezdeti hash kódként h 0. Vegyünk néhány állandó. A titkosítás egyszerű csere módban történik. Használ meghatározott módszer A blokk mérete egybeesik a kulcs hosszával és a hash érték mérete lesz az egység hossza.

Egy egyszerű csere módban egy blokk titkosítás használata is lehetséges: az üzenetelemek titkosítva vannak az előző szakaszban kapott hash értékekkel:

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

Valójában több különböző rendszer a blokk titkosítás használatához, hogy hash funkciót képezzen. Legyen M I. - a forrásüzenet blokkja, sZIA. - a hash funkció értéke ÉN. -a színpad, f. - Blokk algoritmus az egyszerű csere módban használt titkosításhoz - a 2. modul hozzáadása. Ezután lehetséges, például a következő hash funkciók, amelyek képzési rendszereket képeznek:

Mindezen diagramokban a generált hash érték hossza megegyezik a blokk hosszával a titkosítás során. Mindezek, valamint néhány más, a blokk algoritmus használata a titkosításhoz a hash értékek kiszámításához a gyakorlatban alkalmazhatók.

A blokk algoritmusok alapján tervezett hash funkciók fő hátránya viszonylag alacsony sebesség. A szükséges kriptoszkópot a bemeneti adatoknál kisebb számú műveletre is biztosíthatjuk. Gyorsabb hasító algoritmusok (a leggyakoribbak - MD5, SHA-1, SHA-2 és GOST R 34.11-94).

3. Az algoritmusok áttekintése a hash funkciók kialakításához.

Jelenleg különböző speciális algoritmusokat kínálnak és gyakorlatilag a hash funkció kiszámítására használják. A leghíresebb algoritmusok az MD5, SHA-1, SHA-2 és az SHA egyéb verziói, valamint a GOST R 34.11-94-ben vázolt házi algoritmus.

Algoritmus Md5 A huszadik század elején a 90-es évek elején jelentek meg az MD4 hash képződési algoritmus javításának eredményeként. Szimbólumok az "MD" névben az üzenet megemésztése - az üzenet összefoglalása. Az algoritmusok szerzője MD4 és MD5 - R. Rivest (R.Rivest). Az MD5 használatának eredményeképpen egy 128 bites hash tetszőleges üzenetre van kialakítva. A bemeneti adatokat 512 bit blokkok feldolgozzák. Az algoritmus elemi logikai műveletek (Inverzió, összefüggés, 2 modul hozzáadása, ciklikus eltolódások stb.), Valamint a szokásos aritmetikai kiegészítés. Az algoritmus ezen elemi funkcióinak átfogó ismétlése biztosítja, hogy az eredmény jól keveredjen a feldolgozás után. Ezért valószínűtlen, hogy az esélysorban kiválasztott két üzenet ugyanazt a hash kódot tartalmazza. Az MD5 algoritmus a következő tulajdonságokkal rendelkezik: A kapott hash érték minden egyes bitje az egyes belépési bitek függvénye. Úgy véljük, hogy az MD5 a legerősebb hash funkció egy 128 bites hash értékhez.

Algoritmus Sha Biztonságos hash algoritmus - a biztonságos hash-algoritmus) fejlesztette ki a National Institute of Standards and Technology (NIST), az Egyesült Államok és közzétett, mint egy amerikai szövetségi információs szabvány 1993-ban. SHA-1, valamint az MD5, az MD4 algoritmus alapján. Az SHA-1 egy 160 bites hashot képez az 512 bit blokkok forrásfeldolgozásán alapulva. Az SHA-1 algoritmus egyszerű logikai és aritmetikai műveleteket is használ. Az MD5 SHA-1 legfontosabb különbsége az, hogy az SHA-1 hash kódja 32 bit hosszabb, mint a Hash kód MD5. Ha feltételezzük, hogy mindkét algoritmus ugyanaz a nehéz helyzetben van a cryptanalízishez, akkor az SHA-1 egy ellenálló algoritmus. A durva erő (frontális támadás) támadása nehezebb, hogy olyan tetszőleges üzenetet hozzon létre, amely egy adott hash kóddal rendelkezik, és ez is nehezebb két üzenetet létrehozni ugyanazzal a hash kóddal.

2001-ben az Egyesült Államok Nemzeti Szabványügyi és Technológiai Intézete három hash-funkciót fogadott el, mint a hash-kód nagyobb hossza, mint a SHA-1. Gyakran előfordul, hogy ezek a hash függvények SHA-2 vagy SHA-256, SHA-384 és SHA-512 (a hossza a hash-kódot által létrehozott algoritmusok van megadva a cím). Ezek az algoritmusok nemcsak a létrehozott hash-kód hosszának különböznek, hanem a belső funkciókat és a feldolgozott blokk hosszát is használják (az SHA-256-ban az egység hossza - 512 és az SHA-384 és az SHA-512 blokkhossz 1024 bit). A SHA algoritmus fokozatos javítása a kriptikus ellenállás növekedéséhez vezet. Annak ellenére, hogy a vizsgált algoritmusok különbsége ellenére mindegyikük az SHA-1 és az MD4 továbbfejlesztése, és hasonló szerkezetű.

Oroszországban a P34.11-94 gost elfogadásra kerül, amely a hash funkciókhoz hazai szabvány. Szerkezete nagyon különbözik az SHA-1.2 vagy MD5 algoritmusok szerkezetétől, amelyek az MD4 algoritmuson alapulnak. Az algoritmus GOST R 34.11-94 által létrehozott hash kód hossza 256 bit. Az algoritmust a forrásüzenet 256 bites blokkokkal kell feldolgozni jobbra balra. Az algoritmus paraméter a HASH kiindulási vektora - tetszőleges fix érték is 256 bit. Az algoritmus, GOST R 34,11-94, műveletek a permutációs, nyírás, számtani Ezenkívül hozzáadásával modul 2. Amint segédfunkció A GOST 34.11-94 egy algoritmust használ a GOST 28147-89 szerint egy egyszerű csere módban.

4. A hash funkciókra vonatkozó követelmények

A hash funkciót egyirányú funkciónak nevezik, amelynek célja egy emésztés vagy "ujjlenyomat" fájl, üzenetek vagy egyes adatblokkok fogadására.

Hash kódot hoz létre a funkció N. :

h \u003d h (m)

Hol M. önkényes hosszúságú üzenet és h. Ez egy fix hosszúságú hash kód.

Tekintsük a követelményeket, amelyek a hash függvény meg kell egyeznie, hogy lehet használni, mint egy üzenetet hitelesítő. Vegyünk egy nagyon egyszerű példát a hash funkcióra. Ezután több megközelítést elemezünk a hash funkció megépítéséhez.

Hash funkció N. Ezt az üzenetek hitelesítésére használják a következő tulajdonságokkal:

1. hash funkció N. Ezt a hosszúságú adatblokkra kell alkalmazni.

2. hash funkció N. Fix hosszúságú kimenetet hoz létre.

3. N (m) viszonylag könnyen (polinom idő esetén) bármilyen értékre számítva M. .

4. Minden adott hash kód esetében h. Egyértelműen lehetetlen megtalálni M. oly módon, hogy H (m) \u003d h .

5. Minden adott számára h. Számítástechnikai szempontból lehetetlen megtalálni

H. (y) \u003d h (x).

6. Számítástechnikai szempontból nem lehet tetszőleges pár ( h. , y. ) oly módon, hogy H (y) \u003d h (x) .

Az első három tulajdonság szükségessé teszi a hash funkciót, hogy létrehozzon egy hash kódot bármilyen üzenethez.

A negyedik tulajdonság határozza meg a követelményt, egyoldalúsága hash függvények: könnyű létrehozni egy hash kódot ezt az üzenetet, de lehetetlen, hogy visszaszerezze az üzenetet hash kódot. Ez a tulajdonság fontos, ha a hash funkcióval történő hitelesítés titkos értéket tartalmaz. A titok érték önmagában nem lehet elküldeni, azonban, ha a hash függvény nem egyoldalú, az ellenség könnyen feltárja a titkos értéket a következők szerint. Az átvitel elfogásakor a támadó üzenetet kap M. és hash kód C \u003d h (SAB || m) . Ha a támadó megfordíthatja a hash funkciót, akkor tehát kaphat Sab || M \u003d h-1 (c) . Mivel a támadó most ismeri és M. és Sab || M. , kap Sab. nagyon egyszerű.

Az ötödik ingatlan biztosítja, hogy lehetetlen megtalálni egy másik üzenetet, amelynek értéke a hash funkció egybeesne a hash funkció értékével ez az üzenet. Ez megakadályozza a hitelesítő hamisítványt, ha titkosított hash kódot használ. Ebben az esetben az ellenfél elolvashatja az üzenetet, és ezért hozza létre hash kódját. De mivel az ellenség nem rendelkezik titkos kulcsgal, nem tudja megváltoztatni az üzenetet úgy, hogy a címzett nem találja meg. Ha ez a tulajdonság nem hajtódik végre, a támadó képes a következő műveletek sorrendjét elvégezni: az üzenet és annak titkosított hash kódjának elfogására, az üzenet hash kódjának kiszámítása, alternatív üzenet létrehozása ugyanazzal a hash kóddal, cserélje ki az eredeti üzenetet a hamis. Mivel ezeknek az üzeneteknek a hash kódjai egybeesnek, a címzett nem érzékeli a helyettesítést.

Hash funkció, amely megfelel az első öt tulajdonságnak, egyszerű vagy gyenge hash funkció. Ha a hatodik tulajdonságot elvégzik, akkor ezt a funkciót erős hash funkciónak nevezik. A hatodik ingatlan védi az osztály támadások ellen, mint a támadás "születésnap".

5. Egyszerű hash funkciók

Az összes hash funkció az alábbiak szerint történik. A bemeneti érték (üzenet, fájl stb.) Sorozatnak tekinthető n. - Bit blokkok. A bemeneti értéket a készülék mögötti szekvenciálisan blokkolja, és létrejön. m. -Bed hash kód érték.

A hash funkció egyik legegyszerűbb példája az egyes blokkok Xor bitje:

I. - ÉN. Bit hash kód, 1 <= i <= n .

k. - Szám n. - Bit blokkok bemenet.

b ij. ÉN. B kicsit B. j. Blokk.

Ezután az egész üzenet titkosítva van, beleértve a hash kódot is, a CCS módban titkosított blokkok létrehozásához Y1, Y2, ..., YN + 1. Definíció szerint:

De az xn + 1 egy hash kód:

Mivel a korábbi egyenlőség összetevői bármilyen sorrendben kiszámítható, ezért a hash kód nem változik, ha a titkosított blokkok átrendeződnek.

A NIST által javasolt kezdeti szabvány egy egyszerű XOR-t használt, amelyet 64 bites üzenetblokkokhoz használtak, majd a teljes üzenet titkosítva van a CCS mód használatával.

"Születésnapi paradox"

Mielőtt összetettebb hash funkciókat mérlegelne, meg kell vizsgálni az egyszerű hash funkciókat.

Az úgynevezett "születésnapi paradox" a következő. Tegyük fel, hogy a hash funkció kimeneti értékei száma N. egyaránt n. . Mi legyen a számnak k. az adott értékhez X. és értékek Y1 YK. Annak valószínűsége, hogy legalább egy yi-t végeztek egyenlőséggel

H (x) \u003d h (y)

több mint 0,5 lenne.

Egyre Y. a valószínűsége, hogy H (x) \u003d h (y) egyenrangú 1 / N. .

Ennek megfelelően annak valószínűsége, hogy egyenrangú 1 - 1 / n .

Ha létrehozod k. Értékek, annak valószínűsége, hogy az egybeesések nem lesznek megegyeznek az egyik értéknek megfelelő valószínűségek termékével, azaz (1 - 1 / n) k .

Következésképpen a legalább egy egybeesés valószínűsége egyenlő

1 - (1 - 1 / N) k

Szóval rájöttünk, hogy m. -Bed hash kód elegendő választani 2m-1 Az üzenetek úgy, hogy a hash-kódok véletlensége valószínűsége nagyobb volt, mint 0,5.

Most vegye figyelembe a következő feladatokat: jelölje meg P (n, k) a valószínűsége, hogy egy sorban k. elemek, amelyek mindegyike megteheti n. Értékek, legalább kettő ugyanazokkal az értékekkel rendelkezik. Mi lehet egyenlő k. nak nek P (n, k) több lenne 0,5 ?

Az elemek kiválasztásának különböző módjainak száma oly módon, hogy nincs kettős, egyenlő

n (N - 1) ... (N - K + 1) \u003d N! / (N-K)!

Az elemek kiválasztásának minden lehetséges módja egyenlő n K.

A valószínűség, hogy nem kétséges n! / (N - k)! N k

Annak a valószínűsége, hogy van egy duplikátum, illetve

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)]

Ha a hash kód hossza van m. Kicsit, én Elfogad 2m. Értékek, T.

Hasonló eredményt "születésnapi paradoxonnak" neveznek, mert a fenti érveknek megfelelően, annak érdekében, hogy a két ember születésnapjának valószínűsége nagyobb legyen, mint 0,5, csak 23 embernek kell lennie a csoportban. Ez az eredmény félelmetesnek tűnik, talán azért, mert minden egyes személy számára a csoportban a valószínűség, hogy valaki más születésnapja a csoportban egybeesik születésnapjával, elég kicsi.

Visszatérünk a hash funkciók tulajdonságainak figyelembevételéhez. Tegyük fel, hogy 64 bites hash kódot használnak. Úgy vélhető, hogy elég elegendő, ezért a hash kód biztonságos hossza. Például, ha a titkosított hash kód TÓL TŐL A megfelelő titkosítatlan üzenettel továbbítva M. , akkor az ellenségnek meg kell találnia M ' oly módon, hogy

N (m) \u003d n (m) ,

az üzenet helyettesítése és a címzett megtévesztéséhez. Átlagban az ellenség kell áttörni 263 üzeneteket annak érdekében, hogy megtalálja ezt a hash kód megegyezik az elfogott üzenet.

Mindazonáltal különböző típusú támadások lehetségesek a "születésnapi paradoxon" alapján. A következő stratégia lehetséges:

1. Az ellenség teremt 2 m / 2 Üzenetbeállítások, amelyek mindegyike határozott jelentése van. Az ellenség ugyanolyan számú üzenetet készít, amelyek mindegyike hamis, és az üzenet helyettesítésére szolgál.

2. Két üzenetcsoportot hasonlítanak össze egy ugyanazon hash kóddal rendelkező üzenetpár keresésében. A siker valószínűsége a "születésnapi paradoxon" szerint nagyobb, mint 0,5. Ha a megfelelő pár nem található, további forrás és hamis üzenetek jönnek létre, amíg a gőz megtalálható.

3. A támadó a feladó az üzenet kezdeti verzióját kínálja az aláíráshoz. Ezt az aláírást ezután egy hamis opcióhoz csatolhatjuk a címzettnek történő átvitelhez. Mivel mindkét lehetőségnek ugyanaz a hash kódja van, ugyanaz az aláírás jön létre. Az ellenség magabiztos lesz a sikerben, még nem ismeri a titkosítási kulcsot.

Így ha 64 bites hash kódot használnak, a számítások szükséges összetettsége körülbelül 232.

Következésképpen megjegyezzük, hogy a hash-kód hossza meglehetősen nagynak kell lennie. A 64 bit hosszúságú hossza jelenleg nem tekinthető biztonságosnak. Előnyös, ha a hossza 100 bit sorrendjét alkotja.

Titkosított blokkok láncolata

Vannak különböző hash funkciók, amelyek titkosított blokkok láncolása, de titkos kulcs használata nélkül. Az egyik ilyen hash funkciót Rabin javasolta. Üzenet M. megosztották a rögzített hosszúságú blokkokon M1, M2 ,. . . , Mn. és szimmetrikus titkosítási algoritmus, például des, a hash kód kiszámításához G. A következőképpen:

H 0 - kezdeti jelentés N I. = E MI G. = H.

Ez hasonló a CSA módban való titkosításhoz, de ebben az esetben nincs titkos kulcs. Mivel abban az esetben, bármilyen egyszerű hash függvény, ez az algoritmus érzékeny a „születésnapi támadás”, és ha a titkosítási algoritmus a DES és csak egy 64 bites hash kód jön létre, a rendszer tekinthető teljesen kiszolgáltatott.

Lehet, hogy más támadások is lehetnek, mint a "születésnap", amelyek akkor is lehetségesek, ha az ellenség csak egy üzenethez és a megfelelő titkosított hash kódhoz fér hozzá, és nem kap több üzenetet és titkosított hash kódot. A következő eset lehetséges: Tegyük az ellenség elfogott egy üzenetet egy hitelesítő formájában titkosított hash kódot, és köztudott, hogy a kódolatlan hash kód hossza m. bitek. Ezután az ellenségnek a következő műveleteket kell végrehajtania:

· A fent leírt algoritmus használatával kiszámolja a titkosítatlan hash kódot G. .

· Hozzon létre hamis üzenetet az űrlapon Q1, Q2 ,. . . , QN-2 .

· Kiszámítja N \u003d e qi -ért 1 <= i <= N-2 .

· Hozzon létre 2 m / 2 Véletlen blokkok H. És minden ilyen blokk esetében H. kiszámítja E H. . Hozzon létre továbbá 2 m / 2 Elég blokk Y. és minden blokk esetében Y. kiszámítja D y [g] hol D. - díszítő funkció, amely megfelel E. . A "születésnapi paradoxon" alapján azt mondhatjuk, hogy nagyfokú valószínűséggel ez a sorozat blokkokat tartalmaz H. és Y. oly módon, hogy E x \u003d d y [y] .

· Üzenet létrehozása Q1, Q2 ,. . . , Qn-2, x, y . Ez az üzenet rendelkezik hash kóddal G. És ezért titkosított hitelesítővel használható.

Ez a támadás formája a támadás "találkozó közepén". Különböző vizsgálatokban több finom módszert kínálnak a blokkláncon alapuló megközelítés fokozására. Például a Devis és az ár a következő opciót írta le:

Egy másik lehetőség lehetséges:

Mindkét rendszer azonban különböző támadásokon is sebezhető. Általánosabb esetben kimutatható, hogy valamilyen "születésnapi támadás" forma sikeres a hash algoritmussal, amely magában foglalja a titkosított blokkok láncolatának használatát titkos kulcs használata nélkül.

További kutatások célja, hogy más megközelítéseket találjanak a hashing funkciók létrehozására.

MD5 hash funkció

Tekintsük az MD5 üzenet digest algoritmus (RFC 1321) által kifejlesztett Ron Rivesom MIT.

MD5 végrehajtási logika

Az algoritmus tetszőleges hosszúságot kap a bemeneten, és 128 kötegelt üzenetet hoz létre kimenetként. Az algoritmus a következő lépésekből áll:

Ábra. 8.1.MD5 végrehajtási logika

1. lépés: Hiányzó bitek hozzáadása

Az üzenetet úgy egészíti ki, hogy hossza 448 modulo 512 (). Ez azt jelenti, hogy a hossza a hozzáadott üzenet 64 bit kevesebb, mint a szám, többszörös 512. Az adagolást mindig megtörténik, még ha az üzenet a kívánt méretre. Például, ha az üzenet hossza 448, akkor az 512 bitet 960 bitre egészíti ki. Így a hozzáadott bitek száma 1 és 512 között van.

Az adagolás olyan egységből áll, amelyre a szükséges számú nullák száma következik be.

2. lépés: Hosszak hozzáadása

A forráshossz 64 bites ábrázolása (hozzáadása előtt) az üzenetek az első lépés eredményéhez kapcsolódik. Ha a kezdeti hossza nagyobb, mint 2,64, csak az utolsó 64 bitet használnak. Így a mező a forrásüzenet hosszát tartalmazza a 2 64 modul segítségével.

Az első két lépés eredményeképpen létrejött egy üzenet, amelynek hossza több 512 bit. Ez a kiterjesztett üzenet 512 bites blokkok sorozataként jelentkezik Y 0, Y 1 ,. . ., Y L-1, míg a kiterjesztett üzenet teljes hossza egyenlő l * 512 bitekkel. Így a kapott fejlett üzenet hossza több mint tizenhat 32 bites szó.

Ábra. 8.2.Kiterjesztett üzenet szerkezete

3. lépés: MD-puffer inicializálása

128 bites puffer a hash funkció köztes és végső eredményeinek tárolására. A puffer négy 32 bites regiszterként (A, B, C, D) képviselhető. Ezeket a regisztereket a következő hexadecimális számok inicializálják:

A \u003d 01234567 b \u003d 89abcdef c \u003d fedcba98 d \u003d 76543210

4. lépés: Az 512 bites (16 liszt) blokkok sorrendjének feldolgozása

Az algoritmus alapja egy négy ciklikus kezelésből álló modul, amely HMD5-ként jelöli. Négy ciklusnak van hasonló szerkezete, de minden ciklus az alapvető logikai funkcióját használja, amelyet F F, F G, F H és F I jelöli.

Ábra. 8.3.A következő 512 bites blokk feldolgozása

Minden egyes ciklus az 512 bites y q bemeneti áram, jelenleg feldolgozott, és az ABCD puffer 128 bites értéke, amely egy közbenső emésztési érték, és megváltoztatja a puffer tartalmát. Minden ciklus a 64-es elem T táblázat negyedik részét is használja, a bűnfüggvényen alapulva. Az I-TH elem, amelyet T [I] jelöli, egyenlő a 2 32 * abs (SIN (I)) teljes részével, a radianokban van. Mivel az ABS (SIN (I)) 0 és 1 közötti szám, minden T elem egy egész, amit 32 bit képviselhet. A táblázat egy 32 bites értékű "véletlen" készletet biztosít, amelynek meg kell szüntetnie a bemeneti adatok rendszerességét.

Az MD q + 1 előállítása, a négy ciklus hozama 22 modul képződik MD Q. A kiegészítés a puffer négy szó mindegyikétől függetlenül történik.

A CLS S egy ciklikus eltolás a 32 bites argumentum bitek bal oldalán.

X [K] - M - K-O 32 bites szó a Q-OHM 512 üzenetblokkban.

T [I] - I-O, 32 bites szó a T. mátrixban.

+ - 22 modul hozzáadása 32.

Az algoritmus négy ciklusánál a négy elemi logikai funkció egyikét használják. Minden egyes elemi funkció három 32 bites szót kap a bemeneten, és a kimenet egy 32 bites szót hoz létre. Minden funkció sok tételes logikai művelet, azaz Az NTH kimeneti bit a három bemenet N-B bitjáról függ. Az elemi funkciók a következők:

A 32 bites x szavak tömbje tartalmazza az aktuális 512 bites bemeneti blokk értékét, amely jelenleg feldolgozott. Minden ciklus 16-szor fut, és mivel a bemeneti üzenet minden egyes blokkja négy ciklusban dolgozik, majd minden bemeneti egység feldolgozásra kerül az 1. ábrán bemutatott ábrán látható ábrán. 4, 64 alkalommal. Ha be a bemeneti 512 bites blokk formájában tizenhat 32-bites, azaz minden bemenet 32 \u200b\u200bbites szót használják négyszer, egyszer minden ciklusban, és minden eleme a tábla T, amely 64, 32 bites A szavakat csak egyszer használják. A ciklus minden egyes lépése után négy A, B, C és D szó bal oldalán végzett ciklikus eltolódás történik. Minden lépésben az ABCD puffer négyszavának csak az egyik. Következésképpen minden puffer szó 16-szor változik, majd a végén a 17. alkalommal, hogy megkapja a készülék végső kimenetét.

megemészteni.

2. Sebesség: Az algoritmus program végrehajtását elég gyorsan kell végrehajtani. Különösen az algoritmusnak elég gyorsnak kell lennie egy 32 bites architektúrán. Ezért az algoritmus egy egyszerű elemi műveleteken alapul, mint a 32 bites szavak.

3. Egyszerűség és tömörség: Az algoritmusnak egyszerűnek kell lennie a leírásban és könnyen programozni, nagy programok vagy helyettesítő karakterek nélkül. Ezek a jellemzők nemcsak nyilvánvaló programi előnyökkel járnak, hanem kívánatosak a biztonság szempontjából is, mert elemezni a lehetséges gyenge pontokat, jobb, ha egy egyszerű algoritmus van.

4. A kis-end-end architektúra: néhány processzor architektúrák (például az Intel 80xxx vonal) tárolják a bal byte alsó bájt címét (kis-endian) szavakat. Mások (például a Sun Sparcentation) tárolják a szó megfelelő bájtját a junior bájtcímek helyzetében (nagy MD4 további konstans az első ciklusban nem vonatkozik. A második ciklus minden egyes lépéséhez hasonló további konstans használható. Egy másik további állandó használják az egyes lépéseket a harmadik ciklusban.. a hash kód funkció minden bit a bemenet. a komplex ismétlés az elemi függvények ff F, FG, FH és FI biztosítja, hogy az eredmény jól elkeverjük; Vagyis nem valószínű, hogy két üzenet véletlenszerűen választott, még akkor is, ha nyilvánvalóan hasonló mintákkal rendelkeznek, ugyanazt az emésztést, amelyek ugyanazt a kimeneti értéket hozzák létre. Ez azt jelenti, hogy az MD5 végrehajtása az 512 bites egyetlen blokk fölé vezet Ugyanaz a kimenet az ABCD pufferben két különböző bemeneti értékhez. Míg a sikeres támadás megközelítésének bővítésének módja nem létezik.