Andmete kaitsmine krüpteerimise abil
Mõningaid andmeid on vaja kaitsta, et need ei muutuks avalikuks. Niisuguste andmete hulka kuuluvad ärisaladused, meditsiiniline info, riigisaladused, privaatne info, jne.
Andmete kaitsmine peaks tagama selle, et kolmandad osapooled ei saa kaitstavaid andmeid kopeerida ega lugeda. Selle eesmärgi saavutamiseks saab kasutada erinevaid võtteid, näiteks saab dokumente ja lepinguid hoida seifis. Samamoodi saab kaitsta ka digitaalseid andmeid kui vastavat andmekandjat koos andmetega seifis hoida. Juhul kui tegu on piisavalt kaitstud seifiga, siis ei pea andmete lekkimise pärast muretsema, aga probleem tekib juhul kui digitaalseid andmeid on vaja lugeda või transportida. Tekib küsimus, et kuidas saab turvaliselt töödelda ja transportida digitaalseid andmeid.
Kindlat vastus eelnenud küsimusele ei ole võimalik leida, sest antud küsimus on liiga üldine. Andmete turvamiseks peab teadma vastavat konfidentsiaalsuse taset, teadma seda, kes on andmete omanik ja arvestama kindlat tüüpi vastasega. On suur vahe, kas andmeid on vaja kaitsta konkurentide eest või suurriikide eest. Viimasel juhul on tavainimesel andmetega töötamiseks turvalise keskkonna loomine peaaegu võimatu. Üks lahendus, mis võiks aidata niisuguse vastase vastu on õhkeraldusega arvutite kasutamine (need on arvutid, mis ei ole võrku ühendatud), aga see kaitse toimiks ainult õige kasutusviisi korral. Näiteks on võimalik pahavaralise usb pulga abil õhkeraldatud arvuti nakatada ning seejärel võib arvutikasutaja andmete transpordi käigus tahtmatult õhkeraldusega arvutis olevaid andmeid lekitada.
Eelmine näide on veidi ekstreemne ja tavainimesel ei lähe tavaliselt niisugust turvataset vaja ning seetõttu keskendume järgnevalt tavainimesele vajalike turvameetmete kirjeldamisele. Üheks niisuguseks meetmeks on krüpteerimine.
Sümmeetriline krüptograafia
Krüpteerimine (encryption) viib andmed sellisele kujule, et need on võõrastele loetamatud. Krüpteeritud andmeid nimetatakse krüptotekstiks või ka krüptogrammiks (cyphertext). Õige võtme abil saab krüptogrammist taastada algsed andmed (plaintext), seda protsessi nimetatakse lahti krüpteerimiseks või ka dekrüpteerimiseks (decryption).
võti võti | | v v andmed --[krüpteerimine]--> krüptogramm --[dekrüpteerimine]--> andmed
Andmete kaitsmiseks krüpteerimise abil on vaja sobivat krüptosüsteemi. Krüptosüsteem koosneb võtme genereerimise algoritmist, andmete kaitsmiseks mõeldud krüpteerimisalgoritmist ja andmete taastamiseks mõeldud dekrüpteerimisalgoritmist.
Krüpteerimiseks kasutatav võti on analoogne tavalise võtmega - võtit tuleb valvata, et sellest koopiat ei tehtaks ja võtit tuleb kaitsta kadumise eest, et võõrad võtit kasutada ei saaks. Lisaks sellele tuleb võtit enda jaoks säilitada, et tagada juurdepääs võtmega suletud esemetele. Oluline on märkida, et krüpteeritud andmetele on võimalik juurde pääseda ainult vastavat võtit kasutades. Kui andmeid krüpteeritakse ja dekrüpteeritakse sama võtmega, siis on tegemist sümmeetrilise krüptogaafiaga.
Tavaliselt on krüptograafias võtmeteks pikad juhuslikud bitijadad. On väga oluline, et võtmed oleksid juhuslikud, sest vastasel juhul ei pruugi krüptosüsteem olla piisavalt turvaline. Juhuslike bitijadade kasutamise nõue toob endaga kaasa kaks probleemi. Esimene probleem on seotud sellega, et juhuslikkuse genereerimine ei ole lihtne ja teine probleem on seotud sellega, et inimesed ei ole võimelised meelde jätma sadu ja tuhandeid bitte. Näiteks, püüdke meelde jätta see 128-bitine juhuslik võti:
83f38541d9fa2540c8663d9d82a5c97f
Seetõttu krüpteeritakse võti (edaspidi peavõti) enamasti omakorda lühema võtmega (edaspidi parool), mida on inimesel lihtsam meelde jätta, ning krüpteeritud peavõti talletatakse mingile meediumile (eraldi failina, krüpteeritud faili päisesse, ID-kaardi kiipi, TPM-i).
Krüpteeritud andmete turvalisus sõltub mitmest erinevast faktorist. Esiteks on oluline krüpteermisalgoritmi valik, sest on olemas palju nõrku ja vananenud krüpteerimisalgoritme. Teiseks peaks krüpteerimiseks kasutatav võti olema juhuslik ja kaitstud lekkimise eest. Kolmandaks peaks vastav tarkvara olema korrektselt kirjutatud, et see ei lekitaks krüpteeritavate andmete või krüpteerimisvõtme kohta infot.
Näited krüpteeringu kasutamisest
- mobiilside
- lukustatud telekanalid
- Skype's rääkimine
- WiFi ruuteri ja arvuti vaheline andmeside (juhul kui tegu pole avatud wifi võrguga)
- andmeside HTTPS protokolli kasutavate veebilehtedega (näiteks Facebooki sisselogimine)
- ID-kaardi abil failide krüpteerimine
- DRM kaitse DVD plaatidel
Krüpteerimisalgoritmid
Krüpteerimisalgoritmi võib nimetada ka šifriks. Idee illustreerimiseks kasutame lihtsat šifrit nimega ROT13. Selle šifri korral nihutatakse igat sõnumis olevat tähte 13 tähe võrra edasi (kasutades tähestikku). See muutub võimalikuks kui tähestiku otsad omavahel siduda, nii, et pärast Z tuleb uuesi A. Seda šifrit illustreerib kõrvalolev joonis.
Nüüd võib tekkida küsimus, et mis oli antud šifri korral võtmeks? Selle selgitamiseks vaatleme abstraktsemat šifrit ROTn, mis nihutab igat tähte täpselt n korda edasi. Sellisel juhul ongi arv n võtmeks. Võtame aluseks ladina tähestiku, mis annab meile 26 erinevat võimalust n valimiseks. Kui n on võrdne nulliga, siis sõnum ei muutu, aga matemaatiliselt on ikkagi tegemist sobiva võtmega. Kuna 26 võimalusest koosnev võtmeruum on väga väike, siis on võimalik niisuguse šifri korral võtit ära arvata kõikvõimalike n väärtuste proovimise teel. Seega ei taga antud šiffer tänapäeval piisavat turvataset. Kusjuures, šiffer ROTn on tuntud ka kui Caesari šiffer.
Sümmeetrilised krüpteerimisalgoritmid jagunevad kaheks: plokkšifrid (block cipher) ja jadašifrid (stream cipher). Jadašifrid krüpteerivad andmeid bitt- või baithaaval (vt. joonis) ja on seega plokkšifritest kiiremad. Seetõttu kasutatakse neid rohkem reaalajarakendustes, näiteks mobiilside krüpteerimiseks. Jadašifrid on näiteks RC4 ja mobiilsides kasutatav A5 perekond. RC4 on viimase viieteist aasta jooksul muutunud üsna populaarseks, aga tema levik hakkab vähenema, sest hiljuti on leitud algoritmis erinevaid nõrkusi, mis võivad viia krüpteeritud sõnumi lekkimiseni. Seetõttu lõpetasid Google, Mozilla ja Microsoft 2016 aastal RC4 toetamise enda brauserites.
Plokkšifrid krüpteerivad andmeid teatud pikkusega plokkide kaupa (vt. joonis) ja on võrreldes jadašifritega rünnetele paremini vastu pidanud. Plokkšifrid on näiteks Digital Encryption Standard (DES), 3DES, Blowfish ja Advanced Encryption Standard (AES). DES oli päris pikka aega kõige levinud plokkšiffer, kuid tänapäeval ei tohiks seda enam kasutada, sest DES abil krüpteeritud andmeid on võimalik kõikide võtmete läbiproovimise teel lahti murda. Seetõttu asendati DES plokkšifriga AES, mis on tänapäeval standardlahendus olukorras kus on vaja kasutada sümmeetrilist krüpteerimist. AES pool pakutavat krüpteeringut peetakse korrektsel kasutamisel murdmatuks.
Kas leidub perfektse salastusega krüpteerimisalgoritme?
Sellele küsimusele vastamiseks on vaja mõista informatsiooni-teoreetilise turvalisuse tähendust. Informatsiooni-teoreetiline turvalisus tähendab seda, et turvalisus tuleneb otseselt informatsiooniteooriast. Seetõttu ei ole võimalik informatsiooni-teoreetiliselt krüpteeritud andmeid murda isegi siis kui ründajal on juurdepääs piiramatule arvutusresursile. Seega, kui leiduks informatsiooni-teoreetiliselt turvaline krüpteerimisalgoritm, siis oleks võimatu ilma võtit kasutamata selle algoritmiga krüpteeritud andmeid murda. Niisugune krüpteerimisalgoritm leidub, aga see ei leia tänapäeval laialdast kasutust.
Ühekordne šifriplokk (one-time pad)
Ühekordne šifriplokk on informatsiooni-teoreetiliselt turvaline sümmeetriline krüptosüsteem. Selles krüptosüsteemis on krüpteeritavate andmete pikkus võrdne krüpteerimisvõtme pikkusega ja iga krüpteeritavate andmete bit seotakse vastava krüptovõtmes oleva bitiga kasutades moodularitmeetikat.
Kuna bitil saab olla ainult kaks väärtust, null ja üks, siis oleks loogiline kasutada moodulit kaks selleks, et siduda krüpteeritavate andmete bit krüpteerimisvõtmes oleva vastava bitiga. Nende bittide omavaheliseks sidumiseks kasutatakse modulaarset liitmist, mida saab mooduli kaks korral esitada XOR operatsiooni abil. Selleks, et krüpteerida andmete bit vastava võtmes oleva bitiga tuleks kasutada nende bittide vahel XOR operatsiooni. Kuna tegu on sümmeetrilise krüptosüsteemiga, siis toimub dekrüpteerimine analoogselt. XOR on sarnane OR operatsioonile, aga erineb selle poolest, et kui mõlemad tehte liikmed on ühed, siis on tulemuseks null. Järgmine nimekiri näitab kuidas XOR operatsioon töötab.
- 1 XOR 1 = 0
- 1 XOR 0 = 1
- 0 XOR 1 = 1
- 0 XOR 0 = 0
Ühekordse šifriploki praktilist kasutamist takistab mitu erinevat probleemi. Esimene probleem on seotud sellega, et krüpteerimisvõti peab olema krüpteeritavate andmetega sama pikkusega. See toob kaasa selle, et kui on vaja krüpteerida gibabaidi suurust faili, siis peab ka võti olema täpselt gigabaidi suurune. See omakorda tähendab seda, et võtme haldamine ja transport muutub keerukaks. Teiseks probleemiks on see, et vastavat krüpteerimisvõtit võib kasutada ainult üks kord ja pärast seda tuleb võti hävitada. Iga uue sõnumi jaoks on vaja genereerida uus võti. Kolmandaks probleemiks on see, et krüpteerimiseks kasutatav võti peab olema juhuslik, kuid täiesti juhuslike bittide genereerimine on keeruline. Juhul kui võti ei ole päris juhuslik, siis pole ühekordse šifriploki kasutamine enam informatsiooni-teoreetiliselt turvaline. Nende probleemide tõttu ei leiagi ühekordne šifriplokk tänapäeval laialdast kasutust.
Kas avatud lähtekoodiga krüpteerimistarkvara on vähem turvaline kui vastav suletud lähtekoodiga tarkvara?
Enamasti ei saa öelda, et lähtekoodi avalikustamine muudaks krüptosüsteemi nõrgemaks. Selline olukord võiks tekkida vaid juhul kui programm on vigaselt kirjutatud või kui kasutatud on mõnda ebastandardset krüpteerimisalgoritmi. Millest tuleneb see, et krüpteerimiseks kasutatavad algoritmid on avalikud? Oleks ju võimalik salastada algoritmid, et ründajal oleks vaja teha rohkem tööd.
Antud lahendus tuleneb Kerckhoff printsiibist, mis ütleb, et krüptosüsteem peaks olema disainitud nii, et see oleks turvaline ka siis kui kõik peale võtme on avalik. Selle printsiibi järgmine muudab krüptosüsteemi kasutamise lihtsamaks ja tagab turvalisuse, sest krüptograafid saavad avalikustatud algoritme rünnata ja alles jäävad vaid tugevad algoritmid. Antud printsiibi järgmise tõttu on peaaegu kõik (välja arvatud mõned sõjaväe poolt kasutust leidvad algoritmid) tänapäeval kasutatavad krüptograafilised algoritmid avalikud. Standardse krüpteerimisalgoritmi implementatsioon võikski soovituslikult olla avatud lähtekoodiga, et krüptograafidel oleks võimalik kontrollida selle korrektsust. Suletud lähtekoodiga tarkvara võib sisaldada programmeerija poolt tehtud vigu ja ka tahtlikult loodud tagauksi.
Viimaste aastate jooksul on uuesti esile kerkinud diskussioon selle üle, et kas riigid peaksid reguleerima tugeva krüptograafia kasutamist ning lisama riiklikke tagauksi. Sarnane diskussioon toimus üheksakümnendatel USA-s ning lõppes riigi allajäämisega. Sellel ajal peeti krüptograafiat sisaldavat tarkvara militaarkaubaks ning riik tahtis vältida tugeva krüptograafia levikut. Seetõttu taheti uutele mobiilseadmetele lisada kiip (Clipper chip), mis võimaldaks riikliku tagaukse kasutamist. Kuna tagaukse disain sisaldas turvaprobleeme ja projektile oli tugev vastuseis, siis jäeti projekt katki.
Seoses terrorismi ja tugeva krüptograafia levikuga on mitmed riigid ja agentuurid uuesti tõstatanud krüptograafia reguleerimise teema. Samas ei ole tänapäeval enam võimalik krüptograafia kasutamist piirata, sest see on keskseks osaks digitaalmajandusest. Samuti ei ole krüpteerimistarkvara keelustamine praktiline, sest kurjategijad saavad kasutada välismaiseid krüpteerimisrakendusi või keelatud krüpteerimisrakendusi. Niisugune keelustamine muudaks tavainimesel enda andmete kaitsmise keerukaks samas kui küberkurjategijad ja spetsialistid saaksid jätakta krüpteerimistarkvara kasutamist. Seda probleemi kirjeldab Bruce Schneieri artikkel A Worldwide Survey of Encryption Products.
Siiski on mitmed riigid huvitatud tagauste seadustamisest, mis võimaldaksid juurdepääsu digitaalsetele suhtluskanalitele. See omakorda tooks kaasa vajaduse uute krüptoprotokollide või algoritmide loomiseks ning need peaksid olema loodud nii, et ainult volitatud osapool saaks tagaust kasutada. Selle probleemi keerukusest pole kahjuks paljud poliitikud aru saanud. Näiteks kui USA loob tagauksega süsteemi, siis nad ilmselt ei ole huvitatud, et Hiina saaks seda tagaust kasutada. Samas kui avalikult luuakse tagauksega teenused, siis tahavad neid tagauksi kasutama hakata ka ebademokraatlikud riigid kus puudub sõnavabadus. Selleks, et nendele probleemidele tähelepanu juhtida koostasid tuntud krüptograafid 2015 aastal ühisraporti: Keys Under Doormats: Mandating insecurity by requiring government access to all data and communications
Samal teemal on koostatud mitmeid raporteid:
- The Risks of “Responsible Encryption” (Stanford, 2018)
- The Effect of Encryption on Lawful Access to Communications and Data (CSIS, 2017)
Krüpteerimine vs kodeerimine
Mõnikord võib lugeda, et krüpteerimine (encryption) aetakse segamini kodeerimisega (encoding), aga tegemist on täiesti erinevate kontseptsioonidega. Kui krüpteerimise eesmärgiks on peita sõnumit kõrvaliste osapoolte eest, siis kodeerimise eesmärgiks on transleerida sõnum teise formaati. Samuti ei ole kodeerimise korral kasutusel võtit ning kodeerimise algoritm (juhend) on avalik.
Igapäevaselt kasutame kümnendsüsteemi kus on kasutusel numbrid 0-9, aga lisaks sellele on arvutites laialt kasutusel kahendsüsteem, kaheksandsüsteem ja kuueteistkümnendsüsteem. Selleks, et arvutid toimida saaksid kodeeritakse kõik andmed arvutite jaoks binaarsüsteemi (binary) kus on kasutusel ainult nullid ja ühed (bitid). Kuna binaarsüsteemis tuleb arve esitada ainult kahe sümboli abil, siis on kümnendsüsteemi arvu esitlus kahendsüsteemis oluliselt pikem.
Tarkvaras on laialt levinud ka kaheksandsüsteem (octal, kasutab numbreid: 0-7); kuueteistkümnendsüsteem (hexadecimal ehk hex, kasutab sümboleid: 0-9, A-F) ja base64, mis kasutab 64 erinevat sümbolit (A-Z, a-z, 0-9, +, /). Hex ja base64 kasutatakse sageli pikkade binaarkujul olevate krüptovõtmete esitamiseks lühikesel ja inimloetaval kujul.
Samad andmed erinevates kodeeringutes:
binary: 001001001101011101101100000001000001100011011111 octal: 1115355401014337 decimal: 40507648776415 hex: 24d76c0418df base64: JNdsBBjf
Praktiline osa
Praktikumis räägime Windowsi failisüsteemi sisseehitatud krüpteerimisvõimalustest ning tarkvarast Bitlocker. Proovime kasutada tarkvara VeraCrypt ja Boxcryptor Classic ning vaatame nende erinevusi.
Kasulikud lingid
- Krüptograafia
- Juhuslikud numberid ja nende genereerimine
- Modular arithmetic
- How the modern world depends on encryption
- Do I Really Need To Encrypt Every File on My Computer?
- HTG Explains: Why a Windows Password Doesn’t Protect Your Data