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 viib andmed sellisele kujule, et need on võõrastele loetamatud. 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. Seetõttu krüpteeritakse võti (edaspidi peavõti) 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
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 on Google, Mozilla ja Microsoft otsustanud lõpetada 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.
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
- 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