HAIFA ( engelska HAsh Iterative Framework ) är en iterativ metod för att konstruera kryptografiska hashfunktioner , vilket är en förbättring av den klassiska Merkle-Damgor-strukturen .
Det föreslogs 2007 för att öka motståndet mot många attacker och stödja möjligheten att få hashsummor av olika längd. Baserat på algoritmen har hashfunktioner som BLAKE [1] och SHAVite-3 [2] utvecklats .
Skaparna av algoritmen är Eli Biham och Or Dunkelman , israeliska kryptografer från University of Haifa . Biham är en elev till Adi Shamir , som utvecklade ett stort antal nya kryptografiska algoritmer, inklusive att bryta befintliga; Dunkelman är en kollega till Shamir i ett av projekten, och fortsatte senare sin forskning på egen hand [3] .
Merkle-Damgor-strukturen ansågs länge vara resistent mot den andra preimage-attacken , tills Princeton University -professorn Richard Dean bevisade 1999 att detta antagande är fel för långa meddelanden om det med en given sammandragningsfunktion lätt är möjligt att hitta den fixerade punkter i en sekvens. En multipelkollisionsattack och en hårdingattack (en attack på ett känt prefix) [4] [5] kunde också utföras framgångsrikt på Merkle-Damgor-strukturen .
Merkle-Damgor-strukturen är följande algoritm:
Det finns ett meddelande uppdelat i flera delar: . Det finns något initialvärde - och någon funktion som beräknar den mellanliggande representationen av hashfunktionen på ett visst sätt [5] :
Ytterligare iterativt :
Grunden för den nya HAIFA-algoritmen var tillägget av antalet hashade bitar och något slumpmässigt värde. Istället för den vanliga komprimeringsfunktionen, som nu kan betecknas enligt följande [4] :
, där är storleken på , är storleken på blocket, (oftast är utdatastorleken samma som storleken på h)Begagnade:
, var är längden på antalet bitar och salt ,den interna representationen beräknas (i enlighet med notationen som introducerades ovan):
, var är antalet bitar som hashas hittills.För att hasha ett meddelande, följ dessa steg:
I HAIFA är meddelandet utfyllt med en etta, det erforderliga antalet nollor, meddelandets längd i bitar och storleken på utmatningsblocket . Det vill säga, vi lägger till en sekvens (antalet nollor i det här fallet bör vara sådant att [4] , där , är antalet ettor och nollor, är blockstorleken:
Att hasha ett meddelande fyllt med storleken på utdatablocket eliminerar problemet med att hitta kollisioner, eftersom om två meddelanden och hashas med blockstorlekar och , då är det det sista blocket som sparar från kollisioner. I sin tur, genom att addera = 0 i det allra sista blocket, skapas en signal för att indikera det sista och komplementära blocket [4] .
Möjligheten att komplettera det ursprungliga meddelandet i den här algoritmen gör att du kan trunkera den hashade, och därigenom ändra storleken på den slutliga hashen [4] .
Ofta i praktiken krävs olika längder på den slutliga hashen (som till exempel gjort för SHA-256 , som har två trunkerade versioner), så denna struktur implementerade också möjligheten att variera dess längd med hjälp av en speciell algoritm (för att upprätthålla motståndet mot attacker på den andra förbilden, kan du inte använda den uppenbara lösningen att ta bitar från den slutliga hashen).
Beviset på att HAIFA är kollisionsbeständigt om kontraktionsfunktionen är kollisionsbeständig liknar beviset för Merkle-Damgor [4] .
Antalet hashade bitar gör det mycket svårare att hitta och använda fasta punkter. Även efter att ha hittat sådana och , för vilka , är det omöjligt att multiplicera dessa värden på obestämd tid i denna algoritm, eftersom antalet bitar kommer att förändras hela tiden [4] .
Salt ( ), liksom , bidrar också till algoritmens stabilitet [4] :
Nedan finns uppskattningar av HAIFAs motståndskraft mot olika typer av attacker.
I attacken mot den andra förbilden eftersträvas ett sådant värde, för vilket , det vill säga hashen från är lika med något mellanvärde i iterationer, och kombinera sedan delen av det återstående meddelandet ( som ligger till höger om ) med vårt gissade . Algoritmen erkändes dock som resistent mot denna attack, eftersom dess storlek i den förbättrade versionen lades till i slutet av meddelandet. Richard Dean pekade i sitt arbete på ett helt nytt sätt att angripa, baserat på antagandet att det är lätt att hitta fixpunkter för en given funktion (definitivt är en fix punkt en för vilken relationen är tillfredsställande ). I hans algoritm kom den saknade meddelandelängden till genom att lägga till en uppsättning fasta punkter, det vill säga vi kunde komplettera vår längd med ett tillräckligt antal repetitioner av värdet .
I det här fallet skyddar HAIFA mot en fixpunktsattack, eftersom närvaron av ett salt och ett fält som innehåller antalet hashade bitar minimerar sannolikheten för upprepning av kontraktionsfunktionsvärden [4] .
För flera kollisioner beskrev den franske kryptografen Antoine Joux möjligheten att hitta meddelanden som har samma hash. Hans arbete bygger på det faktum att det är möjligt att hitta sådana kollisioner i ett block där , och sedan konstruera olika meddelanden, av alla alternativ, genom att välja antingen meddelande , eller .
HAIFA, trots sin komplexa struktur, garanterar inte noll framgång för en multipel kollisionsattack. Efter ovanstående ändringar av Merkle-Damgor-algoritmen har komplexiteten för att hitta kollisioner för varje block inte förändrats, men eftersom ett slumpmässigt blandat värde har dykt upp kan angriparen inte förvälja varianterna av dessa kollisioner utan att känna till det slumpmässiga värdet. Beräkningar går online [4] .
En hardingattack bygger på att angriparen försöker hitta ett sådant suffix för ett givet prefix som ger önskat hashvärde.
Det är bevisat att det är omöjligt att genomföra den första fasen av en hardingattack (att bygga ett beslutsträd) på HAIFA förrän saltvärdet är känt. Det vill säga brute-force , som beskrevs ovan, kan inte längre utföras. Villkoret för att framgångsrikt avvärja en attack är längden på det blandade meddelandet, om den önskade komplexiteten för attacken är inställd på nivån måste den bestå av minst tecken. Om denna regel inte följs, är vissa preliminära beräkningar möjliga, vilket leder till hackning av algoritmen. Om saltvärdet ändå hittades, kommer det att ta lite tid att hitta rätt plats i meddelandet på grund av närvaron av fältet [4] .
Attack typ | Idealisk hashfunktion | MD | HAIFA
(Fast värde salt) |
HAIFA
(med olika saltvärden) |
---|---|---|---|---|
Attack mot den första prototypen
( mål) |
||||
Attack mot en av de första prototyperna | ||||
Attack mot den andra prototypen
( block) [9] [10] |
||||
Attack mot en av de andra prototyperna
( block, meddelanden) |
||||
Kollisioner | ||||
Flera kollisioner
( är antalet kollisioner) [9] |
||||
Flockning [11] [12] | - | off-line:
Uppkopplad: |
off-line:
Uppkopplad: |
off-line:
Uppkopplad: |
HAIFA kan, enligt utvecklarna, ligga till grund för många kryptografiska algoritmer, eftersom det är en ny förbättrad grunddesign. Det har bevisats att det kan användas för att utveckla randomiserade hashfunktioner [13] , den inslagna Merkle-Damgard-funktionen ( eng. Enveloped Merkle-Damgard , RMC [14] [15] , wide-pipeline hash [16] .
Att få en wild-pipe-hashkonstruktion med HAIFA är ganska lätt; i själva algoritmen, för att öka komplexiteten, gjordes längden på de inre blocken dubbelt så stor som längden på det sista blocket (därför finns det två komprimeringsfunktioner och ). Det är möjligt att härleda formeln för den pipelinerade hashen direkt, givet att det är trivialt att hitta det sista blocket i HAIFA, eftersom nollor sätts där [4] .
Formeln för att konvertera från HAIFA till en hash med bred pipeline är:
var
— den andra initialiseringsvektorn [16] .
Metoden som föreslagits av forskare vid HAIFA är av stor praktisk betydelse för implementeringen av elektroniska signaturalgoritmer : med introduktionen av antalet bitar och salt blev det svårare att lägga till prefix och suffix till meddelandet (flockangrepp), och därför ersätt meddelanden för signatur [8] .