Gelfond-Shanks-algoritmen ( eng. Baby-step giant-step ; även kallad algoritmen för stora och små steg ; du kan också väldigt ofta hitta namnmatchningsalgoritmen , till exempel i Vasilenkos bok "Number-Theoretic Algorithms of Cryptography" ) - i gruppteorin, en deterministisk algoritm av diskreta logaritmer i den multiplikativa gruppen av restringen modulo ett primtal. Det föreslogs av den sovjetiske matematikern Alexander Gelfond 1962 och Daniel Shanks 1972 [1] [2] [3] .
Metoden förenklar teoretiskt lösningen av det diskreta logaritmproblemet, på vars beräkningskomplexitet många kryptosystem med offentliga nyckel är byggda . Avser metoder för att mötas i mitten .
Det diskreta logaritmproblemet är av stort intresse för konstruktionen av kryptosystem med publika nyckel . På antagandet om en extremt hög beräkningskomplexitet för att lösa detta problem är sådana kryptoalgoritmer baserade, till exempel RSA , DSA , Elgamal , Diffie-Hellman , ECDSA , GOST R 34.10-2001 , Rabin och andra. I dem kan kryptoanalytikern erhålla den privata nyckeln genom att ta den diskreta logaritmen för den offentliga nyckeln (känd för alla), och använda den för att konvertera chiffertexten till texten i meddelandet. Men ju svårare det är att hitta det (ju fler operationer du behöver göra för att hitta den diskreta logaritmen), desto säkrare är kryptosystemet. Ett sätt att öka komplexiteten i det diskreta logaritmproblemet är att skapa ett kryptosystem baserat på en grupp med en stor ordning (där logaritmen kommer att vara modulo ett stort primtal). I det allmänna fallet löses ett sådant problem genom uttömmande uppräkning , men denna algoritm gör det i vissa fall möjligt att förenkla att hitta exponenten (minska antalet steg) vid beräkning av modulo ett primtal, i det mest gynnsamma fallet, med kvadratroten av gånger [4] , men denna minskning är fortfarande inte tillräcklig för att lösa problemet på en elektronisk dator inom rimlig tid (frågan om att lösa det diskreta logaritmproblemet i polynomtid på en persondator är fortfarande öppen) [5] .
Låt en cyklisk grupp med generator ges , innehållande element. Ett heltal (i intervallet från till ) kallas den diskreta baslogaritmen för ett element om relationen är sann:
Uppgiften för diskret logaritm är att bestämma för givet .
Formellt ställs problemet med diskret logaritm enligt följande [6] :
förutsatt att det kanske inte finns, och det kan också vara antingen ett primtal eller ett sammansatt tal.
Idén med algoritmen är att välja det optimala förhållandet mellan tid och minne , nämligen i en förbättrad sökning efter exponenten.
Låt en cyklisk grupp av ordning , en generator av gruppen , och något element av gruppen ges . Uppgiften reduceras till att hitta ett heltal för vilket
Gelfond-Shanks-algoritmen är baserad på representationen i formen , där , och uppräkning av och . Begränsningen på och följer av det faktum att gruppens ordning inte överstiger , vilket innebär att de angivna intervallen är tillräckliga för att erhålla alla möjliga från halvintervallet . Denna representation är likvärdig med jämställdheten
|
|
(ett) |
Algoritmen förberäknar för olika värden och lagrar dem i en datastruktur som möjliggör effektiv uppslagning, och itererar sedan över alla möjliga värden och kontrollerar om det matchar något värde . Således hittas index och som uppfyller relation (1) och låter oss beräkna värdet [7] .
Ingång : En cyklisk ordergrupp , en generator och något element .
Output : Ett tal som uppfyller .
Det är nödvändigt att bevisa att samma element i tabellerna nödvändigtvis existerar, det vill säga att det finns sådana och , att . Denna jämlikhet sker i fallet med , eller . För ojämlikheten gäller . _ För olika par och vi har , eftersom det annars skulle visa sig att med det angivna valet är det endast möjligt i fallet med , och därför, . Alltså tar uttryck alla värden i intervallet från till , som, på grund av det faktum att , innehåller alla möjliga värden från till . Därför gäller för vissa och jämlikheten [2] .
Antag att vi måste lösa , där och är positiva heltal mindre än . Ett sätt är att iterera sekventiellt från till och jämföra värdet med . I värsta fall behöver vi steg (när ). I genomsnitt kommer det att ta steg. Annars kan vi representera som . Därmed reduceras problemet till att hitta och . I det här fallet kan du skriva om uppgiften som eller . Nu kan vi iterera över alla möjliga värden på höger sida av uttrycket. I det här fallet är alla siffror från till . Det är de så kallade stora stegen. Det är känt att ett av de erhållna värdena för är det som krävs. Vi kan registrera alla värden på höger sida av uttrycket i en tabell. Vi kan sedan beräkna de möjliga värdena för vänster sida för olika värden på . Dessa är alla siffror från till varav ett är det önskade, och tillsammans med rätt värde på högersidan ger det önskade resultatet för . Således reduceras uppgiften till att sortera igenom de olika värdena på vänster sida och söka efter dem i tabellen. Om det önskade värdet finns i tabellen har vi hittat , och därför motsvarande . Den här illustrationen visar algoritmens hastighet. I genomsnitt utförs operationer. I värsta fall krävs operationer [3] .
Nedan är ett exempel på att lösa det diskreta logaritmproblemet med en liten gruppordning. I praktiken använder kryptosystem grupper av högre ordning för att förbättra kryptografisk styrka .
Låt det vara känt . I början kommer vi att skapa och fylla i tabellen för de "stora stegen". Låt oss välja ← ( ). Sedan körs den från till .
ett | 2 | 3 | fyra | 5 | |
tjugo | 9 | 19 | 12 | tio |
Låt oss hitta ett lämpligt värde för så att värdena i båda tabellerna matchar
ett | 2 | 3 | fyra | |
· | femton | 6 | 7 | 12 |
Det kan ses att i den andra tabellen för finns ett sådant värde redan i den första tabellen. Hitta [2] .
Det finns ett sätt att förbättra prestanda för Gelfond-Shanks-algoritmen. Det består i att använda ett effektivt schema för tabellåtkomst. Det bästa sättet är att använda en hashtabell . Du bör hasha på den andra komponenten och sedan utföra en hash-sökning i tabellen i huvudslingan på . Eftersom det tar tid att komma åt och lägga till element i en hashtabell ( en konstant ), saktar detta inte asymptotiskt ner algoritmen.
Löptiden för algoritmen uppskattas till , vilket är mycket bättre än körtiden för uttömmande uppräkning av exponenter [4] .
Talteoretiska algoritmer | |
---|---|
Enkelhetstest | |
Hitta primtal | |
Faktorisering | |
Diskret logaritm | |
Hitta GCD | |
Modulo aritmetik | |
Multiplikation och division av tal | |
Beräkna kvadratroten |