jskqjskajksjaks
Download
Report
Transcript jskqjskajksjaks
Andmeturve ja krüptoloogia, IX
Asümmeetrilised
krüptoalgoritmid. RSA
25. oktoober 2011
Valdo Praust
[email protected]
Loengukursus IT Kolledžis
2011. aasta sügissemestril
Krüptoalgoritmide peamised
liigid
1. Sümmeetrilised ehk salajase
võtmega krüptoalgoritmid (on
traditsioonilised e ajaloolised)
2. Asümmeetrilised ehk avaliku
võtmega krüptoalgoritmid
(levinud viimase 25 aasta jooksul)
3. Krüptograafilised sõnumilühendi
ehk krüptoräsi algoritmid
4. 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üptoalgoritmi
kasutamine šifreerimisel
Avaliku võtmega krüptoalgoritmi
kasutamine 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, 4096 jne 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ünomiaalsed ehk 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)
Eksponentfunktsioonid
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
RSA võtmete genereerimine
• valitakse kaks suurt algarvu p ja q (nt 512bitised)
• 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 šifreerimine/dešifreerimine
• Š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)
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
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
•
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
RSA turvalisus krüptoterminites
• 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: termineid
• e on avalik eksponent (public exponent)
• d on 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: algarvude leidmine
On olemas efektiivseid praktikas kasutatavaid
algarvude generaatoreid. Reeglina
genereeritakse juhuslikud arvud, mille algarvuks
olemist siis testitakse
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: algoritmi praktilisi detaile
• 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 tarkkui ka riistvaras väga kiirelt)
RSA eripärad praktikas
• Š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
•
•
•
•
•
•
•
•
•
Näide (väikeste arvudega)
p = 61, q = 53 (algarvud)
n = pq = 3233
(p-1)(q-1) = 60 x 52 = 3120
Valime e = 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
RSA turvaline kasutus
• 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 155kohaliseks algteguriks vaja jagada 310kohaline kordarv
RSA krüptoanalüüs, I
• 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 768bitine ehk 230-kohaline (AD 2009)
RSA krüptoanalüüs, II
• 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 kasutamise praktilisi
aspekte
• 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 koostöö sümmeetriliste
krüptoalgoritmidega
Pikkade andmekogumite krüpteerimiseks
RSA ei sobi (on liiga aeglane)
• 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
Teisai avaliku võtmega
krüptoalgoritme
•
•
•
•
•
ElGamal
DSS
Diffie-Hellmann
LUC
XTR
RSA on neist selgelt
mäekõrguselt populaarsem