- Būtiskā ievades atšķirība: HOTP aprēķina jaucējkodus no monotoni pieaugoša skaitītāja C, savukārt TOTP aizstāj C ar Unix laikmeta soļa vērtību T (CurrentUnixTime / 30).
- Tieša pārmantošana: Matemātiski TOTP ir HOTP specializācija:
TOTP(K, Time) = HOTP(K, T). Abi algoritmi izmanto tieši to pašu dinamiskās saīsināšanas (Dynamic Truncation) funkciju. - Arhitektūras izšķirošais faktors: HOTP ir ar stāvokli (serveriem pēc katras validācijas ir jāfiksē un jāsaglabā skaitītāji diskā). TOTP ir bezstāvokļa (stateless), ļaujot mūsdienu mākoņa mikropakalpojumiem validēt marķierus sadalītos slodzes līdzsvarotajos klasteros bez centralizētām datubāzes rakstīšanas operācijām.
Vēsturiskās saknes: no patentētiem aparatūras marķieriem līdz atvērtiem tīmekļa standartiem
2000. gadu sākumā uzņēmumu divfaktoru autentifikācijā dominēja patentēti aparatūras piekariņi, piemēram, RSA SecurID. Šīs slēgtās, dārgās ierīces saturēja iekšējos kvarca kristālus, kas bija sinhronizēti ar patentētiem uzņēmuma serveriem. Ja organizācija vēlējās nodrošināt daudzfaktoru drošību tūkstošiem darbinieku, aparatūras iegādes un patentēto licenču izmaksas bija ārkārtīgi augstas.
Lai atbrīvotu autentifikāciju no patentētu pārdevēju atkarības, nozares līderi izveidoja OATH (Initiative for Open Authentication) konsorciju, lai radītu atvērtus, bezatlīdzības IETF standartus, kurus jebkurš programmatūras inženieris varētu brīvi pārbaudīt, ieviest un auditēt:
HMAC-Based One-Time Password Algorithm. Pielāgots mazjaudas mikrokontrolleriem ar fiziskām spiedpogām. Nospiežot pogu, tiek palielināts iekšējais skaitītājs un LCD ekrānā tiek parādīts 6 ciparu marķieris.
Time-Based One-Time Password Algorithm. Izstrādāts, strauji pieaugot viedtālruņu popularitātei. Izmantojot mobilo sakaru NTP tīkla laika sinhronizāciju, TOTP pilnībā novērsa fizisko pogu stāvokļa neatbilstības.
HOTP (RFC 4226) arhitektūra un dinamiskās saīsināšanas baitu mehānika
HOTP galvenā matemātiskā definīcija ir pārsteidzoši kodolīga:
Parametru skaidrojums:
K: Kopīga simetriska slepenā atslēga (parasti Base32 dekodēta 160 bitu / 20 baitu binārā secība).C: 8 baitu (64 bitu) big-endian veselo skaitļu skaitītājs.HMAC-SHA-1: Ar atslēgu parakstīts ziņojuma autentifikācijas kods, kas ģenerē 20 baitu (160 bitu) kriptogrāfisko kopsavilkumu.
🔍 Kā dinamiskā saīsināšana (DT) pārvērš 20 baitus par 6 cipariem:
HMAC-SHA1 kopsavilkums satur 160 bitus (20 baitus). Lai iegūtu 6 vienmērīgus decimālos ciparus, ir nepieciešams deterministisks, pret kolīzijām izturīgs atlases mehānisms, kas definēts RFC 4226 5.3. sadaļā:
Pieņemsim, ka slepenā atslēga ir ASCII "12345678901234567890" un skaitītājs C = 0. Iegūtais HMAC-SHA1 kopsavilkums heksadecimālā formā ir:
1. Pēdējais baits ir 0x71. 0x71 & 0x0F = 0x01, tātad Offset = 1.
2. Baiti no 1 līdz 4 ir: 93 cf 18 50. Iestatot MSB uz nulli, iegūstam 0x13cf1850, kas decimālajā sistēmā ir 332 339 280.
3. 332339280 mod 1000000 = 339280. Iegūtais 6 ciparu OTP ir 339280!
TOTP (RFC 6238) evolūcija: laika soļa maģija
HOTP gadījumā bija nepieciešams nodrošināt, lai klienta skaitītājs būtu sinhronizēts ar serveri. Programmatūras ierīcēs taustiņu nospiešanas skaitīšana rada pastāvīgas cilvēciskas kļūdas.
RFC 6238 aizstāja skaitītāju C ar diskrētu laika soli T, kas tiek iegūts tieši no Unix laikmeta pulksteņa:
- CurrentUnixTime: Pagājušās sekundes kopš 1970-01-01 00:00:00 UTC.
- T0: Laikmeta inicializācijas atsauce (visās mūsdienu sistēmās pēc noklusējuma 0).
- X (Laika soļa logs): Standarta ieteicamais ilgums ir 30 sekundes.
- Noapaļošanas uz leju funkcija ⌊ ⌋: Jebkuram laika zīmogam 30 sekunžu logā T paliek nemainīgs. Piemēram, starp laikmeta sekundēm 1728211200 un 1728211229 T tiek novērtēts kā tieši tas pats 64 bitu veselais skaitlis.
Binārā serializācija: Kad T ir aprēķināts, tas tiek ievietots 8 baitu big-endian binārajā buferī (atmiņas struktūrā identisks skaitītājam C iekš HOTP). Līdz ar to vienotā formula kļūst vienkārša:
TOTP(K, Time) = HOTP(K, T)
Šī matemātiskā elegance izskaidro, kāpēc autentifikatora lietotnes sinhroni atjaunina marķierus ik pēc 30 sekundēm, neprasot pastāvīgu stāvokļa sinhronizāciju.
HS[31] & 0x0F); SHA-512 gadījumā (64 baitu kopsavilkums) nobīde tiek ņemta no 63. baita (HS[63] & 0x0F). Tomēr 99,9% komerciālo vietņu (Google, Microsoft, GitHub, AWS) SHA-1 joprojām ir visuresošs standarts mantotās mobilo klientu saderības dēļ.
Visaptveroša salīdzināšanas matrica (HOTP pret TOTP)
| Dimensija | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Ievades mainīgais | Notikumu skaitītājs C (monotoni pieaugošs) | Laika solis T (30 sekunžu Unix laikmeta logs) |
| Marķiera derīguma termiņš | Nenoteikts (derīgs, līdz tiek izmantots nākamajā pieteikšanās reizē) | Stingras 30 sekundes (automātiski kļūst nederīgs) |
| Servera arhitektūra | Ar stāvokli (prasa atomārus datubāzes ierakstus katrai pieteikšanās reizei) | Bezstāvokļa (neatkarīga NTP verifikācija) |
| Pakļautība atkārtošanas uzbrukumiem | Mērena (pārtvertais marķieris paliek derīgs līdz izmantošanai) | Minimāla (ierobežota ar atlikušajām sekundēm pašreizējā logā) |
| Galvenais atteices veids | Skaitītāja desinhronizācija (nejaušas pogas nospiešanas) | Pulksteņa nobīde (klienta tālruņa laika nobīde) |
| Atbalstītie kriptogrāfiskie jaucējkodi | Tikai HMAC-SHA-1 | HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512 |
| Nozares pielietojums | Mantotie banku piekariņi, specializēti fiziskie vārti | 99,9% mūsdienu tīmekļa autentifikatoru |
Desinhronizācija pret laika nobīdi: tehniskie risinājumi
Sadalītās produkcijas vidēs klienti un serveri neizbēgami novirzās. Kriptogrāfi izstrādāja skaidrus kompensācijas logus, lai uzturētu uzticamību:
Ja lietotājs 5 reizes noklikšķina marķiera pogu bez koda iesniegšanas, klienta skaitītājs sasniedz C+5, kamēr serveris paliek pie C.
RFC 4226 nosaka, ka autentifikācijas laikā serveris aprēķina paredzamo logu diapazonā [C+1, C+s] (parasti s=20). Ja tiek atrasta sakritība, serveris veic lēcienu uz priekšu un nekavējoties sinhronizē skaitītāju C.
Tīkla aiztures vai klienta ierīces pulksteņa nobīdes dēļ (piemēram, tālruņa pulkstenis atpaliek par 10 sekundēm) marķieri var pienākt blakus esošajos laika soļos.
Produkcijas serveri novērtē 3 logu masīvu: [T-1, T, T+1], efektīvi paplašinot pieņemšanas logu līdz 90 sekundēm.
Kad serveri pārbauda, vai lietotāja iesniegtais kods atbilst aprēķinātajam kodam, vienkāršas virkņu vienādības pārbaudes (piemēram, userOtp === serverOtp) tiek pārtrauktas pie pirmās nesakrītošās rakstzīmes. Uzbrucējs, mērot mikroskopiskus tīkla atbildes laikus, var iteratīvi rekonstruēt ciparus. Uzņēmumu aizmugursistēmas ievieš nemainīga laika vienādības salīdzinājumus (piem., crypto.timingSafeEqual iekš Node.js), lai novērstu sānu kanālu laika analīzi.
Kāpēc TOTP uzvarēja mūsdienu internetā
TOTP pārliecinošo uzvaru pār HOTP visā tīmeklī noteica trīs arhitektūras pamatprasības:
Sadalītos daudzreģionu mikropakalpojumos jebkura servera instance ar NTP sinhronizētu pulksteni var validēt TOTP marķierus, neveicot vaicājumus vai centralizēta datubāzes ieraksta bloķēšanu.
Viedtālruņi nepārtraukti kalibrē savus sistēmas pulksteņus, izmantojot mobilo sakaru bāzes stacijas un GPS, novēršot pulksteņa nobīdi bez nepieciešamības pēc fiziskas aparatūras uzturēšanas.
HOTP marķieri paliek derīgi nenoteiktu laiku, līdz tiek izmantoti. TOTP marķieri beidzas 30 sekunžu laikā, automātiski neitralizējot kompromitētus žurnālus un pasīvu tīkla pakešu pārtveršanu.
Izmēģiniet reāllaika TOTP aprēķinus 2FA-Tool
Vērojiet, kā jūsu Base32 slepenā virkne pārvēršas dinamiskos 6 ciparu kodos, izmantojot HMAC-SHA1 dinamisko saīsināšanu. 100% bezsaistē jūsu pārlūkprogrammā.
📚 Saistītās drošības rokasgrāmatas
Kā pārsūtīt 2FA kontus starp viedtālruņiem, izmantojot bezsaistes QR kodus un Cloud Sync.
Atbilstības noteikumi, atkopšanas kodu saglabāšana, SSH atslēgu mijiedarbība un glābšanas darbplūsmas.
Kā atgūt piekļuvi pakalpojumos Google, Microsoft, Steam, Binance, Apple un Discord.