- Põhiline sisendierinevus: HOTP arvutab räsi monotoonselt kasvavast loendurist C, samal ajal kui TOTP asendab loenduri C Unixi ajastust tuletatud ajasammuga T (CurrentUnixTime / 30).
- Otsene pärilikkus: TOTP on matemaatiliselt HOTP erijuht:
TOTP(K, Aeg) = HOTP(K, T). Mõlemad algoritmid kasutavad täpselt sama dünaamilise kärpimise funktsiooni. - Arhitektuurne määrav tegur: HOTP on olekuga (stateful) süsteem (serverid peavad iga autentimise järel loenduri lukustama ja kettale kirjutama). TOTP on olekuta (stateless), mis võimaldab kaasaegsetel hajutatud pilveteenustel koode kontrollida ilma keskse andmebaasi kirjutamisteheteta.
Ajaloolised juured: suletud riistvaraseadmetest avatud veebistandarditeni
2000. aastate alguses domineerisid ettevõtete kaheastmelises autentimises suletud riistvaralised võtmehoidjad, näiteks RSA SecurID. Need kallid ja patenteeritud seadmed sisaldasid kvartskristalle, mis olid sünkroonitud spetsiaalsete serveritega. Kui organisatsioon soovis pakkuda mitmikautentimist tuhandetele töötajatele, kujunesid riistvara hanke- ja litsentsikulud ülikõrgeks.
Et vabastada autentimine monopoolsete tootjate haardest, lõid tööstusharu liidrid konsortsiumi OATH (Initiative for Open Authentication) eesmärgiga luua avatud ja litsentsitasuta IETF-i standardid, mida iga tarkvarainsener saaks vabalt uurida, teostada ja auditeerida:
HMAC-Based One-Time Password Algorithm. Loodud madala voolutarbega mikrokontrolleritele ja füüsilistele nuppudele. Nupuvajutus suurendab sisemist loendurit ja kuvab LCD-ekraanile 6-kohalise koodi.
Time-Based One-Time Password Algorithm. Loodud nutitelefonide kiire leviku ajastul. Kasutades mobiilsidevõrgu NTP ajasünkroonimist, kõrvaldas TOTP füüsiliste nupuvajutuste ja loendurite ebakõlad täielikult.
HOTP (RFC 4226) arhitektuur ja dünaamilise kärpimise baidimehaanika
HOTP põhimine matemaatiline määratlus on üllatavalt kompaktne:
Parameetrite selgitus:
K: Jagatud sümmeetriline salavõti (tavaliselt Base32-st dekodeeritud 160-bitine / 20-baidine binaarne jada).C: 8-baidine (64-bitine) big-endian täisarvuline loendur.HMAC-SHA-1: Võtmega räsifunktsioon, mis tekitab 20-baidise (160-bitise) krüptograafilise räsi.
🔍 Kuidas dünaamiline kärpimine (Dynamic Truncation, DT) teisendab 20 baiti 6 numbriks:
HMAC-SHA1 räsi sisaldab 160 bitti (20 baiti). Sellest 6 ühtlase jaotusega kümnendkoha saamiseks on vaja deterministlikku ja kollisionikindlat valikumehhanismi, mis on määratletud RFC 4226 jaotises 5.3:
Oletame, et salavõti on ASCII sõne "12345678901234567890" ja loendur C = 0. Tulemuseks olev HMAC-SHA1 räsi kuueteistkümnendsüsteemis on:
1. Viimane bait on 0x71. Tehe 0x71 & 0x0F = 0x01 annab tulemuseks Offset = 1.
2. Baidid 1 kuni 4 on: 93 cf 18 50. Kõrgeima biti nullimine annab 0x13cf1850, mis kümnendsüsteemis on 332 339 280.
3. 332339280 mod 1000000 = 339280. Tulemuseks olev 6-kohaline OTP on 339280!
TOTP (RFC 6238) areng: ajasammu maagia
HOTP nõudis kliendi loenduri pidevat sünkroonis hoidmist serveriga. Tarkvaraseadmetes tekitab klahvivajutuste või nupuvajutuste loendamine paratamatult inimlikke vigu.
RFC 6238 asendas loenduri C diskreetse ajasammuga T, mis tuletatakse otse Unixi ajastust:
- CurrentUnixTime: Sekundid, mis on möödunud alates 1970-01-01 00:00:00 UTC.
- T0: Alguspunkt (kõikides kaasaegsetes lahendustes vaikimisi 0).
- X (Ajasammu pikkus): Standardne soovitatav ajavahemik on 30 sekundit.
- Ümardusfunktsioon ⌊ ⌋: Iga ajatempli puhul 30-sekundilises aknas jääb T muutumatuks. Näiteks sekundite 1728211200 ja 1728211229 vahel annab T täpselt sama 64-bitise täisarvu.
Binaarne seerialiseerimine: Pärast T arvutamist pakitakse see 8-baidisesse big-endian kahendpuhvrisse (struktuurilt identne loenduriga C HOTP-s). Seetõttu lihtsustub ühtne valem kujule:
TOTP(K, Aeg) = HOTP(K, T)
See matemaatiline elegants selgitab, miks autentimisrakendused uuendavad koode sünkroonselt iga 30 sekundi järel ilma püsivat olekusünkroonimist vajamata.
HS[31] & 0x0F); algoritmis SHA-512 (64-baidine räsi) baidist 63 (HS[63] & 0x0F). Sellegipoolest kasutab 99,9% kommertsveebisaitidest (Google, Microsoft, GitHub, AWS) mobiilirakenduste laia ühilduvuse tõttu endiselt vaikimisi SHA-1 räsi.
Põhjalik võrdlusmaatriks (HOTP vs. TOTP)
| Mõõde | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Sisendmuutuja | Sündmuste loendur C (monotoonselt suurenev) | Ajasamm T (30-sekundiline Unixi ajastu aken) |
| Koodi kehtivusaeg | Määramata (kehtib kuni järgmise sisselogimiseni) | Rangelt 30 sekundit (aegub automaatselt) |
| Serveri arhitektuur | Olekuga (nõuab igal sisselogimisel andmebaasi kirjutamist) | Olekuta (sõltumatu NTP-kontroll) |
| Kordusrünnaku risk | Mõõdukas (pealtkuulatud kood kehtib kuni ärakasutamiseni) | Minimaalne (piiratud aktiivse 30-sekundilise aknaga) |
| Peamine tõrkerežiim | Loendurite desünkroonimine (juhuslikud nupuvajutused) | Kella nihe (telefoni süsteemiaja kõrvalekalle) |
| Toetatud räsifunktsioonid | Eksklusiivselt HMAC-SHA-1 | HMAC-SHA-1, HMAC-SHA-256, HMAC-SHA-512 |
| Levik tänapäeval | Vanemad pangandusseadmed, spetsiifilised läbipääsusüsteemid | 99,9% kaasaegsetest veebiautentijatest |
Desünkroonimine vs. ajanihe: tehnilised leevendusmeetmed
Hajutatud tootmiskeskkondades tekib paratamatult ajanihe või olekuhälve. Krüptograafid töötasid töökindluse tagamiseks välja konkreetsed tolerantsiaknad:
Kui kasutaja vajutab seadme nuppu 5 korda ilma sisse logimata, jõuab kliendi loendur väärtuseni C+5, samal ajal kui serveri väärtuseks jääb C.
RFC 4226 sätestab, et autentimisel arvutab server ettevaatava akna vahemikus [C+1, C+s] (tavaliselt s=20). Kui kood klapib mõne väärtusega selles aknas, liigub server kohe ettepoole ja sünkroonib loenduri C.
Võrgu viivituse või kliendiseadme kellahälbe tõttu (nt telefon on 10 sekundit maas) võivad koodid saabuda naaberasammudes.
Tootmisserverid kontrollivad 3 aknast koosnevat massiivi: [T-1, T, T+1], laiendades tegeliku heakskiitmise akna 90 sekundini.
Kui server kontrollib esitatud koodi vastavust arvutatud koodile, katkestavad tavalised stringivõrdlused (nagu userOtp === serverOtp) töö esimese vale märgi juures. Ründaja, kes mõõdab mikroskoopilisi võrguviiteid, saab numbreid järjestikku tuletada. Ettevõtte tasemel süsteemid jõustavad seetõttu konstantse ajaga võrdlusi (nt crypto.timingSafeEqual Node.js-is või crypto/subtle.ConstantTimeCompare Go-s).
Miks TOTP võitis tänapäeva interneti
TOTP ülekaaluka võidu HOTP ees veebis tingisid kolm peamist arhitektuurilist eelist:
Hajutatud mitme regiooniga mikroteenustes saab iga NTP-ga sünkroonitud serveri eksemplar TOTP-koode kontrollida ilma keskset andmebaasi pärimata või lukustamata.
Nutitelefonid kalibreerivad oma süsteemiaega pidevalt mobiilimastide ja GPS-i kaudu, kõrvaldades kellanihked ilma riistvaralise hooldusvajaduseta.
HOTP koodid kehtivad määramata aja kuni kasutamiseni. TOTP koodid aeguvad 30 sekundi jooksul, neutraliseerides lekkinud logid ja pakettide passiivse pealtkuulamise automaatselt.
Koge reaalajas TOTP-arvutusi 2FA-Toolis
Vaata, kuidas sinu Base32 salavõti teisendatakse dünaamilisteks 6-kohalisteks koodideks HMAC-SHA1 kärpimise teel. 100% võrguühenduseta sinu brauseris.
📚 Seotud turvajuhendid
Kuidas kanda 2FA kontosid telefonide vahel üle võrguühenduseta QR-koodide või pilvesünkroonimise abil.
Nõuetele vastavus, taastekoodide talletamine, SSH-võtmete koostoime ja päästetoimingud.
Kuidas taastada juurdepääs Google'i, Microsofti, Steami, Binance'i, Apple'i ja Discordi kontodele.