أنشئ وتحقق من كلمات المرور المؤقتة المعتمدة على الوقت (TOTP) من سر بتنسيق base32. متوافق مع Google Authenticator ومعيار RFC 6238.
كلمات مرور لمرة واحدة، RFC 6238. أنشئ رمز TOTP الحالي لسر بتنسيق base32 وتحقق من رمز استلمته. يُشتق العداد من الوقت الحالي، لذلك تتجدد الرموز كل 30 أو 60 ثانية. يعمل بالكامل في متصفحك.
------
تحقق من رمز
كيف يعمل TOTP
سر مشترك بالإضافة إلى الساعة
يُعرف TOTP في RFC 6238 وهو طبقة رقيقة فوق HOTP. يحتفظ كلا الطرفين بنفس السر، الذي يُسلَّم عادةً مرة واحدة كرمز QR ويُخزن في تطبيق مصادقة. لإنتاج رمز، يأخذ كل طرف وقت يونكس الحالي، ويقسمه على حجم الخطوة (30 ثانية افتراضيًا) للحصول على عداد، ويحسب HMAC-SHA1 لذلك العداد تحت السر، ثم يقص النتيجة إلى العدد المطلوب من الأرقام.
لأن العداد يأتي من الساعة وليس من رسالة، لا يحتاج أي شيء إلى الانتقال بين الطرفين بعد التسجيل. لا يرسل الخادم تحديًا ولا يحتاج التطبيق إلى وصول إلى الشبكة — ولهذا تعمل تطبيقات المصادقة في وضع الطيران.
القص وعدد الأرقام
يكون ناتج HMAC 20 بايت، وهو أكثر بكثير من رمز من 6 أرقام. يستخدم القص الديناميكي النمط المنخفض للبايت الأخير كإزاحة، ويقرأ أربعة بايتات تبدأ من هناك، ويقنّع البت الأعلى لتجنب مشاكل الإشارة، ويأخذ ذلك الرقم مودولو 10^أرقام. استخدام إزاحة متغيرة بدلاً من ثابتة يعني أن المهاجم لا يمكنه تركيز التحليل على شريحة معروفة من الملخص.
ستة أرقام هي القيمة الافتراضية شبه العالمية. ثمانية أرقام مدعومة من معظم التطبيقات وتضيف حوالي رقمين عشريين إضافيين من مقاومة التخمين، وهو ما يهم أقل بكثير من تحديد المعدل — فرمز من 6 أرقام لديه فرصة واحدة في المليون لكل تخمين، لذا فإن الدفاع الحقيقي هو القفل بعد عدة محاولات فاشلة.
انحراف الساعة وإعادة التشغيل
الأجهزة تنحرف. عادةً ما تقبل الخوادم الرمز من النافذة السابقة والتالية وكذلك الحالية، مما يعطي تسامحًا قدره ±30 ثانية. توسيع تلك النافذة إلى ما بعد دقيقة أو دقيقتين يبدأ في زيادة مساحة الهجوم بشكل ملحوظ، وعادةً ما يكون علامة على أن ساعة الجهاز تحتاج إلى إصلاح.
هناك خاصيتان جديرتان بالتذكر عند النشر. يبقى الرمز صالحًا لنافذته كاملة، لذلك يمكن إعادة استخدام رمز معترض ضمن تلك النافذة ما لم يعلّم الخادم العدادات المستخدمة على أنها منفقة. والسر متماثل: من يملك النسخة على جانب الخادم يمكنه توليد رموز صالحة إلى الأبد، لذلك يحتاج نفس الحماية التي تحتاجها قاعدة كلمات المرور — مشفرًا في وضع السكون، لا يُسجل أبدًا، ولا يكون أبدًا في مستودع git.
الأسئلة الشائعة
هل يمكن لهذا أن يحل محل تطبيق المصادقة الخاص بي؟
إنه مفيد للاختبار واستعادة رمز عندما يكون هاتفك غير متاح، لكن تبويب المتصفح ليس مكانًا آمنًا للاحتفاظ بسر مشترك طويل الأمد.
لماذا يُرفض رمزي؟
في الغالب انحراف الساعة. يستمد TOTP الرمز من وقت يونكس الحالي، لذا فإن جهازًا يبعد أكثر من خطوة واحدة من 30 ثانية عن الخادم ينتج رمزًا تجاوزه الخادم بالفعل.
ماذا يمثل سر Base32؟
هو المفتاح المشترك الذي يحمله كلا الطرفين. تُستخدم Base32 لأنها غير حساسة لحالة الأحرف وتتجنب الأحرف الغامضة، مما يجعل كتابتها أو ترميزها في رمز QR عمليًا.
لماذا تكون الرموز من ستة أرقام؟
يقص RFC 6238 قيمة HMAC إلى قيمة من 31 بتًا ويأخذها مودولو 10^6. توازن ستة أرقام بين سهولة الاستخدام ومعدل تخمين واحد في المليون لكل محاولة، وهو ما يقلله تحديد المعدل أكثر.
ما الفرق بين TOTP وHOTP؟
يعد TOTP خطوات زمنية من 30 ثانية؛ بينما يعد HOTP الأحداث ويتقدم فقط عند استخدام رمز. يحتاج TOTP إلى ساعات متزامنة، بينما يحتاج HOTP إلى عدادات متزامنة.
هل يمكن استخدام نفس الرمز مرتين؟
لا ينبغي. يبقى الرمز صالحًا لخطوته الزمنية كاملة، لذلك يُتوقع من الخادم تسجيل الخطوة التي استهلكها المستخدم بالفعل ورفض إعادة الاستخدام.