24
1 Sveučilište u Zagrebu Fakultet elektrotehnike i računarstva Seminarski rad Simulator OTP uređaja Kolegij: Sigurnost računalnih sustava Nositelj: Prof. dr. sc. Marin Golub Student: Predrag Brođanac, dipl. inž.

Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

1

Sveučilište u Zagrebu

Fakultet elektrotehnike i računarstva

Seminarski rad

Simulator OTP uređaja

Kolegij:

Sigurnost računalnih sustava

Nositelj:

Prof. dr. sc. Marin Golub

Student:

Predrag Brođanac, dipl. inž.

Page 2: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

2

Sadržaj

1 Uvod ................................................................................................................................................ 3

2 Jednokratna lozinka ......................................................................................................................... 4

2.1 Generiranje OTP-a na osnovu brojača ..................................................................................... 4

2.2 Generiranje OTP-a na osnovu vremena .................................................................................. 4

3 HOTP algoritam ............................................................................................................................... 5

3.1 HMAC ....................................................................................................................................... 6

3.2 Generiranje HOTP vrijednosti .................................................................................................. 6

3.3 Sinkronizacija brojača na poslužitelju...................................................................................... 7

3.4 Sigurnost HOTP algoritma ....................................................................................................... 7

3.4.1 Analiza sigurnosti ............................................................................................................. 8

4 Simulator OTP uređaja .................................................................................................................. 10

4.1 Modul OTP ............................................................................................................................. 10

4.2 Simulator OTP uređaja .......................................................................................................... 11

4.2.1 Modul OTPTokenClass ................................................................................................... 13

4.2.2 Modul OTPToken ........................................................................................................... 15

4.3 Simulator servisa koji koriste OTP ......................................................................................... 16

4.3.2 Modul OTPServerClass .................................................................................................. 19

4.3.3 Modul OTPServer .......................................................................................................... 21

5 Zaključak ........................................................................................................................................ 23

6 Literatura ....................................................................................................................................... 24

Page 3: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

3

1 Uvod

U današnje vrijeme računalna sve više pronalaze svoju upotrebu unutar svakodnevnice. Sve više

svakodnevnih radnji je doživjelo svoj preobražaj na način da se izvode pomoću računala. Tako je

primjerice sve manji broj ljudi koji svoje račune plaćaju u ustanovama za plaćanje (banke i sl.), dok je

sve veći broj onih koji to rade putem nekog oblika e-bankarstva. Kupnja putem Interneta sve je

prisutnija. E-mail je postao standard komunikacije i sl. Međutim uvijek dolazimo do pitanja koliko je

sve to sigurno? Je li logiranje na stranice e-bankarstva te transfer novca uistinu siguran? Zasigurno

nije u potpunosti siguran no uz današnje sigurnosne protokole su mogućnosti zloupotrebe ovakvih

sustava svedene na prihvatljivu razinu. Takvi sustavi se neprekidno mijenjaju. Neki sustavi za koje se

je smatralo da su dovoljno sigurni danas više nisu u upotrebi ili nisu u upotrebi u tom obliku jer su se

tijekom vremena pronašli nedostaci odnosno pronađeni su sigurniji sustavi. Jedan od standardnih

načina logiranja u sustave jest upisivanje korisničkog imena i lozinke. Korisničko ime je u tom slučaju

javni podatak dok je lozinka podatak koji je poznat samo osobi koja je vlasnik korisničkog računa za

pristup tom sustavu. Kod takvih sustava lozinka je statička i rijetko se mijenja čime su povećane

mogućnosti neovlaštenog pristupa. Danas su sve češće autorizacije s dva koraka (2-step verification).

Danas postoji više različitih tipova ovakve autorizacije. U nastavku će biti riječi o autorizaciji pomoću

tokena koji generira jednokratnu lozinku za pristup sustavu.

Page 4: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

4

2 Jednokratna lozinka

Jednokratna lozinka (OTP – One-time Password) omogućava pristup različitim informacijskim

sustavima na način da je lozinka za pristup svaki puta drugačija. Na ovaj način se izbjegava niz

nedostataka standardne, trajne lozinke. Za generiranje ovakvih lozinki najčešće se koriste posebni

uređaji tzv. tokeni, no isto tako je moguće da ulogu tokena preuzmu mobilni uređaji, računalni

programi ili sl. Algoritmi na kojima se temelji rad ovakvih uređaja uglavnom se temelje na

nasumičnosti. To je obavezno iz razloga što bi inače bilo moguće predvidjeti sljedeću lozinku. Niz je

algoritama koji se koriste za generiranje tokena a u glavnom se temelje na nekom od sljedećih

principa:

• algoritam koji novu lozinku generira na osnovu brojača

• vremenska sinkronizacija između tokena i pripadnog poslužitelja

2.1 Generiranje OTP-a na osnovu brojača

Ovaj algoritam se temelji na internom brojaču koji se nalazi u samom OTP uređaju te na poslužitelju.

Postoji niz algoritama koji se za to koriste. U ovom radu će biti razmatran tzv. HOTP (HMAC-Based

One-Time Password) algoritam. Kod navedenog algoritma lozinka se generira pomoću tzv. HMAC-

SHA-1 funkcije a na osnovu brojača te još jednog ključa koji je najčešće oznaka token uređaja. Opći

algoritam se može jednostavno opisati sljedećom relacijom:

HOTP(K, C) = Truncate(HMAC-SHA-1(K, C))

Dakle, OTP se dobije na osnovu vrijednosti funkcije HMAC-SHA-1 nad parametrima C (brojač) te K

(ključ – oznaka uređaja). Budući da je vrijednost funkcije HMAC-SHA-1 160-bitovna a OTP najčešće

sadrži 6 do 8 znamenaka onda se koristi poseban algoritam (funkcija Truncate), koji će ovu vrijednost

svesti na 32-bitovnu iz koje će se onda dobiti OTP.

2.2 Generiranje OTP-a na osnovu vremena

Ovakvi OTP uređaji imaju u sebi integriran sat koji je sinkroniziran sa pripadnim poslužiteljem. Kod

takvih sustava lozinka se generira na osnovu trenutnog vremena. Princip je vrlo sličan generiranju

ključa pomoću brojača, no ovdje je brojač zamijenjen vremenskom varijablom T:

TOTP = HOTP(K, T)

gdje je T prirodan broj i predstavlja broj vremenskih koraka između inicijalne vrijednosti brojača (T0) i

trenutnog vremena.

� = �������� ��� ��� − ��� �

pri čemu je X unaprijed definirani period.

Page 5: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

5

3 HOTP algoritam

Kao što je rečeno u prethodnom poglavlju HOTP algoritam generira sljedeću lozinku na osnovu

HMAC-SHA-1 funkcije te sljedeća dva parametra:

• K – ključ

• C – brojač

Algoritam za generiranje OTP-a treba zadovoljavati sljedeće zahtjeve:

1. algoritam se treba temeljiti na sekvencama ili brojačima te se treba moći ugraditi u različite

tipove uređaja (tokene, mobilne telfone,...)

2. algoritam treba biti ekonomičan za implementaciju na način da za rad troši minimalno

energije, minimalni broj gumba, i sl.

3. algoritam treba raditi na uređajima koji ne podržavaju nikakve tipkovnice

4. vrijednost koja se prikazuje na ekranu uređaja treba biti jednostavno čitljiva

5. lozinke trebaju imati minimalno 6 numeričkih vrijednosti

6. treba biti implementirana korisniku pogodna mogućnost sinkronizacije brojača

7. algoritam treba koristiti javni ključ čija vrijednost treba biti minimalno 128-bitovna

Osnovni parametri algoritma dani su sljedećom tablicom:

Parametar Značenje

C Brojač – 8-bajtovna vrijednost koja mora biti sinkronizirana s poslužiteljem

K Ključ – najčešće oznaka tokena. Svaki token mora imati svoju jedinstvenu vrijednost ključa

T Broj pokušaja utipkavanja lozinke nakon koje će poslužitelj blokirati uređaj

S Parametar sinkronizacije:server će računati s vrijednosti HOTP-a prije nego što "zaključi" da se radi o pogrešnoj lozinki

D Duljina lozinke

Tablica 1 – Parametri HOTP algoritma

OTP se dobije iz relacije:

HOTP(K, C) = Truncate(HMAC-SHA-1(K, C))

Page 6: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

6

3.1 HMAC

HMAC (Key-Hashing for Message Authentication) omogućava provjeru integriteta podataka koji se

šalju putem nekog sustava, najčešće računalne mreže. Temelji se na tzv. MAC-u (Message

Authentication Codes). U nastavku će biti riječi o MAC algoritmu koji se temelji na kriptografskoj hash

funkciji (HMAC).

HMAC je moguće koristiti u kombinaciji s bilo kojom kriptografskom hash funkcijom (MD5, SHA-1,...).

Algoritam se temelji na višestrukoj primjeni funkcije kompresije na bloku podataka.

Neka je B duljina bloka podataka (u bajtovima) te neka je L duljina izlaza hash funkcije (u bajtovima)

(L=16 za MD5 funkciju, L=20 za SHA-1 funkciju). Ključ K može biti bilo koje duljine manje ili jednake od

B (duljina bloka hash funkcije). Najmanja preporučena duljina ključa K je L bajtova. Nadalje

definiramo dva različita stringa:

• ipad = bajt 0x36 ponavljan B puta

• opad = bajt 0x5C ponovljen B puta

Računanje vrijednosti funkcije HMAC nad zadanim tekstom (text) dana je sljedećom relacijom:

H (K XOR opad, H (K XOR ipad, text))

pri čemu je H neka hash funkcija.

3.2 Generiranje HOTP vrijednosti

HOTP vrijednost dobiva se u sljedeća 4 koraka:

1. HS = HMAC-SHA-1(K, C) – HS je duljine 20 bajtova

2. Sbit = DT(HS) – generiranje 4-bajtovnog stringa na osnovu vrijednosti HS

3. Snum = StrToNum(Sbit) – konvertira binarnu vrijednost S u broj

4. return D = Snum MOD 10 D – vraća vrijednost lozinke pri čemu je D duljina lozinke

Prvi korak ovog algoritma je trivijalan i odnosi se na pozivanje poznate funkcije HMAC-SHA-1. Koraci

3. i 4. su također trivijalni. Jedini problem u ovom trenutku jest korak 2. I njega ćemo detaljnije

obraditi u nastavku. Kao što možemo vidjeti to je funkcija Truncate – koju smo naveli na početku

ovog poglavlja.

• zadan string HS duljine 20 bajtova.

• OffsetBits = posljednja 4 bita 20. bajta stringa HS ( HS[19])

• P = HS[Offset] HS[Offset + 1] HS[Offset + 2] HS[Offset + 3]

• return posljednja 31 bita stringa P

Page 7: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

7

Primjer 1:

Zadan je string HS u bajtovnom obliku:

HS = 1F8698690E02CA16618550EF7F19DA8E945B555A te neka je D = 6

Prikaz ovog stringa po bajtovima je sljedeći:

Redni

broj

bajta

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Vr. bajta 1F 86 98 69 0E 02 CA 16 61 85 50 EF 7F 19 DA 8E 94 5B 55 5A

Posljednja četiri bita 20. bajta su: 0xA (posljednji bajt je 5A te su njegova posljednja 4 bita A).

Dakle OffsetBit = A te je pripadna OffsetValue = 10. P su dakle vrijednosti 10., 11., 12. i 13. bajta.

P = 0x50EF7F19

Posljednjih 31 bitova ovog stringa su: 010000111011110111111100011001, što u dekadskom sustavu

iznosi: 284131097.

Budući da je D = 6 dobivamo da je 284131097 MOD 106 = 131097. Dakle dobiveni HOTP je 131097.

3.3 Sinkronizacija brojača na poslužitelju

Budući da se brojač na poslužitelju ne mora nužno povećati svaki puta kada se poveća brojač na

token uređaju, često se događa da brojači nemaju jednaku vrijednost. U tom slučaju, budući da

vrijednosti brojača nisu jednake niti pripadne lozinke neće biti jednake te bi se autorizacija tretirala

kao neuspješna. Kako se to ne bi dogodilo na poslužitelju se definira parametar S – parametar

resinkronizacije. Konkretno to znaći da ukoliko je vrijednost brojača na poslužitelju jednaka CP onda

će se provjeravati brojaći CP, CP + 1, CP + 2,... CP + S – 1. Ukoliko neki od brojača (CP + i) zajedno s

pripadnim ključem K da OTP broj koji je ekvivalentan broju dobivenom na tokenu autorizacija će biti

uspješna te će nova vrijednost brojača postati jednaka vrijednost za koju su se OTP-ovi poklopili (CP =

CP + i).

3.4 Sigurnost HOTP algoritma

Svaki OTP algoritam siguran je onoliko koliko je sigurna aplikacija odnosno njen pripadni

autentifikacijski protokol. Veliki odraz na sigurnost imaju parametri T (broj pokušaja utipkavanja

lozinke nakon kojeg će sustav onemogućiti ponovni pristup) i S (parametar resinkronizacije).

Sljedeći važan parametar je duljina lozinke (D). Kraća lozinka omogućava probijanje lozinke metodom

grube sile, stoga poslužiteljska aplikacija treba biti u mogućnosti detektirati takav napad te ga

zaustaviti. To se postiže definiranjem parametra T. Nakon što korisnik unese pogrešnu lozinku sustav

za odgovarajućeg korisnika povećava broj pogrešnih pokušaja za 1 te u trenutku kada broj pogrešnih

pokušaja dosegne vrijednost T sustav blokira tog korisnika i on se više ne može logirati u sustav.

Preporuča se da vrijednost parametra T ne bude velika.

Page 8: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

8

Druga mogućnost za suzbijanje napada grubom silom jest da se nakon svakog neuspješnog pokušaja

logiranja sustav „zamrzne“ na neko dodatno vrijeme A. Tako primjerice za prvi pogrešan pokušaj

logiranja sustav će biti blokiran na A sekundi, nakon 2 uzastopna pokušaja će biti blokiran na 2*A

sekundi, odnosno nakon K uzastopnih bezuspješnih pokušaja sustav će biti blokiran K * A sekundi.

Ovakav pristup onemogućava napade koji se temelje na tehnici paralelnog pogađanja.

3.4.1 Analiza sigurnosti

Kako bismo imali uspješno implementiran HOTP sustav korisnik i poslužitelj trebaju imati isti:

• ključ - K

• algoritam za računanje OTP-a – ALG

• brojač - C

Korisnik se autentificira slanjem vrijednosti ALG(K, C) poslužitelju. Dobivenu vrijednost z poslužitelj će

prihvatiti ukoliko postoji broj i takav da je z = ALG(K, i), pri čemu je i neki od brojeva iz skupa: CP, CP +

1,.... CP + S – 1. Pri čemu je CP trenutna vrijednost brojača na poslužitelju a S je parametar

resinhronizacije. Ukoliko postoji takav i za koji je z = ALG(K, i) tada će vrijednost poslužiteljskog

brojača postati i (CP = i).

Formalni "neprijatelj" B, koji želi napasti sustav trebao bi dakle uspjeti spoznati algoritam (ALG) te

ostale sistemske parametre (K i C).

Prije nego nastavimo s razmatranjima dokazat ćemo sljedeću lemu:

Lema 1:

Neka je 1 ≤ m ≤ N, prirodan broj te neka je N = m * q + r. Neka je z ∈ Zm za koji vrijedi:

P {N, M}(z) = p[x mod m = z : x ∈ Zn]

Tada za svaki z ∈ Zm vrijedi:

{ }( )

≤≤

<≤+

=mzrjeako

N

q

rzjeakoN

q

zmNP,

0,1

,

Dokaz:

Neka je nasumična varijabla X uniformno distribuirana nad Zn. Tada je:

Page 9: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

9

{ }( ) [ ][ ] [ ] [ ] [ ]

≤≤

<≤+

≤≤−

−<≤−

⋅−+⋅=

<≤=⋅<≤+<=⋅<===

mzr

rzNN

q

mzmqN

mqNzmqNn

mqN

mN

mq

NXmqzmXpNXmqpmqXzmXpmqXp

zmXpzmNP

,0

0,1

,0

0,1

1

|mod|mod

mod,

g

Neka je N = 231, d = 6 i m = 10d

. Ako je x nasumičan broj iz Zn(x je nasumični 31-bitovni string).

Prema Lemi 1 slijedi da je vjerojatnost da će x biti traženi broj dana sa:

<≤⋅=≈

<≤⋅=≈=

66316-31

6316-31

10mod10mod2,100.999789774780.000000992

2147

10mod2mod0,101.000240240440.000001002

2148

)(mxza

mxzaxp

Pogledajmo nadalje što se događa s vjerojatnošću pogađanja broja ukoliko imamo T pokušaja

pogađanja te ako je parametar resinkronizacije na serveru jednak S:

Propozicija 1:

Neka je N = 231, m = 10d, m < N. Nadalje neka je N = q * m + r i B napad s T mogućih pokušaja

pogađanja te a ≤ 2C – S. Tada je vjerojatnost da ćemo pogoditi traženu vrijednost u V pokušaja dana

sa:

( ) ( )N

qTSBp

1+⋅⋅≤ .

Promotrimo navedenu vrijednost za d = 6:

Budući da je d = 6 i N = 231, slijedi da je q = 2147. Za navedene parametre vrijedi:

( ) ( ) 631

1000024045,12

12147 −⋅⋅⋅≈+⋅⋅≤ TSTS

Bp

Promotrimo s druge strane vjerojatnost pogađanja broja x koji se sastoji od d znamenaka u T

pokušaja, pri čemu parametar resinkronizacije ima vrijednost S metodom grube sile:

Propozicija 2:

Neka je N = 231, m = 10d, m < N. Nadalje neka je N = q * m + r i S ≤ m. Napad grubom silom B s T

pokušaja bit će uspješan s vjerojatnošću:

Page 10: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

10

( ) ( ) SqT

Bp

+−−=312

111

Što približno iznosi:

( ) ( )312

1+⋅⋅≈ qTSBp .

Iz navedenih razmatranja slijedi da je napad grubom silom efikasniji od bilo kojeg drugog napada.

4 Simulator OTP uređaja

Cilj ovog rada bio je kreirati računalni program koji će simulirati OTP uređaj. Simulator se sastoji od

dva dijela (aplikacije):

• aplikacija koja simulira OTP uređaj

• aplikacija koja simulira servise u koje se korisnik logira koristeći OTP

Aplikacije su izrađene u .NET tehnologiji te je za njihovo korištenje potrebno na računalu imati

instaliran .NET Framework 4.

Aplikacija je kreirana modularno te se pojedini moduli mogu kao gotovi koristiti u nekim budućim

aplikacijama.

4.1 Modul OTP

OTP je osnovni modula aplikacije koji je namijenjen računanju vrijednosti OTP-a na osnovu danih

parametara (ključa i brojača). Ovaj modul ima samo jednu klasu – OTPClass, koja se koristi u oba

dijela aplikacije (simulatoru OTP uređaja i simulatoru servisa koji koristi OTP). Ova klasa sadrži

osnovne podatke (svojstva) potrebne za generiranje OTP-a, metodu koja generira OTP te potrebne

konstruktore:

Element Opis

String TokenKey Oznaka tokena

int Counter Trenutna vrijednost brojača

int NUMDigit Duljina generiranog OTP-a

OTPClass() Konstruktor

OTPClass(String TokenKey) Konstruktor

OTPClass(String TokenKey, int Counter)

Konstruktor

Page 11: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

11

OTPClass(String TokenKey, int Counter, int NUMDigit)

Konstruktor

String Next() Metoda koja generira OTP na osnovu trenutne

vrijednosti brojača te oznake tokena

Tablica 1: Svojstva i metode klase OTPClass

Najvažnija metoda ove klase jest metoda Next() koja na osnovu svojstava generira sljedeći OTP

algoritmom opisanim u prethodnom poglavlju. Budući da se radi o metodi koja je ovdje ključna u

nastavku je naveden njen cjelokpan programski kod:

public String Next() {

HMACSHA1 hma_sha_1 = new HMACSHA1( Encoding .Default.GetBytes(TokenKey)); byte [] hmac_result =

hma_sha_1.ComputeHash( Encoding .Default.GetBytes(Counter.ToString())); Counter++; int offset = hmac_result[19] & 0xf; int bin_code = (hmac_result[offset] & 0x7f) << 24 | (h mac_result[offset]

& 0xff) << 16 | (hmac_result[offset] & 0xff) << 8 | (hmac_result[offset] & 0xff);

bin_code %= ( int ) Math .Pow(10, NUMDigit); String tmp = bin_code.ToString(); while (tmp.Length < NUMDigit)

tmp = "0" + tmp; return tmp;

}

4.2 Simulator OTP uređaja

Cilj ovog modula jest simulirati rad OTP uređaja (tokena). Samo sučelje je kreirano na način da

"podsjeća" na OTP uređaj.

Slika 1: Simulator OTP uređaja

Page 12: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

12

Ovaj simulator zamišljen je tako da se može istovremeno koristiti za više servisa. Popis servisa koje će

podržavati naveden je u postavkama simulatora i može se mijenjati.

Pokretanjem simulatora na ekranu će se pojaviti prozor kao na slici 1. Simulator ima svoj broj (Token

NO) koji predstavlja ključ (key) koji će se koristiti prilikom logiranja u neki od simulatora servisa.

Na samom početku od korisnika se traži da unese lozinku za pristup simulatoru. U inicijalnim

postavkama je lozinka postavljena na 0000 i ona se ne može programski mijenjati. Nakon ispravno

unesene lozinke na ekranu simulatora se pojavljuje prozor za odabir aplikacije za kuju želimo

generirati OTP (Slika 2).

Slika 2: Simulator OTP uređaja – ekran za odabir aplikacije.

Aplikacija se odabire na način da se unese redni broj aplikacije. Aplikacije su numerirane brojevima

od 0 do 9 a u inicijalnoj verziji programa su aktivne aplikacije s rednim brojevima 0, 1 i 2. Nakon

odabira aplikacije na ekranu se pojavljuje OTP. Broj znamenaka OTP-a za neku aplikaciju određen je

postavkama te aplikacije. Za generiranje sljedećeg OTP-a potrebno je pritisnuti tipku < na OTP

simulatoru. Svaka aplikacija ima svoj poseban brojač koji je također spremljen u postavkama

aplikacije te se prilikom svakog generiranja novog OTP-a taj brojač poveća za 1.

Aplikacija je realizirana kao Windows Forms Aplikacija koja se uvelike oslanja na modul

OTPTokenClass.

Page 13: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

13

4.2.1 Modul OTPTokenClass

Ovaj modul sadrži implementaciju svih važnih dijelova programa OTP simulator. Slično kao i modul

OTP klase ovog modula moguće je koristiti i u nekim drugačijim implementacijama OTP simulatora

(simulator za mobilne uređaje, simulator za web i sl.). Modul OTPTokenClass sastoji se od dvije

klase:

• Token – sadrži sve potrebne podatke za neki OTP uređaj. U sljedećoj tablici su pobrojana

svojstva te konstruktori ove klase:

Element Opis

String Key Oznaka OTP uređaja

int Count Trenutna vrijednost brojača

int CodeLength Duljina OTP-a (broj znamenaka OTP-a)

Token() Konstruktor bez parametara

Token(String Key, int Count, int CodeLength)

Konstruktor s osnovnim parametrima

Tablica 2: Svojstva i metode klase Token

• TokenPresenter – sadrži implementaciju svih važnijih funkcionalnosti OTP simulatora:

Element Opis

TokenPresenter(ITokenView View) Konstruktor čiji je parametar naziv klase

koja implementira interface ITokenVIew

void ButtonPressed(int button) Na osnovu pritisnutog gumba mijenja vrijednost svojstva ScreenText – interfacea ITokenView odnosno sadržaj na ekranu tokena

void Tick() Isključuje simulator nakon zadanog vremenskog intervala neaktivnosti

void CreateCode() Kreira sljedeći OTP za zadanu aplikaciju te povećava i sprema pripadni brojač

Tablica 3: Svojstva i metode klase TokenPresenter

te sučelje:

• ITokenView – sadrži zaglavlja svih potrebnih svojstava i metoda koje će moći koristiti

sučelje OTP simulatora:

Page 14: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

14

Element Opis

String TokenID Oznaka tokena

int NumberOfAttempts Redni broj krivog pokušaja logiranja u OTP uređaj

int TotalNumberOfAttempts Ukupni broj pogrešnih pokušaja nakon kojeg će se

simulator automatski zaključati

String ScreenText Sadržaj ekrana OTP simulatora

String ScreenMask Maskiranje ekrana

Boolean Generated Vraća true ako je OTP već generiran u trenutnom

korištenju aplikacije, inače vraća fals

int WaitUntilClose Nakon koliko sekundi će se simulator isključiti nakon što

nad njim neće biti nikakve aktivnosti

Boolean Logged Vraća vrijednost true ako je korisnik uspješno logiran u

OTP simulator, inače vraća false.

int ApplicationNumber Redni broj trenutno aktivne aplikacije na OTP simulatoru

IList<Token> AllTokens Popis svih aplikacija koje podržava OTP simulator

int PasswordLength Duljina OTP-a za danu aplikaciju

String Password Vrijednost lozinke koju je korisnik upisao u simulator

neposredno nakon uključivanja simulatora

void SaveData() Sprema vrijednosti brojača na za to predviđeno mjesto

(datoteka, konfiguracijska datoteka,...)

void LogIn() Logiranje korisnika

void Disable() Zaključava simulator (zbog prekoračenog broja

uzastopnih pokušaja ulaska u aplikaciju)

void CloseToken() Zatvara simulator

void ResetTimer() Resetira timer nakon kojeg će se simulator ugasiti

Tablica 4: Svojstva i metode sučelja ITokenView

Page 15: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

15

4.2.2 Modul OTPToken

Implementacija simulatora nalazi se u modulu OTPToken. U ovom slučaju ta klasa predstavlja

Windows Forms Aplikaciju koja ima samo jednu klasu (prozor kao na slici 1) te implementira klasu

ITokenView.

Prilikom pokretanja ove aplikacije potrebno je učitati određene podatke koji su potreban za rad

simulatora. Svi ti podaci su u ovom slučaju spremljeni u konfiguracijsku datoteku programa

(app.config). Podaci su spremljeni kao svojstva aplikacije a radi se o sljedećim svojstvima:

• Pass – vrijednost passworda kriptiranog SHA funkcijom

• PasswordLength – broj znamenaka za početnu lozinku kod uključivanja simulatora

• TokenNumber – oznaka Tokena

• NumberOfError – ukupni broj pogrešnih pokušaja logiranja

• TotalNumberOfErrors – broj pokušaja logiranja u Simulator nakon kojeg će simulator

biti blokiran

• Tokens – popis aplikacija koje se mogu koristiti na simulatoru. Za svaku aplikaciju čuvaju se

sljedeće vrijednosti, koje su međusobno odvojene znakom "|", dok su podaci o aplikacijama

odvojeni znakom ";":

o Oznaka – broj simulatora u čijem nastavku slijedi redni broj aplikacije

o Trenutne vrijednosti brojača

o Duljina OTP-a koji će se generirati za aplikaciju

Npr. 123456780|135|6;123456781|0|7 – ovdje se radi o dvije aplikacije, čije su oznake: 123456780 i

123456781. Brojač prve aplikacije ima vrijednost 135 dok je brojač za drugu aplikaciju postavljen na 0

te prva aplikacija generira OTP duljine 6 znamenaka dok druga generira OTP od 7 znamenaka.

Klasa OTPToken u osnovi ne radi puno toga, ona sve poslove uglavnom delegira klasi

TokenPresenter koja obrađuje sav važan posao. Najvažnije metode klase OTPToken su

konstruktor koji iz konfiguracijske datoteke učitava sve parametre aplikacije:

public OTPToken() {

InitializeComponent(); tok = LoadTokens(); _tokenID = Properties. Settings .Default.TokenNumber; tokenNUM.Text = "Token NO: " + _tokenID; _numberOfAttempts = Properties. Settings .Default.NumberOfError; _totalAttemptsCount =Properties. Settings .Default.TotalNumberOffError; _password = Properties. Settings .Default.Pass; _passLength = Properties. Settings .Default.PasswordLength; _presenter = new TokenPresenter ( this );

}

Page 16: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

16

te metoda LoadTokens() koja iz konfiguracijske datoteke učitava podatke o svim aplikacijama

koje podržava token:

private IList <Token > LoadTokens() {

String [] tmp = Properties. Settings .Default.Tokens.Split( ';' ); tok = new List <Token >(); foreach ( String s in tmp) {

String [] temp = s.Split( '|' ); Token t = new Token (temp[0], Convert .ToInt32(temp[1]),

Convert .ToInt32(temp[2])); tok.Add(t);

} return tok;

}

Nadalje je definirana metoda za svaki klik na gumb a svaka od tih metoda samo poziva metodu

ButtonPressed klase TokenPresenter prosljeđuje joj podatke o gumbu koji je pritisnut

(vrijednost koja piše na gumbu, za gumb < prosljeđuje vrijednost 10). Metoda ButtonPressed će

obraditi događaj te će putem svojstava i metoda sučelja ITokenView izmijeniti podatke na ekranu

simulatora. U nastavku definicije ove metode su još implementacije svih svojstava i metoda sučelja

ITokenView koje se uglavnom svode na postavljanje i vraćanje odgovarajučih svojstava.

4.3 Simulator servisa koji koriste OTP

Za ilustraciju rada OTP simulatora kreirana je aplikacija Servisi koja omogućava pokretanje triju

aplikacija koje za logiranje trebaju OTP. Pokretanjem aplikacije Servisi na ekranu će se pojaviti sljedeći

prozor:

Slika 3: Osnovni prozor aplikacije Servisi.

Kao što možemo primijetiti ovdje su definirana 3 servisa:

• Internet bankarstvo

Page 17: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

17

• Internet kupovina • Online shop #2

Ovi servisi (aplikacije) predstavljaju tri aplikacije koje smo imali kod simulatora OTP uređaja (Internet

bankarstvo – aplikacija 0, Internet kupovina – aplikacija 1, Online shop #2 – aplikacija 2).

Klikom na neku od stavki na prozoru Servisi otvorit će se određeno sučelje za određeni servis:

Slika 4: Sučelje servisa Internet bankarstvo

Pokretanjem određenog servisa potrebno je upisati broj tokena (u osnovnim postavkama aplikacije je

to broj 12345678) te pročitati broj koji je na tokenu generiran nakon što je odabrana odgovarajuća

aplikacija. Dobiveni broj potrebno je prepisati u okvir za unos teksta OTP. Ukoliko su brojači

"sinkronizirani" te ukoliko su ispravno upisani broj tokena i OTP na ekranu će se pojaviti poruka da je

ulaz u aplikaciju moguć (Slika 5) u suprotnom će se pojaviti poruka o greški te broju pogrešnih

pokušaja (Slika 6).

Page 18: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

18

Slika 5. Uspješno pokretanje servisa pomoću OTP-a

Slika 6. Neuspjeli pokušaj pokretanja servisa

Nakon što korisnik više puta (ovisno o servisu) uzastopno unese krivi OTP servis će biti blokiran.

Slično kao i Simulator OTP uređaja i ovaj simulator se sastoji od dva modula. Generički modul

(OTPServerClass) koji sadrži sve potrebne metode za implementaciju pojedinog servisa. Drugi

modul je OTPServer implementira konkretni servis koristeći metode i svojstva modula

OTPServerClass.

Page 19: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

19

4.3.2 Modul OTPServerClass

Kao što je već rečeno ovaj modul sadrži čitavu funkcionalnost koja je potrebna za autentifikaciju

pomoću OTP-a. Sastoji se od dvije klase:

• Service – sadrži sve potrebne podatke o jednom servisu:

Element Opis

String ID Oznaka servisa

String Name Naziv servisa

int CodeLength Duljina OTP-a

int TotalNumberOfAttemts Ukupni broj dozvoljenih pogrešnih pokušaja logiranja u servis

nakon kojega će servis biti blokiran(inicijalno 3)

int ForwardLook Parametar resinkronizacije (koliko sljedećih vrijednosti brojača će

se na serveru provjeravati), inicijalno je vrijednost ovog svojstva

postavljena na 30

int Count Vrijednost brojača za zadani servis

int NumberOfAttempts Broj pogrešnih pokušaja logiranja u aplikaciju

Boolean Locked Zaključan servis

Service() Konstruktor klase

Service(String ID, int

Count, int NumberOfAttempts,

Boolean Locked)

Konstruktor klase

Tablica 5: Svojstva i metode klase Service

• ServerPresenter – sadrži osnovnu funkcionalnost za logiranje u jedan servis putem

OTP-a

Element Opis

ServerPresenter(IServerView View) Konstruktor klase čiji je parametar ulazna forma za

logiranje u neki servis a koja implementira sučelje

IServerView

void LogIn() Logira korisnika u servis putem oznake OTP uređaja te

vrijednosti OTP broja.

Ukoliko ne postoji servis sa zadanom oznakom vratit će

poruku o greški.

Isto tako poruku o greški će vratiti i ukoliko servis postoji a

Page 20: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

20

pogrešno je unesen OTP. U tom će selućaju povečati brojač

za 1 te će provjeriti je li broj pogrešnih pokušaja dosegao

maksimalni dozvoljeni broj te će u tom slučaju pozvati

metodu za blokiranje servisa.

Ukoliko postoji servis i OTP je ispravan resetirat će se

brojač pogrešnih pokušaja logiranja u servis te će njegova

vrijednost postati 0 isto tako će vrijednost brojača

(Coutner) postaviti na trenutnu vrijednost.

Tablica 6: Svojstva i metode klase ServerPresenter

te sučelja:

• IServerView – sadrži zaglavlja svih metoda i svojstava koje omogućavaju kreiranje

instance jednog servisa

Element Opis

String TokenNO Oznaka tokena

String OTPNO Vrijednost OTP-a

int NumberOfAttempts Broj pogrešnih pokušaja logiranja u servis

int CodeLength Duljina OTP-a

int ForwardLook Vrijednost parametra resinkronizacije

Service ActiveService Vraća aktivni servis (na osnovu oznake tokena)

void UpdateCunter(Service u) Povećava vrijednost brojača

void ShowMainScreen() Prikazuje glavni ekran servisa (ukoliko je logiranje bilo

uspješno)

void ShowOTPError(int i) Ispisuje poruku da je unesen pogrešan OTP i-ti puta za

redom

void ShowServiceError() Ispisuje poruku da ne postoji token s unesenim brojem

void ShowLockedError() Ispisuje poruku da je servis blokiran

Tablica 7: Svojstva i metode sučelja IServerView

Page 21: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

21

4.3.3 Modul OTPServer

Ovaj modul sadrži grafičko sučelje aplikacije za simuliranje rada servisa te se sastoji od osnovnog

prozora za prikaz svih aktivnih servisa (slika 3). Klikom na neku od stavki iz popisa otvara se prozor

pripadnog servisa.

Popis svih servisa zajedno sa pripadnim svojstvima u ovom se slučaju nalazi u bazi podataka. Baza

podataka se sastoji samo od jedne tablice (Tokens) koja ima sljedeći oblik:

Slika 7. Prikaz podataka u tablici Tokens

Svaki servis ima svoj ID. ID je ovdje kombinacija oznake tokena (12345678) te rednog broja aplikacije

unutar tokena (u ovom slučaju su to aplikacije 0, 1 i 2).

Nakon pokretanja glavnog prozora aplikacije Servisi korisnik će dvostrukim klikom na sličicu, iz popisa

servisa, pokrenuti prozor pojedinog servisa. Klikom na neki od servisa poziva se metoda koja pokreće

odgovarajući servis, te tom servisu prosljeđuje sve podatke važne za njega. U ovom slučaju ta metoda

ima sljedeći oblik:

private void ServiceTree_NodeMouseDoubleClick( object sender, TreeNodeMouseClickEventArgs e) {

Form f; switch (e.Node.Index) {

case 0: f = new OTPServer (Services[0]); f.ShowDialog(); break ;

case 1: f = new Service2 (Services[1]); f.ShowDialog(); break ;

case 2: f = new Service3 (Services[2]); f.ShowDialog(); break ;

} }

Svaki serivs u ovom slučaju ima karakterističan oblik i sastoji se od prozora za unos oznake tokena te

prozora za unos OTP-a (slika 4). Svaki servis je jedna Windows forma koja implementira sučelje

IServerView. Ta forma treba raspolagati sa svim podacima vezanim uz servis (ID, brojač,...) a te

podatke će dobiti iz glavnog prozora aplikacije (Servisi):

public Service2( Service s) {

InitializeComponent(); _presenter = new ServerPresenter ( this ); this .service = s; this .Text = s.Name;

Page 22: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

22

this .serviceName.Text = s.Name; }

Nakon pokretanja servisa korisnik će u prozor upisati oznaku tokena te će iz OTP simulatora prepisati

broj i kliknuti na gumb za logiranje. Sam postupak logiranja svodi se na pozivanje metode LogIn

klase ServerPresenter.

Page 23: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

23

5 Zaključak

Token uređaje uglavnom koristimo kako bismo postupak autoriziranja u neki sustav učinili sigurnijim

jer se zahtjeva logiranje u dva koraka. Radi se o tome da imamo token uređaj i poslužiteljsku

aplikaciju u koju se želimo logirati te je za potrebe logiranja potrebno unijeti oznaku tokena te broj

koji je generiran na tokenu koji fizički moramo imati.

U ovom radu ilustriran je jedan od načina funkcioniranja token uređaja te pripadne poslužiteljske

aplikacije. Svi dijelovi programa napisani su modularno na način da ih je moguće iskoristiti i za neke

druge tipove .NET aplikacija. Osim toga dana je ideja korištenja istog tokena za više aplikacija. Ova

ideja mogla bi se doraditi na način da se doradi postupak registriranja nove aplikacije na tokenu te

registriranje tokena na nekoj aplikaciji. Nakon što imamo uređaj ili simulator uređaja koji je

primjerice moguće instalirati na mobilni telefon, a koji podržava više aplikacija istovremeno, to bi

omogućilo širu i češću upotrebu ovakvih uređaja ne samo u elektroničkom bankarstvu, gdje se oni

danas uglavnom koriste, već i za neke druge usluge, primjerice: pristup webmailu, sigurnoj kupnji

putem Interneta i sl.

Page 24: Sveučilište u Zagrebu Fakultet elektrotehnike i računarstvasigurnost.zemris.fer.hr/ostalo/2011_brodjanac/OTP.pdf · Algoritam se temelji na višestrukoj primjeni funkcije kompresije

24

6 Literatura

[1] D. M'Raihi, M.Bellare, F. Hoornaert, D. Naccache, O. Ranen, HOTP: An HMAC-Vased One-

Time password Algorithm, Network Working Group, 2005

[2] D. M'Raihi, S. Machani, M. Pei, J. Rydell, TOTP: Time-Based One-Time Password Algorithm,

Internet Engineering Task Force, 2011

[3] H. Krawczyk, M. Bellare, R. Canetti, HMAC: Key-Hashing for Message Authentication,

Network Working Group, 1997

[4] http://en.wikipedia.org/wiki/One-time_password

[5] http://en.wikipedia.org/wiki/Security_token