RIPEMD-128 | |
---|---|
Kehittäjät | Hans Dobberthin , Anton Boselaers ja Bart Prenel |
Luotu | 1996 |
Standardit | ISO/IEC 10118-3:2004 |
Hash-koko | 128 bittinen |
Kierrosten lukumäärä | neljä |
Tyyppi | hash-toiminto |
RIPEMD-128 ( RACE Integrity Primitives Evaluation Message Digest ) on Hans DobbertininEnglanti Anton Boselaersin ja Bart Prenelin vuonna 1996 kehittämä kryptografinen hash - funktio .
RIPEMD on joukko hash-funktioita , jotka kuuluvat MD-SHA-perheeseen. Ensimmäinen näistä oli RIPEMD-0, jota RACE Integrity Primitives Evaluation (RIPE) -konsortio suositteli vuonna 1992 MD4 - algoritmin parannetuksi versioksi [1] . Dobbertinin suorittama krypta- analyysi osoitti, että tämä algoritmi ei ole turvallinen , minkä myöhemmin vahvistivat löydetyt haavoittuvuudet [ 2] RIPEMD-128 (yhdessä 160-bittisen version RIPEMD-160 kanssa ) esiteltiin korvaamaan alkuperäisen RIPEMD:n, joka myös oli 128-bittinen. Myös muita algoritmin versioita on kehitetty pidemmällä hash-pituudella: RIPEMD-256 ja RIPEMD-320 (256-bittinen ja 320-bittinen).
Toinen syy siirtymiseen algoritmeihin, jotka tuottavat tuloksen suurella bittimäärällä, oli laskentatekniikan nopea kehitys ( Mooren lain mukaan ). Tuolloin saatavilla olevat algoritmit tulivat vuosi vuodelta entistä haavoittuvaisempia raa'an voiman törmäyshyökkäyksille . RIPEMD-128 on kuitenkin löytänyt tiensä joihinkin pankkisovelluksiin [3] . Se standardisoitiin vuonna 2004 ( ISO/IEC 10118-3:2004 arkistoitu 2. helmikuuta 2017 Wayback Machinessa ).
Satunnaisen syöttöviestin perusteella hash-funktio luo 128-bittisen hash-arvon, sanoman tiivisteen . Algoritmi perustuu MD4 -hajautusalgoritmiin . MD4-hajautus koostuu 48 operaatiosta, jotka sisältävät epälineaaristen Boolen funktioiden soveltamisen ja jotka on ryhmitelty 3 kierrokseen , joissa on 16 operaatiota. RIPEMD-128-algoritmissa kierrosten lukumäärä on nostettu 4:ään. Lisäksi käytetään muita Boolen funktioita ja vakioarvoja [3] . Algoritmissa suoritetaan kaksi riviä (virtaa) rinnakkain, jotka on ehdollisesti jaettu Vasemmalle ja Oikealle.
Algoritmi koostuu useista päävaiheista:
Algoritmi toimii 512-bittisillä tietolohkoilla, syöttöviesti pienennetään alustavasti vaadittuun kokoon. Ensin, riippumatta viestin alkuperäisestä pituudesta, siihen lisätään yksi bitti, joka on yhtä suuri kuin 1. Sitten siihen lisätään bittejä, jotka ovat yhtä suuria kuin 0, kunnes tuloksena olevan sekvenssin pituudeksi tulee 448 bittiä modulo 512. Laajennuksen seurauksena ylöspäin 512 bittiä pitkäksi, muokattu viesti on tasan 64 bittiä lyhyt. Tässä vaiheessa siihen voidaan lisätä 1 - 512 bittiä.
Seuraavassa vaiheessa alkuperäisen viestin pituus (ennen ensimmäisen vaiheen soveltamista) 64-bittisenä esityksenä lisätään 448-bittiseen vastaanotettuun viestiin. Jos alkuperäinen viestin pituus ylittää 264 bittiä, käytetään vain vähiten merkitseviä 64 bittiä sen bitin pituudesta. Lisäksi alkuperäisen viestin pituus lisätään kahden 32-bittisen sanan muodossa: ensin lisätään alemmat 32 bittiä, sitten korkeammat. Tämän vaiheen jälkeen muokatun viestin pituudeksi tulee 512 bittiä. Se voidaan esittää myös 16 32-bittisenä sanana.
Jokaisella kierroksella käytetään erilaisia permutaatiofunktioiden yhdistelmiä määrittämään viestin 32-bittisten sanojen järjestys .
Määritellään permutaatiofunktio :
0 | yksi | 2 | 3 | neljä | 5 | 6 | 7 | kahdeksan | 9 | kymmenen | yksitoista | 12 | 13 | neljätoista | viisitoista | |
7 | neljätoista | 13 | yksi | kymmenen | 6 | viisitoista | 3 | 12 | 0 | 9 | 5 | 2 | neljätoista | yksitoista | kahdeksan |
Ja myös permutaatiofunktio :
Jokaisella kierroksella järjestys määräytyy seuraavasti:
Linja | Erä 1 | Kierros 2 | Kierros 3 | Kierros 4 |
---|---|---|---|---|
Vasen | ||||
Oikein |
Jokaisella kierroksella kullekin riville käytetään tiettyjä Boolen funktioita.
Määritellään epälineaariset bittikohtaiset Boolen funktiot:
Jokaisella kierroksella linjasta riippuen sovelletaan seuraavaa:
Linja | Erä 1 | Kierros 2 | Kierros 3 | Kierros 4 |
---|---|---|---|---|
Vasen | ||||
Oikein |
Seuraavat muutokset ( ) koskevat molempia rivejä :
Pyöristää | x0_ _ | x1_ _ | x2_ _ | x3_ _ | x4 _ | x5_ _ | x6 _ | X7_ _ | x8_ _ | x9_ _ | X 10 | X 11 | X 12 | X 13 | X 14 | X 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
yksi | yksitoista | neljätoista | viisitoista | 12 | 5 | kahdeksan | 7 | 9 | yksitoista | 13 | neljätoista | viisitoista | 6 | 7 | 9 | kahdeksan |
2 | 12 | 13 | yksitoista | viisitoista | 6 | 9 | 9 | 7 | 12 | viisitoista | yksitoista | 13 | 7 | kahdeksan | 7 | 7 |
3 | 13 | viisitoista | neljätoista | yksitoista | 7 | 7 | 6 | kahdeksan | 13 | neljätoista | 13 | 12 | 5 | 5 | 6 | 9 |
neljä | neljätoista | yksitoista | 12 | neljätoista | kahdeksan | 6 | 5 | 5 | viisitoista | 12 | viisitoista | neljätoista | 9 | 9 | kahdeksan | 6 |
Seuraavien reaalilukujen kokonaislukuosia käytetään algoritmissa käytettyinä vakioina ( ):
Linja | Erä 1 | Kierros 2 | Kierros 3 | Kierros 4 |
---|---|---|---|---|
Vasen | ||||
Oikein |
Kun olet asettanut kaikki alkufunktiot ja vakiot ja saattanut viestin vaadittuun kokoon, voit jatkaa algoritmin suorittamiseen. Algoritmi suoritetaan kahta rinnakkaista polkua (viivaa) pitkin. Viestien käsittely tapahtuu 16 sanan sanoilla 32 bitissä.
Jokaisessa vaiheessa kullekin riville suoritetaan seuraava toimenpide:
jossa tarkoittaa syklistä paikkojen muutosta .
Vertailutaulukossa on esitetty MD-tyyppisten toimintojen suoritusnopeudet. Testiohjelmat kirjoitettiin assembly-kielellä ja C :llä käyttäen optimointeja testikoneelle: [4]
Algoritmi | Mbps - asm | Mbps - C | Suhteellinen suorituskyky |
---|---|---|---|
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 |
Myöhemmin tehty riippumaton tutkimus osoitti melko samanlaisia tuloksia. Mittauksessa käytettiin C++- kirjastoa Crypto++ : [5]
Algoritmi | Mbps | Jaksot per tavu | Suhteellinen suorituskyky |
---|---|---|---|
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 |
Salaustekniikassa on kahta päätyyppiä hyökkäyksiä kryptografisiin hajautustoimintoihin: esikuvahyökkäys - yritys löytää viesti, jolla on tietty hash-arvo, ja törmäyshyökkäys - kahden eri syöttölohkon etsiminen kryptografisesta hash-funktiosta, jotka tuottavat samat hash-funktion arvot eli tiivistetörmäysfunktiot .
RIPEMD-128-algoritmin, kuten muidenkin RIPEMD -perheen algoritmien , mukaan lukien alkuperäinen ensimmäinen, katsotaan kestävän esikuvahyökkäystä. RIPEMD-128 :lla ensimmäisen esikuvan löytämisen laskennallinen monimutkaisuus on 2 128 , mikä vastaa sen bittipituuden maksimiarvoa - haku vaatii kattavan haun : [6]
Algoritmi | Esikuvan löytämisen vaikeus | Paras hyökkäys (kierrokset) |
---|---|---|
RIPEMD (alkuperäinen) | 2128 _ | 35/48 |
RIPEMD-128 | 2128 _ | 35/64 |
RIPEMD-160 | 2160 _ | 31/80 |
RIPEMD-128:n lyhennetylle versiolle on olemassa algoritmeja ensimmäisen esikuvan löytämiseksi, jotka vaativat vähemmän monimutkaisuutta: [7]
Pyöreät | Löytämisen vaikeus | Lähde |
---|---|---|
33 | 2 124,5 _ | artikla [6] |
35 | 2121 _ | artikla [6] |
36 | 2 126,5 _ | artikla [8] |
Alkuperäinen RIPEMD ei ollut törmäysturvallinen. Törmäys tuli tunnetuksi vuonna 2004 [2] , vuonna 2005 julkaistiin vastaava artikkeli algoritmin kryptausanalyysistä [9] . Koska mikä tahansa kryptografinen hash-funktio on määritelmän mukaan alttiina syntymäpäivähyökkäykselle , arvausvaikeus ei saa ylittää 2 N/2 N-bittisessä hash-funktiossa. 128-bittinen RIPEMD voidaan kuitenkin "rikkoa" 2 18 :ssa , mikä on paljon vähemmän kuin sen vastaava arvo 2 64 .
Täydellinen RIPEMD-128 voisi teoriassa olla "rikki". Törmäyshyökkäyksen monimutkaisuus on noin 2 61,57 (tarvittavaa 2 64 pistettä vastaan ). Vaikka lyhennetty versio on alttiina onnistuneemmille hyökkäyksille:
Kohde | Pyöreät | Löytämisen vaikeus | Lähde |
---|---|---|---|
Pakkaustoiminto | 48 | 2 40 | artikla [7] |
Pakkaustoiminto | 60 | 2 57,57 | Artikkeli [1] |
Pakkaustoiminto | 63 | 2 59,91 | Artikkeli [1] |
Pakkaustoiminto | Täysi (64) | 2 61,57 | Artikkeli [1] |
hash-toiminto | 38 | 2 14 | artikla [7] |
Toiminnon 128-bittinen lähtö, joka ei näyttänyt olevan riittävän suojattu lyhyellä aikavälillä [3] , toimi vain syynä vaihtaa RIPEMD-160 :een . Hänestä tunnetaan vain törmäyshyökkäykset lyhennettyä versiota vastaan (48 laukausta 80:stä, 251 kertaa) [10] .
Esimerkkejä lumivyöryvaikutuksesta :
RIPEMD128("aaa10 0 ") = "5b250e8d7ee4fd67f35c3d193c6648c4" RIPEMD128("aaa10 1 ") = "e607de9b0ca4fe01be84f87b83d8b5a3"Hash-funktiot | |
---|---|
yleinen tarkoitus | |
Kryptografinen | |
Avainten luontitoiminnot | |
Tarkista numero ( vertailu ) | |
Hashes |
|