Transpordikihi turbeprotokoll

**Transpordikihi turbeprotokoll** (ingl *Transport Layer Security*, **TLS**; varem **turvasoklite kiht** (*Secure Sockets Layer*, **SSL**)) on krüptograafiline protokoll, mis turvab võrgusuhtlust näiteks internetis. TLS krüpteerib võrguühenduste segmente transpordikihis suhtluskanali otspunktides (*end-to-end*).

Protokollist on kasutusel mitmeid versioone näiteks veebibrauserites, meiliklientides, internetifaksimisel, kiirsuhtlusprogrammides ja IP-kõnede juures.

TLS on kirjeldatud IETF-i standardis RFC 5246, mis põhineb varasemal Netscape'i väljatöötatud SSL-i kirjeldusel.

## Põhjendus
TLS-i peetakse vajalikuks peamiselt ühenduste kaitsmiseks vahemeherünnakute eest, kus kahe poole vahel toimuvat suhtlust võib keegi jälgida, kinni pidada ja isegi muuta. Sellist olekut võib lubada pahatahtlik või kompromiteeritud kohtvõrgu (LAN) ühendus, sealhulgas Etherneti ning WLAN- ehk Wi-Fi-ühendus. Internetiturbes võib oht olla ka mujal, isegi turvatud veebilehes endas, mille tõttu ei saa ühendus kunagi olla lõplikult ja täielikult turvaline ja ilma halbade tagajärgedeta ning turvaprobleemid võivad ilmneda ka hiljem (nt andmebaasi salvestatud pangakaartide info juurdepääs kuritegelikel põhjustel).

TLS-il ja sarnastel protokollidel on kolm eesmärki:
# krüpteerimine, mis on põhiline kaitse vahemehe poolt andmete jälgimise eest;
# autentsus ehk ühe või mitme osapoole isiku tõendamine teistele osapooltele;
# andmete järjepidevus ehk vastuvõetud andmete täielikkuse tõendamine.

## Tööpõhimõtted

### Algoritmid
TLS vajab toimimiseks kolme algoritmi (need ei kattu ülaltoodud kolme eesmärgiga):
# Asümmeetrilist krüptimisalgoritmi, nt RSA;
# Sümmeetrilist krüptimisalgoritmi, nt plokipõhine AES;
# Räsifunktsiooni algoritmi, nt SHA-2.
Nendest algoritmidest on kõige vanem RSA. Teist tüüpi algoritme on olnud vaja tihti välja vahetada, näiteks AES avaldati aastal 1998 ning SHA-2 avaldati aastal 2001. SHA-2-le eelnes SHA-1, mis kuulutati 2010. aastal NIST poolt ebaturvaliseks pärast 2005. aastal avastatud turvaauku. Plokipõhise AES-i kõrval kasutati ka voopõhist RC4, mis kuulutati 2015. aastal ebaturvaliseks. Kuigi SHA-2-st pole veel selliseid turvaauke avaldatud, avaldas 2015. aastal NIST SHA-3 algoritmi, mis selgitati mitu aastat kestnud võistlusel. Turvaalgoritmide vigade otsimist kutsutakse krüptoanalüüsiks.

Krüptimisalgoritmide osaks on ka eri suuruses numbrid, mida kutsutakse "võtmeteks" ning need on suhtlusosapoolte jaoks isiklikud. Läbi aja on nende numbrite pikkus kasvanud – RSA laialtlevinumad võtmed olid algul 1024-bitised, siis 2048-bitised, kasutusel on ka 4096-bitised numbrid aladel nagu meilisõnumite allkirjastamine, kus kiirus pole põhiline.

### Ühenduse loomine
Lihtsustatud näide TLS-ühendusest, kus pole ära toodud autentimine ega andmete järjepidevus, on selline:
# Kasutaja loob ühenduse TLS-serveriga (näiteks HTTPS veebilehega – pangaga, netipoe, e-posti teenusepakkuja lehe või muu sellisega);
# Kasutaja brauser ehk "agent" teatab, millist TLS-protokolli versiooni ta toetab ning milliseid algoritme ta oskab kasutada (TLS-i versioon on tihedalt seotud algoritmide saadavusega);
# Server saadab üle RSA-ga krüpteeritud AES-võtme;
# Ülejäänud suhtlus toimub AES-iga krüpteeritud andmevoos, kuna RSA-ga tervete veebilehtede krüpteerimiseks kulub väga palju aega.

### Sertifikaadid
Ülaltoodud näide ei saaks lihtsal moel kunagi toimuda, kui serveri poolt saadetud TLS-sertifikaat ei ole usaldatud või usaldatud osapoole poolt allkirjastatud. Muidu võiks ülaltoodud näites kasutada näiteks Diffie-Hellmani algoritmi RSA asemel, mille abil võivad kasutaja ja server koos luua ühise AES-võtme ja tulemus oleks sama ning ka kiirem. RSA kasutamine võimaldab avalike võtmete taristu (*Public Key Infrastructure*) loomise ja see täidab internetiturbe 2. punkti ehk autentimist.

RSA algoritm toodab võtmepaari, mis koosneb avalikust võtmest, mida avalikkus peaks teadma, ning privaatvõtmest, mis on omanikule kättesaadav, kuid mida omanik peab hoidma saladuses. TLS-sertifikaat sisaldab omaniku avalikku võtit, informatsiooni omaniku ja sertifikaadi otstarbe kohta (nt sertifikaadi kasutusala ja seotud domeeninimi, mida teine osapool peaks kontrollima enne serdi omaniku usaldamist). TLS-sertifikaat on alati ka allkirjastatud – kas mõne sertimisasutuse (SA/CA) poolt või sertifikaadi enda võtmega (*self-signed certificate*).

Allkirjastamises võetakse terve sertifikaadi sisu, sh. kaasandmed ja avalik võti (sertifikaadiallkirjastamistaotlus – *certificate signing request* ehk CSR) ning see lastakse läbi räsifunktsiooni, mis toodab fikseeritud pikkuses numbri (nt 256- või 512-bitise), mis on iga kord sama sisuga faili puhul täpselt sama. See räsikood krüpteeritakse sertimisasutuse poolt kasutades SA privaatvõtit ning selle funktsiooni tulemusest saab allkiri. Täielik sertifikaat sisaldab nii poolikut sertifikaati kui ka allkirja ning ka SA oma sertifikaati.

## Sertifikaatidest lähemalt
TLS-sertifikaadid ei ole osa TLS-ist, vaid on eraldiseisev standard X.509, mis on kooskõlastatud Rahvusvahelises Telekommunikatsiooni Liidus. Seda võib vaadata kui TLS-i "passiivset" osa, kuna see omab otstarvet ka suhtluses, kus aktiivset krüptimist ei toimu ning toimub vaid allkirjade kontrollimine. X.509 abil on loodud teenuseid, mis TLS-i ei kasuta, näiteks Eesti ID-kaardiga failide allkirjastamine.

Levinud on ka arvutis programmide allkirjastamine CA-dega (koodiallkirjastamine, *code signing*), et näidata kõrgendatud (nt halduri) privileege taotlevate programmide turvalisust. Nutitelefonide platvormid, sealhulgas iOS, Google Android ja Windows Phone ei luba vaikimisi allkirjastamata rakenduste paigaldamist. Kõik nende rakendusepoodides saadaval olevate rakenduste paigalduspakid on allkirjastatud, kuid kõik peale iOS-i lubavad ka kelle tahes signeeritud rakendusi. Selline signeerimine iseenesest ei garanteeri, et programm või rakendus oleks turvaline.

X.509 standard määrab kõik sertifikaadiga seotu, sealhulgas sertifikaadifailide vormingu, ülesehituse, väljad, allkirjastamise ja kasutatud algoritmid peale sümmeetrilise krüptimise, mida kasutatakse vaid TLS-is reaalajas andmete krüptimiseks.

## Sertimisasutused
Sertifikaatide loojad ei tegele alati vaid brauserikrüptimisega, vaid nende teine peamine tegevusala on koodiallkirjastamine. Sertimisasutusteks on peamiselt kommertsfirmad, turuosa järjekorras suurimad seisuga märts 2016 on Symantec, GoDaddy, Comodo, GlobalSign ja DigiCert.

Veebiturvalisus toimib usaldusvõrgustiku põhimõttel, nagu ka igasugune turvalisus. SA-dele ei tee järelevalvet ükski keskendatud asutus, selle asemel tarnivad tarkvara loojad iseseisvalt nimekirja usaldatud juursertifikaatidega. Neid nimekirju on erinevaid, näiteks tarnitakse Microsoft Windowsi, Mac OSi ja teatud Linuxi komplekte selliste nimekirjadega ning neid nimekirju jälgivad näiteks brauserid Internet Explorer ja Google Chrome. Mozilla Firefox aga kasutab iseenda eraldi nimekirja. Nendesse nimekirjadesse saavad kasutajad tavaliselt ise usaldatud juurserte lisada. Juhul, kui brauser üritab minna lehele, mille serdiahel ei sisalda usaldatud serti, väljastatakse kasutajale vastav hoiatus ja tegevusjuhised.

Eestis on üks sertimisasutusi Sertifitseerimiskeskus (SK), mis on ka üks Eesti ID-kaardiga tegelevaid riiklikke partnerettevõtteid. ID-kaart lubab teha vastupidist autoriseerimist, kus kasutaja tõestab oma isikut veebilehele, näiteks pangale.

## Vaata ka
* Avatud süsteemide sidumise arhitektuur (OSI model)
* SSL sertifikaat Let's Encrypt

## Viited

## Välislingid
* how SSL works
* Tarvi Martens, 10, november 2009 SSL turvaauk – kuidas töötab
* Kuidas saidi allikakoodi kontrollida?