kolmapäev, 21. oktoober 2015

Kahefaktorilisest autentimisest

Iga vähegi küberhügieenist hooliv inimene kasutab võimaluse korral alati kahefaktorilist autentimist. Lühidalt tähendab see seda, et kuhugi sisse logiv kasutaja esitab lisaks oma tavalisele paroolile (ehk esimene faktor) ka mingi muu kinnituse (teise faktori), tavaliselt siis sellise, mis eeldab ligipääsu mingile kindlale füüsilisele esemele. Esimene laiem kokkupuude kahefaktorilise autentimisega toimus Eestis juba üle 15 aasta tagasi, mil ilmusid internetipangad koos paroolikaartidega, seega siinmaal on see juba tuttav nähtus. Paroolikaart (vahet polegi, et kas ühe- või korduvkasutavate paroolidega) oligi sellisel juhul kasutaja tavaparooli kõrval selleks teiseks faktoriks.

Siinkohal teeksingi väikese ülevaate võimalikest teise faktori lahendustest ning seda keskendudes mudelile kus tavatarbija soovib brauseri kaudu sisse logida mõnele veebilehele, näiteks internetipanka või sotsiaalvõrgustiku lehele vms.

Korduvakasutatav paroolikaart

Pangad on tänuväärselt olnud kohaliku küberhügieeni edendamise veduriks ja nii taibati juba kohe alguses, kui internetipank oli veel alles väheste tehnofriikide jaoks, võtta kasutusele paroolikaart. Korduvakasutatav paroolikaart on tänaseks ilmselgelt kõikidest võimalustest kõige ebaturvalisem, kuid omal ajal oli see muidugi suur samm edasi. Korduvkasutatavat kaarti on lihtne kopeerida ja vastavad rünnakud tekkisid ka üsna pea, kus inimestele hakkas laekuma "Гanzapangast" kalastuskirju teemal, et pank on kasutaja paroolid ära unustanud ja nüüd tuleks need saadetud vormil uuesti sisestada. Esimesed Гanzapankurid kukkusid kiirelt vahele, aga pretsedent oli sellega loodud.

Ühekordsete paroolidega kaart

Ühekordsete paroolidega kaart on juba kraad kangem, aga sellevõrra ebamugavam. Kuna neid kaarte tuli tihti uuendada (mis on juba iseenesest tüütu), siis oli pabermaterjal võrreldes korduvkasutavate kaartide plastikust kiirem ka kuluma. Kuigi endiselt kopeeritav, on ajaline faktor siinkohal oluline, sest koodikaart aegub üsna pea ja seega kaotavad kopeeritud paroolid millalgi kehtivuse. Lisaks, kui tegu on kasutaja vabal valikul kasutatavate koodidega ("vali kood ja kriipsuta läbi" lähenemine), siis ei tea ründaja, et millised koodid on juba kasutatud ja seega on kergem sisestada valesid paroole ning end automaatse lukustussüsteemi taha jätta.

PIN-kalkulaator

Sajandi alguse poole hakati välja andma ka PIN-kalkulaatoreid, mis on elektrooniline seadeldis ühekordsete koodide genereerimiseks. Tavaliselt töötab selline seade nii, et sisestad seadme korpusel oleva klahvistiku kaudu 5-kohalise numbrilise PIN koodi ja aparaat näitab selle peale oma ekraanil 8-kohalist ajutist PIN koodi, mida saabki pangale sisselogimiseks esitada. Mis alusel see ajutine kood genereeritakse, ma täpselt ei tea. Seade on praktikas turvaline, kuna seda ei saa kopeerida. Kuigi suhteliselt populaarne, siis laiadesse massidesse see siiski kunagi ei jõudnud, seadeldis ei ole tasuta ja see töötab ainult selle väljastanud pangaga. See on ka natuke kohmakas, nagu oleks vaja veel üht telefoni kaasas kanda.

ID-kaart

Järgmiseks tekkis kõigile tuttav ID-kaart. Selle puhul on autentimise aluseks kliendisertifikaat. Teadaolev, aga vähe kasutatud SSL/TLS võimalus on nõuda kehtivat x509 sertifikaati mõlemalt osapoolelt. Kõige tavalisem kasutusjuht ehk see, kui avad brauseris suvalise https:// algusega veebilehe aadressi, näeb ette, et kehtiva serdi esitab ainult server. Protokoll võimaldab küsida serti ka kasutajalt ja seda ID-kaardiga sisse logimine tähendabki. Server nõuab kliendi sertifikaati, brauser üritab seda laadida ID-kaardilt ja küsib ID-kaardi lahtilukustamiseks PIN koodi. Seejärel kontrollib server, et esitatud sert oleks allkirjastatud õige CA (ehk SK) poolt ja et seda poleks tühistusnimekirjades. Kui parool ka veel klapib (reeglina ID-kaardi ja Mobiil-ID puhul eraldi parooli siiski ei küsita), siis ongi kasutaja autenditud. Tänastel kaartidel on 2048 bitised RSA võtmed, mis on praktikas täiesti turvaline ja võltsimiskindel.

Mobiil-ID

Hilisem ID-kaardi lisa ehk Mobiil-ID töötab veidi teisiti, kuna seal otseühendust mobiilis asuva SIM-kaardi ja serveri vahel tekkida ei saa. Selle asemel genereerib server allkirjastamiseks mingi ühekordse väärtuse, saadab selle Mobiil-ID süsteemi ja saab sealt vastu autentimissessiooni 4-kohalise identifikaatori (ma ei tea kuidas see genereeritakse, tõenäoliselt tuletatakse allkirjastatavatest andmetest) ning kuvab selle kasutajale. Mobiil-ID süsteem saadab päringu koos sessiooni identifikaatorigaa SMS teel kasutaja telefoni, kasutaja allkirjastab päringu ja saadab samuti SMS teel allkirjaga vastuse tagasi. Kui vastus jõuab autentivasse serverisse, siis kontrollib see, et kas allkiri vastab kasutaja sertifikaadile ja sobivuse korral ongi kasutaja autenditud. SIM kaardil peaks samuti olema 2048 bitised RSA võtmed ja seega on Mobiil-ID sama turvaline kui ID-kaartki, kuigi turvalisust vähendab (vähemalt teoorias) musta kastina kasutaja ja autentiva serveri vahelisi päringuid vahendav Mobiil-ID süsteem.

TOTP/2FA (Google Authenticator)

Mujal maailmas nn. smartcard'e, mida nii ID-kaart kui ka Mobiil-ID oma olemuselt on, tavakasutajatele eriti pakutud pole. Kõige levinum teise faktori lahendus on TOTP põhine 2FA ühekordsete koodide generaator, mis reeglina väljendub kasutaja mobiilis oleva rakendusena. Rakendus kuvab hetkel kehtivaid koode ning arvutab need iga 30 sekundi järel uuesti ringi. TOTP koodid pole muud kui HMAC-SHA1 räsid, kus nn. seemneväärtus ehk seed on HMAC salajaseks komponendiks ning hetke aeg (teisendatuna 30 sekundi täpsuseks ehk siis floor(UNIX_TIMESTAMP/30)) on sisendiks, millest tehakse HMAC räsi. Saadud 20 baidine räsi teisendatakse kindla algoritmi alusel 6-kohaliseks numbriks.

Server teab samuti salajast seemneväärtust ning arvutab ka omalt poolt kontrolliks sama räsi. Kuna eri seadmete ajad võivad veidi erineda, siis arvutab server igaks juhuks mitu võimalikku väärtust, mõned minutid ajas ette ja taha. Kui üks leitud väärtustest klapib kasutaja pakutuga, siis ongi kasutaja autenditud.

Ajapõhised koodid ei ole siinkohal ainsad võimalikud, toetatud on ka muud OTP paroolid (näiteks HOTP, millel TOTP põhineb), kuid TOTP peaks olema enam levinud. Sellist autentimist toetavad muu hulgas Facebook, Google (s.h Gmail, Youtube jmt.), Dropbox, Outlook.com, tinglikult ka Skype ning paljud muud teenused.

Google Autheticator rakendus TOTP koodide genereerimiseks.
Tähelepanelik vaatleja saab kindlasti aru, et ekraanitõmmist on modifitseeritud ja koodid ei ole ehtsad.
FIDO/U2F

Uusimaks laiemale üldsusele mõeldud teiseks faktoriks on FIDO/U2F protokolli järgivad seadmed, mis peamiselt on USB porti ühenduvad võtmekujulised vidinad. Autentimisprotseduur näeb välja nii, et kui veebisait küsib võtit, siis sisestab kasutaja võtmeseadme arvuti USB porti (see võib seal juba eelnevalt olla, ei pea iga kord uuesti sisestama ja välja võtma) ning vajutab seadmel olevale nupule. Rohkem midagi teha pole vaja, veebileht tuvastab võtme ja suhtleb sellega taustal edasi ja õnnestumise korral logitakse kasutaja automaatselt sisse, mis teeb selle tõenäoliselt kõige mugavamaks lahenduseks üldse.

Yubikey poolt toodetud Githubi brändinguga U2F võtmed, mida müüdi kampaania korras hinnaga $5 tükk

Protokoll ise on veidi laiem, aga vaatlen siin vaid kõige odavamaid (ja eeldatavasti enam levikut saavat) lahendust. Hetkel toetab selliseid võtmeid vaid Chrome, kuid Firefox on protokolli toe samuti töösse võtnud ning on ka alust loota, et Microsoft lisab U2F toe oma Edge brauserisse. U2F võtmed teeb eriliseks see, et need on täiesti anonüümsed, sama võtit saab kasutada mitme eri teenusepakkuja juures ning teenusepakkuja ei saa omakorda jälgida, et kus seda võtit veel on kasutatud. Selline tulemus saavutatakse nii, et iga teenusepakkuja jaoks genereerib seade uue ja unikaalse avaliku ja salajase võtme paari (kasutades elliptilist kurvi secp256r1). Samas odavatel USB võtmetel endal sisemälu puudub ja seega seda genereeritud võtit nagu kuhugi salvestada pole. Protokoll lahendab probleemi nii, et seade krüpteerib salajase võtme ning edastab siis nii avaliku kui ka krüpteeritud salajase võtme seadme registreerimisel teenusepakkujale. Seade ise peab sellisel juhul teadma ainult krüpteerimiseks kasutatud salajast parooli.

Dropbox teenuses U2F võtme seadistamine
Pildil on Dropboxi vaade U2F võtme seadistamiseks. Kui nüüd sisestada arvutisse U2F toega USB võti ja vajutada võtmel olevale nupule, genereeriks seade võtmepaari ja saadaks need brauserile. See ongi lühidalt kogu registreerimisprotseduur.

Kui aga tahame registreeritud võtmega autentida, siis saadab server brauseri kaudu USB võtmesse registreerimisel saadud kasutaja salajase võtme ja allkirjastamiseks minevad andmed. Seade dekrüpteerib salajase võtme endale teada oleva parooliga, kasutab seejärel saadud salajast võtit andmete allkirjastamiseks ja saadab allkirjastatud andmed brauserile tagasi. Edasi kontrollib server USB seadmest saadud allkirjastatud andmeid registreerimisel saadud avaliku võtme vastu ja kui need klapivad, siis ongi kasutaja autenditud.

Google'sse sisselogimine U2F võtmega peale kasutajanime ja parooli edukat sisestamist

U2F võtmete suurim pluss on brauseritootjate tugi. Protokoll on välja töötatud koostöös Googlega, selle tugi on Chrome brauserisse sisse ehitatud (ei vaja eraldi pluginat nagu näiteks ID-kaart) ja teistesse saab tulevikus. Seega tegu on brauseritootjate jaoks "esimese kategooria kodanikuga" ja pole vaja karta, et brauseri või operatsioonisüsteemi uuendamise korral kõik jälle katki läheks. U2F põhist sisselogimist toetavad juba kõik Google teenused (Gmail, Youtube, Analytics, Adsense, Adwords jne.), Dropbox, Box, Github jpt. Mitmed teenused (näiteks LastPass) on äraootaval seisukohal, et kuni ka teised brauseri peale Chrome U2F toe endale lisavad, seega võib eeldada, et tulevikus vastavate teenuste arv kasvab jõudsalt. Eriti arvestades, et selle tuge on väga lihtne lisada, sest vajalik API on brauserisse sisse ehitatud ja selle kasutamiseks pole vaja midagi täiendavat installida.

U2F vs ID-kaart

Kui võrrelda U2F seadmeid ID-kaardiga, siis on U2F seadme eelis muu hulgas hinnas (teostatavad toimingud on palju lihtsamad ja RSA asemel kasutatakse vähem nõudlikku elliptiliste kurvide krüptot, siis selle võrra võib seade olla väiksema jõudlusega). U2F ei vaja ka keskset autentsuse tagajat, nagu ID-kaardi puhul on selleks Sertifiseerimiskeskus (see on samas nii pluss kui ka miinus, kuna keskse autoriteedi puudumisel ei saa neid võtmeid keegi kehtetuks tunnistada). Konkreetse U2F võtme autentsuse tagab kasutaja ise, kui võtme süsteemi lisab. Mõlemal juhul on põhisaladus (ID-kaardi puhul salajane võti ning U2F seadme puhul siis võtmete krüpteerimise parool) seadme kiibil ning ei välju sealt kunagi. U2F suurimaks plussiks on aga kindlasti suurte teenusepakkujate nagu Google poolne tugi, mida ID-kaart endale kunagi ei saa.

Ühesõnaga, keskse autoriteedi puudumise tõttu ei saa U2F võtit kasutada otseselt ID-kaardi kui elektroonilise dokumendi asemel, küll aga saab seda kasutada kindla konto autentimiseks, kus teenusepakkuja juba teab, et kes parasjagu sisse logib, kuid soovib täiendavat kinnitust. U2F võti pakub sama kategooria turvalisust, aga veidi väiksema hinna eest (ID-kaardi hind algab 25€, Yubikey U2F võtme "tavahind" on $18), suhteliselt anonüümselt (iga teenuse jaoks genereerib seade uue võtmepaari ning võtmeid ei taaskasutata eri teenuste vahel), ja garanteeritud töökindlusega (erinevalt siis ID-kaardi lahendustest, kus asjad "vahel töötavad, vahel mitte"). U2F seadme puhul pole vaja ka eraldi kaardilugejat, kuna seade ise käib USB pessa. U2F tuge on teenusepakkujatel kergem lisada, see ei vaja mingeid müstilisi spetsifikatsioone ja pluginaid. Gmaili kontole ei saa tõenäoliselt kunagi ID-kaardiga sisse logida, aga U2F võtmega saab seda juba täna.

---- järgneb täiendus algsele loole ----

SMS-2FA

Mul endal läks küll täiesti meelest ära, aga õnneks juhtis Facebookis Peeter Marvet tähelepanu veel ühele laialt levinud teisele faktorile ehk siis SMS põhisele koodide saatmisele. Sellisel juhul saadab teenus SMS teel kasutaja telefoni ühekordse koodi, mida saab hetkel pooleli oleva autentimise lõpetamiseks kasutada. Suureks boonuseks on see, et nii saab kohe teada, kui keegi on suutnud kasutaja parooli ära varastada ja proovib seda kuskil kasutada (SMS saadetakse reeglina pärast parooli edukat sisestamist, seega parool peab ründajal juba teada olema). Miinuseks aga kerge privaatsuse riive, kuna telefoninumbrit on võimalik kasutada profileerimiseks ning erinevate teenuste kontode kokkuühendamiseks ja tegevuse jälgimiseks (kasutajanimi võib ju teenusest teenusesse muutuda, aga mobiilinumber jääb samaks). Samas kui teenus juba niikuinii mingil muul põhjusel kasutaja telefonimbrit vajab ja täiendavat privaatsuse riivet ei teki, siis muidugi on tegu üsna hea lahendusega kuna SIM on praktiliselt kopeerimiskindel ning samuti ei pea telefon olema "nutikas," kõlbab iga vana Nokia või Ericsson. SMS-põhine autentimine on "tavainimesele" reeglina kõige arusaadavam, kuna see ei nõua lisatarkvara ega seadmeid.

Miinuspoolelt veel probleemid mobiili leviga (näiteks lõpetab piirkonna ainus mast töö või siis on hoopis ülekoormus) ja roaming võimaluse olemasoluga välismaal (mõlemad kehtivad ka Mobiil-ID kohta). Samuti võivad SMS transpordi torud olla "umbes" kuna tavaliselt on saatjaks mõni USA teenus ja sõnum peab läbima pika maa, enne kui mõnda Eesti telefoni potsatab.

Näiteks hiljuti külastasin üht rahvusvaheliste majandussanktsioonidega piiratud territooriumi ning seal rahvusvaheline roaming ei töötanud, telefoni tuli hoopis panna kohalik SIM kaart, mis muutis ühe hetkega kasutuks nii Mobiil-ID kui ka SMS-2FA.



Kasutatud lühendid
  • SSL/TLS – SSL (Secure Sockets Layer) on vanem ja TLS (Transport Layer Security) uuem krüptograafiline protokoll võrgusuhtluse turvamiseks. Wikipedia
  • x509 – Rahvusvahelise Telekommunikatsiooni Liidu (ITU) standard avaliku võtme infrastruktuurile digisertifikaatide jaoks. Wikipedia
  • CA – (Certification authority) on organisatsioon, mis annab välja ja kinnitab digisertifikaate. Wikipedia
  • SK – AS Sertifitseerimiskeskus, meie enda kohalik CA
  • RSA – (Rivest-Shamir-Adleman) on avaliku võtmesüsteemiga krüpteerimise algoritm andmeedastuses. Wikipedia
  • 2FA – on kahefaktoriline autentimine. Wikipedia
  • OTP – (One-time password) ühekordseks kasutamiseks mõeldud parool, mis sõltuvalt implementatsioonist kaotab kehtivuse parooli kasutamisel või kindla aja möödudes või järgmise ühekordse parooli genereerimisel. Wikipedia
  • TOTP – (Time-based One-time Password Algorithm) on algoritm ajapõhise parooli leidmiseks, mille komponentideks on salajane seemnevõti ning hetke aeg. Wikipedia
  • HMAC – (Hash-based message authentication code) on konstruktsioon krüptograafilise räsi leidmiseks, mille komponendiks peale räsitavate andmete on salajane parool.  Wikipedia
  • SHA-1 – (Secure Hash Algorithm 1) on krüptograafiline räsifunktsioon, mis genereerib räsitavatest andmetest 20 baidise räsi. Wikipedia
  • HMAC-SHA1 – on HMAC konstruktsioon, mis kasutab räsifunktsioonina SHA-1 funktsiooni.
  • FIDO Alliance – (Fast IDentity Online) on konsortsium turvaliste online autentimismeetodite väljatöötamiseks. Koduleht
  • U2F – (Universal 2nd Factor) on avatud standard 2FA täiustamiseks, kasutades USB ja NFC põhiseid seadmeid. Wikipedia

Kommentaare ei ole: