570 likes | 735 Views
Andmeturve ja krüptoloogia, VIII Moodsaid sümmeetrilisi krüptoalgoritme. 25. oktoober 2001 Valdo Praust vpraust@delfi.ee Loengukursus IT Kolled ž is 2001. aasta sügissemestril. S ümmeetriline ehk s alajase võtmega krüpto algoritm.
E N D
Andmeturve ja krüptoloogia, VIIIMoodsaid sümmeetrilisi krüptoalgoritme 25. oktoober 2001 Valdo Praust vpraust@delfi.ee Loengukursus IT Kolledžis 2001. aasta sügissemestril
Sümmeetriline ehk salajase võtmega krüptoalgoritm Salajase võtmega krüptoalgoritm (secret key cryptoalgorithm) ehk sümmeetriline krüptoalgoritm (symmetric cryptoalgorithm), on selline, kus nii šifreerimisel kui ka dešifreerimisel kasutatakse sama (salajast) võtit • Et sümmeetriline krüptoalgoritm oleks praktikas turvaline, peab: • võti olema vähemalt 80 bitti pikk; vastasel korral on algoritmi võimalik murda ammendava otsinguga • ei tohi olla teada olulist efekti andvaid krüptoanalüütilisi võtteid
Kasutatavamaid algoritme, I • IDEA.128 bitine võti. Pärineb Šveitsist 1980te lõpust • Skipjack. 80 bitine võti. Pärineb 1990te algusest NSAlt, oli kaua aega (kuni 1998. aastani) salastatud • Blowfish. Varieeruva pikkusega võti, võib olla pikk 78 baiti, s.o 624 bitti. Pärineb Bruce Schreierilt 1990ndatest
Kasutatavamaid algoritme, II • AES (Rijndael). Võtme pikkus varieeruv, võib olla 128,198 või 256 bitti. On koostatud Belgias J. Daemeni ja V.Rjimeni poolt AESi konkursi jaoks 1990te lõpul, mille ta äsja võitis • MARS. Võtme pikkus varieeruv, võib olla 128 kuni 448 bitti, saab suurendada 32 biti kaupa. On koostatud IBMi poolt uue krüptoalgoritmi (AES) konkursile 1990te lõpul
Kasutatavamaid algoritme, III • RC6. Võtme pikkus varieeruv, võib olla 1 kuni 255 baiti ehk siis 2040 bitti. Autorid: R. Rivest, M. Robshaw, R. Sidney, Y.Lin. On koostatud AES konkursi jaoks 1990te lõpul • Serpent. Võtme pikkus varieeruv, võib olla 128, 198 või 255 bitti. Autorid: R. Anderson, E. Biham, L. Knudsen. On koostatud AES konkursi jaoks 1990te lõpul
Kasutatavamaid algoritme, IV • Twofish. Võtme pikkus varieeruv, võib olla 128,198 või 256 bitti. Autorid: B. Schneier J. Kelsey, D. Whitning, D. Wagner, C. Hall, N. Feguson. Koostatud 1998. aastal AESi konkursi jaoks.
IDEA: fakte • on plokkšiffer ploki pikkusega 64 bitti (8 baiti) • kasutab 128-bitist (16-baidist) võtit • on koostatud Šveitsis 1980te aastate lõpul • on patenteeritud Šveitsi firma Ascom poolt, mitteärilistel eesmärkidel võib vabalt kasutada
IDEA: tehniline üldkirjeldus • On projekteeritud selliselt, et oleks võimalik kiire realiseerimine tarkvaras (vastukaaluks nt DESile, kus pearõhk oli pandud riistvarale) • On huvitav selle poolest, et plokkšifritele traditsiooniliste S-bokside asemel pruugib ta pööramatuid räsifunktsioone • IDEA genereerib 128 bitilisest üldvõtmest 52 16-bitist alamvõtit • IDEA koosneb kaheksast raundist • 64 bitise avateksti jagab IDEA neljaks 16-bitiseks osaks • Iga raund kasutab 6 alamvõtit, peale raunde kasutatakse veel 4 võtit
IDEA: raundi kirjeldus • Raundi vältel tehakse hulga tehteid 16-bitiste plokkide ning alamvõtmetega • Raundis kasutatavad tehted on: • tavaline liitmine (mooduliga 216 ehk 65536) • XOR • korrutamine mooduliga 216+1 (65537) Nimetatud tehete kogusumma annab piisava mittelineaarse funktsiooni; üks põhjusi selleks on, et 65537 on algarv
IDEA: üldskeem
IDEA: võtmejaotusalgoritm • esimesed 8 alamvõtit saadakse üldvõtme tükeldamisest 8 osaks • seejärel tehakse üldvõtme bititinihe 25 biti ulatuses ja leitakse nii järgmised 8 alamvõtit • seda protseduuri korratakse 7 korda, kuni leitakse 52 alamvõtit (viimased kaks jäetakse kasutamata 7 x 8 = 56) Seega on alamvõtmed iga 8 tagant omavahel seotud
IDEA: krüptoanalüüs • ammendav otsing nõuab 2128 variandi läbivaatamist • olulist võitu andvaid krüptoanalüütilisi võtteid ei ole teada –seega on algoritm praktikas murdmatu • arvestades algoritmi vanust, on see tähelepanuväärne tulemus Järeldus: IDEA on praktiliseks kasutamiseks turvaline algoritm
IDEA: eelised ja puudused Eelised: • IDEAt on hea tarkvaras realiseerida, kuna ta sisaldab tuntuid bitioperatsioone • IDEA C-keelne lähtetekst on ca paar KB suur ja koosneb veidi rohkemast kui 100 reast • On kasutatav paljudes programmides (sh vabavarana levitatavas PGPs) Ainus puudus: oli patenteeritud, kuid patendi tähtaeg on saanud otsa
Skipjack: fakte • on plokkšiffer ploki pikkusega 64 bitti (8 baiti) • kasutab 80-bitist (10-baidist) võtit • on koostatud USAs NSA (National Security Agency) poolt 1990te algul • kasutatakse Clipperi kiibis • kirjeldus oli kuni 1999. aasta juunini salastatud
Skipjack: tehniline üldkirjeldus • on projekteeritud selliselt, et oleks võimalik kiire realiseerimine tarkvaras (ei sisalda erikujulisi bititehteid) • avatekst jagatakse neljaks 16-bitiseks neljandikuks • Skipjack koosneb 32 raundist • iga raund muudab vaid ühte neljandikku (16 bitti) teabest) • kasutatakse kahte tüüpi raunde, A ja B: kaheksale A raundile järgneb 8 B raundi kasutamine • 80bitine võti jagatakse kümneks kaheksabitiliseks alamvõtmeks lihtsa jagamise teel
Skipjack: raundide kirjeldus • B tüüpi raund erineb A tüüpi raundist väikeste tehniliste üksikasjade poolest XORimisel • Iga raund sisaldab põhimõtteliselt sama krüpteemisfunktsiooni G ehk nn Feisteli struktuuri, kus 16 bitise teksti teisendamiseks kasutatakse nelja alamvõtit ja permutatsiooni F • funktsioonile G eelneb raundi järjenumbri ja eelmise neljandiku XORimine
Skipjack: raundid 8-16 (tüüp B)
Skipjack: rakendatavus • ammendav otsing nõuab 280 variandi läbivaatamist, mis ei ole kaasaja arvutitele jõukohane • ei ole teada erilisi võitu andvaid krüptoanalüütilisi võtteid Järeldus: Skipjacki võib pidada turvaliseks algoritmiks ning ta on IDEAst veidi kiirem Skipjack’i kasutatakse Clipperi kiibis ning ka paljudes muudes paikades
Blowfish: fakte on plokkšiffer ploki pikkusega 64 bitti (8 baiti) kasutab varieeruva pikkusega võtit, max võtmepikkus on 448 bitti on koostatud Bruce Schreieri poolt 1993
Blowfish: tehniline üldkirjeldus • koosneb 16 raundist • kasutab 18 32-bitist alamvõtit, mis genereeritakse algvõtmest • kasutab nelja 32-bitist S-boksi, mida kasutatakse võtmejaotusalgoritmi juures • sarnaselt DESiga jagatakse 64-bitine plokk kaheks pooleks, millest iga raundi jooksul teisendatakse ühte poolt
Blowfish: raundi kirjeldus Divide x into two 32-bit halves: xL, xR For i = 1 to 16: xL = xL XOR Pi xR = F(xL) XOR xR Swap xL and xR Swap xL and xR (Undo the last swap.) xR = xR XOR P17 xL = xL XOR P18 Recombine xL and xR Function F: Divide xL into four eight-bit quarters: a, b, c, and d F(xL) = ((S1,a + S2,b mod 232) XOR S3,c) + S4,d mod 232
Blowfish: võtmejaotusalgoritm Algoritmi põhijooned: • väärtustatakse S massiiv, mis on võtmega samapikkune, transtsendentse arvu π (3,1415926...) tüvenumbritega 16nd-süsteemis • XORitakse võtmeväärtus S väärtustega • asendatakse pool arvust π saadud väärtustest XORimise lõppväärtustega ja korratakse XORimise protseduuri • 521 iteratsiooni tulemusena leitakse 18 16-bitist alamvõtit
AES ehk Rijndael: fakte • on plokkšiffer ploki pikkusega 128, 192 või 256 bitti • kasutab varieeruva pikkusega võtit, mis võib olla samuti 128, 192 või 256 bitti • autorid on Joan Daemen ja Vincent Rijmen Belgiast • võitis 2. oktoobril 2000 AESi konkursi
AES ehk Rijndael: tehniline üldkirjeldus 128 bitise võtme korral koosneb 9 raundist, 192 bitise võtme korral 11 raundist ja 256-bitise võtme korral 13 raundist Iga raund koosneb neljast erilaadsest tehtest: • asendusbait (byte sub) • ridade nihutus (shift row) • tulpade segamine (mix column) • raundivõtme lisamine (add round key)
AES eh Rjindael: asendusbaidi faas Teksti iga bait asendatakse vastavalt ühele suurele S-boksile:
AES ehk Rjindael: ridade nihutuse faas Teksti baidid vahetatakse omavahel ära, 128-bitise ploki puhul skeemiga: 192-bitise ploki puhul skeemiga:
AES ehk Rjindael: ridade nihutuse faas 256-bitise ploki puhul skeemiga:
AES ehk Rjindael: tulpade segamise faas Raundivõtme lisamise faas Iga 4 baidist koosnev tulp (vt eelnev) korrutatakse järgmise 4 x 4 maatriksiga modulo 28 = 256 Igale teksti bitile XORitakse vastava osavõtme bitt
AES ehk Rjindael: võtmejaotusalgoritm Võtmejaotusalgoritmi põhjal leitakse algsest võtmest N baidi pikkust raundi võtit ( N = raudi arv x ploki pikkus) Raundi võtmed saadakse algsest võtmest mitmete teisenduste teel, mis sisaldavad: • bitikaupa nihutamist • XORimist võtmeosade vahel • XORimist spetsiaalsete raundikondtantidega
AES ehk Rjindael: krüptoanalüüs • ammendav otsing nõuab 2128 kuni 2256 variandi läbivaatamist • olulist võitu andvaid krüptoanalüütilisi võtteid ei ole teada (seega on algoritm praktikas murdmatu) • algoritmi autorid ise on tõestanud seda suure osa teadaolevate krüptoanalüütiliste võtete korral Järeldus: Rijndael on väga heade omadustega algoritm (mistõttu ta valiti ka AESiks
MARS: fakte on plokkšiffer ploki pikkusega 128 bitti (16 baiti) kasutab kas 128-bitist, 192-bitist või 256-bitist võtit on koostanud IBM AESi konkursi jaoks
128 bitist plokki vaadeldakse nelja neljast baidist koosneva osana • Kõigepealt XORitakse võtmematerjaliga kogu plokk • Seejärel rakendatakse 8 DESi sarnast raundi, mis sisaldab S-bokse • Nende järel rakendatakse 16 Skipjacki sarnast raundi • Lõpuks rakendatakse jälle 8 algse raundiga sarnast raundi • Sellele järgneb XOR võtmematerjaliga • Algoritmil 40 32-bitist alamvõtit, mille genereerib võtmejaotusalgoritm (sarnane pajude teistega) MARS: tehniline üldkirjeldus
RC6: fakte on plokkšiffer, kus ploki pikkus on 128 bitti nii võtme pikkus kui ka raundide arv on reguleeritav autorid: Ron Rivest (põhiidee ja –teostus), M. Robshaw, R. Sidney, Y.Lin. an koostatud AES konkursi jaoks 1990te lõpul
RC6: tehniline üldkirjeldus • 128 bitist plokki vaadeldakse raundides nelja 32-bitise osana • Kasutab 44 32bitist alamvõtit, mis leitakse võtmsjaotusalgoritmiga • Igas raundis kasutatakse kahte alamvõtit • Raundis kasutatavad tehted: • artitmeetika modulo 232 • bitikaupa nihe (lg) • ringnihe paremale/vasakule nii nii mitu kohta, kui mingi arv näitab
RC6: krüptoanalüüs On leitud mõningaid krüptoanalüütilisi võtteid, kuid suurest võtmepikkusest tingituna ei tee need algoritmi ebaturvaliseks • Wenling, Dengguo, Sihan (Hiina) 2000: • 256 bitise võtme korral on algoritm murtav 2212 katsega • 192 bitise võtme korral on algoritm murtav2172 katsega
Serpent: fakte on plokkšiffer ploki pikkusega 128 bitti võtmepikkus on 256 bitti; on olemas algoritmid, mis laiendavad 128- ja 192-bitised võtmed 256-bitiseks autorid on Eli Biham (kaasaja ühe moodsaima krüptoanalüüsi, erinevuste krüptoanalüüsi, loojaid), R. Anderson ja L. Knudsen on koostatud AESi konkursi jaoks
Serpent: tehniline üldkirjeldus • koosneb 32 raundist • enne ja pärast raunde tehakse algpermutatsioon ja selle pöördpermutatsioon • raundi sees vaadeldakse 128 bitist plokki nelja 32-bitise veeranditena • võtmejaotusalgoritm leiab 128 32-bitilist alamvõtit olemasolevate 32bitiste osade XORimise teel • Igas raundis tehakse • XOR vastavate alamvõtmetega • teisendamine S-bokside abil • osade veerandite ringnihked • Teatud XORid osade veerandite vahel
Twofish: fakte on plokkšiffer ploki pikkusega 128 bitti (8 baiti) võtme pikkus varieeruv: 128,198 või 256 bitti. autorid: B. Schneier J. Kelsey, D. Whitning, D. Wagner, C. Hall, N. Feguson. on koostatud 1998. aastal AESi konkursi jaoks on Blowfishi edasiarendus