RSA krüpteerimise mänguasi

Vali kaks algarvu, sisesta sõnum ja vaata, kuidas RSA selle krüpteerib ning seejärel dekrüpteerib.

Interaktiivse simulatsiooni laadimine...

Õppetund

Teooria — RSA krüpteerimise mänguasi

RSA on üksainus tehe, mida kasutatakse kaks korda. Krüpteerimine on me mod n ja dekrüpteerimine cd mod n — sama modulaarne astendamine, ainult teise astendajaga. Nipp on valida paar nii, et kaks korda rakendades saad sõnumi tagasi, kuid ühte astendajat teades ei tea sa teisest midagi. Kõik, mida paneel trükib, ongi selle paari otsimine. Rivest, Shamir ja Adleman avaldasid selle 1978. aastal — ja nagu selgus alles siis, kui GCHQ 1997 salastatuse maha võttis, leidis Clifford Cocks selle neli aastat varem ja jättis sahtlisse.

Mida iga sümbol tähendab

n
moodul, p·q. Avalik. Saladus on tema tegurid, mitte arv ise.
φ(n)
Euleri funktsioon, (p−1)(q−1). Paneel saab selle trükkida, sest talle anti p ja q; ründaja, kellel on ainult n, ei saa, ja n-ist φ-ni jõudmine on sama raske kui tegurdamine.
e
avalik astendaja. Sobib iga φ(n)-ga ühistegurita arv — just seepärast see muutub, kui muudad üht algarvu.
d
salajane astendaja, e⁻¹ mod φ(n). Üksainus modulaarne pöördväärtus — silmapilkne, kui tead φ-d, ja kogu mäng, kui ei tea.

Kust valem tuleb

  1. Korruta algarvud: n = p·q. Vaikeväärtustega 61 · 53 = 3233. See arv avaldatakse. 61 ja 53 tagasi saamine 3233-st võtab käsitsi hetke, ja just seepärast nimetatakse seda ausalt mänguasjaks.
  2. Arvuta φ(n) = (p−1)(q−1) = 60 · 52 = 3120. See on kogu skeemi hingepunkt: n on avalik, φ(n) ei ole, ja ainus teadaolev tee ühelt teisele viib läbi tegurdamise.
  3. Vali e, millel pole φ(n)-ga ühistegurit, ja lahenda e·d ≡ 1 (mod φ(n)) d suhtes. Paneel näitab 7⁻¹ mod 3120 = 1783. Pane tähele, mis see samm ei ole: see ei ole raske. φ-d teades on see üksainus modulaarne pöördväärtus. d salajasus tugineb tervenisti φ salajasusele.
  4. Miks ringkäik toimib: konstruktsiooni järgi on e·d = 1 + kφ(n), seega med = m1+kφ(n) ≡ m (mod n) — Euleri teoreem. Dekrüpteerimine pole eraldi välja mõeldud pöördtehe; see on seesama astendamine astendajaga, mis esimese tagasi võtab.

Kuidas nähtut lugeda

Rida, mida tasub jälgida, on e, sest see ei ole konstant. Vaikimisi algarvudega näitab see 7; muuda p 67-ks ja sellest saab 5. Põhjus on real kohe ülalpool: e-l ei tohi olla φ(n)-ga ühistegurit, ja φ liikus 3120-lt 3432-le. Võrdle siis ekraanil kaht astendajat — e = 7 ja d = 1783. Avalik on tilluke ja salajane mitte, ning kumbki pole juhus: e valitakse meelega väike, et krüpteerimine oleks odav, ja d on see, mis pöördväärtusest välja tuleb. Viimane rida on tõend, et kõik õnnestus: m′ = 42, arv, mille sa sisestasid.

Eeldab
Et sõnum on arv, mis on väiksem kui n. Kui n = 3233, pole üle 3232 midagi krüpteerida — just seepärast ei krüpteeri päris RSA kunagi sõnumit otse: ta krüpteerib paarisaja bitise täidetud sümmeetrilise võtme ja jätab teksti enda kiiremale šifrile. Samuti eeldatakse, et p ≠ q ja et sa ei kasuta üht algarvu teises moodulis uuesti: kaks ühise teguriga moodulit on mõlemad murtud ühe ainsa suurima ühisteguriga.
Ei kehti, kui
Sa saad selle lehe murda ilma midagi tegurdamata. Sea p = 67, q = 53 ja sõnumiks 3. Paneel valib e = 5 ja trükib krüptogrammiks 243 — mis on lihtsalt 3⁵. Kuna 3⁵ on väiksem kui n = 3551, ei toimunud modulaarset taandamist üldse: krüptogramm on tavaline aste ja 243 viies juur on 3. Ei mingit võtit, ei mingit tegurdamist, sõnum käes. Proovi m = 5 ja saad 3125, mis on 5⁵; m = 8 juures ületab aste lõpuks n-i ja krüptogrammiks saab kasutu 809. See pole selle lehe viga — see on põhjus, miks keegi ei krüpteeri paljast arvu. Päris RSA täidab sõnumi enne struktureeritud juhuslikkusega, mille määrab RFC 8017 ja mis teebki astendamisest krüptosüsteemi.

Privaatvõti tuletatakse, seda ei valita 🖖

Vaata, kuidas paneel d üles ehitab. Vaikimisi algarvudega näitab see φ(n) = 60 · 52 = 3120, taandub siis väärtusele e = 7 — tema eelistatud 65537 on siin φ-st endast suurem — ja arvutab lõpuks d ≡ 7⁻¹ mod 3120 = 1783. See viimane samm on üksainus modulaarne pöördväärtus, igal masinal hetkega tehtud. Iseenesest pole d juures midagi salajast: see tuleb otse φ(n)-ist ja φ(n) tuleb otse p-st ja q-st. RSA ei peida seega privaateksponenti, vaid tegurdust. Siin on n = 3233, mille sülearvuti lahutab enne, kui sa selle lause lõpetad; RSA-2048 moodul on 617 kümnendkohta pikk ja kõik sammud ekraanil on muus osas samad.

Tabalukk, mida avad ainult sina 🖖

RSA annab igaühele lahtise tabaluku (sinu avaliku võtme), mille saab sõnumi ümber kinni klõpsata, kuid ainult sinu privaatvõti avab selle taas. Kuna lukustamine ja avamine kasutavad eri võtmeid, võid avaliku võtme kogu maailmale nähtavaks teha, reetmata, kuidas dekrüpteerida. See tööriist laseb kogu tsükli läbi mängida pisikeste algarvudega; päris süsteemid kasutavad samu samme sadade numbrikohtadega arvudega.

Krüpteerimine tagurpidi on allkiri 🖖

Seesama RSA tehe, tehtud vastupidises suunas, tõestab, kes sõnumi saatis, selle asemel et seda peita. Kui "dekrüpteerid" sõnumi oma privaatvõtmega, saab igaüks selle su avaliku võtmega tagasi "krüpteerida", et veenduda, et see tõesti pärineb sinult - see ongi digitaalallkiri. Nii toidab üksainus arvutus nii konfidentsiaalsust kui ka autentimist, lihtsalt vahetades, milline võti esimesena käiku läheb.

Ülesanded täielikult lahendatud

  1. RSA võtmepaar, kus p = 61 ja q = 53 5 sammu

    Genereerige RSA võtmepaar algarvude p = 61 ja q = 53 jaoks ning krüptige m = 42. Iga allpool toodud arv tuleneb nendest kolmest, sealhulgas avalik astendaja.

    1. Moodul avaldatakse ja totient hävitatakse, kuid mõlemad on algarvudest vaid ühe korrutamise kaugusel. φ(n) loendab täisarve alla n, millel puudub sellega ühine tegur, mis kahe erineva algarvu korrutise puhul on (p − 1)(q − 1).

    2. Avalik astendaja peab olema pööratav mooduli φ järgi, mis tähendab sellega ühisteguriteta olemist. Lahutage φ teguriteks ja väikesed kandidaadid langevad välja, jättes arvu 7 väikseimaks saadaolevaks paarituks astendajaks. Tegelikud võtmed kasutavad arvu 65537, kuid see on suurem kui antud φ, seega naaseb tööriist väikseima ühisteguriteta arvu juurde.

    3. Arvu 7 pööramine mooduli 3120 järgi on laiendatud Eukleidese algoritm ja ei midagi enamat. Kolm jagamist jõuavad jäägini 1 ning samade kolme rea tagasiharutamine kirjutab selle 1 arvu 3120 ja 7 kombinatsioonina.

    4. Arvu 7 kordaja selles kombinatsioonis on negatiivne ja negatiivne pöördelement muudetakse positiivseks, liites mooduli ühe korra juurde. Krüptimine on seejärel üksainus mooduliga astendamine, mis tehakse kaks korda ruutuvõtmisega, mitte arvu 42 seitse korda iseendaga korrutamisega.

    5. Dekrüptimist ei pea kunagi kontrollima jõumeetodil (brute force) ning realistlike võtmesuuruste puhul ei oleks see võimalikgi. Mõlemad astendajad konstrueeriti nii, et nende korrutis on ühe võrra suurem kui φ kordne, ja Euleri teoreem viib selle lõpule iga n suhtes algarvulise m korral — mida 42 ongi.

    Vastus

    Tööriist kuvab n = 3233, φ = 3120, d = 1783 ja c = 240 ning kinnitab, et 240 dekrüptides annab tagasi 42. Meeles pidamist vääriv osa on see, mis φ tegelikult on. See ei ole teine saladus p ja q kõrval — see on sama saladus teistmoodi kirja panduna. Kui n ja φ on antud, on teil p + q = n − φ + 1 = 114 ja pq = 3233, ruutvõrrand, mille diskriminant on täisruut, ning see annab ühe reaga tagasi arvud 61 ja 53. Seega võtmegenereerija, mis lekitab φ, on lekitanud teguriteks lahutamise sama täielikult, nagu oleks see trükkinud välja algarvud, mistõttu φ arvutatakse üks kord, kasutatakse d leidmiseks ja visatakse seejärel minema.

  2. Arvu 3233 tegurdamine 61 × 53-ks RSA turvalisuse murdmiseks 6 sammu

    Paneel tegurdab 3233 kujule 61 × 53 enne, kui sa lehe lõpuni loed. Just see tegurdamine ongi kogu RSA turvalisus, näiliselt hetkega murtud. Arvuta välja, mis teeb sama ülesande ühe võtmesuuruse võrra edasi võimatuks.

    1. Kaks arvu, millest paneel alustab: moodul ja Euleri funktsioon, mis kahest algarvust tuleneb.

    2. Ründajal on vaja ainult üht fakti: väiksem algarv ei saa ületada mooduli ruutjuurt. Miski suurem vajaks partnerit, kes on temast endast väiksem.

    3. Otsing käib seega algarvude üle kuni 56-ni, ja neid on kuusteist. Kuueteistkümnes on 53. Kuusteist jagamist pole turvalisus, see on ümardusviga.

    4. Pane nüüd sisse moodul, mida keegi tegelikult kasutab. 2048 bitti tähendab n-i 2²⁰⁴⁸ lähedal, ja selle ruutjuur on 2¹⁰²⁴ ehk umbes 10³⁰⁸.

    5. Pane sellele hind. Miljardi proovijagamise juures sekundis on see 10²⁹⁹ sekundit — vastu universumit, mis on umbes 4 × 10¹⁷ sekundit vana.

    6. Aeg on sellise suurusega arvu jaoks vale ühik; võrdle seda pigem millegi füüsilisega.

    Vastus

    Kuusteist jagamist 10³⁰⁸ vastu. Kuna 10³⁰⁸ ületab nähtava universumi aatomite arvu 10²²⁸ korda, ei suudaks me isegi loendurit salvestada. Oluline on siinkohal kuju, mitte suurus: ründaja töömaht kasvab nagu √n, samas kui võti kasvab nagu log n. Iga kaks lisabitti võtmes kahekordistavad seega murdmise hinna, minnes kaitsjale maksma vaid kaks bitti. Selles ebasümmeetrias peitubki kogu lahenduse tuum. Tööriista välkkiire vastus ei ole näite puudus. See ongi kogu näite iva, sest 3233 on täpselt selline moodul, mille puhul ebasümmeetriale pole antud ruumi toimida.

Allikad (4)

Näiteülesanded