Gelfond-Shanks -algoritmi ( eng. Baby-step giant-step ; kutsutaan myös suurten ja pienten askeleiden algoritmiksi ; nimien täsmäytysalgoritmi löytyy myös hyvin usein esimerkiksi Vasilenkon kirjasta "Number-Theoretic Algorithms of Cryptography" ) - ryhmäteoriassa diskreettien logaritmien deterministinen algoritmi jäännösrenkaan multiplikatiivisessa ryhmässä moduloi alkulukua. Neuvostoliiton matemaatikko Alexander Gelfond vuonna 1962 ja Daniel Shanks ehdottivat sitä vuonna 1972 [1] [2] [3] .
Menetelmä yksinkertaistaa teoreettisesti diskreetin logaritmiongelman ratkaisua, jonka laskennallisen monimutkaisuuden varaan on rakennettu monia julkisen avaimen salausjärjestelmiä . Viittaa tapaamismenetelmiin keskellä .
Diskreetin logaritmin ongelma on erittäin kiinnostava julkisen avaimen salausjärjestelmien rakentamisessa . Olettaen, että tämän ongelman ratkaiseminen on erittäin suuri laskennallinen monimutkaisuus, tällaiset kryptoalgoritmit perustuvat esimerkiksi RSA , DSA , Elgamal , Diffie-Hellman , ECDSA , GOST R 34.10-2001 , Rabin ja muihin. Niissä kryptanalyytikko voi saada yksityisen avaimen ottamalla julkisen avaimen diskreetin logaritmin (kaikkien tiedossa) ja muuntaa sen avulla salatekstin viestin tekstiksi. Kuitenkin, mitä vaikeampaa sen löytäminen on (mitä enemmän operaatioita sinun on tehtävä diskreetin logaritmin löytämiseksi), sitä turvallisempi salausjärjestelmä on. Yksi tapa lisätä diskreetin logaritmiongelman monimutkaisuutta on luoda salausjärjestelmä , joka perustuu suuren järjestyksen omaavaan ryhmään (jossa logaritmi on modulo suuri alkuluku). Yleensä tällainen ongelma ratkaistaan tyhjentävällä luettelolla , mutta tämä algoritmi sallii joissain tapauksissa yksinkertaistaa eksponentin löytämistä (vähentää askelmäärää) laskettaessa modulo alkulukua, edullisimmassa tapauksessa neliöjuurella. kertaa [4] , mutta tämä vähennys ei vieläkään riitä ratkaisemaan ongelmaa elektronisessa tietokoneessa kohtuullisessa ajassa (kysymys diskreetin logaritmiongelman ratkaisemisesta polynomiajassa henkilökohtaisessa tietokoneessa on edelleen avoin) [5] .
Olkoon syklinen ryhmä generaattorilla , joka sisältää elementtejä. Kokonaislukua (välillä - ) kutsutaan elementin diskreetiksi kantalogaritmiksi , jos relaatio on tosi:
Diskreetin logaritmin tehtävänä on määrittää annetulle .
Muodollisesti diskreetin logaritmin ongelma esitetään seuraavasti [6] :
edellyttäen, että sitä ei ole olemassa ja se voi myös olla joko alkuluku tai yhdistelmäluku.
Algoritmin ideana on valita optimaalinen ajan ja muistin suhde , eli parannetussa eksponentin haussa.
Olkoon syklinen järjestysryhmä , ryhmän generaattori ja jokin ryhmän elementti . Tehtävä rajoittuu kokonaisluvun etsimiseen , jolle
Gelfond-Shanks-algoritmi perustuu esitykseen muodossa , missä , sekä ja luettelointiin . Rajoitus ja seuraa siitä, että ryhmän järjestys ei ylitä , mikä tarkoittaa, että ilmoitetut vaihteluvälit riittävät saamaan kaikki mahdolliset puolivälistä . Tämä esitys vastaa tasa-arvoa
|
|
(yksi) |
Algoritmi laskee etukäteen eri arvot ja tallentaa ne tietorakenteeseen , joka mahdollistaa tehokkaan haun, ja toistaa sitten kaikki mahdolliset arvot ja tarkistaa, vastaako se jotakin arvoa . Siten löydetään indeksit ja , jotka täyttävät suhteen (1) ja mahdollistavat arvon [7] laskemisen .
Syöttö : Syklinen järjestysryhmä , generaattori ja jokin elementti .
Tulos : Numero , joka tyydyttää .
On tarpeen todistaa, että samat elementit taulukoissa ovat välttämättä olemassa, eli on olemassa sellaisia ja , että . Tämä tasa -arvo tapahtuu tapauksessa , tai . Sillä epätasa- arvo pätee . Eri pareille ja meillä on , koska muuten kävisi ilmi , että ilmoitetulla valinnalla se on mahdollista vain tapauksessa , ja siksi . Näin ollen lausekkeet ottavat kaikki arvot välillä - , mikä johtuu siitä, että sisältää kaikki mahdolliset arvot välillä - . Näin ollen joillekin tasa-arvo [ 2] pätee .
Oletetaan, että meidän on ratkaistava , missä ja ovat positiivisia kokonaislukuja pienempiä kuin . Yksi tapa on iteroida peräkkäin välillä - , vertaamalla arvoa arvoon . Pahimmassa tapauksessa tarvitsemme vaiheita (kun ). Keskimäärin se vaatii toimenpiteitä. Muuten voimme esittää muodossa . Siten ongelma rajoittuu etsimiseen ja . Tässä tapauksessa voit kirjoittaa tehtävän uudelleen muotoon tai . Nyt voimme iteroida kaikkia mahdollisia arvoja lausekkeen oikealla puolella. Tässä tapauksessa nämä ovat kaikki numeroita välillä - . Nämä ovat niin sanottuja suuria askeleita. Tiedetään, että yksi saaduista arvoista on vaadittu. Voimme tallentaa kaikki lausekkeen oikean puolen arvot taulukkoon. Voimme sitten laskea mahdolliset arvot vasemmalle puolelle eri arvoille . Nämä ovat kaikki numeroita, joista yksi on haluttu, ja yhdessä oikean puolen oikean arvon kanssa antaa halutun tuloksen arvolle . Siten tehtävä rajoittuu vasemman puolen eri arvojen lajitteluun ja niiden etsimiseen taulukosta. Jos haluttu arvo löytyy taulukosta, olemme löytäneet , ja siten vastaavan . Tämä kuva havainnollistaa algoritmin nopeutta. Leikkauksia tehdään keskimäärin . Pahimmassa tapauksessa tarvitaan operaatioita [3] .
Alla on esimerkki diskreetin logaritmitehtävän ratkaisemisesta pienellä ryhmäjärjestyksellä. Käytännössä kryptojärjestelmät käyttävät korkeamman asteen ryhmiä kryptografisen vahvuuden parantamiseksi .
Olkoon se tiedossa . Alussa luomme ja täytämme taulukon "isoista askeleista". Valitsemme ← ( ). Sitten se ajaa osoitteesta - .
yksi | 2 | 3 | neljä | 5 | |
kaksikymmentä | 9 | 19 | 12 | kymmenen |
Etsitään sopiva arvo , jotta molempien taulukoiden arvot täsmäävät
yksi | 2 | 3 | neljä | |
· | viisitoista | 6 | 7 | 12 |
Voidaan nähdä, että toisessa taulukossa , tällainen arvo on jo ensimmäisessä taulukossa. Etsi [2] .
On olemassa tapa parantaa Gelfond -Shanks-algoritmin suorituskykyä. Se koostuu tehokkaan taulukon käyttöjärjestelmän käytöstä. Paras tapa on käyttää hash-taulukkoa . Sinun tulisi tiivistää toinen komponentti ja suorittaa sitten tiivistehaku pääsilmukan taulukosta . Koska hajautustaulukon elementtien saaminen ja lisääminen vie aikaa ( vakio ), tämä ei asymptoottisesti hidasta algoritmia.
Algoritmin ajoajaksi on arvioitu , mikä on paljon parempi kuin eksponentien tyhjentävän laskennan ajoaika [4] .
Lukuteoreettiset algoritmit | |
---|---|
Yksinkertaisuustestit | |
Alkulukujen löytäminen | |
Faktorisointi | |
Diskreetti logaritmi | |
GCD:n löytäminen |
|
Modulo-aritmetiikka | |
Lukujen kerto- ja jakolasku | |
Neliöjuuren laskeminen |