Primjena Yubikey-a

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Studenti: Ivan Ković, Tomislav Gec

Yubico.jpg

Sadržaj

Uvod

Nalazimo se u razdoblju u kojem je aktualni trend "cloud computing", te postoji jaka tendencija seljenju aplikacija koje su se tradicionalno izvodile na klijentskim računalima u oblak, odnosno "online". Takav način izvođenja aplikacija otvara nove mogućnosti kako razvojnim inženjerima i korisnicima, tako i onima koji žele te mogućnosti iskoristiti na način da ostvare osobne koristi na štetu drugih korisnika. S porastom broja aplikacija i drugih kvalitetnih sadržaja dostupnih online, raste i broj korisnika tih sadržaja. Analogno tome, raste i ukupna vrijednost informacija pohranjenih online, te su potrebni napredniji načini zaštite tih informacija od napadača.

U ovom radu objasniti ćemo kako možemo povećati sigurnost naših i tuđih korisničkih računa u online aplikacijama i servisima korištenjem uređaja YubiKey. Navesti ćemo osnovna obilježja i mogućnosti tog uređaja, te ćemo u praktičnom dijelu rada pokazati kako se uređaj može iskoristiti s aspekta korisnika neke web usluge, i s aspekta programera koji bi želio povećati sigurnost sustava na kojem radi.

--Tomislav gec 20:43, 11. siječnja 2013. (CET)

--Ikovic 20:44, 11. siječnja 2013. (CET)

Osnovni pojmovi

Kako bi razumjeli točan način na koje se Yubikey uklapa u zaštitu korisničkih računa u online aplikacijama i servisima, moramo poznavati neke od osnovnih pojmova iz domene sigurnosti informacijskih sustava i kriptografije. Dakle, kada prosječan korisnik Interneta posjeti neku web stranicu (forum, društvena mreža, web aplikacija..), može imati neograničen ili ograničen pristup sadržajima te web stranice. U slučaju ograničenog pristupa, korisnik će se najčešće morati registrirati u sustav te će dobiti određene podatke pomoću kojih se mora prijaviti u sustav kako bi mu se omogućio pristup sadržajima te web stranice. Prilikom prijave u sustav, odvijaju se tri procesa: identifikacija, autentifikacija te autorizacija. Naravno, ti procesi nisu ograničeni samo na jednostruko izvođenje prilikom prijave, već se mogu po potrebi izvršiti više puta, i u različite svrhe.


Razlika između identifikacije, autentifikacije i autorizacije [1]:

identifikacija = predstavljanje

autentifikacija = identifikacija + verifikacija

autorizacija = autentifikacija + provjera ovlasti, tj. provjera prava pristupa


Korisnik se identificira prilikom unosa korisničkog imena. Proces autentifikacije zadužen je za provjeru ili potvrdu identiteta korisnika, te se od korisnika najčešće traži unos lozinke povezane s njegovim korisničkim imenom. Kada je identitet korisnika potvrđen, proces autorizacije nužan je kako bi se korisniku odredila odgovarajuća razina prava pristupa i modifikacije sadržaja web stranice. U ovom radu najviše ćemo se posvetiti problemu autentifikacije, budući da YubiKey najveću ulogu ima upravo u tom procesu. Potrebno je napomenuti da se pravilno konfiguriran uređaj bez problema može koristiti i za svrhe identifikacije i autorizacije, ali out-of-the-box uređaj primarno služi za autentifikaciju.

Autentifikacija

Autentifikacija se definira kao postupak provjere identiteta korisnika koji se provodi prije negoli se tom korisniku dopusti pristup resursima sustava. Cilj ovog postupka je onemogućavanje pristupa resursima neovlaštenim korisnicima sustava. Postupak se odvija u dvije faze: u prvoj fazi korisnik se prijavljuje u sustav te šalje svoje identifikacijske podatke, te se u drugoj fazi ti podaci provjeravaju te se na osnovu toga odbija ili dopušta pristup tom korisniku. Postoje tri osnovna pristupa autentifikaciji, ovisno o tome što služi kao dokaz identiteta osobe. Tako razlikujemo dokaz znanjem, dokaz posjedovanjem, te dokaz osobinom.

Dokaz znanjem

U ovu kategoriju spadaju dokazi identiteta u obliku jedinstvenog znanja koje posjeduje korisnik. Takvi dokazi mogu biti lozinke, PIN-ovi, fraze, i slično. Postoje dva oblika ovakvog dokazivanja identiteta - u prvom slučaju korisnik šalje određeni podatak sustavu koji uspoređuje taj podatak s onim koji ima u bazi podataka vezan za tog korisnika te ovisno o tome podudaraju li se ti podaci daje ili odbija pristup sustavu. U drugom slučaju korisnik mora odgovoriti na određeno pitanje koje postavlja sustav.

Dokaz posjedovanjem

Dokaz posjedovanjem čini određeni predmet u vlasništvu korisnika čijim se predočenjem ili korištenjem ostvaruje pristup sustavu. Ti predmeti mogu biti identifikacijske kartice, liste lozinki, USB uređaji, tokeni i slično. Ovakav koncept autentifikacije već se godinama koristi za zaštitu softvera od ilegalnog umnožavanja - određene složene aplikaciju za digitalnu obradu zvuka ne mogu se pokrenuti na računalu ukoliko u jednom od USB ulaza nije prisutan USB uređaj koji čini dokaz posjedovanjem. Na taj način, aplikacija se ne može koristiti čak i ako se kopira medij koji sadrži njenu instalaciju.

Dokaz osobinom

Dokaz osobinom predstavlja dokazivanje identiteta korisnika prema onome što on je, odnosno prema nekim njegovim jedinstvenim biološkim obilježjima poput glasa, mrežnice ili otiska prsta. Ovakav način dokazivanja temelji se na biometriji, te još nije ušao u širu upotrebu zbog toga što je za prepoznavanje glasa, skeniranje mrežnice ili prepoznavanje otiska prsta potrebno posjedovanje i instaliranje dodatnog skupog i sofisticiranog hardvera na računalo, te bi uvođenje ove metode koja je potencijalno najsigurnija bilo poprilično skupo u ovom trenutku.

Višefaktorska autentifikacija

U praksi se pokazalo da autentifikacija temeljena na jednom od gore navedenih dokaza ponekad nije dovoljna zaštita sama po sebi, te se uvodi pojam višefaktorske autentifikacije. Taj pojam se odnosi na autentifikaciju u kojoj korisnik mora pružiti dva ili sva tri tipa dokaza kako bi ostvario pristup sustavu. Najviša razina sigurnosti ostvaruje se korištenjem sva tri tipa dokaza, međutim takva trofaktorska autentifikacija se rijetko primjenjuje u praksi zbog financijskih ili praktičnih problema povezanih uz korištenje biometrijske opreme. Zbog toga je najčešći oblik praktične primjene upravo dvofaktorska autentifikacija, u kojoj se od korisnika sustava traže dokazi znanjem i dokazi posjedovanjem. U ovom seminarskom radu pokazati ćemo praktičnu primjenu Yubikey-a koji služi kao dokaz posjedovanjem.

--Ikovic 20:24, 11. siječnja 2013. (CET)

Yubikey

YK ina.jpg


Glavna obilježja

Yubikey Standard [2] je uređaj jako malih dimenzija: težak je 3 grama, dok mu je debljina samo 2 milimetra. Kućište je čvrsto građeno, te proizvođač garantira vodootpornost. Iz perspektive korisnika jako je važna informacija da je kućište izrađeno od jednog dijela, te je jako otporno na savijanje, što je nužan preduvjet s obzirom na prenosivost uređaja. Sva svojstva, uključujući i izostanak baterije, upućuju na praktičnost te prenosivost uređaja, što ide na ruku njegovoj namjeni kao jednostavnom uređaju za dvofaktorsku autentifikaciju. Pritom može zamijeniti i više različitih uređaja koji služe za istu svrhu. Na računalo se spaja pomoću standardnog USB 2.0 ulaza, te ga računalo bez instalacije upravljačkog softvera prepoznaje kao tipkovnicu. U tom slučaju uređaj funkcionira samo kao generator OTP lozinki, te je za korištenje ostalih opcija ipak potrebno instalirati upravljački softver. Radi na svim najzastupljenijim softverskim platformama, to jest na operacijskim sustavima Windows, Linux, Mac, te na raznim web preglednicima poput Mozilla Firefox-a ili Google Chrome-a. Za osnovnu upotrebu nije potrebno instalirati softver na klijentsko računalo. U ovom trenutku, cijena jednog uređaja kupljenog izravno od proizvođača iznosi 20$ + trošak poštarine [8].

Osim standardne verzije uređaja, postoje i razne inačice prilagođene određenom načinu upotrebe - YubiKey Nano nudi istu funkcionalnost kao i standardni model, ali je smješten u kućište koje u potpunosti stane unutar USB ulaza. Yubikey RFID uz standardne mogućnosti nudi i opciju identifikacije pomoću radijske veze. Yubikey NEO je namijenjen korištenju uz smartphone i tablet uređaje, te na razne načine doprinosi sigurnom izvođenju mobilnih aplikacija, s naglaskom na aplikacije pomoću kojih se vrše financijske transakcije.

Uređaj se koristi tako da, kada je konfiguriran za upotrebu s nekom uslugom, pritiskom na integriranu tipku generira lozinku kao da je ona upisana putem tipkovnice. Takav način funkcioniranja ubrzava prijavljivanje u sustave koji koriste dvofaktorsku autentifikaciju, odnosno svaki oblik autentifikacije u kojima je potrebno unijeti određeni oblik lozinke. Način generiranja lozinke detaljnije je objašnjen u idućem potpoglavlju.

Načini generiranja i provjere lozinki

Kao što smo već više puta spomenuli, osnovna funkcionalnost YubiKey-a je generiranje jednokratnih lozinki. Osim te funkcionalnosti, uređaj dolazi s konfiguracijskim opcijama koje uključuju: OATH, Static Password i Challenge-Response modove rada. Navedene funkcionalnosti su integrirane u uređaj, te se mogu koristiti s odgovarajućim servisima bez potrebe za posebnim konfiguriranjem uređaja, ili s jednostavnom konfiguracijom. Upravljački softver omogućava i izmjenu određenih parametara i konfiguracijskih opcija čime se otvaraju brojne mogućnosti za korištenje YubiKey-a i izvan servisa koji ga podržavaju već i s tvorničkim postavkama.

S obzirom na to da računalo YubiKey prepoznaje kao USB tipkovnicu, lozinke koje YubiKey generira računalo tretira na isti način kao i nizove znakove koje unosimo pomoću tipkovnice. Zbog toga se pojavio problem dvoznačnosti znakova, budući da reprezentacija znakova lozinke ovisi o postavljenom jeziku za unos znakova unutar operacijskog sustava, ili pak o rasporedu znakova na tipkovnici (npr. QWERTY i QWERTZ tipkovnice). Da bi se izbjegla takva situacija, Yubico je modificirao heksadecimalni brojevni sustav kako bi bili sigurni da se unutar lozinki koriste isključivo jednoznačni znakovi, koji uvijek imaju jednaku vrijednost i reprezentaciju. Navedeni sustav logično su nazvali "ModHex" (engl. Modified Hexadecimal).

Za svaki pojedini YubiKey vezan je jedan 128 bitni AES ključ. Taj ključ je tajan, te je poznat samo uređaju (ne zna ga niti vlasnik uređaja!) i validacijskom serveru. Postupak generiranja lozinke svodi se na to da korisnik aktivira uređaj dodirom na senzor, te se u tom trenutku generira niz bitova prema prethodno postavljenim parametrima. Taj niz se potom kriptira pomoću spomenutog AES ključa i algoritma, te se prije slanja znakova na računalo izvršava konverzija u ModHex format. Lozinka se unosi u klijentsku aplikaciju, koja provjerava ostale faktore autentifikacije, te u slučaju da su oni u redu, prosljeđuje primljenu lozinku validacijskom serveru. Na njemu se dobivena lozinka opet pretvara u niz bitova, te se dekriptira pomoću ključa koji se nalazi na tom serveru. Potom se analiziraju parametri lozinke, te ovisno o rezultatu vraćaju klijentskoj aplikaciji potvrdan ili negativan odgovor.

YubiKey OTP

OTP (engl. One Time Password) ili jednokratna lozinka je lozinka koja se koristi ili vrijedi samo u jednoj sesiji ili transakciji. Na taj način se rješava veliki broj sigurnosnih problema povezanih sa statičkim lozinkama, ali praktički sa sobom povlači i korištenje dodatnog uređaja ili softvera koji generira takve lozinke. Prema tvorničkim postavkama, YubiKey generira lozinku reprezentiranu sa 44 znaka u ModHex formatu. U praktičnom dijelu rada detaljno ćemo opisati osnovna svojstva i konstrukciju ovih lozinki, te način na koji se ta svojstva koriste prilikom programske implementacije autentifikacije s više faktora uz pomoć YubiKey-a.

OATH-HOTP

YubiKey [3] osim standardne jednokratnke lozinke može generirati i OATH - HOTP lozinku. To je posebna vrsta jednokratne lozinke koja se ne generira pomoću YubiKey-evog OTP algoritma, već koristi HOTP (engl. Hash-based Message Authentication Code) algoritam prema standardu RFC 4226. HOTP je temeljni algoritam u OATH (engl. Open Authentication) inicijativi čiji je cilj razvoj standardizirane infrastrukture za višefaktorsku autentifikaciju koristeći otvorene standarde. Pravilno konfiguriran YubiKey omogućuje iznimno brzu prijavu na servise koji koriste OATH standard. Uz instalaciju dodatnog softvera, moguće je koristiti i poboljšani TOTP algoritam (engl. Time-based One-time Password Algorithm), o kojem ćemo više reći u praktičnom dijelu rada.

Static Password

YubiKey se može konfigurirati kako bi generirao dugu statičku lozinku umjesto jednokratne lozinke. Ova statička lozinka ne zahtijeva validacijski server i radi s uobičajenim "korisničko ime / lozinka" rješenjem. Lozinka može sadržavati bilo koju kombinaciju od 16 do 64 znakova i / ili brojeva. Promjena statičke lozinke se može postići 10 sekundi drugim pritiskom na gumb, kada se nasumično generira novi kod. Iako ima svoje prednosti u odnosu na klasičnu statičku lozinku koju stvara i pamti sami korisnik, ova se mogućnost ne uklapa potpuno u koncept autentifikacije s više faktora, ali je ipak sadržana u standardnoj funkcionalnosti uređaja.

Challenge - Response

Ovaj način rada je ponešto drugačiji od ostalih, s obzirom na to da u ovom slučaju YubiKey tipično prvo od aplikacije prima 48 bitni niz znakova, tzv. "Challenge". Potom uređaj koristeći ugrađeni OTP algoritam konstruira 128 bitni odgovor ili "Response", koji se šalje serveru kako bi on potvrdio valjanost odgovora, a time i identitet korisnika, točnije činjenicu da osoba posjeduje valjani YubiKey povezan s odgovarajućim korisničkim računom. Ovakva funkcionalnost najbolje se koristi za svrhu autorizacije, što je i česta primjena u praksi, pogotovo kod Internet bankarstva s raznim tokenima. Na stranicama proizvođača moguće je pronaći korisničke upute za konfiguraciju uređaja za korištenje prilikom prijave na Windows 7 ili na neke popularne web aplikacije.

Sigurnost YubiKey-a

Sigurnost YubiKey-a počiva na simetričnoj kriptografiji, odnosno na korištenju AES algoritma te ugrađenom 128 bitnom AES ključu, jedinstvenom za svaki uređaj. Pomoću takvog ključa generiraju se lozinke koje sadrže 32 znaka, te je maksimalni broj mogućih kombinacija znakova 3,402,823,669,209,384,634,633,746,074,317.7 * 10^8, ili približno 3 * 10^38 [2]. Prema podacima proizvođača, u slučaju brute force napada bilo bi potrebno 1000 računala koja bi paralelno testirala moguće kombinacije ključeva preko 10^18 godina kako bi se uspješno pronašao jedan AES ključ.

Čak i u načinu rada sa statičkom lozinkom YubiKey nudi višu razinu sigurnosti - statičke lozinke u pravilu nisu duge, jer bi korisniku bilo teško pamtiti i upisivati dugu i kompleksnu lozinku. Međutim, YubiKey sam upisuje lozinku izravno u polje za unos, tako da ne postoji mogućnost pogrešnog unosa lozinke.

Sami uređaj je izrađen na takav način da se osigura tajnost ugrađenog ključa, te je za otvaranje uređaja potrebna visoko sofisticirana oprema, s tim da ga je nemoguće ponovno upotrijebiti nakon tog procesa. U slučaju gubitka ili krađe, administrator jednostavno može onesposobiti taj uređaj. Ukoliko napadač ipak uspije na neki način otkriti vrijednost ključa, ne može tu vrijednost iskoristiti za sistematski proboj, odnosno ne može na osnovu tog ključa dobiti informacije o iti jednom drugom ključu koji sadrže Yubikey-evi.

Budući da je vjerojatnost da će napadači saznati tajni ključ jako mala, jedina realna opcija za napadača i sigurnosni rizik za korisnika YubiKey-a predstavlja validacijski server u kojem se nalaze spremljeni svi tajni ključevi za YubiKey uređaje. Rizik postaje mnogo veći ako se za validaciju ne koristi Yubico server, nego proizvoljni server na koji je instaliran modul za validaciju. Trivijalni napad bio bi pomoću phishing-a, odnosno simuliranjem validacijskog servera.

Koji servisi podržavaju YubiKey?

Zgodnu mogućnost Yubikey-a predstavlja i otvoreni način konfiguracije uređaja koji omogućuje integriranje Yubikey-a u mnoge sustave temeljene na dvofaktorskoj autentifikaciji koji nisu podržani prema tvorničkim postavkama uređaja. U ovom poglavlju reći ćemo koji su generički načini primjene Yubikey-a, te za koje ga se primjene može naknadno konfigurirati.

Yubikey je moguće povezati s većinom web aplikacija ili servisa koji nude mogućnost dvofaktorske autentifikacije. Trenutno, neki od najpopularnijih web servisa koji to omogućuju su Google/Gmail, LastPass, Facebook, Dropbox, Yahoo!Mail, Amazon Web Services, te mnogi drugi [4]. Za neke od navedenih usluga nije moguće direktno integriranje uređaja, odnosno ipak je potrebno odraditi posebno konfiguriranje Yubikey-a za efektivno korištenje. Otvorenost softverske platforme Yubikey-a omogućuje dodavanje novih funkcionalnosti te podrške za rad sa sustavima koji u početku nisu bili predviđeni.

S druge strane, postoji velika lista partnera tvrtke Yubico koji koriste određena rješenja te tvrtke koja uključuju direktno korištenje Yubikey-a. To su ponajviše velike poslovne organizacije, te se Yubikey u tom kontekstu koristi za logiranje na VPN, radne stanice, enkripciju diskova i slično.

Na web stranicama tvrtke Yubico moguće je pronaći detaljan popis partnera tvrtke, odnosno popis usluga za koje postoji službena podrška za korištenje Yubikey-a.

--Tomislav gec 20:48, 11. siječnja 2013. (CET)

Praktični primjeri primjene Yubikey-a

U teorijskom dijelu rada spomenuli smo sve bitne značajke YubiKey-a, te ćemo u ovom dijelu rada pokazati na koji način se YubiKey može primijeniti u praksi. Identificirali smo dvije nama najzanimljivije skupine koje korištenje YubiKey-a promatraju iz različitih perspektiva: s jedne strane imamo korisnike YubiKey-a kojima je u interesu iskoristiti YubiKey za sigurnu autentifikaciju u što veći broj korištenih servisa, dok s druge strane imamo razvojne inženjere kojima je u interesu iskoristiti YubiKey kako bi korisnicima svojih servisa pružili što veću sigurnost.

U ovom poglavlju obraditi ćemo po jedan scenarij za svaku grupu korisnika: iz perspektive običnog korisnika, demonstrirati ćemo konfiguriranje uređaja za prijavu na popularni servis Gmail, dok ćemo iz perspektive razvojnog inžinjera pokazati kako se autentifikacija pomoću YubiKey OTP-a može integrirati u već postojeći sustav autentifikacije.

Prijava na Gmail

YubiKey [5] nam omogućuje da prilikom prijave na neki Web servis koristimo autentifikaciju u dva koraka. U ovom konkretnom primjeru će biti objašnjeno kako to ostvariti prilikom prijave na Google-ov mail servis Gmail. Prvi korak prilikom prijave na Gmail je dokaz znanjem koji je ostvaren pomoću upisa "Korisničkog imena" i "Zaporke". Kao drugi korak, korisnik može izabrati nekoliko načina. Drugi korak potvrde može biti kod koji Gmail šalje korisniku na mobilni telefon, QR kod čijim skeniranjem dobijemo generirani jednokratni kod ili kod generiran s nekog tokena. Ovdje je drugi korak ostvaren kao dokaz posjedovanjem, a ono što posjedujemo je Yubikey koji kod za drugi korak potvrde generira na sljedeći način:

Yubikey može biti korišten jedino u OATH okruženju s dodatnom aplikacijom koja evidentira trenutno vrijeme (TOTP) i šalje ga Yubikeyu. On prima zahtjev i šalje odgovor kako bi se generirala TOTP vrijednost. Gmail koristi OATH standard kao i Yubikey, pa je njihova sinkronizacija moguća.

Prvi korak je preuzimanje OATH znakovnog niza s Gmail-a, kako bi povezali Yubikey uređaj s Gmail uslugom i ostvarili autentifikaciju u dva koraka. Potrebno je odabrati postavke korisničkog računa i odabrati "Sigurnost". Tamo uključimo "Potvrdu u dva koraka" i odaberemo mobilni uređaj kao način ostvarenja autentifikacije. Prikaže nam se sljedeći prozor:


Kod.jpg


Ispod QR koda kliknemo na link "Ne možete skenirati barkod" i prikaže nam se OATH znakovni niz u Base32 formatu. Yubico alat za konfiguraciju prepoznaje jedino kod u heksadecimalnom zapisu pa je ovaj dobiveni potrebno konvertirati:


Convert.jpg


Kada smo konvertirali kod, uključimo Yubico alat za konfiguraciju i odaberemo "Challenge-Response": "The Challenge-Response" omogućuje programsku interakciju između klijentske aplikacije i YubiKey-a uz potporu korisničkog sučelja softvera. Kompatibilan je sa "Yubico OTP" i "HMAC-SHA1" modovima.

Ako se koristi "Yubico OTP" mod, on šalje šest bajtni zahtjev i stvara odgovor koristeći Yubico OTP algoritam. U ovom načinu rada, YubiKey koristi neka promjenjiva polja, pa time stvara drugačiji odgovor svaki put, čak i ako je isti zahtjev.

"HMAC-SHA1" mod koji je korišten u ovom primjeru šalje 0-64 bajtni zahtjev i stvara HMAC koristeći HMAC-SHA1 algoritam u kombinaciji s 20 bajtnim tajnim ključem. U ovom načinu rada, YubiKey ne koristi promjenjiva polja i stoga generira identičan odgovor ako je zahtjev isti. Mi ćemo odabrati HMAC-SHA1 kako bi sinkronizorali naš Gmail račun sa lozinkom koju će nam kao odgovor generirati Yubikey.


Cr.jpg


Odaberemo "Configuration Slot" za Yubikey i u polje "Secret Key" zalijepimo preuzeti kod u heksadecimalnom obliku. Klikom na "Write Configuration", ispiše nam se jednokratna lozinka za početnu sinkronicaciju sa Gmail-om.

Prilikom svake prijave nam je potreban Yubikey kako bi nam kreirao jednokratnu lozinku. Ali vrijednost koja je generirana u 12:00:01 mora biti različita od one koja je generirana u 12:00:31, s tim da se tolerira razmak unutar 30 sekundi. S obzirom na to da Yubico nema bateriju i ne može pratiti trenutno vrijeme, za zahtjev koji šalje koristi TOTP (Time based One Time Password) algoritam. TOTP je proširenje gore navedenog HOTP algoritma koji se oslanja na korištenje točnog vremena kao ulaz za računanje kriptografskog sažetka (HMAC-SHA1). Stoga, kako bi stvorili TOTP odgovor koristeći YubiKey, Yubico je razvio malu aplikaciju koja šalje trenutno vrijeme na YubiKey. Aplikacija šalje trenutno vrijeme u OATH-TOTP formatu i prima natrag 160 bitni HMAC-SHA1 sažetak. Zatim ga obrađuje i prikazuje kao kod od 6 ili 8 znamenki.

Sada je potrebno preuzeti navedenu aplikaciju koji će svaki puta obaviti "Challenge-Response" i generirati TOTP. Ikona alata je nakon instalacije postavljena u alatnu traku. Kada se želimo prijaviti na Gmail korisnički račun, prvi korak je dokaz znanjem:


Prijava1.jpg


Zatim nam se prikazuje drugi prozor koji od nas traži novi kod. Kliknemo na Yubico TOTP generator i generiramo vremenski bazirani jednokratni kod:


Totp.jpg


Zatim upišemo generirani kod i ulazimo u Gmail uslugu:


Prijava2.jpg


Najbitniji dio autentifikacije u dva koraka je posjedovanje Yubikey uređaja. Kada je ispravno konfiguriran, pomoću njega dobivamo jednokratni vremenski bazirani kod za prijavu. Ako Yubikey nije umetnut u računalo, klikom na "Generate TOTP" dobiti ćemo upozorenje da Yubikey nije prisutan.

--Tomislav gec 20:47, 11. siječnja 2013. (CET)

Programska implementacija autentifikacije s dva faktora uz pomoć YubiKey-a

Za potrebe ovog projekta, izradili smo web aplikaciju u programskom jeziku PHP koja demonstrira primjenu autentifikacije s više faktora u realnom kontekstu. Aplikacija se sastoji od HTML forme za prijavu, PHP klase s YubiKey metodama, te PHP skripte koja testira podatke unešene u web formu pomoću metoda iz YubiKey klase. U polja unutar forme korisnik unosi svoje korisničko ime i lozinku, što predstavlja dokaz znanjem, i OTP generiran pomoću YubiKey-a, što predstavlja dokaz posjedovanjem. Ovisno o unešenim podacima, korisnikova prijava može biti odbačena ili prihvaćena. Aplikaciji se može pristupiti klikom na link, dok se PHP kod može vidjeti ovdje.

Napomena: izvorni kod klase Yubikey.php je dostupan na službenoj stranici proizvođača Yubico, te je korišten u skladu s licencom GNU GPL v2, pod kojom je kod objavljen.

Arhitektura YubiKey sustava za autentifikaciju

U uvodnom dijelu projekta opisali smo odvijanje provjere valjanosti OTP-a pomoću YubiKey validacijskog servera. Na web stranici proizvođača postoji opsežna dokumentacija koja u nekim slučajevima samo specificira zahtjeve koje je potrebno ispuniti kako bi se u određeni sustav integrirala provjera OTP-a, dok u drugim slučajevima zalazi u detalje implementacije u pojedinom programskom jeziku. Mi smo se koristili uputama navedenim u dokumentu "YubiKey Authentication Module Design Guideline". Taj dokument sadrži smjernice o pravilnoj izradi modula za autentifikaciju neovisno o odabranom programskom jeziku. U svakom slučaju, sustav za autentifikaciju sastoji se od sljedećih djelova [6]:


YK Arhitektura.png

YubiKey Authentication Module dio je web aplikacije u kojem se nalaze komponente koje moraju od korisnika primiti tražene podatke (korisničko ime, lozinka, OTP), te na YubiKey Validation Server proslijediti OTP, na što server odgovara je li OTP u redu ili ne. Pritom je komponenta pod nazivom Authentication Business Logic odgovorna za odluku hoće li se nečiji korisnički podaci prihvatiti ili ne. U komponenti YubiKey Client se zapravo nalazi YubiKey Web API koji je dostupan u velikom broju programskih jezika, a mi smo se odlučili na PHP implementaciju. Prihvatili smo takav dizajn arhitekture, te se naš autentifikacijski modul sastoji od sljedećih komponenti:

forma.html - korisnik unosi username, password i OTP

Yubikey.php - YubiKey Web API, sadrži sve potrebne metode za provjeru svojstava OTP-a, prosljeđivanje zahtjeva validacijskom serveru te vraćanje odgovora u komponentu s poslovnim pravilima

yubikeytest.php - PHP skripta s poslovnim pravilima, koristi metode koje nudi API, ovisno o odgovoru potvrđuje ili odbija prijavu

Realni sustav bi osim ovih komponenti sadržavao i bazu podataka u kojoj bi bili spremljeni korisnički podaci, te odgovarajuće module koji su zaštićeni ovim autentifikacijskim modulom.

Analiza YubiKey OTP lozinke

Kako bi se mogućnosti YubiKey Web API-a maksimalno iskoristile, osim arhitekture autentifikacijskog modula potrebno je poznavati i strukturu same OTP lozinke. Naime, takva lozinka se sastoji od više komponenti, te je bitno poznavati svaku od njih kako bi se znalo iskoristiti mogućnosti koje pružaju te komponente. Napominjem da ću se u ovoj analizi baviti samo strukturom OTP lozinke prema tvorničkim postavkama, budući da duljine pojedinih komponenti mogu varirati ovisno o konfiguraciji uređaja.

Svaka OTP lozinka sadrži fiksni dio i dinamični dio. Fiksni dio najčešće čini prvih 12 znakova koji su prisutni u svakoj OTP lozinci koju generira pojedini YubiKey. Ti znakovi su jedinstveni za svaki YubiKey i služe kao javni ID tog uređaja. Taj podatak nije tajan i s jedne strane služi nama za povezivanje pojedinog korisnika s određenim YubiKey-em, a s druge strane služi validacijskom serveru kako bi pronašao odgovarajući AES ključ za dekripciju dinamičkog dijela lozinke.

Dinamični dio lozinke je kriptirani niz znakova koji sadrže sljedeća polja:

YK StrukturaOTP.png

Private ID - ukoliko se koriste dijeljeni ključevi, ovo polje identificira korisnika koji je pokrenuo enkripciju, inače se mogu ostaviti nule

Usage Counter - brojač korištenja YubiKey-a (neovisno o načinu rada), mora se resetirati kada dođe do najviše vrijednosti (mala vjerojatnost događaja)

Timestamp - vremenski pečat, služi validacijskom serveru kako bi izračunao vrijeme između dva generiranja OTP-a unutar jedne sesije

Session Usage Counter - povećava se nakon svakog generiranja OTP-a

Random Number - slučajno generirani broj

Checksum - zaštitna suma

Detalji implementacije programskog rješenja

Već smo ranije rekli da smo prihvatili Yubico-ove smjernice za izradu autentifikacijskog modula. Prema tome, prvi korak izgradnje modula bilo je pronalaženje YubiKey klijenta, odnosno PHP Web API-a koji obavlja komunikaciju s validacijskim serverom. Odlučili smo se na upotrebu API-a do kojeg se može doći klikom na link. Na stranici proizvođača postojale su i druge implementacije YubiKey klijenta, ali smo se na ovakvu implementaciju odlučili prvenstveno zbog odlične dokumentiranosti te jednostavnosti uporabe.

YubiKey Web API je zapravo PHP klasa koja nudi sljedeće metode:

verify(OTP) - ulazni parametar je OTP lozinka, provjerava ispravnost OTP-a i prosljeđuje ispravni OTP validacijskom serveru, vraća TRUE za uspješnu autentifikaciju, FALSE za neuspješnu

getLastResponse() - vraća odgovor servera prilikom posljednjeg pokušaja autentifikacije

getTimestampTolerance() - vraća vrijednost tolerancije na razlike u vrijednosti vremenskog pečata

setTimestampTolerance(int) - postavlja vrijednost tolerancije na razlike u vrijednosti vremenskog pečata na vrijednost parametra u sekundama

getCurlTimeout - vraća duljinu vremenskog perioda unutar kojeg se čeka na odgovor validacijskog servera

setCurlTimeout(int) - postavlja duljinu vremenskog perioda unutar kojeg se čeka na odgovor validacijskog servera vrijednost parametra u sekundama

Osim navedenih javnih metoda, klasa sadrži konstruktor i nekoliko zaštićenih metoda koje se koriste prilikom provjere ispravnosti OTP-a. Naravno, kako bi koristili dostupne metode, prvo moramo instancirati klasu unutar naše PHP skripte, za što su nam potrebni parametri Client Id i simetrični ključ. Te podatke može dobiti svatko tko posjeduje YubiKey na ovoj stranici. Instanciranje se onda vrši na sljedeći način:

$apiID = 6044; 

$signatureKey = "wSn5dVh1NIlk3qcWF4SsDveyY+o="; 

$token = new Yubikey($apiID, $signatureKey);

Ovih par linija koda nam omogućuju da u našoj PHP skripti koristimo metode iz YubiKey klase. Zapravo, jedina metoda koja nam je zaista potrebna je verify($otp), kojoj jednostavno proslijedimo OTP unešen preko HTML forme, te rezultat metode proslijedimo metodama s implementiranim poslovnim pravilima koje će odlučiti hoće li i u kolikoj mjeri omogućiti korisniku pristup ostalim modulima web aplikacije. Kod naše PHP skripte vidljiv je na Snipplr-u.

Za implementaciju ovakve autentifikacije u realni sustav, potrebno je zadovoljiti određene preduvjete: svi korisnici koji žele koristiti autentifikaciju s dva faktora pomoću YubiKey-a moraju u bazi podataka imati evidentiran njihov Public_id, zajedno s ostalim podacima poput lozinke i korisničkog imena. Ukoliko se na taj način nekog korisnika ne poveže s određenim YubiKey-em, svaki korisnik bi se u sustav mogao prijaviti pomoću bilo kojeg YubiKey-a. Zbog jednostavnosti, u našoj web aplikaciji nismo koristili bazu podataka, već smo unutar koda postavili dummy varijable, u koje bi se u realnom kontekstu mogli upisivati stvari podaci iz baze podataka, te bi u tom slučaju aplikacija bila potpuno funkcionalna. Zbog toga se u našu web aplikaciju moguće prijaviti samo s YubiKey-em čiji Public_id smo spremili unutar varijabli.

Funkcioniranje naše demonstracijske aplikacije na pregledan način prikazano je donjim dijagramom toka.

YK-dt.png

Prikaz rada aplikacije

Rad s testnom aplikacijom je vrlo jednostavan - u odgovarajuća polja za unos potrebno je redom unijeti korisničko ime, lozinku i OTP lozinku. U ovom testnom scenariju svi podaci osim OTP-a su fiksni, te korisničko ime i lozinka glase "test". Statički dio lozinke je također povezan s korisničkim računom određenim danim podacima. Izgled login forme prikazan je na donjoj slici:

YK Login.png

Nakon unosa navedenih podataka, te generiranja lozinke pomoću YubiKey-a, klikom na gumb "Prijava" izvršava se provjera korisničkih podataka. Prvo se provjerava odgovaraju li korisničko ime i lozinka nekom od korisničkih računa u bazi podataka (u aplikaciji su hard-codirani dummy podaci), te se samo u slučaju ispravnih podataka provjerava je li i OTP u redu. U prvom slučaju smo unijeli sve točne podatke i dobili sljedeću poruku:

YK OK.png

Potom smo se vratili natrag na formu, te smo unijeli potpuno iste podatke kao i prošli put, pa nam je server vratio sljedeću poruku:

YK Fail.png

Budući da smo imali točne podatke za login, validacijskom serveru proslijeđena je OTP lozinka na provjeru, te je on zaključio da OTP nije valjan jer smo ga već koristili, što je istina. Vratio nam je odgovarajuću poruku, te se na temelju poslovnih pravila odlučilo da se korisniku neće dati pristup aplikaciji. To je samo jedna od mogućih poruka koje server vraća u slučaju neispravne OTP lozinke, te nema smisla da navodimo primjer za svaki slučaj.

--Ikovic 20:23, 11. siječnja 2013. (CET)

Zaključak

Danas, kada su mnogi od naših privatnih podataka rasprostranjeni po Web-u, sigurnost je ono što je najbitnija stavka. Ako se želimo dodatno zaštiti hardverom, YubiKey je potpuno praktično rješenje. Malen i efektivan, on je dokaz posjedovanjem koji koristimo kako bi se autentificirali na neki servis. Poput kućnog ključa koji nosimo uvijek u džepu, YubiKey je ključ našeg dijela Weba u kojem također ne želimo nepozvane goste. Gledajući sa financijskog aspekta, zanimljivo je pogledati "Total Cost of Ownership" istraživanje koje je proveo Yubico. Na donjoj slici su prikazani rezultati te studije [7]:

YK TCO.png

Naveden je financijski trošak korištenja YubiKey-a u usporedbi s drugim hardverskim i softverskim tokenima i SMS-om na scenariju poduzeća s 5000 zaposlenih u periodu od 3 godine. Način na koji je realiziran Yubikey u nekim stavkama drastično smanjuje financijski trošak. Konačni izračun pokazuje da je i cijena jedna od prednosti Yubikeya, a cijena je danas uz kvalitetu uvijek tema pregovora. Naravno, prikazane rezultate je potrebno uzeti sa zrnom soli jer je ipak riječ o promotivnom materijalu proizvođača.

Nadamo se da smo kroz ovaj projekt prikazali sva bitna obilježja i načine primjene YubiKey-a, te da smo na taj način nekome pomogli u odluci treba li mu takav uređaj ili ne.

--Ikovic 20:45, 11. siječnja 2013. (CET)

--Tomislav gec 20:46, 11. siječnja 2013. (CET)

Literatura

  1. Budin, L., Golub M., Jakobović, D., Jelenković, L. (2010) Operacijski sustavi, Zagreb: Element, p. 283.
  2. The YubiKey Manual - Version: 2.2 (2010) Web izvor na 11.01.2013.
  3. Willis, N. (2010) OATH: yesterday, today, and tomorrow, Web izvor na 11.01.2013.
  4. Gordon, W. (2012) Here's Everywhere You Should Enable Two-Factor Authentication Right Now, Web izvor na 14.10.2012.
  5. Yubico - Using the YubiKey with Gmail’s 2 Step Verification (2012) Web izvor na datum 05.01.2013.
  6. Yubico - YubiKey Authentication Module Design Guideline (2012) Web izvor na datum 07.01.2013.
  7. Yubico - Total Cost of Ownership Study (2011) Web izvor na datum 07.01.2013.
  8. Yubico - Cjenik, Web izvor na datum 11.01.2013.

--Ikovic 20:45, 11. siječnja 2013. (CET)

--Tomislav gec 20:46, 11. siječnja 2013. (CET)

Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima