HOTP
HOTP (HMAC-based One-Time Password, RFC 4226) adalah saudara berbasis penghitung dari TOTP. Di mana TOTP maju pada jam, HOTP maju pada penghitung bersama yang diinkrementasi oleh token dan server dengan setiap kode 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 tipenya. Membawa rahasia HMAC bersama ditambah nilai penghitung yang harus dijaga sinkronisasinya oleh kedua pihak. Format:
otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG- LABEL,
Issuer:Account, URL-encoded. Contoh:YubiKey:alice@example.com. - secret, kunci HMAC bersama, Base32-encoded (RFC 4648 §6: A-Z, 2-7).
- counter, nilai penghitung awal. Biasanya
0, tetapi dapat dilanjutkan dari nilai yang diketahui saat mendaftarkan ulang token. - issuer, nama layanan yang ditampilkan di aplikasi autentikator.
- digits,
6(default) atau8. RFC 4226 §5.3 menentukan 6; 8 adalah ekstensi umum. - algorithm,
SHA1dalam praktik. RFC 4226 hanya mendefinisikan SHA1; varian SHA256/512 adalah ekstensi RFC 6238.
HOTP vs TOTP, kapan menggunakan yang mana
| Properti | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| Maju pada | Penghitung (setiap penggunaan berhasil) | Jam (setiap 30 detik) |
| Memerlukan sinkronisasi jam | Tidak | Ya, dalam ~30 detik drift |
| Resync saat drift | Server menerima N nilai penghitung berikutnya | Server menerima jendela ±1 |
| Deployment khas | YubiKey, token hardware lama, perbankan offline | Semua 2FA konsumen, Google, Microsoft, 1Password, Authy |
| Penggunaan ulang penghitung | Katastrofis, membocorkan rahasia seiring waktu | N/A |
| Kerentanan jika rahasia bocor | Semua kode masa depan dapat diprediksi | Semua kode masa lalu + masa depan dapat diprediksi |
Vektor uji kanonik
RFC 4226 Appendix D menyediakan nilai HOTP referensi untuk rahasia 12345678901234567890 (20 byte, 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 |
Payload QR minimal untuk pendaftaran pada penghitung 0:
otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0Validator rahasia Base32 langsung
Validator yang sama seperti halaman TOTP, rahasia HOTP menggunakan alfabet Base32 yang identik (RFC 4648 §6: A-Z, 2-7). Berjalan di browser Anda, tanpa perjalanan pulang-pergi ke server.
Kendala umum
- Drift penghitung. Jika pengguna menekan tombol token tetapi server tidak merekam kode, penghitung token berjalan di depan penghitung server. Server menangani ini dengan 'jendela resync'.
- Penggunaan ulang penghitung adalah katastrofis. Jangan pernah menerima nilai penghitung yang sama dua kali. RFC 4226 §7.3 mengharuskan server menolak kode apa pun pada atau di bawah penghitung yang terakhir diterima.
- Ekspor penghitung saat pencadangan. Aplikasi autentikator yang mengekspor entri HOTP terkadang mengekspor rahasia tetapi tidak penghitung saat ini. Mengimpor ke perangkat baru me-restart penghitung ke 0.
- Base32 bukan Base64. Aturan yang sama seperti TOTP: rahasia dengan
0,1,8,9, huruf kecil,+, atau/adalah Base64 dan akan ditolak oleh setiap autentikator yang sesuai RFC. - Hanya SHA1, dalam praktik. RFC 4226 mendefinisikan SHA1 sebagai fungsi HMAC. SHA256/SHA512 adalah ekstensi era TOTP RFC 6238; sebagian besar token hardware HOTP tidak mengimplementasikannya.
- Parameter digit sering diabaikan. Banyak token hardware terkunci di 6 digit dan secara diam-diam memotong jika diminta 8. Verifikasi terhadap hardware target Anda sebelum kartu QR dicetak.
- Jangan campur HOTP dan TOTP dalam QR yang sama. Skema URI menggunakan segmen
TYPE(hotpvstotp) untuk beralih mode. Satu rahasia dapat menggerakkan keduanya, tetapi berarti kedua alur berbagi rahasia.
Kompatibilitas autentikator
| Aplikasi / Token | HOTP | SHA256/512 | 8-digit | Catatan |
|---|---|---|---|---|
| YubiKey Authenticator (iOS/Android/desktop) | Yes | Yes | Yes | HOTP adalah mode YubiKey OATH kanonik. Dukungan penuh RFC 4226. |
| Google Authenticator | Yes | Diabaikan (SHA1 saja) | Diabaikan (6 saja) | Baseline de-facto. Aman untuk HOTP tetapi dengan 6-digit SHA1 saja. |
| 1Password | Yes | Yes | Yes | Dukungan RFC penuh. Penghitung disimpan dan diekspor dengan entri. |
| Bitwarden | Yes | Yes | Yes | Dukungan RFC penuh. |
| Microsoft Authenticator | Yes | Yes | Yes | Dukungan RFC penuh. |
| Authy | No | , | , | Menghapus HOTP di versi terbaru. Hanya TOTP. |
| Duo Mobile | No | , | , | Menggunakan alur push sendiri; hanya TOTP sebagai fallback. |
| OATH hardware tokens (Feitian, Token2, etc.) | Yes | Varies | Varies | Pasar hardware HOTP kanonik; selalu 6-digit SHA1 kecuali datasheet menyatakan lain. |
Lihat juga
- /hotp-qr-code/, generator HOTP dengan validasi penghitung + Base32 langsung.
- /standards/totp/, saudara berbasis waktu (RFC 6238).
- /totp-2fa-qr-code/, generator TOTP.
- /standards/, kembali ke indeks standar.