100 likes | 206 Views
HOTP - HMAC-Based One-Time Password Algorithm. Készítette: Tóth Balázs Viktor. Motivációk. Kevés two-factor autentikáció Hardver-, és szoftvergyártók közötti együttműködés hiánya Nyílt szabványok hiánya (magas költségűek, nem elterjedtek…) Statikus jelszavak alkalmatlansága
E N D
HOTP - HMAC-BasedOne-TimePasswordAlgorithm Készítette: Tóth Balázs Viktor
Motivációk • Kevés two-factor autentikáció • Hardver-, és szoftvergyártók közötti együttműködés hiánya • Nyílt szabványok hiánya (magas költségűek, nem elterjedtek…) • Statikus jelszavak alkalmatlansága • nyílt szabvány → minden műszaki közösség által hozzáférhető • OTP: legegyszerűbb és leghíresebb • Fő előnye: nem kell semmilyen kliens szoftvernek installálva lennie a felhasználó gépére (roaming)
A HOTP algoritmus • HS = HMAC-SHA-1(K,C), ahol HS egy 20 bájtos string • Sbits = DT(HS), ahol 4 bájttá alakítunk, DT 31 bittel tér vissza • Snum = StToNum(Sbits), ami S-t egy 0…231-1 értékek közötti számmá konvertálja. • D = Snummod 10Digit, ahol D egy szám 0…10Digit-1 között. • A Truncate függvény (2. és 3. lépés) : • DT(String), ahol String = String[0], … ,String[19] • Legyen OffsetBits a low-order 4 bitje String[19]-nek. • Offset = StToNum(OffsetBits), ahol 0 <= OffSet <= 15 • P = String[Offset], … , String[Offset+3] • Az utolsó 31 bitje P-nek az output.
Példa Digit = 6-ra • Az utolsó bájt 19, aminek a hexa értéke: 0x5a. • Az alsó 4 bit értéke 0xa (ez az offset érték). • Az offset érték a 10. bájt (0xa). • A 4 bájt értéke, ami a 10. bájttól indul 0x50ef7f19, ami a DBC1 (DynamicBinaryCode). • Az MSB-je a DBC1-nek 0x50, így DBC2 = DBC1 = 0x50ef7f19 (1357872921) • HOTP = DBC2 modulo 106 = 872921 int offset = hmac_result[19] & 0xf ; int bin_code = (hmac_result[offset] & 0x7f) << 24 | (hmac_result[offset+1] & 0xff) << 16 | (hmac_result[offset+2] & 0xff) << 8 | (hmac_result[offset+3] & 0xff) ;
Biztonsági megfontolások, elvárások • T-nek és s-nek és Digit-nek van szerepe a biztonság terén • Nem szabad sérülékenynek lennie egy brute force támadással szemben • Egy biztonságos csatornán keresztül kell implementálni, hogy biztosítható legyen a felhasználók közötti interakciók biztonsága • A HOTP biztonságossága az alábbi formulával fejezhető ki: Sec = sv/10Digit
A HOTP értékek validációja • A HOTP kliens növeli a számlálóját és utána kiszámolja a következő HOTP értéket • Ha az autentikációs server által fogadott érték megegyezik a kliens által számolt értékkel, akkor a HOTP érték validálva van • A server a sikeres validáció után növeli a számlálóját egyel • Ha a server által fogadott érték nem egyezik meg a kliens által számolt értékkel, akkor a server elindítja az újraszinkronizáló protokollját mielőtt egy újabb értéket kérne • Ha az újraszinkronizáció sem sikerül, akkor a server egy újabb autentikációs igazolást kér a protokolltól, amíg a maximális számú próbálkozást el nem éri • A maximum számú próbálkozást elérve a servernek ki kell (SHOULD) zárnia az ügyfelet és értesítenie a felhasználót
Megelőzés a szerverben • A HMAC-SHA-1 érték egy rövidebb értékké alakítása lehetővé teszi egy brute force támadás sikerességét • A T érték egy akadályozási (throttling) paraméter, ami meghatározza a maximum számú lehetséges próbálkozást egy OTP validálására • A T értékét a lehető legalacsonyabbra kell állítani, hogy még ne zavarja a használhatóságot • Késleltetési séma: Minden sikertelen próbálkozásra, A-ra az autentikációs server vár T*A másodpercet
A számláló újraszinkronizálása • Annak ellenére, hogy a server számlálója csak egy sikeres HOTP autentikáció után növekszik, a számláló a tokenen minden alkalommal növekszik, amikor a felhasználó egy új HOTP-t kér. • Emiatt a számláló értékek a serveren és a tokenen lehet, hogy nincsenek szinkronban • Az s look-ahead paraméter segítségével a server újraszámolja a következő s HOTP-server értéket és ellenőrzi a fogadott HOTP kliens értékkel szemben • Az s által meghatározott felső határ biztosítja, hogy a server ne ellenőrizze a HOTP értékeket örökké
Itt a vége… Köszönöm a figyelmet!