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:
- Valitse kaksi erilaista suurta satunnaista alkulukua ja . Tämä on pidettävä salassa.
- Laske
- on julkisen ja yksityisen avaimen moduuli.
- Lasketaan totientti: .
- Valitaan sellainen kokonaisluku , että , ja on co-primus kanssa.
Toisin sanoen: ja eivät jaa muita tekijöitä kuin : ; Katso suurin yhteinen jakaja. - vapautetaan julkisen avaimen eksponentiksi.
- Lasketaan täyttämään kongruenssisuhde .
Eli: jollekin kokonaisluvulle . (Yksinkertaisesti sanottuna: Lasketaan kokonaisluvuksi). - 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 sijaan.
- Vaihe 4: Suosittu valinta julkisten eksponenttien arvoksi on . Joissakin sovelluksissa valitaan pienempiä arvoja, kuten , tai 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 ; katso modulaarinen aritmetiikka.
Julkinen avain muodostuu moduulista ja julkisesta (tai salaus)eksponentista . Henkilökohtainen avain muodostuu p,q:sta ja yksityisestä (tai salauksen purku-) eksponentista , joka on pidettävä salassa.
- Tehokkuuden vuoksi yksityinen avain voidaan tallentaa eri muodossa:
- ja : avainten luomisessa käytetyt alkuluvut;
- ja : kutsutaan usein dmp1 ja dmq1;
- : kutsutaan usein iqmp:ksi.
- Kaikki yksityisen avaimen osat on pidettävä salassa tässä muodossa. ja ovat arkaluonteisia, koska ne ovat kertoimia ja mahdollistavat laskennan, kun on annettu. Jos ja 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 . Tämä on erityinen ongelma, jos se toteutetaan älykorteissa, jotka hyötyvät eniten tehokkuuden parantumisesta.
(Aloita ja anna kortin purkaa se. Se laskee siis tai , joiden tulokset antavat jonkin arvon . Aiheutetaan nyt virhe jossakin laskutoimituksessa. Silloin paljastaa tai .) .)
Viestin salaus
Alice antaa julkisen avaimensa
Bobille ja pitää yksityisen avaimensa salassa. Bob haluaa lähettää viestin Alicelle.Ensin hän muuttaa
luvuksi , joka on pienempi kuin , käyttämällä sovittua palautuvaa protokollaa, jota kutsutaan pehmustusjärjestelmäksi. Tämän jälkeen hän laskee salatekstin , joka vastaa:
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
Viestin purkaminen
Liisa voi palauttaa
käyttämällä yksityistä avainta seuraavalla tavalla:Kun on annettu
, hän voi palauttaa alkuperäiset erilliset alkuluvut, ja soveltamalla kiinalaista jäännöslausetta näihin kahteen kongruenssiin saadaan seuraavat tulokset.
Niinpä,
.
Siksi:
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 ja
ja
2. Lasketaan
;
3. Lasketaan totientti
;
4. Valitse coprime kuin
;
5. Valitse siten, että
, jolloin .
Julkinen avain on ( , ). Täytetylle viestille salausfunktio muuttuu:
Yksityinen avain on (
, ). Salausfunktio muuttuu:
Esimerkiksi
salataksesi lasketaan
Salaus
lasketaan
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,
meidän on osoitettava, että salauksen purkaminen oikealla avaimella antaa alkuperäisen viestin. Kun otetaan huomioon pehmustettu viesti m, salausteksti c lasketaan seuraavasti
Kun tämä korvataan salauksen purkualgoritmilla, saadaan seuraava tulos
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,
Toisin sanoen, on olemassa jokin kokonaisluku k, jonka avulla
Nyt korvaamme salatun ja sitten puretun viestin,
Sovellamme Eulerin teoreemaa ja saamme tuloksen.
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 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.