HOTP
HOTP (HMAC-based One-Time Password, RFC 4226), TOTP'nin sayaç tabanlı kardeşidir. TOTP bir saate göre ilerlerken, HOTP her kullanılan kodla hem token hem de sunucunun artırdığı paylaşılan bir sayaca göre ilerler.
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.
Nedir
HOTP kayıt QR'ı, otpauth:// şemasında hotp tipinde bir URL'dir. Paylaşılan HMAC sırrını ve her iki tarafın senkronize tutması gereken bir sayaç değerini taşır. Format:
otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG- LABEL,
Issuer:Account, URL-kodlu. Örnek:YubiKey:alice@example.com. - secret, paylaşılan HMAC anahtarı, Base32-kodlu (RFC 4648 §6: A-Z, 2-7).
- counter, başlangıç sayaç değeri. Genellikle
0, ancak bir token yeniden kaydedilirken bilinen bir değerden devam edilebilir. - issuer, kimlik doğrulayıcı uygulamasında gösterilen servis adı.
- digits,
6(varsayılan) veya8. RFC 4226 §5.3, 6'yı belirtir; 8 yaygın bir uzantıdır. - algorithm, pratikte
SHA1. RFC 4226 yalnızca SHA1'i tanımlar; SHA256/512 varyantları RFC 6238 uzantılarıdır.
HOTP vs TOTP, hangisini ne zaman kullanmalı
| Özellik | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| İlerler | Sayaç (her başarılı kullanım) | Saat (her 30 saniye) |
| Saat senkronizasyonu gerektirir | Hayır | Evet, ~30 s kayma içinde |
| Kaymada yeniden senkronizasyon | Sunucu sonraki N sayaç değerini kabul eder | Sunucu ±1 pencereyi kabul eder |
| Tipik kullanım | YubiKey, eski donanım tokenları, çevrimdışı bankacılık | Tüm tüketici 2FA, Google, Microsoft, 1Password, Authy |
| Sayaç yeniden kullanımı | Felaket, zamanla sırrı sızdırır | Geçerli değil |
| Sır sızdığında güvenlik açığı | Gelecekteki tüm kodlar tahmin edilebilir | Tüm geçmiş + gelecek kodlar tahmin edilebilir |
Kanonik test vektörleri
RFC 4226 Ek D, 6 haneli çıktıyla 12345678901234567890 sırrı (20 bayt, Base32 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ) için referans HOTP değerleri sağlar:
| Counter | HOTP (6-digit) |
|---|---|
0 | 755224 |
1 | 287082 |
2 | 359152 |
3 | 969429 |
4 | 338314 |
5 | 254676 |
6 | 287922 |
7 | 162583 |
8 | 399871 |
9 | 520489 |
Sayaç 0'da kayıt için minimal QR yükü:
otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0Canlı Base32 sır doğrulayıcı
TOTP sayfasıyla aynı doğrulayıcı, HOTP sırları aynı Base32 alfabesini kullanır (RFC 4648 §6: A-Z, 2-7). Tarayıcınızda çalışır, sunucu gidiş-gelişi yok.
Yaygın hatalar
- Sayaç kayması. Kullanıcı token düğmesine basarsa ama sunucu kodu kaydetmezse, token sayacı sunucu sayacının önüne geçer. Sunucular bunu 'yeniden senkronizasyon penceresi' ile yönetir.
- Sayaç yeniden kullanımı felakettir. Aynı sayaç değerini asla iki kez kabul etmeyin. RFC 4226 §7.3, sunucunun son kabul edilen sayaçta veya altında herhangi bir kodu reddetmesini zorunlu kılar.
- Yedekleme sırasında sayaç dışa aktarımı. HOTP girişlerini dışa aktaran kimlik doğrulayıcı uygulamaları bazen sırrı dışa aktarır ama mevcut sayacı aktarmaz. Yeni cihaza aktarım sayacı 0'dan yeniden başlatır.
- Base32, Base64 değil. TOTP ile aynı kural:
0,1,8,9, küçük harfler,+veya/içeren sırlar Base64'tür ve her RFC uyumlu kimlik doğrulayıcı tarafından reddedilir. - Pratikte yalnızca SHA1. RFC 4226, HMAC işlevi olarak SHA1'i tanımlar. SHA256/SHA512, RFC 6238 TOTP dönemi uzantılarıdır; çoğu HOTP donanım tokeni bunları uygulamaz.
- Basamak parametresi çoğunlukla görmezden gelinir. Birçok donanım tokeni 6 basamağa sabit olup 8 istendiğinde sessizce keser. QR kartları yazdırmadan önce hedef donanımınızla doğrulayın.
- HOTP ve TOTP'yi aynı QR'a karıştırmayın. URI şeması modları değiştirmek için
TYPE(hotpvstotp) segmentini kullanır. Tek bir sır her ikisini de güçlendirebilir, ancak her iki akış sırrı paylaşır.
Kimlik doğrulayıcı uyumluluğu
| Uygulama / Token | HOTP | SHA256/512 | 8 haneli | Notlar |
|---|---|---|---|---|
| YubiKey Authenticator (iOS/Android/desktop) | Yes | Yes | Yes | HOTP, kanonik YubiKey OATH modudur. Tam RFC 4226 desteği. |
| Google Authenticator | Yes | Görmezden gelindi (yalnızca SHA1) | Görmezden gelindi (yalnızca 6) | De facto temel. HOTP için güvenli ama yalnızca 6 haneli SHA1 ile. |
| 1Password | Yes | Yes | Yes | Tam RFC desteği. Sayaç girişle birlikte saklanır ve dışa aktarılır. |
| Bitwarden | Yes | Yes | Yes | Tam RFC desteği. |
| Microsoft Authenticator | Yes | Yes | Yes | Tam RFC desteği. |
| Authy | No | , | , | Son sürümlerde HOTP'yi kaldırdı. Yalnızca TOTP. |
| Duo Mobile | No | , | , | Kendi push akışını kullanır; yalnızca TOTP yedek olarak. |
| OATH hardware tokens (Feitian, Token2, etc.) | Yes | Varies | Varies | Kanonik donanım HOTP pazarı; veri sayfası aksi belirtmedikçe her zaman 6 haneli SHA1. |
Ayrıca bakınız
- /hotp-qr-code/, canlı sayaç + Base32 doğrulamalı HOTP oluşturucu.
- /standards/totp/, zamana dayalı kardeş (RFC 6238).
- /totp-2fa-qr-code/, TOTP oluşturucu.
- /standards/, standartlar dizinine geri dön.