HAIFA ( englanniksi HAsh Iterative FrAmework ) on iteratiivinen menetelmä kryptografisten hajautusfunktioiden rakentamiseen , mikä on parannus klassiseen Merkle-Damgor-rakenteeseen .
Sitä ehdotettiin vuonna 2007 lisäämään vastustuskykyä monille hyökkäyksille ja tukemaan kykyä saada eripituisia hash-summia . Algoritmin pohjalta on kehitetty hash-funktioita, kuten BLAKE [1] ja SHAVite-3 [2] .
Algoritmin luojat ovat Eli Biham ja Or Dunkelman , israelilaiset kryptografit Haifan yliopistosta . Biham on Adi Shamirin opiskelija , joka kehitti suuren määrän uusia salausalgoritmeja, mukaan lukien olemassa olevien salausalgoritmien rikkominen; Dunkelman on Shamirin kollega yhdessä projektista, ja myöhemmin hän jatkoi tutkimustaan itsenäisesti [3] .
Merkle-Damgor-rakenteen uskottiin pitkään kestävän toista esikuvahyökkäystä , kunnes Princetonin yliopiston professori Richard Dean osoitti vuonna 1999 , että tämä oletus on väärä pitkille viesteille, jos tietyllä supistusfunktiolla on mahdollista löytää helposti kiinteä. sekvenssin pisteitä. Merkle-Damgor-rakenteeseen voitiin myös suorittaa usean törmäyksen hyökkäys ja harding-hyökkäys (hyökkäys tunnettuun etuliitteeseen) [4] [5] .
Merkle-Damgor-rakenne on seuraava algoritmi:
Viesti on jaettu useisiin osiin: . On jokin alkuarvo - ja jokin funktio , joka laskee hajautusfunktion väliesityksen tietyllä tavalla [5] :
Edelleen iteratiivisesti :
Uuden HAIFA-algoritmin perustana oli hajabittien lukumäärän ja jonkin verran satunnaisarvon lisääminen . Tavallisen pakkaustoiminnon sijaan, joka voidaan nyt merkitä seuraavasti [4] :
, missä on koko , on lohkon koko, (useimmiten tulosteen koko on sama kuin h:n koko)käytetty:
, missä ovat bittien lukumäärän ja suolan pituudet ,sisäinen esitys lasketaan (edellä esitetyn merkinnän mukaisesti):
, missä on tähän mennessä hajautettujen bittien määrä.Jos haluat tiivistää viestin, toimi seuraavasti:
HAIFA:ssa viesti on täytetty ykkösellä, vaaditulla määrällä nollia, viestin pituudella bitteinä ja lähtölohkon koolla . Eli lisäämme sekvenssin (nollien lukumäärän tässä tapauksessa tulee olla sellainen, että [4] , jossa , on ykkösten ja nollien lukumäärä, on lohkon koko:
Tuloslohkon koolla täytetyn viestin tiivistäminen eliminoi törmäysten löytämisen ongelman, koska jos kaksi viestiä ja tiivistetään lohkokoolla ja , niin se on viimeinen lohko, joka säästää törmäyksistä. Lisäämällä = 0 aivan viimeiseen lohkoon puolestaan luodaan signaali osoittamaan viimeinen ja täydentävä lohko [4] .
Mahdollisuus täydentää alkuperäistä viestiä tässä algoritmissa mahdollistaa tiivistetyn viestin lyhentämisen, mikä muuttaa lopullisen tiivisteen kokoa [4] .
Usein käytännössä vaaditaan eripituisia lopullisen tiivisteen pituutta (kuten esimerkiksi SHA-256 :lle , jossa on kaksi katkaistua versiota), joten tämä rakenne toteutti myös mahdollisuuden vaihdella sen pituutta erityisellä algoritmilla (jotta säilyttää vastustuskyky hyökkäyksille toista esikuvaa vastaan, et voi käyttää ilmeistä ratkaisua ottaa bittejä lopullisesta hashista).
Todiste siitä, että HAIFA on törmäyksenkestävä, jos supistumisfunktio on törmäyksenkestävä, on samanlainen kuin Merkle-Damgorin todiste [4] .
Hajabittien määrä tekee kiinteiden pisteiden löytämisestä ja käyttämisestä paljon vaikeampaa. Vaikka olisi löydetty sellaiset ja joille , näitä arvoja on mahdotonta kertoa loputtomasti tässä algoritmissa, koska bittien määrä muuttuu koko ajan [4] .
Suola ( ), samoin kuin , edistävät myös algoritmin vakautta [4] :
Alla on arvioita HAIFA:n vastustuskyvystä erityyppisiä hyökkäyksiä vastaan.
Hyökkäyksessä toista esikuvaa vastaan haetaan tällaista arvoa, jolle , eli tiiviste kohteesta on yhtä suuri kuin jokin väliarvo iteraatioissa, ja yhdistä sitten jäljellä olevan viestin osa ( joka sijaitsee oikealla ) arvaamaamme . Algoritmi tunnistettiin kuitenkin vastustuskykyiseksi tälle hyökkäykselle, koska parannetussa versiossa sen koko liitettiin viestin loppuun. Richard Dean osoitti työssään täysin uudenlaisen hyökkäystavan, joka perustuu oletukseen, että tietylle funktiolle on helppo löytää kiinteitä pisteitä (määritelmän mukaan kiinteä piste on sellainen, jonka relaatio täyttyy ). Hänen algoritmissaan puuttuva viestin pituus korvattiin lisäämällä joukko kiinteitä pisteitä, eli pituuttamme voitiin täydentää riittävällä määrällä arvon toistoja .
Tässä tapauksessa HAIFA suojaa kiinteän pisteen hyökkäyksiltä, koska suolan ja hajabittien lukumäärän sisältävä kenttä minimoi supistusfunktioarvojen toistumisen todennäköisyyden [4] .
Useita törmäyksiä varten ranskalainen kryptografi Antoine Joux kuvaili mahdollisuutta löytää viestejä, joilla on sama hash. Hänen työnsä perustuu siihen, että on mahdollista löytää sellaisia yhden lohkon törmäyksiä, joissa , ja sitten rakentaa erilaisia viestejä, kaikista vaihtoehdoista, valitsemalla jokaisessa vaiheessa joko viesti tai .
HAIFA ei monimutkaisesta rakenteestaan huolimatta takaa nolla onnistumisprosenttia useiden törmäyshyökkäysten yhteydessä. Yllä olevien Merkle-Damgor-algoritmiin tehtyjen muutosten jälkeen törmäysten löytämisen monimutkaisuus ei ole muuttunut jokaiselle lohkolle, mutta koska satunnainen sekoitettu arvo on ilmaantunut, hyökkääjä ei voi esivalita näiden törmäysten variantteja tietämättä satunnaisarvoa. Laskelmat menevät verkkoon [4] .
Kovettava hyökkäys perustuu siihen, että hyökkääjä yrittää löytää annetulle etuliitteelle sellaisen loppuliitteen, joka antaa halutun hajautusarvon.
On todistettu, että on mahdotonta suorittaa kovaa hyökkäyksen ensimmäistä vaihetta (päätöspuun rakentaminen) HAIFAa vastaan ennen kuin suolan arvo on tiedossa. Toisin sanoen edellä kuvattua raakaa voimaa ei voida enää suorittaa. Hyökkäyksen torjumisen ehto on sekaviestin pituus, jos haluttu hyökkäyksen monimutkaisuus asetetaan tasolle , sen on oltava vähintään merkkiä. Jos tätä sääntöä ei noudateta, jotkut alustavat laskelmat ovat mahdollisia, mikä johtaa algoritmin hakkerointiin. Jos suola-arvo kuitenkin löydettiin, kestää jonkin aikaa löytää oikea paikka viestissä [4] -kentän vuoksi .
Hyökkäystyyppi | Ihanteellinen hash-toiminto | MD | HAIFA
(kiinteä arvo suola) |
HAIFA
(eri suolaarvoilla) |
---|---|---|---|---|
Hyökkäys ensimmäistä prototyyppiä vastaan
( maalit ) |
||||
Hyökkäys yhtä ensimmäisistä prototyypeistä | ||||
Hyökkäys toista prototyyppiä vastaan
( lohkot) [9] [10] |
||||
Hyökkäys toista prototyyppiä vastaan
( lohkot, viestit) |
||||
Törmäykset | ||||
Useita törmäyksiä
( on törmäysten lukumäärä) [9] |
||||
Paimennus [11] [12] | - | offline-tilassa:
Online: |
offline-tilassa:
Online: |
offline-tilassa:
Online: |
HAIFA voi kehittäjien mukaan olla perusta monille salausalgoritmeille, koska se on uusi parannettu perusrakenne. On todistettu, että sillä voidaan kehittää satunnaistettuja hajautusfunktioita [13] , wrapped Merkle-Damgard -funktiota ( eng. Enveloped Merkle-Damgard , RMC [14] [15] , laajapipeline hash [16] .
Wild-pipe hash -konstruktin hankkiminen HAIFA :lla on melko helppoa; itse algoritmissa monimutkaisuuden lisäämiseksi sisälohkojen pituus tehtiin kaksi kertaa niin suureksi kuin lopullisen lohkon pituus (siis on kaksi pakkausfunktiota ja ). Liukuhihnavedon tiivisteen kaava on mahdollista johtaa suoraan, koska on triviaalia löytää viimeinen lohko HAIFAsta, koska siellä asetetaan nollia [4] .
Kaava muuntamiseen HAIFA:sta laajaksi liukuhihnaksi on:
missä
— toinen alustusvektori [16] .
HAIFA:n tutkijoiden ehdottamalla menetelmällä on suuri käytännön merkitys sähköisten allekirjoitusalgoritmien toteuttamisessa : bittien ja suolan määrän käyttöönoton myötä etuliitteiden ja päätteiden lisääminen viestiin vaikeutui (laumahyökkäys), ja siksi korvaa allekirjoituksen viestit [8] .