Tietojen salaus ja toisten luotettava tunnistus on verkossa välttämätöntä. Esimerkiksi verkkopankin käyttö HTTPS-protokollalla varmistaa, että
tiedot kulkevat salattuna ja vain oikea vastaanottaja voi purkaa ne.
Ilman luotettavaa salausta kolmas osapuoli voisi lukea viestin matkan varrella.
RSA on eräs laajasti käytetty tapa vaihtaa salattua informaatiota. Sen kehittelivät
Ron Rivest, Adi Shamir ja Leonard Adleman vuonna 1977.
Epäsymmetrinen salaus
Tässä on epäsymmetrisen salauksen idea:
Anna haluaa vastaanottaa salaisia viestejä.
Anna laatii julkisen avaimen ja salaisen avaimen. Julkisella avaimella voi salata viestejä ja salaisella avaimella purkaa niitä.
Anna lähettää julkisen avaimen kaikille, jotka sen tarvitsevat (ei haittaa, vaikka koko maailma näkisi sen).
Ville saa julkisen avaimen ja salaa sen avulla viestinsä Annalle.
Ville lähettää salatun viestin Annalle.
Anna saa Villen viestin. Sen voi avata vain yksityisellä avaimella, joten vain Anna voi lukea Ville viestin.
Koko kirjeenvaihto voidaan käydä täysin julkisesti, mutta tieto on turvassa niin
kauan kun salainen avain on piilossa.
Tilannetta voisi verrata Annan avoimena lähettämään kassakaappiin, jonka Ville voi sulkea ja lähettää takaisin lukittuna; Annalla on ainoa avain.
RSA:n toiminta
RSA toimii seuraavasti:
Ensin valitaan kokonaisluvut , ja siten, että
kaikille kokonaisluvuille pätee
(Tämä on mahdollista, palataan myöhemmin siihen, miten temppu tehdään.) Lukujen rooli on seuraava:
lukupari ja muodostaa julkisen avaimen
luku on salainen avain
Ville lähettää viestin Annalle seuraavasti: Ensin sanallinen viesti muutetaan kokonaisluvuksi jollakin tavalla (Esimerkiksi a = 10, b = 11, c = 12,...). Tässä kohtaa turvallisuutta voi lisätä monimutkaisella muunnoksella, esimerkiksi
OAEP-menetelmällä.
Sitten Ville salaa viestin. Salattu viesti on luvun jakojäännös, kun jaetaan luvulla . Pätee siis
Salattu viesti lähetetään Annalle, joka voi purkaa sen laskemalla luvun jakojäännöksen, kun jaetaan luvulla . Koska luvut , ja on valittu sopivasti, tuloksena on alkuperäinen viesti:
Algoritmi voi välittää viesteinä lukuja , jotka ovat lukua pienempiä.
Esimerkki 1
Toimiva (joskin turvallisuuden kannalta aivan liian pieni) kolmikko RSA-algoritmin käyttöön on , , .
Viesti voi olla mikä tahansa lukua pienempi epänegatiivinen kokonaisluku, esimerkiksi . Salattuna se on
Salattu viesti on siis vain luku 7. Viestin voi purkaa laskemalla
Modulaaristen eksponenttien laskeminen tietokoneella on hyvin nopeaa sopivalla algoritmilla. Esimerkiksi Python-kielellä laskut voi suorittaa komennolla pow(v,e,n), joka palauttaa luvun jakojäännöksen modulo .
Kirjoita ohjelma, joka tulostaa yhdelle riville puretun viestin lukuna ja toiselle riville viestin tulkittuna tekstiksi.
Voit tehdä tekstiksi muuntamisen joko suoraan koodissa tai sitten käsin esimerkin 2 taulukon kanssa.
Valitaan kaksi suurta alkulukua ja
(Mielellään melkein samaa kokoluokkaa.)
Lasketaan
Lasketaan
( on Carmichaelin funktio, jonka ominaisuuksista ei tarvita
tässä todistuksessa muita kuin se, että on jaollinen luvuilla ja .)
Valitaan siten, että ja .
Tyypillisesti on suhteellisen pieni, esimerkiksi alkuluku .
Luku ratkaistaan yhtälöstä .
Yhtälö on muotoa eli muotoa , joten sillä on ratkaisu,
kun .
RSA:n turvallisuus
Periaatteessa RSA-salaus on yksinkertaista murtaa: tarvitsee vain jakaa luku tekijöihinsä
ja ja ratkaista salainen avain yhtälöstä . Suurten lukujen tekijöihinjako on kuitenkin hidasta puuhaa.
Nykyään RSA-salauksessa käytetään avaimia, joiden pituus on binaarijärjestelmässä 1024 ja 4096 bitin välillä. Näistä ainakin 4096 bittiä on täysin vuoden 2021 tietokoneiden kykyjen ulottumattomissa. Kvanttitietokoneet saattavat muuttaa peliä.
Ei ole osoitettu, etteikö RSA:ta voisi yleisessä tapauksessa murtaa helpommallakin tavalla kuin jakamalla tekijöihinsä. Tästä ei kuitenkaan ole viitteitä.
Joitakin tunnettuja ongelmia kuitenkin on:
Jos ja ovat samaa kokoluokkaa, on jaettavissa tekijöihin nopeasti.
(Fermat'n tekijöihin jako)
Jos luvuilla ja on vain pieniä alkutekijöitä, voidaan
jakaa tekijöihin nopeasti. (Pollardin -algorithmi)
Jos yksityinen avain on liian pieni, se voidaan selvittää tehokkasti
lukujen ja avulla.
Jos luvut ja on valittu huonosti toimivalla pseudosatunnaislukugeneraattorilla, kahdessa julkisessa avaimessa voi olla sama
tekijä . Siis ja . Tällöin laskemalla syt
saadan murrettua kumpikin salaus.
Koska julkisen avaimen avulla kuka tahansa voi salata viestejä, on mahdollista
kokeilla miltä todennäköiset viestin näyttävät salattuina. Näitä voidaan verrata todelliseen viestiin ja saada siis sen sisältö selville. Tätä hyökkäystä vastaan
viesti muutetaan luvuksi monimutkaisella, satunnaisuutta sisältävällä tavalla.
Jo muutaman satunnaisen merkin lisääminen viestin loppuun auttaa paljon.
Todistus RSA:n toimivuudesta
Todistuksessa tarvitaan aputuloksena Fermat'n pientä lausetta:
Fermat'n pieni lause
Kun on alkuluku, pätee
Lause voidaan muotoilla myös näin: Kun on alkuluku jolla ei ole jaollinen,
Ylempi muotoilu seuraa alemmasta kertomalla puolittain luvulla ja tutkimalla erikseen tapauksen .
Fermat'n pienen lauseen todistus
Olkoon alkuluku ja luku, joka ei ole jaollinen :llä. Tutkitaan lukuja
Väitetään, että näiden lukujen jakojäännökset modulo
ovat kaikki erisuuria. Näin täytyy olla, sillä jos olisi
, täytyisi olla eli . Koska
ei jaa lukua , täytyy olla , mutta tämä on mahdollista vain
kun , sillä ja ovat lukua pienempiä. Jakojäännökset ovat siis erisuuria.
Lukujen jakojäännökset ovat siis (jossakin
järjestyksessä) . Voidaan kirjoittaa
eli
Koska ei voi olla jaollinen alkuluvulla , se voidaan supistaa pois ja saadaan
Lemma jakojäännöksistä
Olkoot ja lukuja, joilla ei ole yhteisiä tekijöitä.
Väite: Jos ja ,
pätee
Todistus: Oletusten perustella ja . Vähentämällä nämä
toisistaan saadaan eli . Luku on siis jaollinen luvulla
, ja koska syt, täytyy olla . Siis
eli
Itse todistus
Väite on, että kaikille luvuille pätee
aina kun
missä ja ovat alkulukuja.
Todistus on seuraava:
Koska , luku on jaollinen luvuilla ja .
Voidaan siis kirjoittaa ja toisaalta .
Halutaan nyt todistaan . Tämän
toteamiseksi riittää tarkistaa, että
ja (ks. lemma jakojäännöksistä).
Tapaus on selvä, sillä kongruenssin laskusääntöjen nojalla myös .
Jos taas , voidaan kirjoittaa
Välivaihe seuraa Fermat'n pienestä lauseesta.