RIPEMD-160

RIPEMD-160

Egyfordulós hash séma
Létrehozva 1996
közzétett 1996. április 18
Hash méret 160 bites
A körök száma 80
Típusú hash függvény

A RIPEMD-160 (a RACE  Integrity Primitives Evaluation Message Digest -ből ) egy kriptográfiai hash függvény , amelyet a Louvaini Katolikus Egyetemen fejlesztettek ki Hans Dobbertin , Anton Bosselaers és Bart Prenel .  Egy tetszőleges bemeneti üzenethez a függvény egy 160 bites hash értéket generál, amelyet üzenetösszegzésnek neveznek . A RIPEMD-160 a RIPEMD továbbfejlesztett változata, amely viszont az MD4 alapelveit használta, és teljesítményében összehasonlítható a gyakoribb SHA-1-gyel .

Ennek az algoritmusnak 128, 256 és 320 bites verziója is létezik, amelyek neve RIPEMD-128 , RIPEMD-256 és RIPEMD-320 . A 128 bites verzió csak az eredeti RIPEMD helyettesítője, amely szintén 128 bites volt, és amelyben sebezhetőségeket találtak [1] . A 256 bites és 320 bites verziók dupla hosszúságú összefoglalót tartalmaznak , ami csökkenti az ütközések valószínűségét , de a funkciók már nem kriptográfiailag erősek .

A RIPEMD-160-at a nyílt akadémiai közösségben fejlesztették ki, ellentétben az SHA-1-gyel és az SHA-2-vel , amelyeket az NSA hozott létre . Másrészt a RIPEMD-160-at valamivel ritkábban használják, mint az SHA-1 -et a gyakorlatban .

A RIPEMD-160 használatát semmilyen szabadalom nem korlátozza .

A RIPEMD-160 megvalósítása

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

Az üzenetet úgy bővítjük, hogy a modulo 512 bitben kifejezett hossza 448 legyen. Így a bővítés eredményeként az üzenet 64 bittel marad el az 512 bites hossz többszörösétől. A kiterjesztés mindig megtörténik, még akkor is, ha az üzenet eredetileg megfelelő hosszúságú.

A bővítés a következőképpen történik: az üzenethez egy 1-gyel egyenlő bitet adunk, majd 0-val egyenlő biteket adunk hozzá, amíg az üzenet hossza 448 modulo 512 lesz. Összesen legalább 1 bit hozzáadódik az üzenethez , és maximum 512.

2. lépés: Üzenet hosszának hozzáadása

A 64 bites reprezentáció (az üzenet hossza a kitöltési bitek hozzáadása előtt) hozzáadódik az előző lépés eredményéhez. Abban a valószínűtlen esetben, ha nagyobb, mint , csak a legkisebb jelentőségű 64 bit kerül felhasználásra. Ezeket a biteket két 32 bites szóként adják hozzá, és először a legkevésbé jelentős biteket tartalmazó szót adják hozzá.

Ebben a szakaszban (a bitek és az üzenet hosszának összeadása után) egy 512 bit többszöröse hosszúságú üzenetet kapunk. Ez egyenértékű azzal, hogy ez az üzenet 16 32 bites szó többszöröse. Minden 32 bites szó négy 8 bites szót tartalmaz, de ezek nem egymás után következnek, hanem fordítva (például nyolc 8 bites szóból (abcdefgh) két 32 bites szót (dcba hgfe) kapunk).

3. lépés: A tényleges függvények és állandók meghatározása

I. Nemlineáris bitenkénti függvények:

II. Hozzáadott hexadecimális állandók:

III. 32 bites szavak kiválasztása üzenetből

VI. Bitforgatás balra beállítása (roll működés)

V. Az összefoglaló szavak kezdeti jelentései

4. lépés: Hajtsa végre a kivonatolási algoritmust

Miután beállította az összes kezdeti függvényt, állandót és a hash összegű szavak kezdeti értékét, folytathatja az algoritmus végrehajtását. Az üzenetfeldolgozás 512 bites blokkokban történik, amelyek 16, egyenként 32 bites szóból állnak (16 * 32 = 512). Minden blokk feldolgozása kétféleképpen történik, és az eredmények bizonyos módon összeadódnak.

Az alábbiakban az algoritmus pszeudokódja látható. A "+" összeadás modulo 2 32 összeadást jelent , a rol s ciklikus eltolódást jelöl balra s pozícióval. Az eredeti üzenet, amely t16 32 bites szóból álló blokkokból áll, a , , [2] tömbben tárolódik . Xi[j]0 <= i < t0 <= j < 16

for i := 0 to (t - 1) { A := h0; B:= h1; C = h2; D := h3; E := h4; A' := h0; B' := h1; C' := h2; D' := h3; E' := h4; j esetén := 0-tól 79-ig { T := rol s(j) (A + f(j; B; C; D) + Xi [ r(j)] + K(j)) + E; A := E; E := D; D: = 10. tekercs (C); C:= B; B := T; T := rol s'(j) (A' + f(79 - j; B'; C'; D') + Xi [ r'(j)] + K'(j)) + E'; A' := E'; E' := D'; D' := 10. tekercs (C'); C' := B'; B' := T; } T:= h1 + C + D'; h1 := h2 + D + E'; h2 := h3 + E + A'; h3 := h4 + A + B'; h4:= h0 + B + C'; h0 := T; }

Példák RIPEMD-160 hash-ekre

A bemeneti karakterlánc ASCII karakterekből áll . A kimeneti karakterlánc hexadecimális jelölés.

RIPEMD-160(" A gyors barna róka átugrik a lusta kutyán ") = 37f332f68db77bd9d7edd4969571ad671cf9dd3b

Még egy üzenet kis változtatása is jelentős változást okoz az összefoglalójában . Például a fenti példában a következőre dcseréljük c:

RIPEMD-160 ("A gyors barna róka átugrik a lusta fogaskeréken") = 132072df690933835eb8b6ad0b77e7b6f14acad7

Egy üres karakterlánc hash összege így néz ki:

RIPEMD-160("") = 9c1185a5c5e9fc54612808977ee8f548b2258d31

Teljesítmény

Az összehasonlító táblázat az MD4-szerű függvények végrehajtási sebességét mutatja. Feltételezzük, hogy a végrehajtási kód és az adatok a végrehajtó eszköz gyorsítótárában vannak.

Algoritmus Ciklusok Mbps Relatív teljesítmény
MD4 241 191.2 1.00
MD5 337 136.7 0,72
RIPEMD 480 96,0 0,50
RIPEMD-128 592 77.8 0,41
SHA-1 837 55.1 0,29
RIPEMD-160 1013 45.5 0.24

Linkek

Jegyzetek

  1. RMD160 archiválva : 2019. február 2. a Wayback Machine -nél