Yksinkertaisuustesti

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 21.5.2020 tarkistetusta versiosta . vahvistus vaatii 1 muokkauksen .

Kysymys siitä, onko luonnollinen luku alkuluku , tunnetaan primaalisuusongelmana.

Primaliteettitesti (tai primaalitesti) on algoritmi , joka ottaa luvun syötteeksi sallii joko olla vahvistamatta oletusta luvun koostumuksesta tai vahvistaa tarkasti sen yksinkertaisuuden. Toisessa tapauksessa sitä kutsutaan todelliseksi primaalisuustestiksi. Ensisijaisuustesti on siis vain hypoteesi , että jos algoritmi ei vahvista oletusta, että luku on yhdistelmä , niin tämä luku voi olla alkuluku tietyllä todennäköisyydellä . Tämä määritelmä merkitsee vähemmän luottamusta testituloksen yhteensopivuuteen todellisen asioiden kanssa kuin todellinen primaalisuustesti, joka antaa matemaattisesti varmennetun tuloksen.

Johdanto

Diskreetin matematiikan ongelmat ovat matemaattisesti monimutkaisimpia . Yksi niistä on tekijöiden jakamisen ongelma , joka koostuu luvun tekijöiden jakamisen löytämisestä alkutekijöiksi. Sen ratkaisemiseksi sinun on löydettävä alkuluvut, mikä johtaa yksinkertaisuusongelmaan. Primaalisuustestitehtävä kuuluu monimutkaisuusluokkaan P , eli sen ratkaisemiseen tarvittavien algoritmien ajoaika riippuu polynomiaalisesti syötetietojen koosta, mikä todistettiin vuonna 2002 . Tekijöintiongelmalle on olemassa samanlainen, mutta todistamaton lausunto .

Jotkut matematiikan sovellukset, joissa käytetään kertoimia, vaativat sarjan erittäin suuria satunnaisesti valittuja alkulukuja. Algoritmi niiden saamiseksi Bertrandin postulaatin perusteella :

Algoritmi:

  1. Syöttö : luonnollinen luku
  2. Ratkaisu (etsi satunnaista alkulukua P)
    1. Funktio , jolla generoidaan mielivaltainen luonnollinen luku segmentille
    2. Jos komposiitti, niin
      1. Jos sitten
    3. Palauttaa "  - satunnainen alkuluku"

Aikaa ongelman ratkaisemiseen tällä algoritmilla ei ole määritelty, mutta on suuri todennäköisyys, että se on aina polynomi, kunhan alkulukuja on tarpeeksi ja ne jakautuvat enemmän tai vähemmän tasaisesti . Yksinkertaisten satunnaislukujen osalta nämä ehdot täyttyvät.

Tiedetään ( Eukleideen lause ), että alkulukujen joukko on ääretön. Dirichlet'n lause ( 1837 ) sanoo, että jos gcd , niin modulon kanssa yhteneviä alkulukuja on äärettömän monta . Toisin sanoen alkuluvut jakautuvat tasaisesti jäännösluokkiin Euler - funktion [1] mukaisesti mille tahansa arvolle . Jos alkuluvut ovat kuitenkin jakautuneet tasaisesti, mutta niitä on hyvin vähän, haku ei välttämättä ole käytännössä mahdollista. Tämän toisen ongelman ratkaisemiseksi käytämme alkulukulausetta ( 1896 ), jonka mukaan alkulukujen määrä välissä kasvaa . Tämä luku pyrkii äärettömään melko nopeasti, mistä voimme päätellä, että suurillakin arvoilla on melko suuri todennäköisyys ( ) löytää satunnainen alkuluku. Tästä voimme päätellä, että edellä kuvattu algoritmi voi antaa vastauksen polynomiajassa, jos on olemassa polynomialgoritmi, jonka avulla voimme varmistaa mielivaltaisen suuren luvun yksinkertaisuuden , mikä johtaa primaalisuusongelmaan.

Historiallista tietoa

Ensimmäinen maininta alkuluvuista tunnetaan Eukleideesta ( 3. vuosisadalla eKr .). Samaan aikaan Eratosthenes ( II vuosisadalla eKr. ) keksi ensimmäisen algoritmin alkulukujen löytämiseksi, ja se tunnetaan nykyään Eratosthenesin seulana . Sen olemus on "seulan" jo löytämien muiden alkulukujen peräkkäinen poissulkeminen kokonaislukujen luettelosta moninkertaisiin [ 2] . Paljon myöhemmin arabimatemaatikko Ibn al-Banna ehdotti kokonaislukujen luettelemista aina , vaan asti , mikä mahdollisti operaatioiden määrän vähentämisen. Tämän menetelmän haittana on, että sen sijaan, että se tarkastaisi tietyn luvun yksinkertaisuuden vuoksi, se tarjoaa peräkkäisen luettelon [3] kaikista kokonaisluvuista aina , ja on siksi tehoton ja vaatii huomattavaa laskentatehoa .

1200- luvun alussa Leonardo Pisalainen , joka tunnetaan nimellä Fibonacci, ehdotti numerosarjaa (nimetty hänen mukaansa), jonka yksi ominaisuuksista on, että -. Fibonacci - luku voi olla vain alkuluku alkulukuja lukuun ottamatta . Tätä ominaisuutta voidaan käyttää testattaessa Fibonacci-lukujen ensisijaisuutta. Hän myös, ibn al-Bannasta riippumatta, ehdotti menetelmää numeroiden tarkistamiseksi yksinkertaisuuden vuoksi. Tämä algoritmi on tosi (tai epätodennäköinen), koska vastaus saadaan aina, mutta se on erittäin tehoton.

Ensimmäinen, joka käytti numeroiden välisiä suhteita primaalisuuden määrittämiseen, oli Pietro Antonio Cataldi työssään täydellisistä numeroista. Täydellisiä lukuja ovat ne, jotka ovat yhtä suuria kuin omien jakajiensa summa. Ensimmäiset seitsemän täydellistä lukua ovat 6, 28, 496, 8128, 33550336, 8589869056 ja 137438691328. Cataldi totesi, että jos luku  on alkuluku ja luku  on myös alkuluku, niin luku  on täydellinen.

Ranskalainen matemaatikko Marin Mersenne tutki 1600-luvulla muotoa [4] , joka myöhemmin nimettiin Mersennen numeroiksi hänen kunniakseen . Mersenne havaitsi, että ensimmäisistä 257 Mersennen luvusta vain 11 on alkulukua (n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127 ja 257). Näin tehdessään hän teki useita virheitä ( ei ole alkuluku p = 67 tai 257, ja on p = 61, 89 ja 107). Alkulukujen etsiminen Mersennen lukujen joukosta on melko yksinkertaista Luc-Lehmer-testin ansiosta, jonka avulla voit löytää ratkaisun suhteellisen nopeasti. Tästä syystä Mersennen luvut ovat suurimmat tällä hetkellä tunnetuista alkuluvuista. Mersennen ja Fermat'n välisessä kirjeenvaihdossa esitettiin useita muita alkulukuja koskevia ajatuksia [4] .

Joten Fermat havaitsi, että jos kokonaisluku ei ole jaollinen alkuluvulla , niin luku on aina jaollinen ( Fermatin pieni lause ). Euler yleisti myöhemmin lauseen . Useat primaalisuustestit perustuvat Fermatin pieneen lauseeseen. Fermat ehdotti myös, että kaikkien luonnollisten lukujen muodon numerot ovat alkulukuja . Tämä pätee todellakin . Euler löysi vastaesimerkin tälle väitteelle . Fermat-lukujen primaalisuuden testaamiseksi on olemassa tehokas Pepin-testi . Tähän mennessä uusia Fermat-alkulukuja ei ole löydetty.

Muiden tiedemiesten joukossa Euler, Legendre , Gauss käsittelivät numeroiden yksinkertaisuutta . Merkittäviä tuloksia primaalisuuden ongelman ratkaisemisessa saavutti ranskalainen matemaatikko Édouard Lucas työssään Fermat- ja Mersennen numeroista. Se on hänen antamiensa Mersennen lukujen yksinkertaisuuden kriteeri, joka tunnetaan nykyään Lucas-Lehmerin testinä.

Vuonna 2002 kehitettiin deterministinen polynomiprimaalisuustesti, Agrawal-Kayal-Saxena testi . Sen ilmestymisen ennusti polynomisten ensisijaisuusvarmenteiden olemassaolo ja sen seurauksena se tosiasia, että numeron primaalisuuden tarkistamisen ongelma kuului samanaikaisesti NP- ja co -NP- luokkiin .

Todelliset primaalisuustestit

Olemassa olevat algoritmit luvun primaalisuuden testaamiseksi voidaan jakaa kahteen luokkaan: todellisen primaalisuuden testit ja todennäköisyyspohjaisuustestit. Tositestit laskelmien tuloksena paljastavat aina luvun yksinkertaisuuden tai koostumuksen tosiasian, todennäköisyystesti antaa vastauksen luvun koostumuksesta tai sen koostumattomuudesta jollain todennäköisyydellä [2] [4] . Yksinkertaisesti sanottuna todennäköisyyspohjainen algoritmi sanoo, että luku ei todennäköisesti ole yhdistelmä, mutta lopulta se voi osoittautua joko alkulukuksi tai yhdistelmäksi. Luvut, jotka täyttävät todennäköisyyspohjaisen primaalisuustestin, mutta ovat yhdistelmänä, kutsutaan pseudoalkuluvuiksi [1] . Yksi esimerkki tällaisista luvuista ovat Carmichael-luvut [3] . Voit myös nimetä Euler-Jacobi-luvut Solovay-Strassen-testille ja Lucasin pseudoalkuluvuille.

Yksi esimerkki todellisista primaalisuustesteistä on Luc - Lehmerin testi Mersennen numeroille . Tämän testin ilmeinen haittapuoli on, että se koskee vain tiettyjä lukuja. Muita esimerkkejä ovat ne, jotka perustuvat Fermatin pieneen lauseeseen :

Yhtä hyvin kuin:

Todennäköisyyspohjaiset primaalisuustestit

Tämä luokka sisältää:

Yksinkertaisuustestit kryptografiassa

Tällä hetkellä alkulukuja käytetään laajalti tietoturvan alalla. Ensinnäkin tämä johtuu julkisen avaimen salausmenetelmän keksimisestä, jota käytetään tiedon salauksessa ja sähköisissä digitaalisissa allekirjoitusalgoritmeissa . Tällä hetkellä elliptisiä käyriä käyttävän digitaalisen allekirjoituksen muodostamisessa käytettyjen alkulukujen koko on standardien mukaan GOST R 34.10-2012 mukaisesti vähintään 254 bittiä. Tällaisille suurille luvuille kysymys luvun alkuasteen määrittämisestä on erittäin vaikeaa. Yksinkertaiset menetelmät, kuten laskentamenetelmä, eivät sovellu käyttöön, koska ne vaativat erittäin paljon laskentaresursseja ja paljon aikaa [6] .

Myös luvun ensisijaisuuden määrittäminen on välttämätöntä, kun murretaan RSA-algoritmilla salattua tai allekirjoitettua tietoa . Tällaisen viestin avaamiseksi on välttämätöntä pystyä hajottamaan luku kahdeksi alkutekijäksi, mikä on ei-triviaali tehtävä suurille luvuille.

Toisaalta, kun luodaan avaimia julkisen avaimen salausjärjestelmille , sähköisille allekirjoitusjärjestelmille jne., käytetään suuria näennäissatunnaisia ​​alkulukuja. Esimerkiksi Diffie-Hellman-protokollaa käytettäessä on oltava alkuluku, joka määrittää lopullisen kentän . Siksi tehokkaan primaalisuustestin käyttö mahdollistaa tällaisten avainten generointialgoritmien luotettavuuden lisäämisen.

Katso myös

Muistiinpanot

  1. 1 2 Kormen T., Leiser C. Algoritmit. Rakentaminen ja analyysi. - M .: MTSNMO, 2002. - S. 765-772.
  2. 1 2 Vasilenko O. N. Lukuteoreettiset algoritmit kryptografiassa. - M .: MTSNMO, 2003. - 328 s.
  3. 1 2 Crandall R., Pomerance C. Alkuluvut : laskennallinen näkökulma. - Springer, 2005.
  4. 1 2 3 Donald Knuth . Ohjelmoinnin taito, osa 2. Johdetut algoritmit. - M . : "Williams" , 2007.
  5. Nesterenko Yu. V. Johdatus kryptografiaan. - Peter, 2001. - 288 s.
  6. B. Schneier. Sovellettu kryptografia. - S. 296-300.

Kirjallisuus