RSA-algoritmi | algoritmi, jota käytetään viestien salaamiseen ja purkamiseen

RSA (Rivest-Shamir-Adleman) on algoritmi, jota nykyaikaiset tietokoneet käyttävät viestien salaamiseen ja purkamiseen. Se on epäsymmetrinen salausalgoritmi. Epäsymmetrinen tarkoittaa, että on olemassa kaksi eri avainta. Tätä kutsutaan myös julkisen avaimen salaukseksi, koska toinen avaimista voidaan antaa kenelle tahansa. Toinen avain on pidettävä salassa. Algoritmi perustuu siihen, että suuren yhdistetyn luvun tekijöiden löytäminen on vaikeaa: kun tekijät ovat alkulukuja, ongelmaa kutsutaan alkutekijöinniksi. Se on myös avainparin (julkisen ja yksityisen avaimen) generaattori.

RSA:ssa käytetään julkista ja yksityistä avainta. Julkinen avain voi olla kaikkien tiedossa - sitä käytetään viestien salaamiseen. Julkisella avaimella salatut viestit voidaan purkaa vain yksityisellä avaimella. Yksityinen avain on pidettävä salassa. Yksityisen avaimen laskeminen julkisesta avaimesta on hyvin vaikeaa.



 

Käytetyt käsitteet

RSA käyttää useita kryptografian käsitteitä:

  • Yksisuuntainen funktio, joka on helppo laskea; sen kumoavan funktion löytäminen tai laskeminen on hyvin vaikeaa.
  • RSA käyttää käsitettä nimeltä diskreetti logaritmi. Se toimii aivan kuten normaali logaritmi: Erona on se, että käytetään vain kokonaislukuja, ja yleensä kyseessä on moduulioperaatio. Esimerkkinä ax =b, modulo n. Diskreetissä logaritmissa on kyse pienimmän x:n löytämisestä, joka täyttää yhtälön, kun a b ja n annetaan
  • Shorin algoritmi voi mahdollisesti torjua sen.


 

Avainten luominen

RSA-algoritmin avaimet luodaan seuraavasti:

  1. Valitse kaksi erilaista suurta satunnaista alkulukua {\displaystyle p} ja q . Tämä on pidettävä salassa.
  2. Laske {\displaystyle n=pq}
    • n on julkisen ja yksityisen avaimen moduuli.
  3. Lasketaan totientti: {\displaystyle \phi (n)=(p-1)(q-1)} .
  4. Valitaan sellainen kokonaisluku {\displaystyle e} , että {\displaystyle 1<e<\phi (n)} , ja {\displaystyle e} on co-primus {\displaystyle \phi (n)} kanssa.
    Toisin sanoen:
    {\displaystyle e} ja {\displaystyle \phi (n)} eivät jaa muita tekijöitä kuin {\displaystyle 1}: {\displaystyle \gcd(e,\phi (n))=1} ; Katso suurin yhteinen jakaja.
    • {\displaystyle e} vapautetaan julkisen avaimen eksponentiksi.
  5. Lasketaan {\displaystyle d} täyttämään kongruenssisuhde {\displaystyle de\equiv 1\!\!\!\!{\pmod {\phi (n)}}} .
    Eli:
    {\displaystyle de=1+x\cdot \phi (n)} jollekin kokonaisluvulle x . (Yksinkertaisesti sanottuna: Lasketaan {\displaystyle d=(1+x\cdot \phi (n))/e} kokonaisluvuksi).
    • {\displaystyle d} pidetään yksityisen avaimen eksponenttina.

Huomautuksia edellä mainituista vaiheista:

  • Vaihe 1: Luvuille voidaan tehdä todennäköisyystestit alkulukujen ensisijaisuuden varalta.
  • Vaihe 3: muutettu PKCS#1 v2.0:ssa muotoon {\displaystyle \lambda (n)={\rm {lcm}}(p-1,q-1)} {\displaystyle \phi (n)=(p-1)(q-1)} sijaan.
  • Vaihe 4: Suosittu valinta julkisten eksponenttien arvoksi on {\displaystyle e=2^{16}+1=65537} . Joissakin sovelluksissa valitaan pienempiä arvoja, kuten {\displaystyle e=3}, {\displaystyle 5}tai {\displaystyle 35} sijaan. Tämä tehdään, jotta salaus ja allekirjoituksen todentaminen olisi nopeampaa pienissä laitteissa, kuten älykorteissa, mutta pienet julkiset eksponentit voivat johtaa suurempiin tietoturvariskeihin.
  • Vaiheet 4 ja 5 voidaan suorittaa laajennetulla euklidisella algoritmilla [fi]; katso modulaarinen aritmetiikka.

 Julkinen avain muodostuu moduulista {\displaystyle n\,} ja julkisesta (tai salaus)eksponentista {\displaystyle e\,} . Henkilökohtainen avain muodostuu p,q:sta ja yksityisestä (tai salauksen purku-) eksponentista {\displaystyle d\,} , joka on pidettävä salassa.

  • Tehokkuuden vuoksi yksityinen avain voidaan tallentaa eri muodossa:
    • {\displaystyle p} ja q : avainten luomisessa käytetyt alkuluvut;
    • {\displaystyle d{\bmod {(}}p-1)} ja {\displaystyle d{\bmod {(}}q-1)} : kutsutaan usein dmp1 ja dmq1;
    • {\displaystyle q^{-1}{\bmod {p}}} : kutsutaan usein iqmp:ksi.
  • Kaikki yksityisen avaimen osat on pidettävä salassa tässä muodossa. {\displaystyle p\,} ja {\displaystyle q\,} ovat arkaluonteisia, koska ne ovat {\displaystyle n\,} kertoimia ja mahdollistavat {\displaystyle d\,} laskennan, kun {\displaystyle e\,} on annettu. Jos {\displaystyle p\,} ja {\displaystyle q\,} eivät ole tallennettu tähän yksityisen avaimen muotoon, ne poistetaan turvallisesti yhdessä muiden avaimen luomisesta peräisin olevien väliarvojen kanssa.
  • Vaikka tämä muoto mahdollistaa nopeamman salauksen purkamisen ja allekirjoittamisen CRT-lausekkeen (Chinese Remainder Theorem) avulla, se on huomattavasti vähemmän turvallinen, koska se mahdollistaa sivukanavahyökkäykset [fi]. Tämä on erityinen ongelma, jos se toteutetaan älykorteissa, jotka hyötyvät eniten tehokkuuden parantumisesta. 
    (Aloita
    {\displaystyle y\equiv x^{e}\!\!\!\!{\pmod {n}}}ja anna kortin purkaa se. Se laskee siis {\displaystyle (y^{d}{\bmod {p}})} tai {\displaystyle (y^{d}{\bmod {q}})}, joiden tulokset antavat jonkin arvon {\displaystyle z} . Aiheutetaan nyt virhe jossakin laskutoimituksessa. Silloin {\displaystyle \gcd(z-x,n)} paljastaa {\displaystyle p} tai q .) .)


 

Viestin salaus

Alice antaa julkisen avaimensa {\displaystyle (n,e)} Bobille ja pitää yksityisen avaimensa salassa. Bob haluaa lähettää viestin {\displaystyle M} Alicelle.

Ensin hän muuttaa {\displaystyle M} luvuksi m , joka on pienempi kuin n , käyttämällä sovittua palautuvaa protokollaa, jota kutsutaan pehmustusjärjestelmäksi. Tämän jälkeen hän laskee salatekstin {\displaystyle c\,} , joka vastaa:

{\displaystyle c=m^{e}\mod {n}}

Tämä voidaan tehdä nopeasti käyttämällä menetelmää, jossa potenssi saadaan neliöimällä. Tämän jälkeen Bob lähettää Alicelle {\displaystyle c\,}



 

Viestin purkaminen

Liisa voi palauttaa {\displaystyle m\,} {\displaystyle c\,} käyttämällä yksityistä avainta {\displaystyle d\,} seuraavalla tavalla:

Kun on annettu {\displaystyle m\,} , hän voi palauttaa alkuperäiset erilliset alkuluvut, ja soveltamalla kiinalaista jäännöslausetta näihin kahteen kongruenssiin saadaan seuraavat tulokset.

{\displaystyle m^{ed}\equiv m{\bmod {pq}}}

Niinpä,

{\displaystyle c^{d}\equiv m{\bmod {n}}} .

Siksi:

{\displaystyle m=c^{d}\ mod\ n}

Toimiva esimerkki

Tässä on esimerkki RSA-salauksesta ja -purusta. Tässä käytetyt alkuluvut ovat liian pieniä, jotta voimme salata mitään turvallisesti. Voit käyttää OpenSSL:ää oikean avainparin luomiseen ja tutkimiseen.

1. Valitse kaksi satunnaista alkulukua {\displaystyle p} ja {\displaystyle q\,}

{\displaystyle p=61} ja {\displaystyle q=53\,}

2. Lasketaan {\displaystyle n=pq\,}

{\displaystyle n=61\times 53=3233\!} ;

3. Lasketaan totientti {\displaystyle \phi (n)=(p-1)(q-1)}

{\displaystyle \phi (n)=(61-1)(53-1)=3120\!} ;

4. Valitse {\displaystyle e>1} coprime kuin {\displaystyle 3120\,}

{\displaystyle e=17\,} ;

5. Valitse {\displaystyle d\,} siten, että {\displaystyle ed\equiv 1{\bmod {\phi (n)}}}

{\displaystyle d=2753\,} , jolloin {\displaystyle 17\times 2753=46801=1+15\times 3120} .

 Julkinen avain on ( {\displaystyle n=3233} , {\displaystyle e=17} ). Täytetylle viestille {\displaystyle m\,} salausfunktio {\displaystyle c=m^{e}{\bmod {n}}} muuttuu:

{\displaystyle c=m^{17}{\bmod {3}}233\,}

Yksityinen avain on ( {\displaystyle n=3233} , {\displaystyle d=2753} ). Salausfunktio {\displaystyle m=c^{d}{\bmod {n}}} muuttuu:

{\displaystyle m=c^{2753}{\bmod {3}}233\,}


 Esimerkiksi
salataksesi {\displaystyle m=123}lasketaan

{\displaystyle c=123^{17}{\bmod {3}}233=855}

Salaus {\displaystyle c=855}lasketaan

{\displaystyle m=855^{2753}{\bmod {3}}233=123}

Molemmat näistä laskutoimituksista voidaan laskea nopeasti ja helposti käyttämällä modulaarisen potensoinnin neliö- ja moninkertaistamisalgoritmia.



 

RSA-yhtälön johtaminen Eulerin lauseesta

RSA voidaan helposti johtaa Eulerin lauseen ja Eulerin totienttifunktion avulla.

Aloitetaan Eulerin lauseesta,

{\displaystyle m^{\phi (n)}\equiv 1{\pmod {n}}}

meidän on osoitettava, että salauksen purkaminen oikealla avaimella antaa alkuperäisen viestin. Kun otetaan huomioon pehmustettu viesti m, salausteksti c lasketaan seuraavasti

{\displaystyle c\equiv m^{e}{\pmod {n}}}

Kun tämä korvataan salauksen purkualgoritmilla, saadaan seuraava tulos

{\displaystyle c^{d}\equiv (m^{e})^{d}\equiv m^{ed}{\pmod {n}}}

Haluamme osoittaa, että tämä arvo on myös yhteneväinen m:n kanssa. e:n ja d:n arvot valittiin siten, että ne täyttävät,

{\displaystyle ed\equiv 1{\pmod {\phi (n)}}}

Toisin sanoen, on olemassa jokin kokonaisluku k, jonka avulla

{\displaystyle ed=k\times \phi (n)+1}

Nyt korvaamme salatun ja sitten puretun viestin,

{\displaystyle {\begin{aligned}m^{ed}&\equiv m^{k\phi (n)+1}\\&\equiv m\times m^{k\phi (n)}\\&\equiv m\times \left(m^{\phi (n)}\right)^{k}{\pmod {n}}\end{aligned}}}

Sovellamme Eulerin teoreemaa ja saamme tuloksen.

{\displaystyle m\times (1)^{k}\equiv m{\pmod {n}}}



 

Pehmustejärjestelmät

Käytännössä RSA:ta käytettäessä siihen on yhdistettävä jonkinlainen pehmustejärjestelmä, jotta mikään M:n arvo ei johda turvattomaan salaustekstiin. Ilman pehmustusta käytetyllä RSA:lla voi olla joitakin ongelmia:

  • Arvot m = 0 tai m = 1 tuottavat aina salaustekstejä, jotka ovat vastaavasti 0 tai 1, eksponentiaalisuuden ominaisuuksien vuoksi.
  • Kun salaus tehdään pienillä salauseksponenteilla (esim. e = 3) ja pienillä m:n arvoilla, (ei-modulaarinen) tulos {\displaystyle m^{e}} voi olla tiukasti pienempi kuin moduuli n. Tällöin salaustekstit voidaan helposti purkaa ottamalla salaustekstin eet-juuresta moduulista välittämättä.
  • RSA-salaus on deterministinen salausalgoritmi. Siinä ei ole satunnaiskomponenttia. Sen vuoksi hyökkääjä voi onnistuneesti käynnistää salausjärjestelmää vastaan valitun selkotekstin hyökkäyksen. Hän voi luoda sanakirjan salaamalla todennäköisiä salatekstejä julkisella avaimella ja tallentamalla tuloksena saadut salatekstit. Hyökkääjä voi sitten tarkkailla viestintäkanavaa. Heti kun hän näkee salakirjoitustekstejä, jotka vastaavat hänen sanakirjassaan olevia salakirjoitustekstejä, hyökkääjät voivat käyttää tätä sanakirjaa saadakseen selville viestin sisällön.

Käytännössä kaksi ensimmäistä ongelmaa voi syntyä, kun lähetetään lyhyitä ASCII-viestejä. Tällaisissa viesteissä m voi olla yhden tai useamman ASCII-koodatun merkin ketjutus. Viesti, joka koostuu yhdestä ASCII-merkistä NUL (jonka numeerinen arvo on 0), koodataan muotoon m = 0, jolloin salatun tekstin arvo on 0 riippumatta siitä, mitä e:n ja N:n arvoja käytetään. Vastaavasti yksittäinen ASCII SOH (jonka numeerinen arvo on 1) tuottaisi aina salaustekstin, jonka arvo on 1. Järjestelmissä, joissa käytetään tavanomaisesti pieniä e:n arvoja, kuten 3, kaikki yksittäiset ASCII-merkkiset viestit, jotka on koodattu tätä järjestelmää käyttäen, eivät olisi turvallisia, koska suurimman m:n arvo olisi 255, ja 2553 on pienempi kuin mikä tahansa järkevä moduuli. Tällaiset salatekstit voitaisiin palauttaa yksinkertaisesti ottamalla salatekstin kuutiojuuri.

Näiden ongelmien välttämiseksi käytännön RSA-toteutukset tyypillisesti upottavat jonkinlaisen strukturoidun, satunnaistetun täytteen arvoon m ennen sen salaamista. Tämä pehmuste varmistaa, että m ei kuulu turvattomien salatekstien joukkoon ja että tietty viesti, kun se on täytetty, salataan joksikin monista erilaisista mahdollisista salateksteistä. Jälkimmäinen ominaisuus voi nostaa sanakirjahyökkäyksen kustannukset yli kohtuullisen hyökkääjän kykyjen.

PKCS:n kaltaiset standardit on suunniteltu huolellisesti täyttämään viestit turvallisesti ennen RSA-salausta. Koska näissä järjestelmissä selkotekstiä m täydennetään jollakin määrällä ylimääräisiä bittejä, täydennyksettömän viestin M koon on oltava jonkin verran pienempi. RSA-pehmustejärjestelmät on suunniteltava huolellisesti, jotta voidaan estää monimutkaiset hyökkäykset. Tätä voidaan helpottaa ennustettavalla viestin rakenteella. PKCS-standardin varhaisissa versioissa käytettiin ad hoc -rakenteita, jotka myöhemmin havaittiin haavoittuviksi käytännölliselle mukautuvalle valittuun salaustekstiin kohdistuvalle hyökkäykselle. Nykyaikaisissa rakenteissa käytetään turvallisia tekniikoita, kuten optimaalista epäsymmetristä salauspehmustetta (OAEP), viestien suojaamiseksi ja näiden hyökkäysten estämiseksi. PKCS-standardissa on myös käsittelyjärjestelmiä, jotka on suunniteltu tarjoamaan lisäturvaa RSA-allekirjoituksille, esimerkiksi Probabilistic Signature Scheme for RSA (RSA-PSS).



 

Viestien allekirjoittaminen

Oletetaan, että Alice käyttää Bobin julkista avainta lähettääkseen hänelle salatun viestin. Viestissä hän voi väittää olevansa Alice, mutta Bobilla ei ole mitään keinoa todentaa, että viesti on todella Alicelta, koska kuka tahansa voi käyttää Bobin julkista avainta salattujen viestien lähettämiseen. Viestin alkuperän todentamiseksi RSA:ta voidaan siis käyttää myös viestin allekirjoittamiseen.

Oletetaan, että Alice haluaa lähettää allekirjoitetun viestin Bobille. Hän tuottaa viestistä hash-arvon, korottaa sen potenssiin d mod n (kuten viestiä purettaessa) ja liittää sen viestin "allekirjoitukseksi". Kun Bob vastaanottaa allekirjoitetun viestin, hän nostaa allekirjoituksen potenssiin e mod n (aivan kuten viestin salauksen yhteydessä) ja vertaa tuloksena saatua hash-arvoa viestin todelliseen hash-arvoon. Jos nämä kaksi vastaavat toisiaan, Bob tietää, että viestin kirjoittajalla oli Alicen salainen avain ja että viestiä ei ole sen jälkeen peukaloitu.

Huomaa, että RSA-PSS:n kaltaiset turvalliset pehmustejärjestelmät ovat yhtä tärkeitä viestin allekirjoittamisen turvallisuuden kannalta kuin viestin salaamisenkin kannalta ja että samaa avainta ei pitäisi koskaan käyttää sekä salaamiseen että allekirjoittamiseen.

 

Kysymyksiä ja vastauksia

Q: Mikä on RSA?


V: RSA (Rivest-Shamir-Adleman) on algoritmi, jota nykyaikaiset tietokoneet käyttävät viestien salaamiseen ja purkamiseen. Se on epäsymmetrinen salausalgoritmi.

K: Mitä epäsymmetrinen tarkoittaa?


V: Epäsymmetrinen tarkoittaa, että on olemassa kaksi eri avainta - julkinen avain ja yksityinen avain.

K: Mihin RSA-algoritmi perustuu?


V: Algoritmi perustuu siihen, että suuren yhdistetyn luvun tekijöiden löytäminen on vaikeaa - kun tekijät ovat alkulukuja, tätä ongelmaa kutsutaan alkutekijöinniksi.

K: Miten RSA toimii?


V: RSA:ssa käytetään julkista ja yksityistä avainta. Julkinen avain voi olla kaikkien tiedossa - sitä käytetään viestien salaamiseen. Julkisella avaimella salatut viestit voidaan purkaa vain yksityisellä avaimella, joka on pidettävä salassa. Yksityisen avaimen laskeminen julkisesta avaimesta on hyvin vaikeaa.

Kysymys: Onko tälle salaustyypille olemassa jokin muu nimi?


V: Tätä salaustyyppiä kutsutaan myös julkisen avaimen salaukseksi, koska toinen avaimista voidaan antaa kenelle tahansa, mutta toinen voidaan pitää salassa.

K: Luoko RSA avainparin?


V: Kyllä, RSA luo avainparin - julkisen ja yksityisen avaimen - joita käytetään salaukseen ja salauksen purkamiseen.

AlegsaOnline.com - 2020 / 2023 - License CC3