Turvakest

**Turvakest** (inglise keeles *Secure Shell*, lühendatult **SSH**) on krüptograafiline võrguprotokoll turvaliseks võrguteenuste opereerimiseks turvamata võrgu kaudu. Põhiliselt kasutavad seda arvutikasutajad arvutisüsteemidesse kaugsisselogimiseks.

SSH võimaldab klient-server arhitektuuri puhul luua turvamata võrgus turvalise andmeedastuskanali, ühendades SSH klientrakenduse SSH-serveriga. Üldrakendused sisaldavad käsureale kaugsisselogimist ja käskude kaugkäivitamist, samuti on võimalik SSH abil turvata paljusid võrguteenuseid. Protokolli kirjeldus eristab kahte peamist versiooni, mis on tuntud kui SSH-1 ja SSH-2.

Protokolli kasutatakse kõige rohkem UNIXi-laadsetes süsteemides kestakontodesse sisselogimiseks, samuti leiab see piiratud kasutust Windowsi süsteemides. Aastal 2015 teatas Microsoft võimalikust sisseehitatud SSH toest Windowsi tulevastes versioonides.

SSH disainiti asendama Telneti ja teisi turvamata kaugkesta protokolle, nagu Berkeley rlogin, rsh ja rexec. Loetletud protokollid edastavad andmeid, sealhulgas paroole, avatekstina, mis teeb need paketianalüüsi kasutamisel haavatavaks vahelthaaramise ja andmete lekkimise suhtes. SSH kasutatav krüpteerimine püüab tagada turvamata võrgus (nagu seda on Internet) edastatavate andmete konfidentsiaalsuse ja tervikluse, kuigi Edward Snowdeni lekitatud failid osutavad, et NSA on suuteline mõnikord SSH-d dekrüpteerima, mis võimaldab neil SSH seansside sisu lugeda.

6. juulil 2017 kinnitas valitsuste läbipaistvuse nimel tegutsev organisatsioon WikiLeaks, et Luure Keskagentuur on loonud tööriistad, mida on võimalik paigaldada Microsoft Windowsi või GNU/Linuxi operatsioonisüsteemiga arvutitesse ja mis on mõeldud rikutud süsteemis käivitatud SSH-klientprogrammide algatatud SSH-ühenduste vahelthaaramiseks.

## Definitsioon
SSH kasutab avaliku võtme krüptograafiat, et autentida võrguarvuti ja võimaldada sellel vajadusel kasutajat autentida. SSH kasutamiseks on mitu võimalikku lähenemisviisi, üks on automaatselt genereeritud avaliku-salajase võtmepaari abil krüpteerida võrguühendus ja seejärel kasutada parooliga autentimist sisselogimiseks.

Teine võimalus on autentida manuaalselt genereeritud avaliku-salajase võtmepaari abil ja lubada kasutajal või programmil ilma parooli sisestamata sisse logida. Selle stsenaariumi jaoks võib igaüks luua erinevatest võtmetest (avalikust ja salajasest) sobiva võtmepaari. Avalik võti pannakse kõikidesse arvutitesse, mis peavad salajase võtme omanikule ligipääsu võimaldama.

Kui autentimine põhineb salajasel võtmel, siis autentimise käigus ei edastata seda võtit kunagi üle võrgu. SSH ainult verifitseerib, kas sama isiku avalik võti vastab salajasele võtmele. Kõigis SSH versioonides on olulisel kohal tundmatute avalike võtmete verifitseerimine, see tähendab avaliku võtme ja identiteeti seose tuvastamist enne võtme valiidseks tunnistamist, kuna ründaja avaliku võtme aktsepteerimine ilma seda valideerimata annab volitamata kasutajale ligipääsu volitatud kasutaja õigustele.

## Võtmehaldus
UNIXi-laadsetes süsteemides hoitakse volitatud avalike võtmete nimekirja harilikult selle kasutajakonto, millega on lubatud võrgu kaudu sisse logida, kodukataloogis failis ~/.ssh/authorized_keys. SSH tunnustab volitatud võtmete faili ainult juhul, kui see pole kirjutatav kellegi teise poolt peale faili omaniku ja juurkasutaja. Kui kaugarvutis on olemas avalik võti ja kohalikus arvutis on sellele vastav salajane võti, siis pole parooli sisestamine enam tarvilik (mõni tarkvara võib siiski korrektseks töötamiseks parooli nõuda, näiteks Message Passing Interface (MPI) virn). Siiski võib täiendava turvalisuse lisamiseks ka salajast võtit parooliga kaitsta.

Salajast võtit võidakse otsida standardsetest asukohtadest, samuti on selle täisrada võimalik määrata käsureaargumentidega (utiliidi ssh puhul võti *-i*). Salajasi ja avalikke võtmeid luuakse utiliidi ssh-keygen abil, need genereeritakse alati võtmepaaridena.

SSH toetab ka paroolipõhist autentimist, see protseduur on krüpteeritud automaatselt loodud võtmete abil. Parooliga autentimise kasutamisel võib ründaja imiteerida serverit, küsida kasutajalt parooli ja selle ka saada (vahendusrünne). Siiski on kirjeldatud stsenaarium on võimalik vaid juhul kui osapooled pole end varem teineteisele autentinud, kuna SSH säilitab serverite poolt varem esitatud võtmed. Enne võtme aktsepteerimist varem tundmata serverist kuvab SSH klient hoiatuse. Paroolautentimist on võimalik ka keelata.

## Kasutamine

SSH-d kasutatakse enamasti kaugarvutisse sisselogimiseks ja nendes korralduste täitmiseks, samuti tunnelite loomiseks ning TCP portide ja X11 ühenduste edastuseks. Samuti on toetatud failide ülekandmine SSH failiedastuse (SFTP) võis turvalise kopeerimise (SCP) protokollidega. SSH põhineb kliendi-serveri arhitektuuril.

SSH-serveritega ühenduse loomiseks on määratud standardne TCP port 22.

SSH klientprogrammi kasutatakse harilikult ühenduse loomiseks kaugühendusi vastu võtva SSH-deemoniga. Mõlemad on reeglina kaasas enamikus uuemates operatsioonisüsteemides, näiteks Mac OS, suurem osa Linuxi distributsioone, FreeBSD, NetBSD, Solaris ja OpenVMS. Windows on üks väheseid kaasaegseid operatsioonisüsteeme, mis SSH tuge vaikimisi ei sisalda.

## Ajalugu ja areng
### Versioon 1.0
1995. aastal kirjutas Helsingi Tehnikaülikooli insener Tatu Ylönen samas koolis korraldatud paroolinuhi (*password-sniffing*) ründe tõttu SSH esimese versiooni (SSH-1). SSH eesmärk oli asendada rlogin, Telnet ja rsh protokollid, mis ei pakkunud turvalisust ega konfidentsiaalsust. Ylönen väljastas oma programmi vabavarana 1995. aasta juulis ja see muutus kiiresti populaarseks. 1995. aasta lõpuks oli SSH kasutajate hulk kasvanud 20 000 inimeseni 50 riigis.

1995. aasta detsembris asutas Ylönen SSH müümiseks ja arendamiseks ettevõtte SSH Communications Security. Algne versioon kasutas paljusid vabavaralisi lõike, näiteks GNU libgmp, kuid hilisemad versioonid olid üha enam mõeldud äriliseks kasutamiseks.

### Versioon 2.0
1996. aastal muudeti uuendatud versioon standardiks (SSH-2), mis ei ühildunud SSH-1-ga. Uus versioon suurendas turvalisust, näiteks võeti kasutusele uued võtmevahetusmehhanismid, nagu Diffie-Hellmani võtmevahetus. SSH2 pakub ka lisafunktsioone, nt võimalust luua mitu ühendust ühe SSH-tunneli kaudu.  Samuti parandati protokolli struktuuri, jagades selle mitmeks kihiks.

### SSH kompensatsioonirünnaku tuvasti
1998. aastal avastati SSH versioonis 1.5 turvaauk, mis lubas ründajal krüpteeritud SSH andmevoogu andmeid sisestada. Viga tulenes ebapiisava terviklikkuskontrolli CRC-32 kasutamisest. Enamikus SSH versioonides võeti kasutusele rünnakutuvasti (inglise keeles *SSH Compensation Attack Detector*), mis selle turvavea parandas.

### OpenSSH

1999. aastal tekkis arendajatel idee luua uus, avatud lähtekoodiga SSH rakendus. Björn Grönvall kirjutas SSH viimase avatud lähtekoodiga versiooni 1.2.12 põhjal rakenduse OSSH, mille põhjal lõid OpenBSD arendajad OpenSSH ja väljastasid selle koos OpenBSD versiooniga 2.6. Sellest versioonist loodi "mobiilne" haru võimaldamaks OpenSSH-d ka teistes operatsioonisüsteemides kasutada.

Aastal 2000 oli SSH-l hinnanguliselt 2 000 000 kasutajat.

Alates 2005. aastast on avatud lähtekoodiga OpenSSH kõige populaarsem SSH rakendus ja see on paljude operatsioonisüsteemide koosseisus. OSSH on käibelt kadunud.

## SSH-2 kui internetistandard
### Originaalpublikatsioon
2006. aasta jaanuaris pakkus IETF-i töörühm Secsh välja idee võtta SSH-2 internetistandardiks.
* RFC 4250, SSH protokollis määratud arvväärtused
* RFC 4251, SSH protokolli arhitektuur
* RFC 4252, SSH autentimisprotokoll
* RFC 4253, SSH transpordiprotokoll
* RFC 4254, SSH ühendusprotokoll
* RFC 4255, DNS-i kasutamine SSH võtmete sõrmejälgede (Key Fingerprints) turvaliseks avalikustamiseks
* RFC 4256, SSH protokolli üldotstarbelise autentimise sõnumivahetus
* RFC 4335, SSH seansi kanali katkestamise laiend
* RFC 4344, SSH transpordikihi krüpteerimisrežiimid
* RFC 4345, Arcfour šifri parandatud režiimid SSH transpordiprotokollile

### Hilisemad muudatused
Originaalpublikatsioonis kirjeldatud standardit on hiljem muudetud ja laiendatud järgmistes publikatsioonides:
* RFC 4419, SSH transpordikihi protokolli Diffie-Hellman grupivahetus (märts 2006)
* RFC 4432, SSH transpordikihi protokolli RSA võtmevahetus (märts 2006)
* RFC 4716, SSH avaliku võtme faili vorming (november 2006)

## Lihttekstirünnak
2008. aastal avastati SSH-2 viga, mis lubas teatud tingimustel kuni 4 baiti lihtteksti SSH andmevoost kätte saada. Seda nimetatakse lihttekstirünnakuks (*Plaintext Recovery Attack*). Viga on parandatud vaikekrüpteeringu režiimide muutmisega alates OpenSSH versioonist 5.2-st.

## Failiedastus SSH kaudu
SSH failiedastusprotokolli kasutatakse mitmetes failiülekande vahendites:
*SSH failiedastusprotokoll (SFTP) tuleneb FTP-st SSH kaudu;
*Turvakoopiaprotokoll (SCP) tuleneb RCP-st SSH kaudu;
*Failiedastus käsureaprotokolli FISH abil väljastati 1998, see tuleneb Unixi käsurea kasutamisest SSH kaudu.

IETF-i standardid ei ole mõeldud nimetatud protokollide jaoks. IETF on koostanud hulgaliselt visandeid SFTP jaoks, kuid alates aastast 2006. aastast on nende arendamine seisatud, põhjustatuna vaidlustest teemal, et SFTP olevat failisüsteem.

## Vaata ka
* Transpordikihi turbeprotokoll (SSL)
* Kermit
* OpenSSH

## Viited