HOTP
HOTP (HMAC-based One-Time Password, RFC 4226) adalah saudara berasaskan pembilang TOTP. Di mana TOTP maju pada jam, HOTP maju pada pembilang bersama yang ditambah oleh token dan pelayan dengan setiap kod yang digunakan.
URI scheme:Google Authenticator Key URI Format, the
otpauth:// scheme every authenticator agrees on. Sibling spec:TOTP (RFC 6238), time-based variant that builds on HOTP.
Apa itu
QR pendaftaran HOTP adalah URL dalam skema otpauth:// dengan hotp sebagai jenisnya. Ia membawa rahasia HMAC bersama ditambah nilai pembilang yang mesti disegerakkan oleh kedua pihak. Format:
otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG- LABEL,
Issuer:Account, URL-dikodkan. Contoh:YubiKey:alice@example.com. - secret, kunci HMAC bersama, Base32-dikodkan (RFC 4648 §6: A-Z, 2-7).
- counter, nilai pembilang permulaan. Biasanya
0, tetapi boleh disambung dari nilai yang diketahui semasa mendaftar semula token. - issuer, nama perkhidmatan yang dipaparkan dalam aplikasi pengesah.
- digits,
6(lalai) atau8. RFC 4226 §5.3 menentukan 6; 8 adalah sambungan biasa. - algorithm,
SHA1dalam amalan. RFC 4226 hanya mentakrif SHA1; varian SHA256/512 adalah sambungan RFC 6238.
HOTP vs TOTP, bila menggunakan yang mana
| Sifat | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Maju pada | Pembilang (setiap penggunaan berjaya) | Jam (setiap 30 s) |
| Memerlukan penyegerakan jam | Tidak | Ya, dalam ~30 s hanyut |
| Resync semasa hanyut | Pelayan menerima N nilai pembilang seterusnya | Pelayan menerima tetingkap ±1 |
| Penggunaan biasa | YubiKey, token perkakasan lama, perbankan luar talian | Semua 2FA pengguna, Google, Microsoft, 1Password, Authy |
| Guna semula pembilang | Bencana, membocorkan rahasia dari semasa ke semasa | Tidak berkenaan |
| Kerentanan jika rahasia bocor | Semua kod masa hadapan boleh diramal | Semua kod masa lalu + masa hadapan boleh diramal |
Vektor ujian kanonik
RFC 4226 Lampiran D menyediakan nilai HOTP rujukan untuk rahasia 12345678901234567890 (20 bait, Base32 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ) dengan output 6 digit:
| Counter | HOTP (6-digit) |
|---|---|
0 | 755224 |
1 | 287082 |
2 | 359152 |
3 | 969429 |
4 | 338314 |
5 | 254676 |
6 | 287922 |
7 | 162583 |
8 | 399871 |
9 | 520489 |
Muatan QR minimum untuk pendaftaran pada pembilang 0:
otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0Pengesah rahasia Base32 langsung
Pengesah yang sama seperti halaman TOTP, rahasia HOTP menggunakan abjad Base32 yang sama (RFC 4648 §6: A-Z, 2-7). Berjalan dalam penyemak imbas anda, tiada perjalanan pergi-balik pelayan.
Masalah lazim
- Hanyutan pembilang. Jika pengguna menekan butang token tetapi pelayan tidak merekod kod, pembilang token berlari di hadapan pembilang pelayan. Pelayan mengendalikan ini dengan 'tetingkap resync'.
- Guna semula pembilang adalah bencana. Jangan sekali-kali menerima nilai pembilang yang sama dua kali. RFC 4226 §7.3 mewajibkan pelayan menolak sebarang kod pada atau di bawah pembilang yang terakhir diterima.
- Eksport pembilang semasa sandaran. Aplikasi pengesah yang mengeksport entri HOTP kadang-kadang mengeksport rahasia tetapi bukan pembilang semasa. Mengimport ke peranti baharu memulakan semula pembilang pada 0.
- Base32 bukan Base64. Peraturan yang sama seperti TOTP: rahasia dengan
0,1,8,9, huruf kecil,+, atau/ialah Base64 dan akan ditolak oleh setiap pengesah yang mematuhi RFC. - SHA1 sahaja, dalam amalan. RFC 4226 mentakrifkan SHA1 sebagai fungsi HMAC. SHA256/SHA512 adalah sambungan era TOTP RFC 6238; kebanyakan token perkakasan HOTP tidak melaksanakannya.
- Parameter digit sering diabaikan. Banyak token perkakasan ditetapkan pada 6 digit dan memotong senyap jika diminta 8. Sahkan terhadap perkakasan sasaran anda sebelum kad QR dicetak.
- Jangan campur HOTP dan TOTP dalam QR yang sama. Skema URI menggunakan segmen
TYPE(hotpvstotp) untuk menukar mod. Satu rahasia boleh menjalankan kedua-duanya, tetapi kedua-dua aliran berkongsi rahasia.
Keserasian pengesah
| Aplikasi / Token | HOTP | SHA256/512 | 8-digit | Nota |
|---|---|---|---|---|
| YubiKey Authenticator (iOS/Android/desktop) | Yes | Yes | Yes | HOTP ialah mod YubiKey OATH kanonik. Sokongan penuh RFC 4226. |
| Google Authenticator | Yes | Diabaikan (SHA1 sahaja) | Diabaikan (6 sahaja) | Asas de facto. Selamat untuk HOTP tetapi dengan 6-digit SHA1 sahaja. |
| 1Password | Yes | Yes | Yes | Sokongan RFC penuh. Pembilang disimpan dan dieksport dengan entri. |
| Bitwarden | Yes | Yes | Yes | Sokongan RFC penuh. |
| Microsoft Authenticator | Yes | Yes | Yes | Sokongan RFC penuh. |
| Authy | No | , | , | Menggugurkan HOTP dalam versi terbaru. TOTP sahaja. |
| Duo Mobile | No | , | , | Menggunakan aliran push sendiri; hanya TOTP sebagai sandaran. |
| OATH hardware tokens (Feitian, Token2, etc.) | Yes | Varies | Varies | Pasaran HOTP perkakasan kanonik; sentiasa 6-digit SHA1 melainkan helaian data menyatakan sebaliknya. |
Lihat juga
- /hotp-qr-code/, penjana HOTP dengan pengesahan pembilang + Base32 langsung.
- /standards/totp/, adik beradik berasaskan masa (RFC 6238).
- /totp-2fa-qr-code/, penjana TOTP.
- /standards/, kembali ke indeks piawaian.