Inom kryptoanalys är mötet-i-mitt- metoden eller " möte-i-mitt-attacken " en klass av attacker på kryptografiska algoritmer som asymptotiskt minskar tiden för en fullständig uppräkning på grund av " dela och erövra " -principen samt öka mängden minne som krävs . Denna metod föreslogs först av Whitfield Diffie och Martin Hellman 1977 [1] .
De öppna (okrypterade) och chiffertexterna ges. Ett kryptosystem består av krypteringscykler . De cykliska nycklarna är oberoende och delar inte gemensamma bitar. Systemnyckeln är en kombination av -cykliska tangenter . Uppgiften är att hitta nyckeln .
Ett enkelt exempel är dubbelsekventiell blockkryptering med två olika nycklar och . Krypteringsprocessen ser ut så här:
,
var är klartexten, är chiffertexten och är engångskrypteringsoperationen med nyckeln . Följaktligen ser den omvända operationen - dekryptering - ut så här:
Vid första anblicken verkar det som att användningen av dubbel kryptering avsevärt ökar säkerheten för hela systemet, eftersom nu två nycklar måste sorteras ut, och inte en. När det gäller DES-algoritmen ökar säkerheten från till . Det är det dock inte. En angripare kan skapa två tabeller:
Sedan behöver han bara hitta matchningar i dessa tabeller, det vill säga sådana värden och , att . Varje match motsvarar en uppsättning nycklar som uppfyller villkoret.
Denna attack krävde kryptering-dekrypteringsoperationer (endast dubbelt så många som för uppräkning av en nyckel) och minne. Ytterligare optimeringar - användning av hashtabeller , beräkningar för endast hälften av nycklarna (för DES kräver en uttömmande sökning faktiskt bara operationer) - kan minska dessa krav. Huvudresultatet av attacken är att tvånycklars sekventiell kryptering endast fördubblar brute-force-tiden.
Låt oss beteckna transformationen av algoritmen som , var är klartexten och är chiffertexten. Det kan representeras som en komposition , där är en cyklisk transformation på tangenten . Varje nyckel är en binär längdvektor och systemets publika nyckel är en längdvektor .
Alla värden sorteras bort , det vill säga de första cykliska nycklarna. På varje sådan nyckel krypterar vi klartexten - (det vill säga vi går igenom krypteringscykler istället för ). Vi kommer att betrakta det som en viss minnesadress och skriva värdet till denna adress . Det är nödvändigt att iterera över alla värden .
Allt möjligt är utsorterat . På de mottagna nycklarna är chiffertexten dekrypterad - . Om adressen inte är tom får vi nyckeln därifrån och får en nyckelkandidat .
Det bör dock noteras att den första kandidaten som tas emot inte nödvändigtvis är den sanna nyckeln. Ja, för data och , men på andra värden i klartextchiffertexten som erhålls från den sanna nyckeln, kan jämlikhet kränkas. Allt beror på kryptosystemets specifika egenskaper . Men ibland räcker det med att få en sådan "pseudo-ekvivalent" nyckel. Annars kommer en viss uppsättning nycklar att erhållas efter att procedurerna har slutförts , bland vilka är den sanna nyckeln.
Om vi överväger en specifik applikation kan chiffertexten och klartexten vara stora (till exempel grafiska filer) och representera ett tillräckligt stort antal block för ett blockchiffer . I det här fallet, för att påskynda processen, kan du kryptera och dekryptera inte hela texten, utan bara dess första block (vilket är mycket snabbare) och sedan, efter att ha fått många kandidater, leta efter den sanna nyckeln i den, kontrollera den på de återstående blocken.
I vissa fall kan det vara svårt att separera bitarna i en nyckelsekvens i delar relaterade till olika nycklar. I det här fallet används MITM-attackalgoritmen med 3 delmängder som föreslagits av Bogdanov och Richberger 2011 baserat på den vanliga metoden att mötas i mitten. Denna algoritm är tillämpbar när det inte är möjligt att dela upp nyckelbitsekvenserna i två oberoende delar. Den består av två faser: utvinning och verifiering av nycklar [2] .
I början av denna fas delas chifferen upp i 2 subchiffer och , som i det allmänna fallet med attacken, tillåter dock möjlig användning av vissa bitar av en subcipher i en annan. Så, om , då ; i det här fallet kommer bitarna av nyckeln som används i att betecknas med , och i — med . Sedan kan tangentsekvensen delas in i 3 delar:
Därefter utförs en attack med metoden att mötas i mitten enligt följande algoritm:
För att kontrollera nycklarna kontrolleras de mottagna kandidaterna mot flera par kända offentlig-privata texter. Vanligtvis krävs inte ett särskilt stort antal sådana textpar för verifiering [2] .
Som ett exempel, låt oss ta en attack på KTANTAN-chifferfamiljen [3] , som gjorde det möjligt att minska beräkningskomplexiteten för att erhålla en nyckel från (brute force attack) till [1] .
Förbereder en attackVar och en av de 254 omgångarna av kryptering med KTANTAN använder 2 slumpmässiga bitar av nyckeln från en 80-bitars uppsättning. Detta gör att komplexiteten hos algoritmen endast beror på antalet omgångar. I början av attacken märkte författarna följande funktioner:
Detta gjorde det möjligt att dela upp nyckelbitarna i följande grupper:
Det fanns ett problem med att beräkna värdena för och beskrivna ovan , eftersom omgångar från 112 till 130 saknas i övervägandet, men sedan utfördes en partiell jämförelse : författarna till attacken märkte en matchning på 8 bitar in och , kontrollera dem med en normal attack med hjälp av mötet i mitten-metoden vid omgång 127. I detta avseende, i denna fas, jämfördes värdena av dessa 8 bitar i underchiffrorna och . Detta ökade antalet nyckelkandidater, men inte beräkningskomplexiteten.
Andra fasen: verifiering av nycklarFör att testa nyckelkandidater för KTANTAN32-algoritmen tog det i genomsnitt ytterligare två offentlig-privata textpar för att extrahera nyckeln.
ResultatDetta är dock inte den bästa attacken mot chifferfamiljen KTANTAN. 2011 gjordes en attack [4] som reducerade algoritmens beräkningskomplexitet till att använda fyra öppet-stängda textpar.
Den fullständiga tvådelade grafattacken används för att öka antalet proxyattackförsök genom att bygga en hel tvådelad graf . Föreslog av Diffie och Hellman 1977.
Den flerdimensionella möte-i-mitt-algoritmen används när man använder ett stort antal krypteringscykler med olika nycklar på blockchiffer . Istället för det vanliga "mötet i mitten" använder denna algoritm uppdelningen av kryptotexten med flera mellanliggande punkter [5] .
Det antas att den attackerade texten krypteras ett visst antal gånger med ett blockchiffer:
Därefter testas den hittade sekvensen av kandidater på ett annat par offentlig-privat text för att bekräfta nycklarnas giltighet. Det bör noteras att algoritmen är rekursiv: valet av nycklar för staten baseras på resultaten för staten . Detta introducerar ett element av exponentiell komplexitet i denna algoritm [5] .
Tidskomplexiteten för denna attack är
På tal om minnesanvändning är det lätt att se att allt eftersom varje ökar , införs fler och fler begränsningar, vilket minskar antalet kandidater som skrivs till den. Detta betyder mycket mindre .
Den övre gränsen för mängden minne som används:
var är nyckelns totala längd.Komplexiteten i att använda data beror på sannolikheten att "passera" en falsk nyckel. Denna sannolikhet är lika med , där är längden på det första mellantillståndet, som oftast är lika med blockstorleken. Med tanke på antalet nyckelkandidater efter den första fasen är komplexiteten .
Som ett resultat får vi , var är blockstorleken.
Varje gång en kandidatnyckelsekvens testas på ett nytt offentligt-privat textpar, multipliceras antalet nycklar som klarar testet med sannolikheten att klara nyckeln, vilket är .
En del av brute-force-attacken (kontroll av nycklar mot nya offentlig-privata textpar) har tidskomplexitet , där efterföljande termer uppenbarligen tenderar att nollställas snabbare och snabbare.
Som ett resultat är datakomplexiteten genom liknande bedömningar begränsad till ungefär offentlig-privata nyckelpar.