350 likes | 666 Views
Andmeturve ja krüptoloogia, IX Asümmeetrilised krüptoalgoritmid. RSA. 25. oktoober 2011 Valdo Praust mois @ mois .ee Loengukursus IT Kolled ž is 2011. aasta sügissemestril. Krüptoalgoritmide peamised liigid.
E N D
Andmeturve ja krüptoloogia, IXAsümmeetrilised krüptoalgoritmid. RSA 25. oktoober 2011 Valdo Praust mois@mois.ee Loengukursus IT Kolledžis 2011. aasta sügissemestril
Krüptoalgoritmide peamised liigid Sümmeetrilised ehk salajase võtmega krüptoalgoritmid (on traditsioonilised e ajaloolised) Asümmeetrilised ehk avaliku võtmega krüptoalgoritmid (levinud viimase 25 aasta jooksul) Krüptograafilised sõnumilühendiehk krüptoräsi algoritmid Eriotstarbega algoritmid tõestusteks, autentimisteks, ajatempli jaoks jm
Avaliku võtmega krüptoalgoritm Avaliku võtmega krüptoalgoritm (public key cryptoalgorithm) ehk asümmeetriline krüptoalgoritm (asymmetric cryptoalgorithm) kasutab kahte võtit– esimese võtmega šifreeritud teave on dešifreeritav vaid teise võtmega ja vastupidi Üldreegel: ühest võtmest teist ei ole võimalik praktikas leida Teoreetiliselt on see võimalik (üksühene seos), aga see võtab aega miljoneid ja enam aastaid
Avaliku võtmega krüptoalgoritm: võtmed Avaliku võtmega krüptoalgoritmi võtmeid nimetatakse reeglina avalikuks võtmeks ja privaatvõtmeks (public and private key) • Avalik võti on tavaliselt piiranguteta kõigile soovijaile teada • Privaatvõti on reeglina aga subjekti (inimese, tehnilise seadme, programmi vms) ainuvalduses
Avaliku võtmega krüptoalgoritmikasutamine signeerimisel (digitaalallkirja andmisel)
Avaliku võtmega krüptoalgoritmi(RSA) kasutamine • Avaliku võtmega krüptoalgoritme saab kasutada salajaste võtmete turvalisel edastamisel üle liinide ilma füüsilise kokkusaamiseta. Ainus tingimus on siin avaliku võtme avalikkus • Avaliku võtmega krüptoalgoritme saab lisaks andmete konfidentsiaalsuse tagamisele kasutada ka nende tervikluse tagamisel. See ongi nende peamine kasutusvaldkond • Avaliku võtmega krüptoalgoritmidel põhineb digitaalallkirja (digitaalsignatuuri) idee
Tekke- ja kasutuslugu • Avaliku võtmega krüptoalgoritmid ilmusid krüptograafiasse 1970tel aastatel, varem neid ei teatud/tuntud • Peamised nimed, kes loomisega seotud: Diffie, Hellmann, Shamir, Adleman, Rivest • Kasutama hakati peamiselt 1980tel • On kaasajal pea ainus tervikluse tagamise alus digiteabe korral, sh digiallkirja teoreetiline alus
Avaliku võtmega krüptoalgoritm: RSA Tuntuim avaliku võtmega krüptoalgoritm on RSA Seda loetakse hädapäraselt turvaliseks alates 1024 biti pikkusest võtmest, pikaajalist turvet nõudvates valdkondades aga alates 2048 biti pikkusest võtmest RSA korral on võtmete seotuse tingimused veidi pehmemad: privaatvõtmest avalikku võtit saab leida, kuid avalikust võtmest privaatvõtit mitte Nad on omavahel matemaatiliselt seotud, kuid see seos on nn ühesuunaline ehk praktikas arvutatav ainult ühtpidi
RSA eripärad • Töötasid välja Rivest, Shamir ja Adleman 1978. aastal • Turvalisus põhineb matemaatilisel faktil, et suure kordarvu teguriteks lahutamine (kui ka tegurid on suured) on praktiliselt võimatu ülesanne • Tagab praktilise turvalisuse, ei taga teoreetilist (nagu kõik avaliku võtmag krüptoalgoritmid) • Murdmiseks läheb aega miljoneid aastaid (sõltub võtmepikkusest) • On maailmas väga levinud
RSA võtmetest RSA toetab suvalise pikkusega võtit Levinumad on 2 astmed ja 1,5ga korrutatud 2 astmed ((512, 768), 1024, 2048, 3072, 4096jne bitti) • Erinevalt sümmeetrilistest krüptoalgoritmidest ei sobi iga suvaline bitijada võtmeks, vaid need võtmed tuleb teatud matemaatilise algoritmiga genereerida • Säärase ”infoliiasuse” tõttu võtmetes on võtmed ka sümmetriliste krüptoalgoritmi võtmetest pikemad (turvalised alates 1024/2048 bitist)
RSA matemaatilised alused, I Algoritm on polünomiaalne (polünomiaalse keerukusega), kui pikkusega N ülesande lahendusaeg on võrdeline suurusega Nk mingi fikseeritud k korral Polünomiaalset algoritmi peetakse praktiliseks lahendamiseks heaks algoritmiks: N kasvades ei kasva lahendusaeg eriti kiiresti väga suurte arvudeni Palju halvemate omadustega on eksponentsiaalse keerukusega algoritmid: pikkusega N ülesande lahendusaeg on võrdeline suurusega 2N Eksponentsiaalse keerukusega algoritmid on praktikas mittelahenduvad
RSA matemaatilised alused, II Paljud praktikas kasutatavad algoritmid on polünomiaalsedehk head: st nende kohta on teada vastavate omadustega lahendusalgoritm Paljude algoritmide kohta sellist algoritmi aga teada ei ole (need on praktikas lahendumatud) Näide 1: suuri algtegureid omavate kordarvude teguriteks lahutamine (Arvu pikkus on log N, vaja läbi vaadata N1/2 varianti) Näide 2: diskreetse logaritmi leidmine: a = gn (mod p), leida a, n ja p (algarv) põhjal g Nendel tõsiasjadel baseerub RSA turvalisus
Mis on ”hea” algoritm ja ülesanne? Edmondsi postulaat (1965): algoritmi nimetatakse heaks, kui ta ajaline keerukus kujutab endast polünoomi O(nk) sisendandmete pikkusest, kus k on naturaalarv Sellised algoritmid: polünomiaalse keerukusega algoritmid (polynomial complexity algorithms) Selliseid algoritmi omavad ülesanded: polünomiaalse keerukusega ülesanded (polynomial complexity problems)
Miks ”headuse” piiriks just polünoom? • Kinnine korrutamise ja summa suhtes: kahe polünoomi summa ja korrutis on taas polünoom: • O(nk) + O(nl) = O(nmax{k,l}) • O(nk) x O(nl) = O(nk+l) • Kõik digitaalarvutid on üksteisega keerukuse osas polünomiaalselt seotud • Mitte-polünoomid (faktoriaal, eksponent) kasvavad võrratult kiiremini kui polünoomid
Polünoom- ja eksponentfunktsiooni kasv • Polünoomfunktsiooni argumenti mingi arvu võrra suurendades suureneb väärtus ka teatud arvu võrra • Polünoomfunktsiooni argumenti mingi arv korda suurendades suureneb väärtus ka teatud arv korda • Eksponentfunktsiooni argumenti mingi arvu võrra suurendades suureneb väärtus teatud arv korda • Eksponentfunktsiooni argumenti mingi arv korda suurendades suureneb funktsioon drastiliselt (ettekujuteldamatult)
Eksponent-funktsioonid kasvavad mingist argumendi suurusest alates meeletutesse kõrgustesse Praktilistel algoritmidel jõuab see kätte tihti juba üsna väikese pikkuse korral: ülesanne on sel juhul praktikas lahendamatu
valitakse kaks suurt algarvu p ja q (nt 512-bitised) arvutatakse kahe suure algarvu korrutis n = p • q valitakse arv e nii, et tal ei oleks ühistegureid arvuga (p-1)(q-1) leitakse arv d nii, et d • e = 1 mod (p-1)(q-1) avalik võti on (n, e) privaatvõti on (p, q, d) RSA võtmete genereerimine
Šifreerida saab tekste (arve) mis on väiksemad kui pq bitti (512 bitiste p ja q korral 1024 bitti, ca 300 kümnendkohta) Šifreerimisel leitakse Y = Cip(X) = Xd (mod n) Dešifreerimisel leitakse X = Decip(Y) = Ye (mod n) Avatekst saadakse seepärast, et (Xd)e = X (mod n) põhjusel et d • e = 1 mod (p-1)(q-1) RSA šifreerimine/dešifreerimine
Miks on RSA praktikas turvaline? Väide 1: kes teab avalikku võtit (n, e) ja avateksti X, kuid ei tea d, p ega q, ei suuda sooritada teisendust Y = Cip(X) = Xd (mod n) ilma p ja q või d teadmata, st ei suuda šifreerida • Selleks ta peab teadma d, mis sõltub definitsiooni põhjal aga suurustest p ja q • p ja q ei saa ta teada: teguriteks lahutamiseks ei ole teada polünomiaalset algoritmi
Kuna X = Yd (mod n), siis on tarvis leida d d leidmine e põhjal eeldab aga, et on teada p ja q või osatakse arvutada diskreetset logaritmi Miks on RSA praktikas turvaline? Väide 2: kes teab avalikku võtit (n, e) ja krüptogrammi Y = Cip(X) = Xe (mod n) kuid ei tea d, p , q ega X, ei suuda leida avateksti X
Turvalisus on praktiline, matemaatika mõttes on kõik võimatuks peetav leitav (vaja on teha eksponentsiaalne arv tehteid) Privaatvõtmest saab avaliku võtme alati leida Avalikust võtmest privaatvõtit leida on võimatu Privaatvõtit omamata ei ole võimalik šifreerida nii, et avaliku võtmega dešifreerides asi lahti tuleks Kui teave on avaliku võtmega šifreeritud, ei ole võimalik seda avaliku võtmega enam lahti teha RSA turvalisus krüptoterminites
e on avalik eksponent(public exponent) don salajane eksponent(secret exponent) funktsiooni, mille väärtus on kergelt arvutatav, kuid selle pöördfunktsiooni ei ole praktikas arvutatav, nimetatakse ühesuunaliseks funktsiooniks (one-way function) Nt: kahe algarvu korrutamine vs teguriteks lahutamine; diskreetne eksponent vs diskreetne logaritm sellist ühesuunalist funktsiooni, mis on pööratav mingi täiendava teabekogumi põhjal nimetatakse salauksega ühesuunaliseks funktsiooniks (trapdoor one-way function). RSA ongi selline RSA: termineid
Mitmed neist põhinevad nt Euler-Fermat’ teoreemil: Kui a ja n on ühistegurita, siis aΦ(n) = 1 (mod n) Φ(n) on nende n väiksemate arvude arv, millega tal puudub ühistegur, kui n on algarv, siis Φ(n) = n-1 Selle põhjal saab koostada testiseeria RSA: algarvude leidmine On olemas efektiivseid praktikas kasutatavaid algarvude generaatoreid. Reeglina genereeritakse juhuslikud arvud, mille algarvuks olemist siis testitakse
Ka e leidmiseks on testid olemas, mis tagavad, et tal ei oleks tegureid arvuga (p-1)(q-1) Suurimat ühistegurit saab kontrollida Eukleidese algoritmiga Kõik peale algarvude genereerimise ja e leidmise on pikkade modulaararitmeetika realiseerimise küsimus (on realiseeritav nii tark- kui ka riistvaras väga kiirelt) RSA: algoritmi praktilisi detaile
Šifreerimine ja dešifreerimine, kus kasutatakse modulaararitmeetikat, on küllalt kiired Siiski on RSA sümmeetrilistest krüptoalgoritmidest (AES, IDEA, Blowfish jt) ca 2-3 suurusjärku (sadu kuni tuhandeid kordi) aeglasem Võtmepaari genereerimine (sisaldab algarvude genereerimist) on šifreerimisest omakorda mitu suurusjärku aeglasem: kaasaja personaalarvuti leiab võtme siiski sekunditega või murdosadega RSA eripärad praktikas
p = 61, q = 53(algarvud) n = pq = 3233 (p-1)(q-1) = 60 x 52 = 3120 Valimee = 17, arvuga 3120 ei ole tal ühistegureid Leiame d = e-1 (mod (p-1)(q-1)) = 17–1 (mod 3120) = 2753 Avalik võti on(3233, 17) Privaatvõti on(61, 53, 2753) Šifreerimine, avatekst X = 123 Y = Xe (mod n) = 12317 (mod 3233) = 855 Dešifreerimine: X=Yd (mod n) = 8552753 (mod 3233) = 123 Näide (väikeste arvudega)
Võtmepikkus võib olla suvaline, see määrab ära p ja q suuruse. Kaasajal peetakse RSAd turvaliseks alates 1024 bitisest võtmest (pq väärtusest). Kasutatavaimad väärtused on (512, 768,) 1024, 1536, 2048, 3072 ja 4096 bitti (kahte esimest ei soovita kasutada) 1024 bitine võti: on vaja kaheks 155-kohaliseks algteguriks vaja jagada 310-kohaline kordarv RSA turvaline kasutus
70-kohalise arvu algteguriteks lahutamine nõuab kaasajal keskmiselt tööjaamalt ca 10 minutit 100-kohaline – samalt arvutilt ca umbes nädal 140-kohaline arv lahutati 1996 teguriteks 5 aastaga, ühendades maailma paljude serverite jõupingutused Praegu on suurim teguriteks lahutatud arv 768-bitine ehk 230-kohaline (AD 2009) RSA krüptoanalüüs, I
300-kohaline arv (1024-bitine RSA) nõuab kogu praeguselt arvutivõimsuselt tööd kauemaks kui on Päikese eluiga (kümned miljardid aastad) On kaheldud, et 1024-bitine RSA võib 5-10 aasta pärast olla praktikas murtav, kuid sama 2048/4096-bitise RSA kohta enam ei arvata Kuni 256-bitise RSA murrab kaasaja tavaline personaalarvuti ca tunniga Piisavalt võimas kvantarvuti murraks ka RSA kiiresti lahti, kui arvatakse, et lähema 10 aasta jooksul need 1024-bitist RSAd ei ohusta RSA krüptoanalüüs, II
Pikka aega oli RSA USAs patenditud. RSAle anti 20. sept 1983 välja patent #4,405,829. Patent kaotas kehtivuse 20. sept 2000 Algoritmi kirjeldus on avalik, samuti mitmed tarkvararealisatsioonid Riistvaraversioonid on mõnikümmend kuni sada korda kiiremad RSA kasutamise praktilisi aspekte
Need krüpteeritakse sümmeetrilise krüptoalgoritmiga, mille võti (sessiooni võti) spetsiaalselt genereeritakse ja vaid see võti vahetatakse avaliku võtmega krüptoalgoritmiga RSAga krüpteeritakse reeglina seega lühike sessiooni võti (jm lühikesi infokogumeid), ei enamat RSA koostöö sümmeetriliste krüptoalgoritmidega Pikkade andmekogumite krüpteerimiseks RSA ei sobi (on liiga aeglane)
ElGamal DSS Diffie-Hellmann LUC XTR Teisai avaliku võtmega krüptoalgoritme RSA on neist selgelt mäekõrguselt populaarsem