بي بي كيه دي إف 2
في التشفير ، PBKDF1 و PBKDF2 ( دالة اشتقاق المفتاح المستندة إلى كلمة المرور 1 و 2 ) عبارة عن دالات اشتقاق مفتاح بتكلفة حسابية متدرجة، تُستخدم لتقليل التعرض لهجمات القوة الغاشمة . [1]
PBKDF2 هو جزء من سلسلة معايير تشفير المفتاح العام (PKCS) الخاصة بـ RSA Laboratories ، وتحديدًا PKCS #5 v2.0، المنشورة أيضًا باسم RFC 2898 من فريق هندسة الإنترنت. وهو يحل محل PBKDF1، الذي يمكنه فقط إنتاج مفاتيح مشتقة يصل طولها إلى 160 بت. [2] توصي RFC 8018 (PKCS #5 v2.1)، المنشورة في عام 2017، باستخدام PBKDF2 لتجزئة كلمات المرور. [3]
الغرض والتشغيل
تطبق PBKDF2 دالة عشوائية زائفة ، مثل رمز مصادقة الرسائل القائم على التجزئة (HMAC)، على كلمة المرور المدخلة أو عبارة المرور مع قيمة ملحية وتكرر العملية عدة مرات لإنتاج مفتاح مشتق ، والذي يمكن استخدامه بعد ذلك كمفتاح تشفير في العمليات اللاحقة. يجعل العمل الحسابي المضاف كسر كلمة المرور أكثر صعوبة، ويُعرف باسم تمديد المفتاح .
عندما كُتب المعيار في عام 2000، كان الحد الأدنى الموصى به لعدد التكرارات 1000، ولكن من المفترض أن تزداد المعلمة بمرور الوقت مع زيادة سرعات وحدة المعالجة المركزية. أوصى معيار Kerberos في عام 2005 بـ 4096 تكرارًا؛ [1] يُقال إن Apple استخدمت 2000 لنظام التشغيل iOS 3 ، و10000 لنظام التشغيل iOS 4 ؛ [4] بينما استخدم LastPass في عام 2011 5000 تكرار لعملاء JavaScript و100000 تكرار للتجزئة من جانب الخادم. [5] في عام 2023، أوصت OWASP باستخدام 600000 تكرار لـ PBKDF2-HMAC-SHA256 و210000 لـ PBKDF2-HMAC-SHA512. [6]

يؤدي إضافة عنصر ملح إلى كلمة المرور إلى تقليل القدرة على استخدام التجزئات المحسوبة مسبقًا ( جداول قوس قزح ) للهجمات، ويعني أنه يجب اختبار كلمات المرور المتعددة بشكل فردي، وليس كلها مرة واحدة. توصي معايير التشفير بالمفتاح العام بطول عنصر ملح لا يقل عن 64 بت. [7] ويوصي المعهد الوطني الأمريكي للمعايير والتكنولوجيا بطول عنصر ملح لا يقل عن 128 بت. [8]
عملية اشتقاق المفتاح
تحتوي دالة اشتقاق المفتاح PBKDF2 على خمسة معلمات إدخال: [9]
- DK = PBKDF2(PRF، كلمة المرور ، الملح ، c ، dkLen )
أين:
- PRF هي دالة شبه عشوائية لمعلمتين بطول إخراج hLen (على سبيل المثال، HMAC بمفتاح)
- كلمة المرور هي كلمة المرور الرئيسية التي يتم من خلالها إنشاء مفتاح مشتق
- الملح عبارة عن سلسلة من البتات، تُعرف باسم الملح التشفيري
- c هو عدد التكرارات المطلوبة
- dkLen هو طول البت المطلوب للمفتاح المشتق
- DK هو المفتاح المشتق الناتج
يتم حساب كل كتلة بت hLen T i للمفتاح المشتق DK ، على النحو التالي (مع علامة + لتسلسل السلسلة):
- DK = T 1 + T 2 + ⋯ + T dklen / hlen
- T i = F( كلمة المرور ، الملح ، ج ، ي )
الدالة F هي xor ( ^ ) لتكرارات PRF المتسلسلة. تستخدم التكرار الأول لـ PRF كلمة المرور كمفتاح PRF و Salt مترابطًا مع i مشفرًا كعدد صحيح كبير 32 بت كمدخل. (لاحظ أن i هو فهرس قائم على 1.) تستخدم التكرارات اللاحقة لـ PRF كلمة المرور كمفتاح PRF ومخرجات حساب PRF السابق كمدخل:
- F( كلمة المرور ، الملح ، ج ، ي ) = U 1 ^ U 2 ^ ⋯ ^ U c
أين:
- U 1 = PRF( كلمة المرور ، الملح + INT_32_BE( i ))
- U 2 = PRF( كلمة المرور ، U 1 )
- ⋮
- U c = PRF( كلمة المرور ، U c −1 )
على سبيل المثال، يستخدم WPA2 :
- DK = PBKDF2(HMAC−SHA1، عبارة المرور ، ssid ، 4096، 256)
كانت عملية PBKDF1 أبسط: يتم إنشاء U الأولي (المسمى T في هذا الإصدار) بواسطة PRF( كلمة المرور + الملح ) ، واللاحقة هي ببساطة PRF( U السابق ) . يتم استخراج المفتاح كأول بتات dkLen من التجزئة النهائية، ولهذا السبب يوجد حد للحجم. [9]
تصادمات HMAC
تتمتع PBKDF2 بخاصية مثيرة للاهتمام عند استخدام HMAC كدالة شبه عشوائية. من الممكن إنشاء أي عدد من أزواج كلمات المرور المختلفة بسهولة مع حدوث تصادمات داخل كل زوج. [10] إذا كانت كلمة المرور المقدمة أطول من حجم كتلة دالة التجزئة HMAC الأساسية، يتم أولاً تجزئة كلمة المرور مسبقًا في خلاصة، ويتم استخدام هذه الخلاصة بدلاً من ذلك ككلمة مرور. على سبيل المثال، كلمة المرور التالية طويلة جدًا:
- كلمة المرور:
plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd
لذلك، عند استخدام HMAC-SHA1، يتم تجزئته مسبقًا باستخدام SHA-1 إلى:
- SHA1 (سداسي عشري):
65426b585154667542717027635463617226672a
والتي يمكن تمثيلها في ASCII على النحو التالي:
- SHA1 (ASCII):
eBkXQTfuBqp'cTcar&g*
يعني هذا أنه بغض النظر عن الملح أو التكرارات، فإن PBKDF2-HMAC-SHA1 سوف يولد نفس بايتات المفتاح لكلمات المرور:
- "plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd"
- "eBkXQTfuBqp'cTcar&g*"
على سبيل المثال، باستخدام:
- PRF : HMAC-SHA1
- الملح: A009C1A485912C6AE630D3E744240B04
- التكرارات: 1000
- طول المفتاح المشتق: 16 بايت
يتم استدعاء الوظيفتين التاليتين:
PBKDF2 - HMAC - SHA1 ( "plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd" ، ... )
PBKDF2 - HMAC - SHA1 ( "eBkXQTfuBqp'cTcar&g*" ، ... )
سوف تولد نفس بايتات المفتاح المشتقة ( 17EB4014C8C461C300E9B61518B9A18B). لا تمثل تصادمات المفتاح المشتقة هذه ثغرة أمنية - حيث لا يزال يتعين على المرء معرفة كلمة المرور الأصلية من أجل توليد تجزئة كلمة المرور. [11]
بدائل لـ PBKDF2
أحد نقاط ضعف PBKDF2 هو أنه في حين يمكن تعديل عدد تكراراته لجعله يستغرق قدرًا كبيرًا من وقت الحوسبة، يمكن تنفيذه بدائرة صغيرة وذاكرة وصول عشوائي قليلة جدًا، مما يجعل هجمات القوة الغاشمة باستخدام الدوائر المتكاملة الخاصة بالتطبيق أو وحدات معالجة الرسومات رخيصة نسبيًا. [12] تتطلب وظيفة تجزئة كلمة المرور bcrypt كمية أكبر من ذاكرة الوصول العشوائي (ولكن لا تزال غير قابلة للضبط بشكل منفصل، أي ثابتة لكمية معينة من وقت وحدة المعالجة المركزية) وهي أقوى بشكل ملحوظ ضد مثل هذه الهجمات، [13] بينما يمكن لوظيفة اشتقاق مفتاح scrypt الأكثر حداثة استخدام كميات كبيرة من الذاكرة وبالتالي فهي أكثر مقاومة لهجمات ASIC وGPU. [12]
في عام 2013، أقيمت مسابقة تجزئة كلمات المرور (PHC) لتطوير نهج أكثر مقاومة. في 20 يوليو 2015، تم اختيار Argon2 كفائز نهائي في مسابقة تجزئة كلمات المرور، مع منح تقدير خاص لأربعة مخططات تجزئة كلمات مرور أخرى: Catena و Lyra2 و yescrypt وMakwa. [14] هناك بديل آخر وهو تجزئة البالون ، والتي يوصى بها في إرشادات كلمات المرور الخاصة بالمعهد الوطني للمعايير والتكنولوجيا . [15]
للحد من هجوم القوة الغاشمة ، من الممكن جعل كل محاولة إدخال كلمة مرور تتطلب تفاعلًا عبر الإنترنت، دون الإضرار بسرية كلمة المرور. يمكن القيام بذلك باستخدام وظيفة عشوائية زائفة غير واعية لأداء تقوية كلمة المرور . [16] يمكن القيام بذلك كبديل لـ PBKDF أو كخطوة إضافية فيها.
انظر أيضا
مراجع
- ^ ab Raeburn, Kenneth (2005). "Advanced Encryption Standard (AES) Encryption for Kerberos 5". tools.ietf.org . doi : 10.17487/RFC3962 . RFC 3962 . تم الاسترجاع في 23 أكتوبر 2015 .
- ^ كاليسكي، بيرت (2000). "PKCS #5: مواصفات التشفير المستند إلى كلمة المرور، الإصدار 2.0". tools.ietf.org . doi : 10.17487/RFC2898 . RFC 2898 . تم الاسترجاع في 23 أكتوبر 2015 .
- ^ Moriarty, Kathleen; et al. (2017). Moriarty, K (ed.). "PKCS #5: Password-Based Cryptography Specification, Version 2.1". tools.ietf.org . doi :10.17487/RFC8018. RFC 8018.
- ^ "التحليل الجنائي للهواتف الذكية: اختراق كلمات مرور النسخ الاحتياطية لبلاك بيري". اختراق كلمات المرور المتقدم – نظرة ثاقبة . ElcomSoft. 30 سبتمبر 2010. تم الاسترجاع في 23 أكتوبر 2015 .
- ^ "إشعار أمان LastPass". مدونة LastPass . 5 مايو 2011. تم الاسترجاع في 31 يناير 2023 .
- ^ "ورقة الغش لتخزين كلمات المرور". سلسلة أوراق الغش الخاصة بـ OWASP . 15 أغسطس 2021. مؤرشف من الأصل في 23 يناير 2023. تم الاسترجاع في 23 يناير 2023 .
- ^ Moriarty, Kathleen; et al. (2017). Moriarty, K (ed.). "PKCS #5: Password-Based Cryptography Specification, Version 2.1: Section 4. Salt and Iteration Count". tools.ietf.org . doi :10.17487/RFC8018. RFC 8018 . تم الاسترجاع في 24 يناير 2018 .
- ^ سونميز توران، ميلتيم؛ باركر، إلين؛ بور، ويليام؛ تشين، ليلي. "توصية لاشتقاق المفتاح المستند إلى كلمة المرور الجزء 1: تطبيقات التخزين" (PDF) . NIST . SP 800-132 . تم الاسترجاع في 20 ديسمبر 2018 .
- ^ ab مواصفات التشفير القائم على كلمة المرور RFC 2898
- ^ Bynens, Mathias. "شرح تصادمات التجزئة PBKDF2+HMAC". mathiasbynens.be .
- ^ "مقاومة الاصطدام - لماذا لا يزال HMAC-SHA1 يعتبر آمنًا؟". crypto.stackexchange.com .
- ^ ab Colin Percival . scrypt. كما ورد في "اشتقاق مفتاح أقوى عبر وظائف متسلسلة صعبة الذاكرة". تم تقديمه في BSDCan'09، مايو 2009.
- ^ "25 وحشًا جديدًا لوحدات معالجة الرسوميات يلتهم كلمات المرور في ثوانٍ". The Security Ledger. 4 ديسمبر 2012. تم الاسترجاع في 7 سبتمبر 2013 .
- ^ "مسابقة تجزئة كلمة المرور"
- ^ "إرشادات الهوية الرقمية والمصادقة وإدارة دورة الحياة القسم 5.1.1.2" (PDF) . NIST . SP 800-63B . تم الاسترجاع في 18 يونيو 2021 .
- ^ فورد، دبليو؛ كاليسكي، بي إس (2000). "توليد سر قوي بمساعدة الخادم من كلمة مرور". وقائع ورش العمل الدولية التاسعة لمعهد مهندسي الكهرباء والإلكترونيات حول تمكين التكنولوجيات: البنية الأساسية للمؤسسات التعاونية (WET ICE 2000) . ص 176-180. doi :10.1109/ENABL.2000.883724. ISBN 0-7695-0798-0. S2CID 1977743.
روابط خارجية
- "PKCS #5 v2.1" (PDF) . RSA Laboratories . مؤرشف من الأصل (PDF) في 11 أبريل 2017.
- RFC 2898 – مواصفات PKCS #5 v2.0.
- RFC 6070 – متجهات الاختبار لـ PBKDF2 مع HMAC-SHA1.
- توصية NIST الخاصة رقم 800-132 لاستخلاص المفاتيح استنادًا إلى كلمة المرور
