A Gelfond-Shanks algoritmus ( eng. Baby-step giant-step ; nagy és kis lépések algoritmusának is nevezik ; nagyon gyakran találkozhatunk a névillesztő algoritmussal is, például Vasilenko "Number-Theoretic Algorithms of Cryptography" című könyvében) ) - a csoportelméletben diszkrét logaritmusok determinisztikus algoritmusa a maradékgyűrű multiplikatív csoportjában egy prímszám modulo. Alexander Gelfond szovjet matematikus 1962-ben és Daniel Shanks 1972 - ben javasolta [1] [2] [3] .
A módszer elméletileg leegyszerűsíti a diszkrét logaritmus-probléma megoldását, amelynek számítási bonyolultságára számos nyilvános kulcsú titkosítási rendszer épül . A középső találkozás módszereire utal .
A diszkrét logaritmus probléma nagy érdeklődésre tart számot nyilvános kulcsú kriptorendszerek felépítésében . Feltételezve, hogy a probléma megoldásának számítási bonyolultsága rendkívül nagy, az ilyen kriptoalgoritmusok például az RSA , DSA , Elgamal , Diffie-Hellman , ECDSA , GOST R 34.10-2001 , Rabin és másokon alapulnak. Ezekben a titkos kulcsot úgy kaphatja meg a titkos kulcs , hogy felveszi a nyilvános kulcs (mindenki által ismert) diszkrét logaritmusát, és ennek segítségével a titkosított szöveget az üzenet szövegévé alakítja. Azonban minél nehezebb megtalálni (minél több műveletet kell elvégeznie a diszkrét logaritmus megtalálásához), annál biztonságosabb a kriptorendszer. A diszkrét logaritmus-probléma bonyolultságának növelésének egyik módja az, hogy egy titkosítási rendszert hozunk létre egy nagy sorrendű csoporton (ahol a logaritmus modulo nagy prímszám lesz). Általában egy ilyen problémát kimerítő felsorolással oldanak meg , de ez az algoritmus bizonyos esetekben lehetővé teszi a kitevő megtalálásának egyszerűsítését (a lépések számának csökkentését) a prímszám modulo kiszámításakor , legkedvezőbb esetben négyzetgyökkel. alkalommal [4] , de ez a csökkentés még mindig nem elegendő a probléma elektronikus számítógépen ésszerű időn belüli megoldásához (a diszkrét logaritmus feladat polinomiális idejű megoldásának kérdése személyi számítógépen még nyitott) [5] .
Legyen adott egy ciklikus csoport generátorral , amely elemeket tartalmaz. Egy egész számot (a -tól ig terjedő tartományban) egy elem diszkrét bázislogaritmusának nevezünk , ha a reláció igaz:
A diszkrét logaritmus feladata az adott érték meghatározása .
Formálisan a diszkrét logaritmus problémája a következő [6] :
feltéve, hogy nem létezik, és lehet prímszám vagy összetett szám is.
Az algoritmus ötlete az idő és a memória optimális arányának kiválasztása , mégpedig a kitevő jobb keresésében.
Legyen adott egy ciklikus sorrendi csoport , a csoport generátora és a csoport valamely eleme . A feladat egy olyan egész szám megtalálására redukálódik, amelyhez
A Gelfond-Shanks algoritmus a , ahol , valamint a és a felsorolásán alapul . A megszorítás és abból következik, hogy a csoport sorrendje nem haladja meg a -t , ami azt jelenti, hogy a feltüntetett tartományok elegendőek ahhoz, hogy a félintervallumból az összes lehetségeset megkapjuk . Ez az ábrázolás egyenértékű az egyenlőséggel
|
|
(egy) |
Az algoritmus előre kiszámítja a különböző értékeket , és egy olyan adatstruktúrában tárolja, amely lehetővé teszi a hatékony keresést, majd ismételgeti az összes lehetséges értéket , és ellenőrzi, hogy megfelel-e valamilyen értéknek . Így olyan és indexeket találunk , amelyek kielégítik az (1) összefüggést, és lehetővé teszik a [7] érték kiszámítását .
Bemenet : Ciklikus sorrendű csoport , generátor és valamilyen elem .
Kimenet : Olyan szám , amely kielégíti .
Be kell bizonyítani, hogy a táblákban szükségszerűen léteznek ugyanazok az elemek , vagyis van ilyen és , az . Ez az egyenlőség a , vagy esetén következik be . Mert az egyenlőtlenség érvényes . Különböző párokra és van , mivel különben kiderülne, hogy a jelzett választással csak , és ezért esetén lehetséges . Így a kifejezések minden értéket felvesznek a -tól -ig terjedő tartományban , ami annak a ténynek köszönhetően, hogy az összes lehetséges értéket tartalmazza -tól -ig . Ezért egyesekre és a [2] egyenlőség teljesül .
Tegyük fel, hogy meg kell oldanunk , ahol és a pozitív egész számok kisebbek, mint . Az egyik módja a szekvenciális iteráció tól -ig , összehasonlítva az értéket a -val . A legrosszabb esetben lépésekre van szükségünk (when ). Átlagosan lépésekre lesz szükség. Ellenkező esetben ábrázolhatjuk mint . Így a probléma az és megtalálására redukálódik . Ebben az esetben átírhatja a feladatot vagy -ra . Most át tudjuk ismételni a kifejezés jobb oldalán található összes lehetséges értéket. Ebben az esetben ezek mind számok -tól -ig . Ezek az úgynevezett nagy lépések. Ismeretes, hogy az egyik kapott érték a szükséges. A kifejezés jobb oldalának összes értékét rögzíthetjük egy táblázatban. Ezután kiszámolhatjuk a bal oldal lehetséges értékeit a különböző értékekhez . Ezek mind től egyig számok , amelyek közül a kívánt, és a jobb oldal helyes értékével együtt a kívánt eredményt adják a -ra . Így a feladat a bal oldal különböző értékeinek válogatására és a táblázatban való megkeresésére redukálódik. Ha a kívánt érték megtalálható a táblázatban, akkor megtaláltuk a , és ezért a megfelelő . Ez az ábra az algoritmus sebességét mutatja be. Átlagosan műveleteket hajtanak végre. A legrosszabb esetben műveletekre van szükség [3] .
Az alábbiakban egy példa látható a diszkrét logaritmus feladat megoldására kiscsoportos sorrendben. A gyakorlatban a kriptorendszerek magasabb rendű csoportokat használnak a kriptográfiai erősség javítására .
Legyen ismert . Kezdetben elkészítjük és kitöltjük a "nagy lépések" táblázatát. Válasszuk a ← ( ). Ezután től ig fog futni .
egy | 2 | 3 | négy | 5 | |
húsz | 9 | 19 | 12 | tíz |
Keressünk egy megfelelő értéket , hogy a két táblázatban szereplő értékek megegyezzenek
egy | 2 | 3 | négy | |
· | tizenöt | 6 | 7 | 12 |
Látható, hogy a második táblázatban ilyen érték már az első táblázatban is szerepel. Keresse meg [2] .
Van mód a Gelfond-Shanks algoritmus teljesítményének javítására. Ez egy hatékony tábla-hozzáférési séma használatából áll. A legjobb módszer a hash tábla használata . Kivonatolja a második komponenst, majd hajtson végre egy hash-keresést a fő hurokban lévő táblázatban . Mivel az elemek elérése és hozzáadása egy hash táblához időbe telik ( konstans ), ez aszimptotikusan nem lassítja le az algoritmust.
Az algoritmus futási idejét -ra becsüljük , ami sokkal jobb, mint a kitevők kimerítő felsorolásának futási ideje [4] .
Számelméleti algoritmusok | |
---|---|
Egyszerűség tesztek | |
Prímszámok keresése | |
Faktorizáció | |
Diszkrét logaritmus | |
GCD keresése | |
Modulo aritmetika | |
Számok szorzása és osztása | |
A négyzetgyök kiszámítása |