كلمة مرور لمرة واحدة تعتمد على HMAC

كلمة المرور لمرة واحدة المستندة إلى HMAC ( HOTP ) هي خوارزمية لكلمة المرور لمرة واحدة (OTP) تعتمد على رمز مصادقة الرسائل المستند إلى التجزئة (HMAC). عندما يحاول عميل الوصول إلى خادم، يرسل الخادم المُستهدف تحديًا إلى العميل. ثم يقوم العميل بحساب استجابة تمثل كلمة مرور لمرة واحدة. غالبًا ما يشكل هذا جزءًا من بروتوكولات المصادقة متعددة العوامل مثل خوارزمية التحدي والاستجابة لمبادرة المصادقة المفتوحة (OATH). [ 1 ]

نُشرت خوارزمية HOTP كوثيقة معلوماتية (RFC 4226) صادرة عن فريق هندسة الإنترنت (IETF) في ديسمبر 2005، توثق الخوارزمية مع تطبيقها بلغة جافا. ومنذ ذلك الحين، اعتمدتها العديد من الشركات حول العالم (انظر أدناه). خوارزمية HOTP معيار مفتوح المصدر ومتاح مجانًا. 

الخوارزمية

تُوفّر خوارزمية HOTP طريقةً للمصادقة عبر توليد كلمات مرور أو قيم قابلة للقراءة البشرية بشكل متناظر ، حيث تُستخدم كل قيمة لمحاولة مصادقة واحدة فقط. وتنتج خاصية الاستخدام لمرة واحدة مباشرةً من استخدام كل قيمة عداد لمرة واحدة.

يجب على الأطراف التي تنوي استخدام HOTP إنشاء بعضالمعلمات ؛ عادةً ما يتم تحديدها بواسطة المصادق، ويتم قبولها أو رفضها من قبل الكيان المصادق عليه:

  • طريقة التشفير التجزئية H (الافتراضي هو SHA- 1 )
  • مفتاح سري K ، وهو عبارة عن سلسلة بايتات عشوائية ويجب أن يبقى خاصًا
  • عداد C ، طوله 8 بايتات، ويحسب عدد التكرارات .
  • طول قيمة HOTP هو d (6-10، القيمة الافتراضية هي 6، ويوصى باستخدام 6-8)

يقوم كلا الطرفين بحساب قيمة HOTP المستمدة من المفتاح السري K والعداد C. ثم يقوم المصادق بمقارنة قيمته المولدة محليًا بالقيمة المقدمة من قبل المصادق عليه.

يقوم كل من المُصادِق والكيان المُصادَق عليه بزيادة العداد C بشكل مستقل. ولأن الكيان المُصادَق عليه قد يزيد العداد بمقدار أكبر من المُصادِق، توصي RFC 4226 ببروتوكول إعادة مزامنة. يقترح هذا البروتوكول أن يُحاول المُصادِق التحقق بشكل متكرر قبل قيمة عداده ضمن نافذة بحجم s . يستمر عداد المُصادِق في الزيادة بعد القيمة التي ينجح عندها التحقق، ولا يتطلب ذلك أي إجراءات من الكيان المُصادَق عليه. 

لحماية البيانات من هجمات القوة الغاشمة التي تستهدف صغر حجم قيم HOTP، توصي وثيقة RFC أيضًا بتطبيق تقييد مستمر لعملية التحقق من HOTP. ويمكن تحقيق ذلك إما عن طريق منع التحقق بعد عدد قليل من المحاولات الفاشلة، أو عن طريق زيادة التأخير بشكل خطي بعد كل محاولة فاشلة.

تُستخدم رموز مكونة من 6 أرقام عادةً بواسطة رموز أجهزة خاصة من عدد من الموردين، تُحدد القيمة الافتراضية لـ d . يؤدي الاقتطاع إلى استخراج 31 بت أوسجل10(231)9.3{\textstyle \log _{10}(2^{31})\approx 9.3}الأرقام العشرية، مما يعني أن d يمكن أن يكون على الأكثر 10، مع إضافة الرقم العاشر تباينًا أقل، حيث يأخذ القيم 0 و1 و2 (أي 0.3  رقم).

بعد التحقق، يمكن للمُصادِق التحقق من هويته ببساطة عن طريق توليد قيمة HOTP التالية وإعادتها، ثم يمكن للمُصادَق عليه توليد قيمة HOTP خاصة به للتحقق منها. تجدر الإشارة إلى أن العدادات مضمونة التزامن في هذه المرحلة من العملية.

قيمة HOTP هي ناتج التصميم القابل للقراءة البشرية، وهو رقم عشري مكون من d خانة (بدون حذف الأصفار البادئة):

قيمة HOTP = HOTP ( K , C ) mod 10 d .

أي أن القيمة هي أقل الأرقام العشرية أهمية في HOTP.

HOTP هو اختصار لـ HMAC الخاص بالعداد C (تحت المفتاح K ودالة التجزئة H ):

HOTP ( K , C ) = truncate(HMAC H ( K , C )),

حيث يجب استخدام العداد C بنظام big-endian .

تقوم عملية الاقتطاع أولاً بأخذ أقل 4 بتات أهمية من رمز التحكم في الوصول إلى الوسائط (MAC) وتستخدمها كإزاحة بايت i :

truncate( MAC ) = extract31( MAC , MAC [(19 × 8 + 4):(19 × 8 + 7)]),

حيث تُستخدم علامة ":" لاستخراج البتات من رقم بت البداية وحتى رقم بت النهاية، حيث تبدأ أرقام البتات من الصفر. يشير استخدام الرقم "19" في الصيغة أعلاه إلى حجم الناتج من دالة التجزئة. مع القيمة الافتراضية لـ SHA-1، يكون الناتج هو20 بايت  ، وبالتالي فإن البايت الأخير هو البايت 19 (أصل 0).

يُستخدم هذا المؤشر i  لاختيار 31 بت من MAC ، بدءًا من البت i × 8 + 1:

extract31( MAC , i ) = MAC [( i × 8 + 1):( i × 8 + 4 × 8 − 1)].

31 بتًا تنقص بتًا واحدًا عن كلمة من 4 بايتات. لذا، يمكن وضع القيمة داخل هذه الكلمة دون استخدام بت الإشارة (البت الأكثر أهمية). يُجرى ذلك لتجنب إجراء العمليات الحسابية النمطية على الأعداد السالبة، نظرًا لتعدد تعريفاتها وتطبيقاتها. [ 2 ]

تطبيق

يقوم كود بايثون التالي بتنفيذ خوارزميات HMAC-SHA1 و HOTP.

استيراد مكتبة hashlibdef hmac_sha1 ( * , key : bytes , msg : bytes ) -> bytes :إذا كان طول ( المفتاح ) أكبر من 64 :key = hashlib.sha1 ( key ) .digest ( )آخر :مفتاح = مفتاح . جست ( 64 , ب ' \0 ' )o_key_pad = bytes ( i ^ 0x5c for i in key )i_key_pad = bytes ( i ^ 0x36 for i in key )إرجاع hashlib.sha1 (o_key_pad +hashlib.sha1 ( i_key_pad + msg ) .digest ( )) . digest ()دالة hotp ( * , key : bytes , ctr : int , length : int ) -> str :mac = hmac_sha1 ( key = key , msg = ctr . to_bytes ( 8 , 'big' ))الإزاحة = mac [ - 1 ] & 0xftruncated = bytearray ( mac [ offset : offset + 4 ])truncated [ 0 ] &= 0x7fالقيمة = int.from_bytes ( truncated , ' big ' ) % ( 10 ** الطول )return str ( value ) .rjust ( length , ' 0' )

otpauth://مخطط URI

يُشفّر عنوان URI المذكور في هذا القسم على شكل رمز QR. تسمح العديد من الهواتف الذكية للمستخدمين بمسح هذه الرموز وتسجيلها في تطبيق مصادقة، مثل Google Authenticator .

تتيح بعض تطبيقات بروتوكولي HOTP و TOTP للهواتف الذكية للمستخدمين مسح رموز QR لإضافة رموز HOTP وTOTP إلى تطبيقات المصادقة الخاصة بهم. تحتوي رموز QR هذه على مُعرّفات موارد موحدة (URIs) وفقًا للمخطط [ 3 ]otpauth:// .

otpauth://تبدأ عناوين URI الخاصة ببروتوكول HOTP بـ " otpauth://hotp/الاسم" ويجب أن تحتوي على "الاسم" و"السر" و"العداد". يُشفّر الاسم كجزء من المسار، بينما يُشفّر السر والعداد كمعاملات استعلام. قد يحتوي عنوان URI اختياريًا على حقول أخرى، مثل عدد الأرقام (وهو 6 افتراضيًا)، والخوارزمية المستخدمة (وهي SHA1 افتراضيًا)، واسم المُصدر.

يتم ترميز السر باستخدام RFC 4648 Base32 ، مع حذف الحشو. على سبيل المثال، يمثل URI otpauth://hotp/Wikipedian?secret=JBSWY3DPFQQHO33SNRSCC&counter=42رمز HOTP يحمل اسم "Wikipedian"، مع ترميز السر Hello, world!باستخدام ASCII، والعداد الأولي 42. عند إضافته إلى أداة المصادقة، يجب أن ينتج الرمز التالي 439256.

الرموز

تتوفر رموز الأجهزة والبرامج من مختلف البائعين، وللاطلاع على بعضها، انظر المراجع أدناه.

تتوفر رموز البرامج لجميع منصات الهواتف المحمولة/ الهواتف الذكية الرئيسية تقريبًا ( J2ME ، [ 4 ] Android ، [ 5 ] iPhone ، [ 6 ] BlackBerry ، [ 7 ] Maemo ، [ 8 ] macOS ، [ 9 ] وWindows Mobile [ 7 ] ).

استقبال

على الرغم من أن الاستقبال المبكر من بعض الصحافة المتخصصة في الكمبيوتر كان سلبيًا خلال عامي 2004 و2005، [ 10 ] [ 11 ] [ 12 ] بعد أن اعتمدت IETF بروتوكول HOTP كـ RFC 4226 في ديسمبر 2005، بدأ العديد من البائعين في إنتاج رموز متوافقة مع HOTP و/أو حلول مصادقة كاملة. 

وفقًا للمقال "خارطة الطريق: استبدال كلمات المرور بمصادقة OTP" [ 13 ] حول المصادقة القوية، والذي نشرته مجموعة بيرتون (قسم من شركة غارتنر ) في عام 2010، " تتوقع غارتنر أن يستمر شكل OTP للأجهزة في التمتع بنمو معتدل بينما ستنمو OTP للهواتف الذكية وتصبح منصة الأجهزة الافتراضية بمرور الوقت".

انظر أيضاً

مراجع

  1. م'رايحي، ديفيد؛ نقاش، ديفيد؛ ريدل، يوهان؛ باجاج، سيدهارث؛ ماشاني، صلاح (يونيو 2011). OCRA: خوارزمية التحدي والاستجابة لـ OATH (تقرير). فريق عمل هندسة الإنترنت.
  2. ^ فرانك هورنارت. داود، النقاش؛ ميهير، بيلاري؛ أوهاد ، رنين (ديسمبر 2005). "HOTP: خوارزمية كلمة المرور لمرة واحدة المستندة إلى HMAC" . Tools.ietf.org . دوى : 10.17487/RFC4226 .
  3. ^ العادات ، توماس (2018-11-26). "تنسيق Uri الرئيسي" . جيثب . تم الاسترجاع 2026-05-24 .
  4. "DS3 تطلق تطبيق OathToken Midlet" . حلول أنظمة أمن البيانات . 24 فبراير 2006. مؤرشف من الأصل في 29 ديسمبر 2013.
  5. "StrongAuth" . 2010. مؤرشف من الأصل في 2010-05-18.
  6. كوبز، آرتشي إل. (2010). "رمز القسم" . آرتشي إل. كوبز .
  7. 1 2 "رموز ActivIdentity البرمجية" . ActivIdentity . 2010. مؤرشف من الأصل بتاريخ 17-09-2010.
  8. ويتبيك، شون (2011). "مولد كلمة المرور لمرة واحدة لجهاز N900" . شون ويتبيك .
  9. "SecuriToken" . شركة Feel Good Software . 2011. مؤرشف من الأصل بتاريخ 25-04-2012.
  10. كيرنز، ديف (2004-12-06). "التعمق أكثر في قانون القسم لا يبدو جيداً" . عالم الشبكات .
  11. ويلوبي، مارك (21 مارس 2005). "لا يوجد اتفاق بشأن مصادقة Oath" . كمبيوتر وورلد . مؤرشف من الأصل في 11 أكتوبر 2012. تم الاسترجاع في 7 أكتوبر 2010 .
  12. كاليسكي، بيرت (19 مايو 2005). "مرونة الخوارزمية وOATH" . كمبيوتر وورلد . مؤرشف من الأصل في 11 أكتوبر 2012. تم الاطلاع عليه في 7 أكتوبر 2010 .
  13. ديوداتي، مارك (2010). "خارطة الطريق: استبدال كلمات المرور بمصادقة كلمة المرور لمرة واحدة" . مجموعة بيرتون . مؤرشف من الأصل بتاريخ 21 يوليو 2011. تم الاطلاع عليه بتاريخ 10 فبراير 2011 .