Meilide signeerimine ja krüpteerimine PGP abil
Sissejuhatus
Praktikumi eesmärgiks on tutvustada meilide krüpteerimist ja signeerimist võimaldavat tarkvara. Praktikumiülesannete lahendamiseks tuleb teil kasutada enda meilikontot.
Kõigepealt kontrollige, kas teil on olemas aktiivne TÜ meilikonto. Selleks proovige oma meilikontole sisse logida: https://mailhost.ut.ee/mail/. Juhul kui te ei saa mailhost.ut.ee sisse logida, siis peate kasutama mõnda alternatiivset meilikontot.
Meilikonto valimisel tuleks arvesse võtta seda, et kontole saadetavad meilid ei tohi olla edasi suunatud. Samuti ei tohiks valitud meilikontol olla aktiveeritud kaheastmeline autentimine (v.a. Gmail - selle korral peaks Thunderbirdis 2FA toimima). Selgus, et @mail.ee ja @hot.ee kontod ei sobi, sest nad peavad krüpteeritud kirju spämmiks ja blokeerivad kirjade saatmise. Kokkuvõtteks peab olema võimalik thunderbirdi abil kirju alla laadida ning kirju saata - kui see toimib, siis tuleb veel loota, et teenusepakkuja ei blokeeri krüpteeritud sisuga kirju.
Praktikumiülesandeid saab teha nii enda arvutis kui ka virtuaalmasinas. Virtuaalmasina eeliseks on see, et sinna on juba vastav tarkvara paigaldatud, aga miinuseks see, et virtuaalmasin võib olla aeglasem.
Tavalise meilivahetusega seotud turvaprobleemid
E-kirjade edastamise protokollid ei ole algselt disainitud turvalisust ja privaatsust silmas pidades. Seega on vaikimisi e-kirjad turvamata, mis tähendab seda, et e-kirju edastatakse tavatekstina (neid ei krüpteerita). Mõningad SMTP serverid toetavad STARTTLS, mis võimaldab minna turvamata ühenduselt automaatselt üle krüpteeritud ühendusele, mis kasutab protokolli TLS. Siiski ei ole STARTTLS praegu laialt levinud ja seega kui meiliklienti ei sunnita kasutama turvaliseks meilivahetuseks mõeldud porti ehk TLS/SSL, siis edastatakse e-kirjad SMTP serverisse tavatekstina.
Meilide edastamiseks ühest serverist teise kasutatakse meilide edastamise agenti ehk MTA-d. Niisugune agent tegeleb nii kirjade vastuvõtmise kui edastamisega ehk kasutab mõlemat SMTP funktsionaalsust. Oluline on see, et erinevad meilide edastamise agendid ei pea omavahel suhtlema TLS/SSL abil vaid võivad kasutada turvamata ühendust. Võib tekkida olukord kus on vaja edastada e-kiri meiliserverile, mis ei toeta TLS/SSL. Seega kui meiliklient saadab turvatud kujul esimesele meiliedastamise serverile e-kirja, siis ei ole garantiid, et seda kirja ei saadeta edasi tavatekstina. Isegi kui e-kiri edastatakse terve teekonna vältel TLS/SSL abil, siis ei saa vältida seda olukorda, et e-kirja edastav server ei loe kirja sisu. Seega on vaja e-kirjade saatmisel usaldada meiliedastamise agente.
Oluline on see, et e-kirjade päises olevat infot ei krüpteerita. Seetõttu on e-kirja metaandmed nagu näiteks saatja meiliaadress, saaja meiliaadress, saatja ip, vastuvõtja ip, kuupäev, kell, pealkiri avalikud. Need andmed on avalikud ja neid on kasutusel olevate protokollide tõttu raske varjata.
Tavalise meilivahetusega seotud riskid:
- kirjavahetuse salvestamine
- kirja sisu muutmine
- kirja levitamine
- identiteedivargus
Väga hea ülevaate meilivahetusega seotud probleemidest annab Google, Michigani ülikooli ja Illinoi ülikooli poolt kirjutatud artikkel Neither Snow Nor Rain Nor MITM ... An Empirical Analysis of Email Delivery Security (2015).
Lahendused - PGP / SMIME / otspunktkrüpteerimist võimaldavad sõnumirakendused
Ideaalset lahendust eelnevalt kirjeldatud probleemidele ei ole praegu olemas. Parimad olemasolevad lahendused kasutavad avaliku võtme krüptograafial põhinevat otspunktkrüpteerimist (end-to-end encryption). Otspunktkrüpteerimise korral krüpteeritakse sõnum saatja arvutis ja dekrüpteeritakse alles vastuvõtja arvutis, mistõttu sõnumi edastajad ei saa sõnumit dekrüpteerida.
Pretty Good Privacy (PGP) on 1991. aastal loodud arvutiprogramm, mis võimaldab digitaalsete andmetega teha mitmeid krüptograafilisi operatsioone, näiteks dokumente ja e-kirju krüpteerida ning signeerida. PGP põhineb avaliku võtme krüptograafial, kus igal kasutajal on oma võtmepaar. PGP on kommertstoode ning pole seega vabalt kättesaadav. Küll aga on selle järgi loodud OpenPGP standard, mida järgiv tarkvara on omavahel ühilduv. Kõige tuntum vabavaraline OpenPGP standardile vastav programm on GNU Privacy Guard (GnuPG ehk GPG). E-kirjade otspunktkrüpteerimiseks saabki kasutada OpenPGP standardit järgivat tarkvara GPG. Seda tarkvara käsitlemegi antud praktikumi jooksul.
Alternatiiviks lahenduseks on loobuda e-kirjade kasutamisest ja kasutada tundliku info edastamiseks teisi otspunktkrüpteerimist võimaldavaid vahendeid. Üheks niisuguseks alternatiivseks võimaluseks on Off-the-Record Messaging (OTR), aga viimasel ajal on populaarsemaks muutunud sõnumivahetusprogramm Signal, mis peaks pakkuma kõrgemat turvataset kui OTR .
Juhend virutaalmasina ettevalmistamiseks
Paigaldage Mozilla Thunderbird ja enigmail laiendus, mis lubab emaile krüpteerida. Selle jaoks sisestage konsoolis root (või sudo abil) õigustes järgnev käsk:
# apt-get install thunderbird enigmail
Käivitage Thunderbird ning lisage enda olemasolev emaili konto. Kui palutakse Enigmail seadistada, siis valige, et te ei soovi seda praegu teha.
Juhul kui te ei soovi kasutada ülikooli aadressi, siis võite kasutada mõnda teist, aga praktikumijuhend on TÜ emailiserverite spetsiifiline.
Meilikonto lisamisel valige aknas Mail Account Setup nupp Manual Config ja seal muutke vastavad parameetrid:
Incoming: mailhost.ut.ee 993 SSL/TLS Outgoing: mailhost.ut.ee 465 SSL/TLS
Seadistamisel saab abi siit.
(Hiljem saab neid asju seadistada Edit
-> Account Settings
i alt osade Server Settings
ja Outgoing Server
alt.)
Pakutavaid sertifikaate tuleks aktsepteerida (tehke security exception). Thunderbird 'i pole vaja vaikimisi meilikliendiks teha.
Kui te saate oma meilikonto seadistatud, aga kirju ei näe, siis järelikult on teil @ut.ee kirjad edasi suunatud. Sel juhul võtke praktikumi ajaks suunamine maha või seadistage Thunderbird's enda teine meiliaadress. Viimasel juhul peab terves praktikumis seda aadressi kasutama.
Juhend enda arvuti ettevalmistamiseks (VM korral jätke vahele)
- Paigaldage enda arvutisse Mozilla Thunderbird
- Linux:
sudo apt-get install thunderbird
- Windows: https://www.mozilla.org/en-US/thunderbird/download
- Linux:
- Paigaldage GPG
- Linux:
sudo apt-get install gnupg
- Windows: http://www.gpg4win.org/
- Linux:
- Paigaldage Thunderbird-i laiendus Enigmail
Thunderbird
->Add ons
->Get Add-ons
->Enigmail
. Enigmail võib pakkuda automaatse seadistuse loomist, aga sellest tuleks keelduda ja valida manuaalne seadistamine.
- Seadistage Enigmail tundma ära GPG-d
Thunderbird -> Enigmail -> Preferences -> kontrollige kas gpg on leitud.
Käivitage Thunderbird ning lisage enda olemasolev emaili konto
. Meilikonto valimisel tuleks arvesse võtta seda, et kontole saadetavad meilid ei tohi olla edasi suunatud. Samuti ei tohiks valitud meilikontol olla aktiveeritud kaheastmeline autentimine (v.a. Gmail - selle korral peaks Thunderbirdis 2FA toimima). Selgus, et @mail.ee ja @hot.ee kontod ei sobi, sest nad peavad krüpteeritud kirju spämmiks ja blokeerivad kirjade saatmise.
Võtmepaari genereerimine
Genereerige endale PGP võtmepaar.
Enigmail -> Key management, Generate -> New Key Pair.
Valitud peaks olema see konto, mille te seadistasite praktikumi alguses. Valige parool, mis kaitseb teie salajast võtit. See parool tuleb kindlasti meelde jätta. Muudest seadetest valige, et teie võtme kehtivusaeg oleks 1 kuu. Virtuaalmasinat kasutavad tudengid peaksid võtme pikkuseks määrama 1024 bit, teised jätavad võtme pikkuse muutmata.
Võtme genereerimiseks läheb vaja juhuslikkust, aga arvuti ei oska hästi juhuslikkust genereerida. Tegelikult ei ole päris juhuslikke numbreid võimalik eeskirja alusel genereerida, sest päris juhuslike numbrite genereerimiseks tuleks kasutada füüsikalisi protsesse nagu näiteks radioaktiivne lagunemine. Rohkem infot juhuslike numbrite genereerimise ja pseudojuhuslike numbrite genereerimise kohta leiate veebilehelt https://www.random.org/randomness/.
Linux võimaldab vaadata süsteemi entroopiataset:
cat /proc/sys/kernel/random/entropy_avail
Võtme genereerimise käigus süsteemi entroopiatase väheneb (kontrollige eelneva käsu abil) ja süsteem vajab lisaallikat juhuslike bittide loomiseks. Juhuslikkuse genereerimist saab kiirendada näiteks sellega, et samal ajal konsoolis käivitada root õigustes järgnev käsk (see kasutab ketast, mis omakorda toodab juhuslikkust):
# find / -name '*k'
Pärast võtme genereerimist küsitakse, kas te tahate salvestada revocation sertfikaati. Revocation sertifikaati pole vaja võtmele genereerida juhul kui te plaanite antud võtit kasutada ainult selle praktikumi raames. Revocation sertifikaat võimaldab teil hiljem enda avalikku võtit tühistatuks kuulutada (võtmeserverisse laetud võtit ei saa kustutada, aga seda saab tühistatuks määrata). Kui te tahate päriselt hakata PGP-d kasutama, siis genereerige revocation sertifikaat (see on mõistlik ainult siis kui te teete praktikumiülesannet enda arvutis).
Enigmail Key management
dialoogis tuleb peale panna Display All Keys by Default
, et näha oleks kõik võtmed. Hetkel peaks seal olema ainult teie genereeritud võti. Uurige, missugust infot te näete enda võtme kohta.
Võtmeserver
Võtmeservereid kasutatakse avalike võtmete levitamiseks. Võtmeserverist on võimalik otsida teiste avalikke võtmeid nende nime / meiliaadressi / võti ID abil. Oluline on tähele panna, et võtmeserverisse laetud avalikku võtit ei saa sealt enam eemaldada. Juhul kui vastav salajane võti on kaduma läinud või kui vastavat meiliaadressi enam ei kasutata, siis tuleks kasutada revocation sertifikaati, et märkida vastav avalik võti tühistatuks. Kuna võtmeserverisse võtit laadides ei toimu autentimist, siis ei ole kindlust, kellele võtmeserveris olev võti kuulub. Seetõttu tuleks enne võtme allalaadimist kontrollida, et võtme ID vastab teie tuttava / kontaktisiku võtme ID-le.
- Määrake ära praktikumis testimiseks kasutatav võtmeserver:
Enigmail -> Preferences -> Display Expert Settings and Menus -> Keyserver
. Seal kustutage olemasolevad võtmeserverid ja kirjutage võtmeserveri väljale:infsec.cs.ut.ee
. Pärast seda vajutage OK. - Publitseerige oma vastgenereeritud võtmepaarist avalik võti võtmeserverisse, et see oleks kõigile kättesaadav. Selleks avage uuesti
Key management
ning seal tehke parem klõps enda võtme peal ning valigeUpload Public Keys to Keyserver
. Nüüd saavad rühmakaaslased seda võtit võtmeserverist alla laadida ning selle abil saata teile krüpteeritud kirju.
Krüpteeritud ja signeeritud kirjade saatmine
Järgmistes punktides on vaja teile määrata parem ja vasak naaber. On oluline, et kõigil tudengitel oleks kaks naabrit, kellele nad saaksid kirju saata. Praktikumijuhendaja täpsustab, kuidas te leiate enda vasaku ja parema naabri.
Saatke oma paremale naabrile signeeritud kiri. Selleks koostage uus kiri
ja vajutage pliiatsit kujutaval ikoonil (signing)
. Nüüd peaks paremal pool olema tekst This message will be signed . Tehke kindlaks, et kiri oleks ainult tekstina (mitte HTML): Options -> Delivery Format -> Plain Text Only
. Seda saab ka jäädavalt sisse lülitada: Edit -> Account Settings -> Composition & Addressing -> Compose messages in HTML format eest linnuke ära
.
Märkus. Esimene kord võib meili saatmine ebaõnnestuda, sest UT meiliserveri sertifikaat pole usaldatud. Usalda seda ja proovi uuesti saata.
Peate saama oma vasakult naabrilt signeeritud kirja, juhul kui ei saa, siis öelge naabrile, et ta saadaks teile kirja. Signeeritud kirja avamisel peaks Thunderbird teile kuvama teate Unverified signature
. Vajutage kirja päises olevale nupule "Import Public Key" ja tõmmake naabri avalik võti serverist alla. Nüüd ütleb Thunderbird sama kirja kohta UNTRUSTED Good signature
. Las praegu jääb nii, hiljem teeme võtmete vahele usaldusseosed.
Arvestus 1: Tehke ekraanitõmmis, kus on näha vasaku naabri poolt saadetud kiri. Ekraanitõmmisel peaks olema näha from väli (vasaku naabri nimi), teie meiliaadress ja teade UNTRUSTED Good signature
.
Saatke vasakule naabrile krüpteeritud vastus. Selleks valige kirja saatmise aknas tabaluku kujutisega ikoonile, mille järel peaks olema näha sõnum "This message will be encrypted". Kirja saatmisel avaneb aken, kus saate valida, kelle jaoks te selle kirja krüpteerite. Seal peaks teie adressaat juba valitud olema. Saatke kiri ära. Vajadusel tõmmake võtmeserverist puuduolev avalik võti.
Naabrilt tulnud krüpteeritud kirja valides küsitakse teie salajase võtme parooli. Enne kui selle sisestate, pange tähele, et kirja sisu on -----BEGIN PGP MESSAGE-----
ja sellele järgneb hunnik arusaamatut krüpteeritud teksti. Kui sisestate oma võtme parooli, siis dekrüpteeritakse see tekst.
Usaldusseoste loomine
PGP kasutab usalduse tekitamiseks nn. usaldusvõrku
(web of trust). Usaldusvõrgu puhul saab iga inimene ise valida keda ja kui palju ta usaldab ning selle kinnitamiseks allkirjastab vastava inimese avalikku võtit sisaldava sertifikaadi oma privaatvõtmega (nagu see toimub ka avaliku võtme infrastruktuuri korral). Selliselt väljendatud usaldusseosest tekib omamoodi sotsiaalne võrgustik, kus usaldus
on transitiivne seos, vt. joonist. Et sertifikaatidevahelisi usaldusseoseid saaks jälgida ning juurde tekitada, on kasutusel avalikud võtmeserverid, kuhu igaüks oma sertifikaadi koos usaldusseostega üles laadida saab.
Et sertifikaatidevahelisi usaldusseoseid saaks jälgida ning juurde tekitada, on kasutusel avalikud võtmeserverid, kuhu igaüks oma sertifikaadi koos usaldusseostega üles laadida saab.
Looge võtmete vahele usaldusseosed. Andke oma vasaku naabri võtmele oma signatuur, selleks valige tema saadetud kirja juures Details -> Sign Sender's Key
. Avanenud dialoogiaknas võib jätta vaikeväärtused. Naabri võtme signeerimine tahab loomulikult teie võtme parooli.
Publitseerige oma vasaku naabri võtmele antud signatuur. Selleks avage Enigmail Key Management, valige oma vasaku naabri võti, hiirega parem klõps ja valige Upload Public Keys to Keyserver
. Selleks, et võtme signatuure uuendada tuleb "Key Management" aknas märgistada vastav võti ning siis valida menüüst: "KeyServer -> Refresh Selected Public Keys".
Kui te nüüd vaatate oma vasaku naabri poolt enne saadetud kirja, siis nüüd ütleb Thunderbird
selle kohta Good signature
, sest te usaldate saatjat.
Arvestus 2: Tehke ekraanitõmmis, kus on näha teie vasaku naabri poolt saadetud signeeritud kiri. Ekraanitõmmisel peaks olema näha from väli, teie meiliaadress ja teade Good signature
.
Saatke oma vasakule naabrile üks signeeritud kiri. Pange sellega kaasa ka oma avalik võti: kirja saatmise dialoogis Enigmail menüü -> Attach My Public Key
.
Kui te saate oma paremalt naabrilt signeeritud kirja koos tema avaliku võtmega, siis kõigepealt ütleb Thunderbird , et signatuur pole usaldatav, kuna teil pole vastavat avalikku võtit. Tehke parem klõps kirjaga kaasas oleva avaliku võtme peal (.asc fail) ja valige Import OpenPGP Key
. Juhul kui ei ole võimalik valida Import OpenPGP Key
, siis valige Decrypt and Open
, pärast mida tuvastatakse, et tegu on avaliku võtmega ja pakutakse võimalust võtme importimiseks. Nüüd peaks Thunderbird kirja päises ütlema UNTRUSTED Good signature
.
Signeerige just saadud parema naabri avalik võti ja saatke signeeritud võti võtmeserverisse, et ka teised näeksid loodud usaldusseost.
Selleks, et kellelegi krüpteeritud kirja saata, peab teadma tema avalikku võtit. Oma paremalt teisele naabrile kirja saatmiseks tõmmake võtmeserverist tema avalik võti: Enigmail -> Key management -> Keyserver -> Search for Keys ja sisestage sinna oma paremalt teise naabri meiliaadress ja tõmmake tema avalik võti
.
Proovige saata krüpteeritud kirja oma paremalt teisele naabrile (võite saada hoiatuse, et võtme omaniku kohta pole midagi teada).
Märkige, et usaldate oma paremat naabrit teiste võtmeid signeerima: avage Enigmail Key Management, leidke oma parema naabri võti, parem klõps selle peal ning "Set Owner Trust"
. Usaldustasemeks valige vähemalt "marginally" või "fully".
Saatke paremalt teisele naabrile krüpteeritud kiri - nüüd peaks see sujuvalt õnnestuma. Kui ei õnnestu, parandage vead, kuni õnnestub.
Lugege oma vasakult teiselt naabrilt tulnud krüpteeritud kirja (laadige selleks vajadusel tema avalik võti võtmeserverist).
Tõmmake serverist enda võtmerõngasse enda võtme uued signatuurid, mida teised on serverisse saatnud, ja naabrite lisasignatuurid: Enigmail Key Management aknas Keyserver -> Refresh All Public Keys
.
Vaadake oma võtmele antud signatuure: parem klõps oma võtme peal ja "Key Properties" -> "Certifications"
. Veenduge, et Teie enda võtmele oleksid allkirja andnud peale Teie enda veel ka parem ja vasak naaber. Kui ei ole, "torkige neid", kuni nad oma allkirjad võtmeserverisse saadavad, ja tehke võtmetele serverist refreshi, kuni korras on.
Arvestus 3: Tehke ekraanitõmmis, kus on näha, et teie võtmele on allkirja andnud kaks tudengit.
Tagasiside
Praktikumi lõpus palume anda tagasisidet, sest see võimaldab meil antud praktikumi ja ka järgmisi praktikume paremaks muuta. Tagasiside on anonüümne ja tagasiside vormi leiate järgneva lingi abil: tagasiside ankeet.
Praktikumi ülesanded
Praktikumi ülesannete lahendamine annab kaks punkti. Praktikumi ülesanne võiks valmis saada praktikumi lõpuks, aga juhul kui see ei õnnestu, siis on võimalik lahendust esitada nädala jooksul pärast praktikumi toimumist.
- Esitage praktikumi jooksul tehtud kolm ekraanitõmmist. NB! Kontrollige et teie avalikku võtit oleks usaldanud vähemalt 2 kaastudengit. (0.5p)
- Tõmmake võtmeserverist
oma praktikumijuhendaja avalik võti
("UT Alo Peets alop@ut.ee" Key ID ED2F37C1, Kristjan Krips 5BFC8B9D, Toomas Krips AF8BCF4D, Andres Namm andres.namm@reach-u.com 1E8FF622) ja saatke talle kiri, mis on korraga niisigneeritud
kui kakrüpteeritud
.Pange kindlasti kirjaga kaasa ka oma avalik võti.
Kirja pealkirjaks peaks olema:Andmeturve - PGP praktikum
. Ära unusta kirjale sisu lisamast, sest vastasel juhul ei saa kontrollida, kas kiri on ikka krüpteeritud ja signeeritud.Kirja sisusse peaksite kirjutama vähemalt enda nime
. (1.0p) - Vastake küsimustele: a) Selgitage lühidalt oma sõnadega ja eesti keeles, mis asi on "Perfect Forward Secrecy" (PFS). b) Miks on vaja, et tänapäevased kommunikatsioonivahendid kasutaksid PFS-i? (lühidalt, aga konkreetselt) c) Nimetage kaks protokolli või rakendust, mis kasutavad PFS-i. (0.5)p
Lahendusi võtame vastu järgmistes failiformaatides: .zip, .pdf.
6. 6. PGP - praktikumi ülesanneKodune ülesanne
Koduse ülesande lahendamine annab ühe punkti. Lahenduse esitamiseks on aega üks nädal. Küsimustele vastuste leidmiseks võib vaja minna lisamaterjalide, mille leiate antud praktikumi lehelt. Koduse ülesande lahendus tuleb esitada aine kodulehelt (juhul kui ülesandes pole nõutud teisiti). Lahendusi võtame vastu järgmistes failiformaatides: .txt, .pdf.
- Sõnumivahetusrakenduse "Signal" kasutamine. Signal on avatud lähtekoodiga, krüptograafide poolt arendatud rakendus, mis pakub otspunktkrüpteeritud ühendusi. See toimib Android (alates 4.0) ja iOS (alates 9.0) seadmetel. Juhul kui rakendus on telefonis aktiveeritud, siis saab kasutada ka desktopi klienti (toetatud on Windows, MacOS, Debian baasil Linux distributsioonid). Teie ülesandeks on:
- paigaldada Signal
- lisa kontaktide hulka andmeturbe praktikumi jaoks kasutatav number: viis kaheksa kuus seitse yks neli viis yheksa (signali kontaktid võetakse telefoniraamatust juhul kui mõni telefoniraamatus olev kontakt kasutab signalit)
- avada selle kontaktiga suhtluskanal, ning kirjutada sinna enda eesnimi ja perenimi
- kirjuta numbrile
viis kaheksa kuus seitse yks neli viis yheksa
sõnum, mis automaatselt kustub30 sekundi pärast
kui adressaat on sõnumit näinud. (0.7p) - Vasta küsimusele: Too välja vähemalt kolm (3) selget erinevust
turvalisuse
seisuskohastSignal sõnumite
jaklassikaliste SMS
-ide vahel. (0.3p)
Tulemus peaks sarnanema parempoolsel pildil kujutatule. Kindlasti kirjutage enda täisnimi ning kasutage teise sõnumi korral automaatse kustumise funktsionaalsust.
PS! Eeldame kõik IT tudengid omavad kaasaegseid IT seadmeid ja on võimelised Signal
ülesannet lahendama. Kui te ei taha kasutada isiklikku telefoni numbrit siis soovitame osta kõnekaardi numbri käesoleva ülesande lahendamiseks. Kui siiski teil tekib probleeme Signali kasutamisel isiklikus nutiseadmes või nutiseade üldse puudub võtke ühendust oma praktikumi juhendajaga, kes pakub teile alternatiivse ülesande.
Lisamaterjalid
- Neither Snow Nor Rain Nor MITM ... An Empirical Analysis of Email Delivery Security (2015).
- Andrese lisamaterjalid (2018).
- Perfect Forward Secrecy