Ablakok.  Vírusok.  Laptopok.  Internet.  Hivatal.  Segédprogramok.  Drivers

Mi az MD5

Ezt az algoritmust Ronald L. Rivest professzor fejlesztette ki 1991-ben. Az MD5 algoritmust gyakran titkosítási algoritmusnak nevezik, de valójában ez az állítás hamis. Az MD5 fő előnye, hogy a titkosított adatokat nem lehet visszaállítani. Milyen titkosítási algoritmus ez, ami úgy titkosítja az adatokat, hogy senki ne ismerje fel? Az MD5 egy hash függvény. Sokakban felmerül a kérdés: mi ez? Maradjunk ennél a kérdésnél.

Mi az a hash-függvény

Tegyük fel, hogy van néhány adatkészletünk. Az egyszerűség kedvéért a természetes számokat 1-től 106-ig tekintjük. És legyen olyan függvény, amelyben az egyik paraméter egy természetes szám 1-től 106-ig, a visszatérési érték pedig egy 1-től 1000-ig terjedő természetes szám. Nem érdekel minket. hogy pontosan mit is csinál ez a függvény, Számunkra az a fontos, hogy minden 1-től 106-ig terjedő természetes számhoz hozzárendeljen egy másik természetes számot 1-től 1000-ig. Vegyük például az egyik legegyszerűbb függvényt, amely végrehajtja ezt a műveletet:

int hash(hosszú int x)(
if (x%1000==0) visszatér 1000;
visszatérés (x % 1000);
}

függvény hash(x:longint):longint;
kezdődik
if (x mod 1000=0) then hash:=1000 else
hash:=x mod 1000;
vége;

Ez egy egyszerű hash függvény. Ha ismerjük egy függvény paraméterét, akkor biztosan meg tudjuk mondani, hogy mi lesz az eredmény. És ha ismerjük az eredményt, tudjuk-e egyértelműen a paramétert? Természetesen nem. A 234-es szám esetén a paraméter lehet 234.1234, 2234.3234... Ezért a paramétert nem lehet egyértelműen visszaállítani.

Miért van szükség az MD5-re?

A példában szereplő függvény esetében, ha az eredmény ismert, könnyen találhat olyan paramétert, amely ugyanazt az eredményt kapja. De az MD5 funkció esetében ez nem olyan egyszerű. Azok. ha csak az MD5 függvény eredménye van, akkor nem fogunk találni olyan paramétert, amelyre a függvény ugyanazt az eredményt adja (a paraméter egyértelmû visszaállításáról nem is beszélünk). Az MD5 a jelszavak tárolására szolgál. Hadd mondjak egy példát, amikor veszélyes a jelszavak tiszta szövegben történő tárolása. Vegyük a „Távoktatás” oldalt (oldal). Ez az oldal ad otthont a számítástechnikai iskolások városi olimpiájának. Sok iskola nem rendelkezik internet-hozzáféréssel, és a diákoknak otthon vagy iskolájukon kívül kell használniuk az oldalt. Ezért a webhelyet magukban az iskolákban kezdték telepíteni. Azok. képzés nem magán a helyszínen, hanem annak az iskolában telepített másolatán történik. A probléma az, hogy az oldallal együtt az iskola megkapta az összes felhasználó jelszavát (beleértve az adminisztrátorokat is), és ezekkel a jelszavakkal bárki „adminisztrálhatta” magát az oldalt. A probléma megoldásának két módja volt:

1. Mielőtt létrehozna egy másolatot a webhelyről, amely átkerül az iskolába, távolítsa el az összes jelszót.
2. Titkosítsa az összes jelszót, hogy senki ne tudja visszafejteni őket.

A második módszert választották. Jelenleg a jelszavakat titkosított formában tárolják (MD5 használatával). Miután a felhasználó megadta jelszavát, a jelszóból egy MD5 hash függvény kerül kiszámításra. Az eredményt összehasonlítja az adatbázisban tárolt értékkel. Ha az értékek megegyeznek, akkor a jelszó helyes. Az MD5 ellenőrző összegként is használható. Tegyük fel, hogy másolni kell egy fájlt valahova. Sőt, nincs garancia arra, hogy a fájlt sérülés nélkül kézbesítik. Küldés előtt a fájl tartalmából kiszámolhatja az MD5-öt, és elküldheti az eredményt a fájllal együtt. Ezután számítsa ki az MD5-öt a kapott fájlból, és hasonlítsa össze a két eredményt. Ha az eredmények eltérőek, az azt jelenti, hogy a fájl vagy az eredmény megsérült az átvitel során. A közelmúltban az MD5-öt kezdték használni az online kaszinók. A fogadás megtétele előtt a játékos kap egy hash-t a játék eredményéről. A fogadás megtételekor a játékos megkapja a játék eredményét (például a 26-os számot dobják). Az eredményből egy hash függvény kiszámításával ellenőrizheti, hogy a kaszinó generálta-e ezt a számot, mielőtt a játékos fogadást tett. De ne gondolja, hogy ebben a kaszinóban nagyon könnyű nyerni. Az egész titok az, hogy a nyerési valószínűséget úgy választják meg, hogy a játékos szinte mindig vesztes legyen.

Hogyan működik az MD5

Most pedig nézzük meg, hogyan működik pontosan az MD5. Az MD5 kap valamilyen karakterláncot feldolgozásra. Ez a karakterlánc nullák és egyesek sorozatává alakul. Hogyan történik? Minden karakternek saját száma van. Ezek a számok kettes számrendszerben írhatók fel. Kiderült, hogy minden karakter felírható nullák és egyesek sorozataként. Ha ezt használjuk, akkor a karakterláncból nullák és egyesek sorozatát kapjuk. Legyen q a kapott sorozat hossza (pontosan 64 bit, esetleg kezdő nullákkal). A kapott sorozathoz 1-et adunk. Ennek eredményeként a sorozat hossza 1-gyel nő. Ezután nullákat adunk a sorozathoz, amíg a modulo 512 hossza 448 (hosszúság mod 512=448). Ezután hozzáadjuk a sorozathoz a q szám alacsonyabb rendű 32 bitjét, majd a magasabb rendűeket. A sorozat hossza 512 többszöröse lesz. Nevezzük a kapott sorozatot S-nek. Négy dupla szót (32 bit) használunk az eredmény kiszámításához. Ezek a duplaszavak a következő hexadecimális értékekkel vannak inicializálva, először a legkisebb jelentőségű bájttal:

V: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
A következő függvényeket is használják az eredmény kiszámításához:
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))

X,Y,Z kettős szavak. A függvényeredmények szintén kettős szavak. A számításhoz egy másik függvényt használunk (nevezzük W-nek). Ügyesen feldolgozza az adatokat és visszaadja az eredményt (nem írom le részletesen, mert egy sor egyszerű transzformációt hajt végre). Az adatfeldolgozás az F, G, H, I függvények használatával történik.

Az ábra a függvény sematikus ábrázolását mutatja. Bal oldalon a bemeneti adatok, jobb oldalon a kimenet látható.

Minden szükséges függvényt és jelölést figyelembe veszünk. Most nézzük meg, hogyan számítják ki az eredményt:
1. Emlékezzen az S sorozat első 512 bitjére.
2. Törölje az S sorozat első 512 bitjét (törlés nélkül is megteheti, de akkor első lépésben nem az első 512 bitet kell venni, hanem
következő 512 bit).
3. Hívja meg a W függvényt. Az A, B, C, D paraméterek a megfelelő kettős szavak aktuális értékei. A T paraméter a tárolt 512 bit.
4. Adjon A0-t A-hoz.
5. B=B+B0.
6. C=C+C0.
7. D=D+D0.
8. Ha a sorozat hossza 0, lépjen ki.
9. Folytassa az 1. lépéssel.

Az algoritmus végrehajtása után A,B,C,D az eredmény (hossza 128 bit lesz). Az MD5 eredményt gyakran 32 karakterből álló sorozatként láthatja 0..f. Ez ugyanaz, csak az eredményt nem kettes számrendszerben írjuk, hanem hexadecimálisan.

Hack MD5

Az interneten sok olyan programot találhatunk, amelyek azt ígérik, hogy találnak egy karakterláncot, amelyre az MD5 algoritmus adott eredményt ad. Ezek a programok valóban működnek. Korábban megjegyezték, hogy a paraméter visszaállítása lehetetlen. Hogyan működnek ezek a programok? Iterálják az összes lehetséges karakterláncot, alkalmazzák rájuk az MD5 algoritmust, majd összehasonlítják őket egy mintával. Ha az értékek egyeznek, ez azt jelenti, hogy a program megtalálta a kívánt karakterláncot. De ezeknek a programoknak van egy kis hátrányuk. Tegyük fel, hogy tudjuk, hogy a programnak minden 8 karakter hosszúságú szót fel kell sorolnia, amelyek kis és nagy latin betűkből állnak. Mennyi időbe telik? Hány ilyen szó van összesen? Az első hely a 26*2=52 karakter bármelyike ​​lehet. 2, 3, 4, 5, 6, 7 és 8 esetén szintén 52 van. Ez azt jelenti, hogy az ilyen szavak száma összesen: 52*52*52*52*52*52*52*52=528=53 *1012. És ha nem csak latin betűket használnak? Ez még több. Az összes lehetőség átfutása egy hagyományos személyi számítógépen sok időt vesz igénybe. Az interneten találhatunk olyan oldalakat, amelyek a beírt hash alapján olyan karakterláncot jelenítenek meg, amelyhez pontosan ugyanaz a hash lesz. Ezek a webhelyek előre kiszámított hash-ekkel rendelkező adatbázist használnak. De nem minden kivonat tárolódik az adatbázisokban, hanem csak a leggyakrabban használtak. Ezért azt tanácsolom, hogy jelszóként teljesen véletlenszerű karaktersorozatot használjon.

Ruslan Korzhik, [e-mail védett]

90.3K

Előfordul, hogy elfelejted a bejárati ajtó kódját, és ott állsz, és vársz valakire, akinek jobb a memóriája, mint te. Bár a tudósoknak van a legjobb memóriájuk. Még emlékeznek azokra az időkre, amikor a sarkukat forró vasalóval égették meg új ismeretekért. Különben nem jöttek volna ki olyan szörnyű dologgal, mint az MD5 visszafejtése. És előtte sikerült is titkosítani!

Mi az MD5?

Az MD5 a 128 bites kivonatoló algoritmusok egyike. A kivonatolás azt jelenti, hogy a bemeneti adatokat egy adott algoritmus segítségével egy bizonyos hosszúságú bitsorrá konvertálják. Ebben az esetben a számítások során kapott eredményt hexadecimális jelöléssel jelenítjük meg. Ezt hash-nek, hash-összegnek vagy hash-kódnak nevezik.

A kivonatolási folyamatot széles körben használják a programozásban és a webiparban. Főleg egyedi értékek létrehozására asszociatív tömbökben, azonosítókban.

A hash kódok hatóköre:

  • Elektronikus aláírások létrehozása;
  • Jelszavak tárolása biztonsági rendszerek adatbázisaiban;
  • A modern kriptográfia részeként egyedi kulcsok online létrehozásához;
  • A PC fájlrendszer elemeinek hitelességének és integritásának ellenőrzése.

Az MD5 mint kivonatolási szabványt 1991-ben fejlesztették ki, hogy egy adott értékből egyedi hash kódot hozzanak létre, majd ellenőrizzék annak hitelességét.

Az md5sum segédprogram, amelyet arra terveztek, hogy egy adott fájl adatait kivonatolja az MD5 algoritmus segítségével, egy karakterláncot ad vissza. 32 hexadecimális számból áll (016f8e458c8f89ef75fa7a78265a0025).

Vagyis az ezen az algoritmuson alapuló függvényből kapott hash egy 16 bájtos (128) bites sztringet állít elő. És ez a karakterlánc 16 hexadecimális számot tartalmaz. Ebben az esetben legalább egy karakter megváltoztatása a karakterlánc összes többi bitje értékének későbbi visszavonhatatlan változásához vezet:

MD5 megbízhatósági problémák

Úgy tűnik, hogy az MD5 ilyen jellemzőjének 100%-os garanciát kell adnia a sebezhetetlenségre és az adatok megőrzésére. De kiderült, hogy még ez sem elég. A kutatók kutatásaik során számos lyukat és sebezhetőséget azonosítottak ebben az akkor már széles körben elterjedt algoritmusban. Az MD5 gyenge biztonságának fő oka az ütközések viszonylag könnyű észlelése a titkosítás során.

Az ütközés alatt azt a lehetőséget értjük, hogy a hash függvény számításaiból ugyanazt az eredményt kapjuk különböző bemeneti értékekre.

Egyszerűen fogalmazva, minél nagyobb az ütközések megtalálásának valószínűsége, annál kisebb a használt algoritmus megbízhatósága. Az ütközések megtalálásának valószínűsége megbízhatóbb hash függvényekkel történő titkosításkor gyakorlatilag 0-ra csökken.

Vagyis az MD5 jelszavak visszafejtésének nagy valószínűsége a fő oka ennek az algoritmusnak a használatának megtagadásának. Sok kriptológus ( adattitkosítási szakemberek) az MD5 alacsony megbízhatóságát a kapott hash kód rövid hosszának tulajdonítja.

A hash algoritmus alkalmazási köre:

  • Az interneten keresztül kapott fájlok integritásának ellenőrzése - sok szoftvertelepítő csomag hash kóddal van felszerelve. Amikor egy alkalmazást aktiválnak, az értékét összehasonlítja a fejlesztő adatbázisában található értékkel;
  • Ismétlődő fájlok keresése a fájlrendszerben – minden fájlnak saját hash kódja van. Egy speciális alkalmazás átvizsgálja a számítógép fájlrendszerét, összehasonlítva az összes elem hash-ét. Ha egyezést észlel, a segédprogram értesíti a felhasználót, vagy törli a másolatot. Az egyik ilyen program a Duplifinder:
  • Jelszavas kivonatoláshoz - a UNIX operációs rendszerek családjában a rendszer minden felhasználója saját egyedi jelszóval rendelkezik, amelyet MD5 alapú hashelés véd. Egyes Linux-alapú rendszerek is ezt a jelszó-titkosítási módszert használják.

Az MD5 hash kód dekódolására szolgáló eszközök áttekintése

Néha, amikor számítógéppel vagy sérült adatbázisokkal dolgozik, dekódolnia kell egy MD5-titkosított hash értéket.

A legkényelmesebb olyan speciális források használata, amelyek lehetőséget biztosítanak ennek online megtételére:

  • md5.web-max.ca – ez a szolgáltatás egyszerű és intuitív felülettel rendelkezik. A dekódolt érték megszerzéséhez meg kell adnia a hash-t, és ki kell töltenie az ellenőrző captcha mezőt:
  • md5decrypter.com – hasonló szolgáltatás;
  • msurf.ru – ennek az erőforrásnak egyszerű orosz nyelvű felülete van. Funkcionalitása lehetővé teszi nemcsak a hash kódértékek visszafejtését, hanem azok létrehozását is:
Ha megnézi a fenti ábrán látható dekódolási értékeket, világossá válik, hogy a dekódolási folyamat szinte semmilyen eredményt nem hoz. Ezek az erőforrások egy vagy több összekapcsolt adatbázis, amelyek a legegyszerűbb szavak átiratait tartalmazzák.

Ugyanakkor az MD5 hash dekódolási adatok még a jelszó olyan gyakori részéhez is, mint az „admin”, csak egy adatbázisban találhatók. Ezért a bonyolultabb és hosszabb karakterkombinációkból álló jelszókivonatokat szinte lehetetlen visszafejteni.

Az MD5 hash előállítása egyirányú folyamat. Ezért ez nem jelenti az eredeti jelentés fordított dekódolását.

Biztonsági alapok az MD5 használatakor

Ez a kódolási szabvány nem csak az alkalmazásprogramozásban, hanem a webes programozásban is az egyik legelterjedtebb adatvédelmi módszer. Ezért nem lesz felesleges megvédeni az md5 hash-ét a szándékos hackeléstől.

A jelszókivonat biztonságának fő módja a „só” használata. Ennek alapja néhány véletlenszerű karakter hozzáadása a jelszóhoz, majd az eredmény kivonatolása.

Sok programozási nyelv speciális osztályokat és függvényeket használ erre. A szerveroldali programozási nyelvek sem kivételek a szabály alól.

Ebben a cikkben úgy döntöttem, hogy érintem a témát MD5 hash, hiszen ez a téma nagyon egyszerű, érdekes és nagyon-nagyon fontos. A legegyszerűbb példa az MD5 hash használatára- Ez a felhasználói jelszavak titkosítása. Nem titok, hogy ha a jelszavakat tiszta szövegben tárolja egy adatbázisban, akkor annak elvesztése esetén az összes felhasználói jelszót ellopják, amit a rendszergazdának nincs erkölcsi joga megengedni. És itt jön a segítség hash függvény a PHP-ben.

MD5 hash függvény a PHP-ben hívott md5(). A függvény egy karakterláncot fogad el, amelyet titkosítani kell. A függvény visszatér MD5 hash:

$str = "Saját jelszó";
echo md5($str);
?>

A szkript futtatásával látni fogja MD5 hash, amely megfelel a " karakterláncnak Jelszavam".

Vagyis a legegyszerűbb bejelentkezési és jelszó-ellenőrző szkript:

$login = "Adminisztrátor";
$password = "48503dfd58720bd5ff35c102065a52d7"; //A valóságban az adatbázisból olvassa be
if (($_GET["bejelentkezés"] == $bejelentkezés) && (md5($_GET["jelszó"]) == $jelszó)) echo "Üdvözlünk!";
else echo "Hozzáférés megtagadva";
?>

Most beszéljünk róla Az MD5 hash tulajdonságai.

  1. MD5 hash tartalmaz 32 szimbólum
  2. MD5 hash soronként egyedi
  3. Folyamat MD5 hash visszafordíthatatlan
  4. Folyamat MD5 hash elég lassú

A harmadik pont talán a legfontosabb, mert ha visszafordítható lenne, akkor gyakorlatilag nem létezne a hash jelentése. Hülyeség titkosítani például a jelszavakat, ha később könnyen visszafejthetők.

A negyedik pont, bármennyire is paradoxon hangzik, szintén nagyon nagy plusz. Miért? Nagyon egyszerű: olyan személy, aki kénytelen lesz megvárni ezt a folyamatot 0.001 másodperc, nem fog nagyon fájni. A jelszavakkal próbálkozó támadó azonban drámaian megsínyli, mivel az algoritmus lassúsága már szab határt - 1000 jelszó másodpercenként. Bár természetesen a sebesség a szerver sebességétől függ. Ennek ellenére egy támadó számára a megszerzés sebessége MD5 hash- ez nagyon nagy probléma.

A jövőre nézve: soha ne tárolja a jelszavakat tiszta szövegben, felejtse el egyszer s mindenkorra. Ezért mindig küldje el a jelszavakat az adatbázisba az űrlapon MD5 hash, és ennek megfelelően hasonlítsa össze a jelszókivonatokat, nem magukat a jelszavakat.

Az MD5 vagy a Message Digest 5 egy 128 bites hash algoritmus, amelyet Ronald Rivest professzor fejlesztett ki a 90-es évek elején. Általában 32 hexadecimális számjegyből álló sorozatként ábrázolják, például:. Ahhoz, hogy megértsük, mi az MD5, először meg kell értened a hash fogalmát.

A kivonatolás az a folyamat, amely során bármilyen adattömböt rögzített hosszúságú kimeneti karakterláncokká alakítanak. Ezt az átalakítást úgynevezett hash függvényekkel hajtják végre. Egy ilyen függvény bemenetként egy adattömböt kap, kimenetként pedig egy úgynevezett hash-t (hash összeget) ad vissza - egy fix hosszúságú egyedi karakterláncot.

A hash függvény algoritmusát úgy tervezték meg, hogy bármely adattömbhöz a függvény egyedi karakterláncot állítson elő. Ennek a funkciónak köszönhetően a kapott karakterlánc használható az adatok digitális ujjlenyomataként. Ez az ujjlenyomat használható az adatok integritásának ellenőrzésére.

Például, amikor egy szoftverfejlesztő közzéteszi szoftvertermékét az interneten, közzéteheti annak hash-jét is. Ez lehetővé teszi a felhasználók számára, hogy ellenőrizzék a program integritását a telepítés előtt. Ha a programot vírusok fertőzték meg, vagy hibákat tartalmazott, akkor a hash nem egyezik a program fejlesztője által közzétett hash-sel.

Az MD5 fejlesztésének története

Az MD5 algoritmust Ronald L. Rivest professzor, a Massachusetts Institute of Technology munkatársa fejlesztette ki 1991-ben. Ez az algoritmus felváltotta az MD4 algoritmus korábbi verzióját. Azóta az algoritmus nagy népszerűségre tett szert, és mindenhol elkezdték használni.

1993 óta rendszeresen jelennek meg olyan tanulmányok, amelyek új sebezhetőségeket fedeznek fel az MD5 algoritmusban. Jelenleg az MD5 algoritmus sebezhetőnek számít, és fokozatosan felváltja az SHA algoritmus.

Hogyan szerezhető be MD5 hash

Ha MD5 hash-t kell beszereznie egy szokásos szövegből, akkor a legkényelmesebb az online szolgáltatások használata. Az egyik ilyen szolgáltatás az.

Ahhoz, hogy MD5 hash-t kapjon ezzel a szolgáltatással, csak írja be a karakterláncot a mezőbe, és kattintson a „Hash” gombra. Ebben a mezőben megjelenik a beírt karakterlánc hash-je.

Ha meg kell szereznie egy fájl MD5 hash-jét, speciális programokat kell használnia, például MD5summer (

Sokat írtak már az interneten, így a Habré-n is a különféle hash függvényekről, azonban ebben a témában az MD5 algoritmusáról és megvalósításáról adok véleményt.

Mi az a hash függvény és mire használják?
A hash függvényt arra tervezték, hogy egy tetszőleges méretű bemeneti tömböt egy bitkarakterláncba konvoláljon, a kimeneti karakterlánc hossza 128 bit. Mire való? Például van két tömbünk, és gyorsan össze kell hasonlítani őket az egyenlőség érdekében, akkor ezt egy hash függvény meg tudja tenni helyettünk, ha két tömbnek különböző kivonatai vannak, akkor a tömbök garantáltan különböznek, és ha a hash-ek egyenlőek , a tömbök nagy valószínűséggel egyenlőek.
Leggyakrabban azonban hash függvényeket használnak a jelszó, fájl, karakterlánc stb. egyediségének ellenőrzésére. Például, amikor letöltünk egy fájlt az internetről, gyakran látunk mellette egy sort, amely úgy néz ki, mintha ez egy hash lenne. Ha ezt a fájlt az MD5 algoritmuson keresztül futtatjuk, akkor egy ilyen sort kapunk, és ha a hash-ek egyenlőek, nagy valószínűséggel kijelentheti, hogy ez a fájl valóban eredeti (persze bizonyos fenntartásokkal, amelyekről később lesz szó).
Pontosabban az MD5-ről
Létrehozásának történetébe nem mélyedek bele, a Wikipédián olvashattok róla, de megjegyzem, hogy az algoritmust R. Riverst professzor készítette 1991-ben az md4 algoritmus alapján. Ezt az algoritmust az RFC 1321 írja le
Az algoritmus öt lépésből áll:
1) Hozzáfűzi a padding biteket
Egyetlen 0x80 bájtot adunk az eredeti sorhoz, majd nulla bitet adunk hozzá mindaddig, amíg az üzenet hossza össze nem hasonlítható 448 modulo 512-vel. Ez azt jelenti, hogy addig adunk hozzá nullákat, amíg az új üzenet hossza nem lesz egyenlő [hosszúság] = ( 512*N+448),
ahol N bármely természetes szám, amelyre ez a kifejezés lesz a legközelebb a blokk hosszához.
2) Hossz hozzáfűzése
Ezután az eredeti üzenet hosszának 64 bites reprezentációja hozzáadódik az üzenethez.
3) Inicializálja az MD puffert
Ebben a lépésben a puffer inicializálásra kerül
A szó: 01 23 45 67
B szó: 89 ab cd ef
C szó: fe dc ba 98
D szó: 76 54 32 10
Mint látható, a puffer négy állandóból áll, amelyek a hash összegyűjtésére szolgálnak.
4) Üzenet feldolgozása 16 szavas blokkokban
A negyedik lépésben először definiálunk 4 kiegészítő logikai függvényt, amelyek a 32 bites bemeneti szavakat furcsa módon 32 bites kimeneti szavakká alakítják.
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))
Szintén ebben a lépésben valósul meg az úgynevezett „fehér zaj” - az algoritmus erősítése, amely egy 64 elemű tömbből áll, amely pszeudo-véletlen számokat tartalmaz az i szám szinuszától függően:
T[i]=4 294 967 296*absz (sin(i))
Ezután kezdődik a „varázslat”. Minden 16 bites blokkot átmásolunk az X tömbbe, és végrehajtjuk a manipulációkat:
AA = A
BB = B
CC=C
DD=D
Ezután „csodálatos” transzformációs körök jönnek létre, amelyekből összesen 4 lesz. Minden kör 16 elemi transzformációból áll, amelyek általánosságban a következőkkel ábrázolhatók, amelyek viszont A = B + ((A +). F(B,C,D) + X[k] + T[i])<<< s), где
A, B, C, D - regiszterek
F(B,C,D) - az egyik logikai függvény
X[k] a 16 bites blokk k-adik eleme.
T[i] - a „fehér zaj” táblázat i-edik eleme
<<< s - операция циклического сдвига на s позиций влево.
Nincs értelme az összes fordulót felsorolni, mindegyiket megnézheti
Nos, a végén összefoglaljuk a számítások eredményeit:
A = A + AA
B = B + BB
C=C+CC
D=D+DD
5) Kimenet
Az ABCD puffer bájtonkénti kiadásával, A-tól kezdve és D-vel végződve, megkapjuk a hash-ünket.
Megbízhatóság
Van olyan vélemény, hogy lehetetlen feltörni egy MD5 hash-t, de ez nem igaz, sok olyan program van, amely a hash alapján választja ki a forrásszót. Túlnyomó többségük a szótárban keres, de vannak olyan módszerek, mint például a RainbowCrack, amely több hash létrehozásán alapul egy karakterkészletből, hogy megkeresse a hash-t az eredményül kapott adatbázisban.
Ezenkívül az MD5-ben, mint minden hash-függvényben, létezik olyan dolog, mint az ütközések – ez azonos hash-ek beszerzése a különböző forráskarakterláncokhoz. 1996-ban Hans Dobbertin pszeudoütközéseket talált az MD5-ben egy speciális inicializálási puffer (ABCD) segítségével. Szintén 2004-ben Wang Xiaoyun, Feng Denguo, Lai Xuejia és Yu Hongbo kínai kutatók bejelentették, hogy egy olyan algoritmus sérülékenységét fedezték fel, amely lehetővé teszi számukra, hogy rövid időn belül (1 óra egy IBM p690 klaszteren) ütközéseket találjanak. 2006-ban azonban Vlastimil Klima cseh kutató közzétett egy algoritmust, amely lehetővé teszi az ütközések megtalálását egy normál számítógépen bármely kezdő vektorral (A, B, C, D), az általa „alagútnak” nevezett módszerrel.

Csatolok egy saját példámat a függvény C#-ban való megvalósítására:
md5.rar

Címkék: kriptográfia, md5

Ez a cikk nem kommentálható, mivel a szerzője még nem teljes jogú tagja a közösségnek. Csak akkor léphet kapcsolatba a szerzővel, ha meghívást kapott valakitől a közösségben. Eddig a pillanatig a felhasználónevét egy álnév rejti el.

Ha hibát észlel, jelöljön ki egy szövegrészt, és nyomja meg a Ctrl+Enter billentyűkombinációt
OSSZA MEG: