- Temeljna razlika u ulaznom parametru: HOTP računa sažetke na temelju monotono rastućeg brojača C, dok TOTP zamjenjuje brojač C vremenskim korakom epohe T (CurrentUnixTime / 30).
- Izravno nasljeđivanje: TOTP je matematički specijalizacija HOTP-a:
TOTP(K, Time) = HOTP(K, T). Oba algoritma koriste potpuno istu funkciju dinamičkog skraćivanja (Dynamic Truncation). - Presudni arhitektonski faktor: HOTP pamti stanje (poslužitelji moraju zaključati i spremiti stanje brojača na disk pri svakoj provjeri). TOTP nema stanje (stateless), što modernim mikroservisima u oblaku omogućuje provjeru tokena na distribuiranim klasterima bez centraliziranih operacija pisanja u bazu podataka.
Povijesni korijeni: Od vlasničkih hardverskih tokena do otvorenih web standarda
Početkom 2000-ih korporativnom dvofaktorskom autentifikacijom dominirali su vlasnički privjesci za ključeve poput RSA SecurID-a. Ti zatvoreni, skupi uređaji sadržavali su interne kvarcne kristale sinkronizirane s vlasničkim poslužiteljima. Ako je organizacija željela osigurati tisuće zaposlenika, troškovi nabave hardvera i licenciranja bili su iznimno visoki.
Kako bi se autentifikacija oslobodila ovisnosti o pojedinačnim proizvođačima, vodeće tehnološke tvrtke osnovale su konzorcij OATH (Initiative for Open Authentication) s ciljem stvaranja otvorenih IETF standarda bez naknada za licenciranje, koje svaki softverski inženjer može slobodno pregledati, implementirati i revidirati:
HMAC-Based One-Time Password Algorithm. Prilagođen za mikrokontrolere niske potrošnje s fizičkim tipkama. Pritisak na tipku povećava interni brojač i ispisuje 6-znamenkasti token na LCD zaslonu.
Time-Based One-Time Password Algorithm. Nastao s eksplozijom pametnih telefona. Korištenjem sinkronizacije vremena putem mobilne mreže (NTP), TOTP je potpuno eliminirao probleme s nepodudaranjem stanja fizičkih tipki.
Arhitektura HOTP-a (RFC 4226) i mehanika dinamičkog skraćivanja
Temeljna matematička definicija HOTP-a iznenađujuće je sažeta:
Raščlamba parametara:
K: Zajednički simetrični tajni ključ (obično Base32 dekodirani binarni niz od 160 bita / 20 bajtova).C: 8-bajtni (64-bitni) cijeli broj u big-endian poretku bajtova koji služi kao brojač.HMAC-SHA-1: Kriptografski sažetak poruke s ključem koji daje rezultat od 20 bajtova (160 bita).
🔍 Kako dinamičko skraćivanje (DT) pretvara 20 bajtova u 6 znamenki:
HMAC-SHA1 sažetak sadrži 160 bita (20 bajtova). Izdvajanje 6 uniformnih decimalnih znamenki zahtijeva deterministički mehanizam odabira otporan na kolizije, definiran u odjeljku 5.3 specifikacije RFC 4226:
Pretpostavimo da je tajni ključ ASCII tekst "12345678901234567890", a brojač C = 0. Rezultirajući heksadecimalni HMAC-SHA1 sažetak glasi:
1. Posljednji bajt je 0x71. 0x71 & 0x0F = 0x01, dakle Offset = 1.
2. Bajtovi od indeksa 1 do 4 su: 93 cf 18 50. Postavljanjem najvišeg bita na nulu dobiva se 0x13cf1850, što decimalno iznosi 332.339.280.
3. 332339280 mod 1000000 = 339280. Dobiveni 6-znamenkasti OTP je 339280!
Evolucija TOTP-a (RFC 6238): Uloga vremenskog koraka
Kod HOTP-a bilo je nužno održavati sinkronizaciju brojača između klijenta i poslužitelja. Na softverskim uređajima brojanje pritisaka tipki stvara stalne ljudske pogreške.
RFC 6238 zamijenio je brojač C diskretnim vremenskim korakom T izvedenim izravno iz Unix vremena (Epoch):
- CurrentUnixTime: Broj sekundi proteklih od 1. siječnja 1970. u 00:00:00 UTC.
- T0: Referentna točka početka epohe (zadana vrijednost je 0 u svim modernim implementacijama).
- X (Vremenski prozor / korak): Standardno preporučeno trajanje od 30 sekundi.
- Funkcija zaokruživanja prema dolje ⌊ ⌋: Za svaku vremensku oznaku unutar prozora od 30 sekundi, vrijednost T ostaje nepromijenjena. Primjerice, između sekundi epohe 1728211200 i 1728211229, T daje potpuno isti 64-bitni cijeli broj.
Binarna serijalizacija: Nakon što se izračuna T, on se pakira u 8-bajtni međuspremnik u big-endian poretku bajtova (identične memorijske strukture kao brojač C u HOTP-u). Shodno tome, jedinstvena formula glasi:
TOTP(K, Time) = HOTP(K, T)
Ova matematička elegancija objašnjava zašto autentifikacijske aplikacije generiraju nove tokene sinkronizirano svakih 30 sekundi bez potrebe za trajnim spremanjem stanja na poslužitelju.
HS[31] & 0x0F); kod SHA-512 (sažetak od 64 bajta), pomak se uzima iz 63. bajta (HS[63] & 0x0F). Unatoč tome, na 99,9% komercijalnih web odredišta (Google, Microsoft, GitHub, AWS), SHA-1 je i dalje sveprisutni standard zbog kompatibilnosti sa starijim mobilnim aplikacijama.
Sveobuhvatna usporedna tablica (HOTP naspram TOTP)
| Dimenzija | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Ulazna varijabla | Brojač događaja C (monotono rastući) | Vremenski korak T (30-sekundni prozor Unix epohe) |
| Životni vijek tokena | Neodređen (vrijedi dok se ne iskoristi pri sljedećoj prijavi) | Točno 30 sekundi (automatski istječe) |
| Arhitektura poslužitelja | Sa stanjem (zahtijeva atomsko pisanje u bazu po prijavi) | Bez stanja (stateless - neovisna provjera putem NTP-a) |
| Izloženost napadima ponavljanjem | Umjerena (presretnuti token vrijedi do trenutka iskorištavanja) | Minimalna (ograničena na preostale sekunde u tekućem prozoru) |
| Glavni uzrok neuspjeha | Desinkronizacija brojača (slučajni pritisci tipke) | Pomak sata (odstupanje vremena na telefonu klijenta) |
| Podržane kriptografske funkcije | Isključivo HMAC-SHA-1 | HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512 |
| Zastupljenost u industriji | Zastarjeli bankovni tokeni, namjenski fizički uređaji | 99,9% suvremenih web autentifikatora |
Desinkronizacija naspram pomaka sata: Inženjerska rješenja
U distribuiranim produkcijskim okruženjima klijenti i poslužitelji neizbježno doživljavaju odstupanja. Kriptografi su osmislili precizne tolerancijske prozore za očuvanje pouzdanosti:
Ako korisnik pritisne tipku na tokenu 5 puta bez prijave, brojač na klijentu doseže C+5 dok poslužitelj ostaje na C.
Specifikacija RFC 4226 nalaže da poslužitelj pri provjeri izračuna prozor unaprijed u rasponu [C+1, C+s] (uobičajeno s=20). Ako se pronađe podudaranje, poslužitelj preskače naprijed i odmah sinkronizira brojač C.
Zbog mrežnog kašnjenja ili pomaka sata na klijentskom uređaju (npr. sat na telefonu kasni 10 sekundi), tokeni mogu stići u susjednim vremenskim koracima.
Produkcijski poslužitelji provjeravaju niz od 3 prozora: [T-1, T, T+1], čime se prozor prihvaćanja efektivno proširuje na 90 sekundi.
Kada poslužitelji provjeravaju podudara li se korisnički uneseni kod s izračunatim kodom, naivna usporedba nizova (poput userOtp === serverOtp) prekida se na prvom nepodudarnom znaku. Napadač koji mjeri mikroskopska vremena mrežnog odziva može iterativno rekonstruirati znamenke. Korporativni poslužitelji zato koriste funkcije za usporedbu u konstantnom vremenu (npr. crypto.timingSafeEqual u Node.js) kako bi spriječili analizu vremenskih odstupanja putem bočnih kanala.
Zašto je TOTP osvojio suvremeni internet
Pobjedu TOTP-a nad HOTP-om potaknula su tri ključna arhitektonska razloga:
U distribuiranim više-regijskim mikroservisima, bilo koja instanca poslužitelja sa satom usklađenim putem NTP-a može provjeriti TOTP tokene bez upita ili zaključavanja centralizirane baze podataka.
Pametni telefoni neprekidno kalibriraju sistemski sat putem mobilnih baznih stanica i GPS-a, čime se eliminira pomak sata bez potrebe za održavanjem fizičkog hardvera.
HOTP tokeni vrijede neograničeno do iskorištavanja. TOTP tokeni istječu unutar 30 sekundi, što automatski neutralizira kompromitirane zapise i pasivno presretnute pakete.
Doživite TOTP izračune u stvarnom vremenu na 2FA-Tool
Pogledajte kako se vaš Base32 tajni niz pretvara u dinamičke 6-znamenkaste kodove putem algoritma HMAC-SHA1 dinamičkog skraćivanja. 100% lokalno u vašem pregledniku.
📚 Povezani sigurnosni vodiči
Kako prenijeti 2FA račune na novi pametni telefon putem izvanmrežnih QR kodova i sinkronizacije u oblaku.
Pravila usklađenosti, pohrana rezervnih kodova, interakcija sa SSH ključevima i postupci oporavka.
Kako vratiti pristup računima na uslugama Google, Microsoft, Steam, Binance, Apple i Discord.