A kriptoanalízisben a meet-in-the-middle módszer vagy a " me-in-the-middle attack " a kriptográfiai algoritmusok elleni támadások osztálya, amelyek aszimptotikusan csökkentik a teljes felsorolás idejét az " oszd meg és uralkodj " elv miatt. , valamint a szükséges memória mennyiségének növelése . Ezt a módszert először Whitfield Diffie és Martin Hellman javasolta 1977-ben [1] .
A nyílt (titkosítatlan) és a titkosított szövegek megadva. A kriptorendszer titkosítási ciklusokból áll . A ciklikus kulcsok függetlenek, és nem osztoznak közös biteken. A rendszerbillentyű a -ciklikus billentyűk kombinációja . A feladat a kulcs megtalálása .
Egy egyszerű példa a kettős szekvenciális blokk titkosítás két különböző kulccsal és . A titkosítási folyamat így néz ki:
,
ahol az egyszerű szöveg, a titkosított szöveg, és az egyszeri titkosítási művelet a kulccsal . Ennek megfelelően a fordított művelet - dekódolás - így néz ki:
Első pillantásra úgy tűnik, hogy a kettős titkosítás használata nagyban növeli az egész rendszer biztonságát, mivel most két kulcsot kell rendezni , nem pedig egyet. A DES algoritmus esetén a biztonság ról -ra növekszik . Azonban nem. Egy támadó két táblát hozhat létre:
Ekkor már csak egyezéseket kell találnia ezekben a táblázatokban, vagyis olyan értékeket és , hogy . Minden egyezés a feltételnek megfelelő kulcskészletnek felel meg.
Ez a támadás titkosítási-dekódolási műveleteket igényelt (csak kétszer annyit, mint egy kulcs felsorolásához) és memóriát. További optimalizálás - hash táblák használata , számítások csak a kulcsok feléhez (a DES esetén a kimerítő keresés valójában csak műveleteket igényel) - csökkenthetik ezeket a követelményeket. A támadás fő eredménye, hogy a kétkulcsos szekvenciális titkosítás csak megduplázza a brute force idejét.
Jelöljük az algoritmus transzformációját így , ahol a nyílt szöveg és a titkosított szöveg. Kompozícióként ábrázolható , ahol ciklikus transzformáció van a kulcson . Minden kulcs egy bináris hosszúságú vektor , a rendszer nyilvános kulcsa pedig egy hosszvektor .
Minden érték ki van rendezve , azaz az első ciklikus billentyűk. Minden ilyen kulcson titkosítjuk a nyílt szöveget - (vagyis titkosítási ciklusokon megyünk keresztül a helyett ). Egy bizonyos memóriacímnek fogjuk tekinteni, és erre a címre írjuk az értéket . Minden értéket át kell ismételni .
Minden lehetséges rendezve van . A kapott kulcsokon a titkosított szöveg dekódolásra kerül - . Ha a cím nem üres, akkor onnan kapjuk a kulcsot, és kapunk egy kulcsjelöltet .
Meg kell azonban jegyezni, hogy az elsőként kapott jelölt nem feltétlenül az igazi kulcs. Igen, a és adatok esetében , de a valódi kulcsból nyert egyszerű szöveges titkosított szöveg egyéb értékeinél az egyenlőség sérülhet. Minden a kriptorendszer sajátosságaitól függ . De néha elég egy ilyen "pszeudo-ekvivalens" kulcsot szerezni. Ellenkező esetben az eljárások befejezése után egy bizonyos kulcskészletet kapunk , amelyek között van az igazi kulcs.
Ha egy adott alkalmazást veszünk figyelembe, akkor a rejtjelezett szöveg és az egyszerű szöveg lehet nagy (például grafikus fájlok), és kellően nagy számú blokkot jelenthet egy blokk titkosításhoz . Ebben az esetben a folyamat felgyorsítása érdekében nem a teljes szöveget titkosíthatja és dekódolhatja, hanem csak az első blokkját (ami sokkal gyorsabb), majd miután sok jelöltet kapott, megkeresi benne a valódi kulcsot, ellenőrizve azt. a fennmaradó blokkokat.
Egyes esetekben nehéz lehet egy kulcssorozat bitjeit a különböző kulcsokhoz kapcsolódó részekre szétválasztani. Ebben az esetben a Bogdanov és Richberger által 2011-ben javasolt 3 részhalmazból álló MITM támadás Ez az algoritmus akkor alkalmazható, ha a kulcsbitsorozatokat nem lehet két független részre osztani. Két fázisból áll: a kulcsok kivonásából és ellenőrzéséből [2] .
Ennek a fázisnak az elején a rejtjel két alrejtjelre oszlik, és a támadás általános esetéhez hasonlóan lehetővé teszi az egyik alrejtjel egyes biteinek használatát egy másikban. Tehát, ha , akkor ; ebben az esetben az in használt kulcs bitjeit , in — -vel jelöljük . Ezután a billentyűsor három részre osztható:
Ezután a támadást a középső találkozás módszerével hajtják végre a következő algoritmus szerint:
A kulcsok ellenőrzéséhez a beérkezett jelölteket több pár ismert nyilvános-magán szöveghez hasonlítják. Általában nem nagyon sok ilyen szövegpárra van szükség az ellenőrzéshez [2] .
Példaként vegyünk egy támadást a KTANTAN rejtjelcsalád ellen [3] , amely lehetővé tette a kulcs megszerzésének számítási bonyolultságának csökkentését (brute force attack) -ról [1] -re .
Támadás előkészítéseA KTANTAN-t használó 254 titkosítási kör mindegyike a kulcs 2 véletlenszerű bitjét használja egy 80 bites készletből. Ezáltal az algoritmus bonyolultsága csak a körök számától függ. A támadás indításakor a szerzők a következő jellemzőket vették észre:
Ez lehetővé tette a kulcsbitek felosztását a következő csoportokra:
Probléma adódott a fent leírt és értékeinek kiszámításakor , mivel a 112-től 130-ig terjedő körök hiányoznak a mérlegelésből, de ezután részleges összehasonlításra került sor : a támadás szerzői 8 bites egyezést észleltek. és , normál támadással ellenőrizve őket a találkozó a középső módszerrel a 127. fordulóban. Ebben a fázisban ennek a 8 bitnek az értékeit az alrejtjelekben hasonlították össze . Ez növelte a kulcsfontosságú jelöltek számát, de nem a számítási bonyolultságot.
Második fázis: a kulcsok ellenőrzéseA KTANTAN32 algoritmus kulcsjelöltjeinek teszteléséhez átlagosan még két nyilvános-privát szövegpárra volt szükség a kulcs kinyeréséhez.
EredményekEz azonban nem a legjobb támadás a KTANTAN titkosítócsalád ellen. 2011-ben egy támadást hajtottak végre [4] , amely az algoritmus számítási bonyolultságát négy nyitott-zárt szövegpár használatára csökkentette.
A teljes kétoldalú gráftámadást a proxytámadási kísérletek számának növelésére használják egy teljes kétoldalú gráf felépítésével . Diffie és Hellman javasolta 1977-ben.
A többdimenziós találkozás a közepén algoritmust akkor használják, ha nagyszámú titkosítási ciklust használnak különböző kulcsokkal a blokkrejtjeleken . Ez az algoritmus a szokásos "középen találkozás" helyett a kriptotextus több köztes ponttal való felosztását használja [5] .
Feltételezzük, hogy a támadott szöveget bizonyos számú alkalommal titkosítják egy blokk titkosítással:
Ezután a jelöltek talált sorozatát egy másik nyilvános-privát szövegpáron tesztelik, hogy megerősítsék a kulcsok érvényességét. Meg kell jegyezni, hogy az algoritmus rekurzív: az állapot kulcsainak kiválasztása az állapot eredményein alapul . Ez egy exponenciális bonyolultságú elemet vezet be ebbe az algoritmusba [5] .
Ennek a támadásnak az időbeli összetettsége az
Ha már a memóriahasználatról beszélünk, könnyen belátható, hogy ahogy mindegyik növekszik , egyre több korlátozást vezetnek be, ami csökkenti a ráírható jelöltek számát. Ez sokkal kevesebbet jelent .
A felhasznált memória felső határa:
hol van a kulcs teljes hossza.Az adatok felhasználásának bonyolultsága a hamis kulcs „átadásának” valószínűségétől függ. Ez a valószínűség egyenlő , ahol az első köztes állapot hossza, amely legtöbbször megegyezik a blokk méretével. Tekintettel a kulcsfontosságú jelöltek számára az első fázis után, a bonyolultság .
Ennek eredményeként azt kapjuk , hogy hol van a blokk mérete.
Minden alkalommal, amikor egy jelölt kulcssorozatot tesztelnek egy új nyilvános-privát szövegpáron, a teszten átmenő kulcsok számát megszorozzák a kulcs átadásának valószínűségével, ami .
A brute-force támadás egy része (a kulcsok ellenőrzése az új nyilvános-privát szövegpárok ellen) időbonyolultságú , amelyben nyilvánvalóan a következő kifejezések egyre gyorsabban nullázódnak.
Ennek eredményeként az adatok összetettsége hasonló megítélés szerint megközelítőleg a nyilvános-privát kulcspárokra korlátozódik.