⏱️ Kriptografija i RFC protokoli ✓ Analiza IETF standarda

TOTP vs HOTP: Arhitektonske razlike, algoritmi i usporedba sigurnosti

Milijuni programera i sigurnosnih inženjera svakodnevno gledaju promjenjive 6-znamenkaste verifikacijske kodove, no rijetki razumiju elegantan matematički mehanizam u pozadini. Od događajnih brojača u RFC 4226 (HOTP) iz 2005. do diskretnih vremenskih koraka u RFC 6238 (TOTP) iz 2011., ovaj vodič na razini bajtova analizira algoritam dinamičkog skraćivanja (Dynamic Truncation), ranjivosti desinkronizacije brojača, toleranciju na pomak sata i razloge zašto je TOTP osvojio suvremeni web.

2FA
Sigurnosni tim 2FA-Tool
Ažurirano: listopad 2026.
Procijenjeno vrijeme čitanja: 10 min čitanja (više od 2.600 riječi)
RFC 6238 RFC 4226 Dinamičko skraćivanje
💡 Ključni kriptografski zaključci (TL;DR)
  • 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.
01

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:

📜 2005: RFC 4226 (HOTP)

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.

📜 2011: RFC 6238 (TOTP)

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.

02

Arhitektura HOTP-a (RFC 4226) i mehanika dinamičkog skraćivanja

Temeljna matematička definicija HOTP-a iznenađujuće je sažeta:

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

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:

// Korak 1: Izračun dinamičkog pomaka (Dynamic Offset)
Offset = HS[19] & 0x0F
Uzima se posljednji bajt (indeks 19) sažetka od 20 bajtova. Maskiranjem s 0x0F izoliraju se 4 bita najnižeg reda, čime se dobiva cijeli broj strogo između 0 i 15 (0x0 do 0xF). Time se osigurava da naknadno izdvajanje 4 bajta nikada ne prelazi granicu međuspremnika od 20 bajtova (budući da je 15 + 4 = 19).
// Korak 2: Izdvajanje 4 uzastopna bajta uz maskiranje
P = ( (HS[Offset] & 0x7F) << 24 ) | ( (HS[Offset+1] & 0xFF) << 16 ) | ( (HS[Offset+2] & 0xFF) << 8 ) | ( HS[Offset+3] & 0xFF )
Izdvajaju se 4 bajta počevši od indeksa Offset. Maska 0x7F postavlja najviši bit na nulu kako bi se izbjegao preljev označenog cijelog broja na različitim procesorskim arhitekturama (osiguravajući čisti pozitivni 31-bitni cijeli broj).
// Korak 3: Modulo aritmetika za konačne znamenke
OTP = P mod 106 = P mod 1000000
Primjena operacije modulo 1.000.000 izdvaja posljednjih 6 decimalnih znamenki, uz dopunjavanje vodećim nulama ako je potrebno (npr. 748 postaje "000748").
🧪 Konkretni testni vektor iz Dodatka D specifikacije RFC 4226:

Pretpostavimo da je tajni ključ ASCII tekst "12345678901234567890", a brojač C = 0. Rezultirajući heksadecimalni HMAC-SHA1 sažetak glasi:

cc 93 cf 18 50 8d 94 93 4c 64 b6 6d 8b fb 87 fb 23 cb 4b 71

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!

03

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):

T = ⌊ (CurrentUnixTime - T0) / X ⌋
  • 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.

Podrška za SHA-256 i SHA-512 u RFC-u 6238: Dok je RFC 4226 definirao isključivo HMAC-SHA-1, RFC 6238 je proširio podršku na HMAC-SHA-256 i HMAC-SHA-512. Kod SHA-256 (sažetak od 32 bajta), pomak se uzima iz 31. bajta (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.
04

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
05

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:

⚙️ Rješenje za HOTP: Prozor za provjeru unaprijed (Look-Ahead Window s)

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.

⏱️ Rješenje za TOTP: Tolerancija vremenskog odstupanja (±1 prozor)

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.

Obvezno pravilo protiv ponavljanja (Anti-Replay): Kako bi se spriječili napadi ponavljanjem unutar prozora od 90 sekundi, poslužitelji moraju predmemorirati i zaključati iskorištene tokene u memoriji (npr. Redis) na 90 sekundi i odbiti ponovljene zahtjeve.
🛡️ Usporedba nizova u konstantnom vremenu (Obrana od napada vremenskom analizom):

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.

06

Zašto je TOTP osvojio suvremeni internet

Pobjedu TOTP-a nad HOTP-om potaknula su tri ključna arhitektonska razloga:

☁️ Skalabilnost u oblaku bez stanja

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.

📱 Sinergija s mobilnim ekosustavom

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.

🛡️ Uski 30-sekundni prozor napada

HOTP tokeni vrijede neograničeno do iskorištavanja. TOTP tokeni istječu unutar 30 sekundi, što automatski neutralizira kompromitirane zapise i pasivno presretnute pakete.

🧮 Čisti klijentski mehanizam prema RFC 6238

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.

Otvori online generator