HOTP
HOTP (كلمة مرور لمرة واحدة مستندة إلى HMAC، RFC 4226) هو النظير المبني على العداد لـ TOTP. بينما يتقدم TOTP بالساعة، يتقدم HOTP بعداد مشترك يزيده كل من الرمز المميز والخادم مع كل رمز مستخدم.
Canonical spec:RFC 4226, HOTP: An HMAC-Based One-Time Password Algorithm (2005).
URI scheme:Google Authenticator Key URI Format, the
Sibling spec:TOTP (RFC 6238), time-based variant that builds on HOTP.
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.
ما هو
رمز QR لتسجيل HOTP هو عنوان URL في مخطط otpauth:// مع hotp كنوع. يحمل المفتاح السري المشترك لـ HMAC بالإضافة إلى قيمة العداد التي يجب على الجانبين الحفاظ على تزامنها. التنسيق:
otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG- LABEL,
Issuer:Account، مشفّر بـ URL. مثال:YubiKey:alice@example.com. - secret, مفتاح HMAC المشترك، مشفّر بـ Base32 (RFC 4648 §6: A-Z, 2-7).
- counter, قيمة العداد الابتدائية. عادةً
0، لكن يمكن استئنافه من قيمة معروفة عند إعادة تسجيل رمز مميز. - issuer, اسم الخدمة المعروض في تطبيق المصادق.
- digits,
6(افتراضي) أو8. RFC 4226 §5.3 يحدد 6؛ 8 هو امتداد شائع. - algorithm,
SHA1عملياً. RFC 4226 يحدد SHA1 فقط؛ متغيرات SHA256/512 هي امتدادات RFC 6238.
HOTP مقابل TOTP, متى تستخدم كلاً منهما
| الخاصية | HOTP (RFC 4226) | TOTP (RFC 6238) |
|---|---|---|
| يتقدم على | العداد (كل استخدام ناجح) | الساعة (كل 30 ث) |
| يتطلب تزامن الساعة | لا | نعم, ضمن ~30 ث انجراف |
| إعادة المزامنة عند الانجراف | الخادم يقبل قيم العداد الـ N التالية | الخادم يقبل ±1 نافذة |
| النشر النموذجي | YubiKey، رموز الأجهزة القديمة، البنوك غير المتصلة | كل 2FA للمستهلك, Google، Microsoft، 1Password، Authy |
| إعادة استخدام العداد | كارثي, يسرب المفتاح بمرور الوقت | غير قابل للتطبيق |
| الضعف عند تسرب المفتاح | جميع الرموز المستقبلية قابلة للتنبؤ | جميع الرموز الماضية والمستقبلية قابلة للتنبؤ |
متجهات الاختبار القياسية
يوفر RFC 4226 المُلحق D قيم HOTP المرجعية للمفتاح السري 12345678901234567890 (20 بايت، Base32 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ) بإخراج 6 أرقام:
| Counter | HOTP (6-digit) |
|---|---|
0 | 755224 |
1 | 287082 |
2 | 359152 |
3 | 969429 |
4 | 338314 |
5 | 254676 |
6 | 287922 |
7 | 162583 |
8 | 399871 |
9 | 520489 |
الحد الأدنى من حمولة QR للتسجيل عند العداد 0:
otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0محقق المفتاح Base32 المباشر
نفس المحقق كصفحة TOTP, أسرار HOTP تستخدم نفس الأبجدية Base32 (RFC 4648 §6: A-Z, 2-7). يعمل في متصفحك، بدون رحلة إلى الخادم.
أدخل مفتاحاً للتحقق.
المشكلات الشائعة
- انجراف العداد. إذا ضغط المستخدم زر الرمز المميز لكن الخادم لم يسجل الرمز (انقطاع الشبكة، نقرة مزدوجة)، يتقدم عداد الرمز المميز على عداد الخادم. تتعامل الخوادم مع هذا بـ 'نافذة إعادة المزامنة'.
- إعادة استخدام العداد كارثية. لا تقبل نفس قيمة العداد مرتين. RFC 4226 §7.3 يُلزم الخادم برفض أي رمز عند أو أسفل العداد المقبول الأخير.
- تصدير العداد أثناء النسخ الاحتياطي. تطبيقات المصادق التي تصدر إدخالات HOTP قد تصدر المفتاح دون العداد الحالي. الاستيراد إلى جهاز جديد يعيد تشغيل العداد من 0.
- Base32 وليس Base64. نفس قاعدة TOTP: الأسرار التي تحتوي على
0،1،8،9، أحرف صغيرة،+، أو/هي Base64 وسيرفضها كل مصادق متوافق مع RFC. - SHA1 فقط، عملياً. RFC 4226 يحدد SHA1 كدالة HMAC. متغيرات SHA256/SHA512 هي امتدادات TOTP من RFC 6238؛ معظم رموز الأجهزة HOTP لا تُطبقها.
- معامل الأرقام غالباً مُتجاهل. كثير من رموز الأجهزة ثابتة على 6 أرقام وتقطع بصمت إذا طلبت 8. تحقق من أجهزتك المستهدفة قبل طباعة بطاقات QR.
- لا تخلط بين HOTP وTOTP في نفس رمز QR. مخطط URI يستخدم قطعة
TYPE(hotpvstotp) للتبديل بين الأوضاع. سر واحد يمكنه تشغيل كليهما، لكن ذلك يعني أن كلا التدفقين يتشاركان السر.
توافق تطبيق المصادق
| التطبيق / الرمز المميز | HOTP | SHA256/512 | 8 أرقام | ملاحظات |
|---|---|---|---|---|
| YubiKey Authenticator (iOS/Android/desktop) | Yes | Yes | Yes | HOTP هو وضع YubiKey OATH القياسي. دعم كامل لـ RFC 4226. |
| Google Authenticator | Yes | مُتجاهل (SHA1 فقط) | مُتجاهل (6 فقط) | الخط الأساسي الفعلي. آمن لـ HOTP لكن بـ SHA1 6 أرقام فقط. |
| 1Password | Yes | Yes | Yes | دعم كامل لـ RFC. العداد مخزن ومُصدَّر مع الإدخال. |
| Bitwarden | Yes | Yes | Yes | دعم كامل لـ RFC. |
| Microsoft Authenticator | Yes | Yes | Yes | دعم كامل لـ RFC. |
| Authy | No | , | , | أسقط HOTP في الإصدارات الحديثة. TOTP فقط. |
| Duo Mobile | No | , | , | يستخدم تدفق Push الخاص به؛ احتياطي TOTP فقط. |
| OATH hardware tokens (Feitian, Token2, etc.) | Yes | Varies | Varies | سوق HOTP للأجهزة الأساسي؛ دائماً 6 أرقام SHA1 ما لم تنص البيانات التقنية على خلاف ذلك. |
انظر أيضاً
- /hotp-qr-code/, مولّد HOTP مع التحقق المباشر من العداد وBase32.
- /standards/totp/, النظير القائم على الوقت (RFC 6238).
- /totp-2fa-qr-code/, مولّد TOTP.
- /standards/, العودة إلى فهرس المعايير.