RIPEMD-128 | |
---|---|
Udviklere | Hans Dobberthin , Anton Boselaers og Bart Prenel |
Oprettet | 1996 |
Standarder | ISO/IEC 10118-3:2004 |
Hash størrelse | 128 bit |
Antal runder | fire |
Type | hash funktion |
RIPEMD-128 ( RACE Integrity Primitives Evaluation Message Digest ) er en kryptografisk hashfunktion udviklet af Hans Dobbertinengelsk Anton Boselaers og Bart Prenel i 1996 .
RIPEMD er et sæt hash-funktioner, der tilhører MD-SHA-familien. Den første af disse var RIPEMD-0, anbefalet i 1992 af RACE Integrity Primitives Evaluation (RIPE) konsortiet som en forbedret version af MD4-algoritmen [1] . Krypteringsanalyse udført af Dobbertin viste, at denne algoritme ikke er sikker i forhold til , hvilket senere blev bekræftet af de fundne sårbarheder [ 2] RIPEMD-128 (sammen med en 160-bit version, RIPEMD-160 ) blev introduceret som en erstatning for den originale RIPEMD, som også var 128-bit. Andre versioner af algoritmen er også blevet udviklet med længere hash-længder: RIPEMD-256 og RIPEMD-320 (henholdsvis 256-bit og 320-bit).
En anden grund til at gå over til algoritmer, der producerer et resultat med et stort antal bits, var den hurtige udvikling af computerteknologi (ifølge Moores lov ). De algoritmer, der var tilgængelige på det tidspunkt, blev mere og mere sårbare over for brute-force kollisionsangreb hvert år . Imidlertid har RIPEMD-128 fundet vej til nogle bankapplikationer [3] . Det blev standardiseret i 2004 ( ISO/IEC 10118-3:2004 Arkiveret 2. februar 2017 på Wayback Machine ).
Givet en vilkårlig inputmeddelelse genererer hash-funktionen en 128-bit hashværdi, beskedsammendraget . Algoritmen er baseret på MD4 hashing-algoritmen . MD4 hashing består af 48 operationer, der indeholder anvendelsen af ikke-lineære booleske funktioner , grupperet i 3 runder af 16 operationer. I RIPEMD-128-algoritmen er antallet af runder øget til 4. Derudover bruges andre boolske funktioner og konstantværdier [3] . I algoritmen udføres to linjer (flows) parallelt, som er betinget opdelt i Venstre og Højre.
Algoritmen består af flere hovedtrin:
Algoritmen fungerer med datablokke på 512 bit, inputmeddelelsen er foreløbigt reduceret til den nødvendige størrelse. Først, uanset meddelelsens begyndelseslængde, tilføjes en bit lig med 1. Derefter tilføjes bit lig med 0 til den, indtil længden af den resulterende sekvens bliver 448 bit modulo 512. Som et resultat af udvidelse, op til 512 bit lang, er den ændrede meddelelse nøjagtigt 64 bit kort. På dette trin kan der tilføjes fra 1 til 512 bits.
Ved næste trin føjes længden af den oprindelige meddelelse (før anvendelse af det første trin) i 64-bit repræsentation til den 448-bit modtagne meddelelse. Hvis den oprindelige meddelelseslængde overstiger 264 bit, så bruges kun de mindst signifikante 64 bit af dens bitlængde. Desuden tilføjes længden af den originale meddelelse i form af to 32-bit ord: de nederste 32 bit tilføjes først, derefter de højere. Efter dette trin bliver længden af den ændrede meddelelse 512 bit. Det kan også repræsenteres som 16 32-bit ord.
Forskellige kombinationer af permutationsfunktioner bruges i hver runde for at bestemme rækkefølgen af 32-bit ord i meddelelsen .
Lad os definere permutationsfunktionen :
0 | en | 2 | 3 | fire | 5 | 6 | 7 | otte | 9 | ti | elleve | 12 | 13 | fjorten | femten | |
7 | fjorten | 13 | en | ti | 6 | femten | 3 | 12 | 0 | 9 | 5 | 2 | fjorten | elleve | otte |
Og også permutationsfunktionen :
I hver runde bestemmes rækkefølgen som følger:
Linje | Runde 1 | Runde 2 | Runde 3 | Runde 4 |
---|---|---|---|---|
Venstre | ||||
Ret |
I hver runde anvendes visse booleske funktioner for hver linje.
Lad os definere ikke-lineære bitvise booleske funktioner:
I hver runde, afhængig af linjen, gælder følgende:
Linje | Runde 1 | Runde 2 | Runde 3 | Runde 4 |
---|---|---|---|---|
Venstre | ||||
Ret |
Følgende skift ( ) gælder for begge linjer :
Rund | x0 _ | x1 _ | x2 _ | x3 _ | x4 _ | x5 _ | x6 _ | X7 _ | x8 _ | x9 _ | X 10 | X 11 | X 12 | X 13 | X 14 | X 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
en | elleve | fjorten | femten | 12 | 5 | otte | 7 | 9 | elleve | 13 | fjorten | femten | 6 | 7 | 9 | otte |
2 | 12 | 13 | elleve | femten | 6 | 9 | 9 | 7 | 12 | femten | elleve | 13 | 7 | otte | 7 | 7 |
3 | 13 | femten | fjorten | elleve | 7 | 7 | 6 | otte | 13 | fjorten | 13 | 12 | 5 | 5 | 6 | 9 |
fire | fjorten | elleve | 12 | fjorten | otte | 6 | 5 | 5 | femten | 12 | femten | fjorten | 9 | 9 | otte | 6 |
Heltalsdelene af følgende reelle tal bruges som konstanter ( ) brugt i algoritmen:
Linje | Runde 1 | Runde 2 | Runde 3 | Runde 4 |
---|---|---|---|---|
Venstre | ||||
Ret |
Efter at have indstillet alle de indledende funktioner og konstanter, bragt meddelelsen til den nødvendige størrelse, kan du fortsætte til udførelsen af algoritmen. Algoritmen udføres langs to parallelle stier (linjer). Beskedbehandling sker i ord på 16 ord i 32 bit.
Ved hvert trin, for hver af linjerne, udføres følgende operation:
hvor angiver et cyklisk skift i positioner.
Tabellen til sammenligning viser udførelseshastighederne for MD-lignende funktioner. Testprogrammerne blev skrevet i assemblersprog og C , ved hjælp af optimeringer til testmaskinen: [4]
Algoritme | Mbps - asm | Mbps - C | Relativ præstation |
---|---|---|---|
RIPEMD-128 | 77,6 | 35,6 | 1.00 |
RIPEMD-160 | 45,3 | 19.3 | 0,58 |
SHA-1 | 54,9 | 21.2 | 0,71 |
MD5 | 136,2 | 59,7 | 1,76 |
MD4 | 190,6 | 81,4 | 2,46 |
En uafhængig undersøgelse udført senere viste nogenlunde lignende resultater. C++- biblioteket Crypto++ blev brugt i målingen : [5]
Algoritme | Mbps | Cykler pr. byte | Relativ præstation |
---|---|---|---|
RIPEMD-128 | 153 | 11.4 | 1.00 |
RIPEMD-160 | 106 | 16.5 | 0,69 |
RIPEMD-256 | 158 | 11.1 | 1.03 |
RIPEMD-320 | 110 | 15.9 | 0,72 |
SHA-1 | 153 | 11.4 | 1.00 |
MD5 | 255 | 6.8 | 1,67 |
I kryptografi er der to hovedtyper af angreb på kryptografiske hashfunktioner: et preimage-angreb - et forsøg på at finde en besked med en given hashværdi og et kollisionsangreb - en søgning efter to forskellige inputblokke af en kryptografisk hashfunktion, der producerer de samme hashfunktionsværdier, det vil sige en hashkollision -funktioner .
RIPEMD-128-algoritmen, ligesom andre algoritmer i RIPEMD- familien , inklusive den originale første, anses for at være modstandsdygtig over for preimage-angrebet. For RIPEMD-128 er den beregningsmæssige kompleksitet ved at finde det første præbillede 2 128 , hvilket falder sammen med den maksimale værdi for dets bitlængde - søgningen kræver udtømmende søgning : [6]
Algoritme | Vanskeligheden ved at finde forbilledet | Bedste angreb (runder) |
---|---|---|
RIPEMD (original) | 2128 _ | 35 ud af 48 |
RIPEMD-128 | 2128 _ | 35 ud af 64 |
RIPEMD-160 | 2160 _ | 31 ud af 80 |
For en forkortet version af RIPEMD-128 er der algoritmer til at finde det første preimage, der kræver mindre kompleksitet: [7]
runder | Svært ved at finde | Kilde |
---|---|---|
33 | 2.124,5 _ | Artikel [6] |
35 | 2121 _ | Artikel [6] |
36 | 2.126,5 _ | Artikel [8] |
Den originale RIPEMD var ikke kollisionssikker. Kollisionen blev kendt i 2004 [2] , i 2005 blev der publiceret en tilsvarende artikel om kryptoanalysen af algoritmen [9] . Da enhver kryptografisk hashfunktion per definition er sårbar over for et fødselsdagsangreb , kan sværhedsgraden ved at gætte ikke overstige 2 N/2 for en N-bit hashfunktion. En 128-bit RIPEMD kan dog blive "brudt" i 2 18 , hvilket er meget mindre end dens tilsvarende værdi på 2 64 .
En komplet RIPEMD-128 kunne teoretisk set være "brudt". Kollisionsangrebet har en kompleksitet på omkring 2 61,57 (mod de nødvendige 2 64 ). Mens den forkortede version er genstand for mere vellykkede angreb:
Mål | runder | Svært ved at finde | Kilde |
---|---|---|---|
Kompressionsfunktion | 48 | 2 40 | Artikel [7] |
Kompressionsfunktion | 60 | 2 57,57 | Artikel [1] |
Kompressionsfunktion | 63 | 2 59,91 | Artikel [1] |
Kompressionsfunktion | Fuld (64) | 2 61,57 | Artikel [1] |
hash funktion | 38 | 2 14 | Artikel [7] |
Funktionens 128-bit output, som ikke syntes at være tilstrækkeligt beskyttet på kort sigt [3] , tjente blot som en grund til at skifte til RIPEMD-160 . For hende kendes kun kollisionsangreb på den forkortede version (48 ud af 80 runder, 251 gange) [10] .
Eksempler, der demonstrerer lavineeffekten :
RIPEMD128("aaa10 0 ") = "5b250e8d7ee4fd67f35c3d193c6648c4" RIPEMD128("aaa10 1 ") = "e607de9b0ca4fe01be84f87b83d8b5a3"Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|