RIPEMD-160

RIPEMD-160

Enkelt runt hash-schema
Skapad 1996
publiceras 18 april 1996
Hash storlek 160 bitar
Antal omgångar 80
Sorts hash-funktion

RIPEMD-160 (från RACE  Integrity Primitives Evaluation Message Digest ) är en kryptografisk hashfunktion utvecklad vid katolska universitetet i Louvain av Hans Dobbertin , Anton Bosselaers och Bart Prenel .  För ett godtyckligt ingångsmeddelande genererar funktionen ett 160-bitars hashvärde som kallas meddelandesammanfattningen . RIPEMD-160 är en förbättrad version av RIPEMD, som i sin tur använde principerna för MD4 och är jämförbar i prestanda med den vanligare SHA-1 .

Det finns också 128-, 256- och 320-bitarsversioner av denna algoritm, som respektive heter RIPEMD-128 , RIPEMD-256 och RIPEMD-320 . 128-bitarsversionen är bara en ersättning för den ursprungliga RIPEMD, som också var 128-bitars och där sårbarheter hittades [1] . 256-bitars och 320-bitarsversionerna har dubbel längd på sammanfattningen , vilket minskar sannolikheten för kollisioner , men funktionerna är inte längre kryptografiskt starka .

RIPEMD-160 utvecklades i det öppna akademiska samhället, till skillnad från SHA-1 och SHA-2 , som skapades av NSA . Å andra sidan används RIPEMD-160 något mindre frekvent än SHA-1 i praktiken .

Användningen av RIPEMD-160 är inte begränsad av några patent .

Implementering av RIPEMD-160

Steg 1: Lägga till saknade bitar

Meddelandet utökas så att dess längd i bitar modulo 512 är 448. Sålunda, som ett resultat av expansionen, är meddelandet 64 bitar mindre än en längdmultipel av 512 bitar. Expansionen utförs alltid, även om meddelandet ursprungligen har rätt längd.

Expansionen utförs enligt följande: en bit lika med 1 läggs till meddelandet och sedan läggs bitar lika med 0 tills längden på meddelandet är 448 modulo 512. Totalt läggs minst 1 bit till meddelandet, och som högst 512.

Steg 2. Lägga till en meddelandelängd

64-bitars representationen (längden på meddelandet innan utfyllnadsbitar läggs till) läggs till resultatet av föregående steg. I det osannolika fallet som är större än , används endast de minst signifikanta 64 bitarna. Dessa bitar läggs till som två 32-bitars ord, med ordet som innehåller de minst signifikanta bitarna läggs till först.

I detta skede (efter att ha lagt till bitarna och längden på meddelandet) får vi ett meddelande med en längd som är en multipel av 512 bitar. Detta motsvarar att detta meddelande är en multipel av 16 32-bitars ord långt. Varje 32-bitars ord innehåller fyra 8-bitars ord, men de följer inte i rad, utan vice versa (till exempel, från åtta 8-bitars ord (abcdefgh) får vi två 32-bitars ord (dcba hgfe)).

Steg 3: Fastställande av faktiska funktioner och konstanter

I. Icke-linjära bitvisa funktioner:

II. Tillagda hexadecimala konstanter:

III. Välja 32-bitars ord från ett meddelande

VI. Ställ in att bitrotera åt vänster (rullning)

V. Inledande betydelser av sammanfattningsorden

Steg 4. Utför hashalgoritmen

Efter att ha ställt in alla initiala funktioner, konstanter och initiala värden för hashsumorden, kan du fortsätta till exekveringen av algoritmen. Meddelandebehandling sker i 512-bitars block, bestående av 16 ord med 32 bitar vardera (16 * 32 = 512). Varje block bearbetas på två sätt, och resultaten summerar på ett visst sätt.

Nedan är pseudokoden för algoritmen. Addition "+" betyder addition modulo 2 32 , rol s betecknar en cyklisk förskjutning åt vänster med s positioner. Det ursprungliga meddelandet, som består av tblock med 16 32-bitars ord, lagras i arrayen , , [2] . Xi[j]0 <= i < t0 <= j < 16

för i := 0 till (t - 1) { A := hO; B:= hl; C:= h2; D:= h3; E:= h4; A' := h0; B' := hl; C' := h2; D' := h3; E' := h4; för j := 0 till 79 { T:= rol s(j) (A + f(j; B; C; D) + Xi [ r(j)] + K(j)) + E; A := E; E:=D; D:= rulle 10 (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' := rulle 10 (C'); C' := B'; B' := T; } T:= hl + C + D'; hl:= h2 + D + E'; h2:= h3 + E + A'; h3:= h4 + A + B'; h4:= hO + B + C'; hO := T; }

Exempel på RIPEMD-160-hashar

Inmatningssträngen består av ASCII-tecken . Utdatasträngen är en hexadecimal notation.

RIPEMD-160(" Den snabba bruna räven hoppar över den lata hunden ") = 37f332f68db77bd9d7edd4969571ad671cf9dd3b

Även en liten förändring av ett meddelande orsakar en betydande förändring i dess sammanfattning . Till exempel kommer vi att ersätta i exemplet ovan dmed c:

RIPEMD-160("Den kvicka bruna räven hoppar över den lata kuggen") = 132072df690933835eb8b6ad0b77e7b6f14acad7

Hashsumman för en tom sträng ser ut så här:

RIPEMD-160("") = 9c1185a5c5e9fc54612808977ee8f548b2258d31

Prestanda

Tabellen för jämförelse visar exekveringshastigheterna för MD4-liknande funktioner. Det antas att exekveringskoden och data finns i den exekveringsanordningens cache.

Algoritm Cyklar Mbps Relativ prestation
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

Länkar

Anteckningar

  1. RMD160 Arkiverad 2 februari 2019 på Wayback Machine