0Pricing
Security+ Academy · درس

دوال اشتقاق المفاتيح: PBKDF2 وbcrypt وArgon2

قارنوا خوارزميات تجزئة كلمات المرور من حيث مقاومتها لهجمات GPU وASIC، وتعرّفوا إلى كيفية ضبط عوامل العمل وصعوبة الذاكرة.

دوال اشتقاق المفاتيح: PBKDF2 وbcrypt وArgon2 درس مجاني في Security+ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Security+ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Security+ Academy 4 دروس في المجموع.

لماذا تختلف تجزئة كلمات المرور؟

يتطلب تخزين كلمات المرور فئة خاصة من الدوال التشفيرية تُسمى دالة تجزئة كلمات المرور (PHF) أو دالة اشتقاق المفاتيح (KDF). صُممت دوال التجزئة التشفيرية العادية مثل SHA-256 لتكون سريعة؛ إذ يستطيع GPU حديث حساب مليارات تجزئات SHA-256 في الثانية. وهذه السرعة كارثية لتخزين كلمات المرور، لأن المهاجم الذي يسرق قاعدة بيانات التجزئات يستطيع تجربة مليارات التخمينات في الثانية. أما دوال KDF الخاصة بكلمات المرور فبطيئة عمدًا، ويمكن ضبطها لجعل هجمات القوة الغاشمة غير عملية حسابيًا، مع السماح بتسجيل الدخول المشروع خلال أجزاء من الثانية.

استخدام Salt: إحباط Rainbow Tables

قبل ظهور دوال KDF المتخصصة لكلمات المرور، استخدم المهاجمون Rainbow Tables، وهي جداول مُسبقة الحساب تربط قيم التجزئة بكلمات المرور النصية. أما salt فهو قيمة عشوائية فريدة لكل مستخدم، تُضاف إلى بداية كلمة المرور أو نهايتها قبل تجزئتها، ما يجعل كل تجزئة فريدة حتى عند تطابق كلمات المرور. تُخزَّن salts بجانب التجزئة في قاعدة البيانات؛ فهي ليست سرية، بل عشوائية فحسب. ويجب أن يكون salt السليم بطول 16 بايتًا على الأقل، وأن يُولَّد باستخدام مولد أرقام عشوائية آمن تشفيريًا، وأن يُخزَّن لكل مستخدم، وألا يُعاد استخدامه مطلقًا بين الحسابات.

PBKDF2: المعيار الخاص بكلمات المرور

يُعرَّف PBKDF2 (Password-Based Key Derivation Function 2) في RFC 8018، وهو معتمد من NIST. ويعمل عبر تطبيق دالة HMAC بشكل متكرر، وعادةً ما تكون HMAC-SHA-256، على كلمة المرور وsalt، لعدد قابل للضبط من التكرارات. ويمثل عدد التكرارات عامل العمل؛ ويوصي NIST، اعتبارًا من عام 2023، بما لا يقل عن 600,000 تكرار من PBKDF2-HMAC-SHA256. يُستخدم PBKDF2 على نطاق واسع، مثلًا في Django وiOS Keychain وWPA2-PSK، لكنه يعاني من نقطة ضعف واحدة: يمكن تنفيذه بكفاءة على وحدات GPU، ما يجعله أقل مقاومة لهجمات GPU من البدائل.

# PBKDF2 example (Python pseudocode concept)
# import hashlib
# dk = hashlib.pbkdf2_hmac(
#   'sha256',         # hash algorithm
#   b'password',      # password bytes
#   b'random_salt',   # salt bytes
#   600000            # iterations
# )

bcrypt: صعوبة الذاكرة ووحدة المعالجة المركزية

صمّم Niels Provos وDavid Mazieres خوارزمية bcrypt عام 1999، ولا تزال مستخدمة على نطاق واسع. ويتمثل ابتكارها الأساسي في عامل الكلفة (معامل rounds)، إذ تؤدي كل زيادة فيه إلى مضاعفة وقت الحساب. تستخدم bcrypt خوارزمية Blowfish معدلة مع إعداد مفتاح Eksblowfish الذي يتطلب قدرًا كبيرًا من موارد وحدة المعالجة المركزية والذاكرة، ما يجعل تسريعها على وحدات GPU أصعب بكثير مقارنةً بـ PBKDF2. كما تحد bcrypt مدخل كلمة المرور بـ 72 بايتًا؛ إذ تُقتطع كلمات المرور الأطول، ولذلك يتطلب بعض التنفيذات تجزئة كلمات المرور الطويلة أولًا باستخدام SHA-256.

# bcrypt cost factor
# Cost 10 = ~100ms on modern hardware
# Cost 12 = ~400ms
# Cost 14 = ~1600ms
# Each +1 doubles the work
# Recommended: cost 12-14 for web apps
# Command: htpasswd -bnBC 12 username password

Argon2: الخيار الحديث الأفضل

فازت Argon2 في مسابقة Password Hashing Competition عام 2015، وهي التوصية الحالية من OWASP. وتأتي بثلاثة أنواع: Argon2d (أسرع، لكنها عرضة لهجمات القنوات الجانبية، والأفضل للعملات المشفرة)، وArgon2i (بزمن ثابت، والأفضل لتجزئة كلمات المرور)، وArgon2id (هجينة، ويوصى بها لمعظم الاستخدامات). ويمكن ضبط Argon2id عبر ثلاثة أبعاد: كلفة الزمن (التكرارات)، وكلفة الذاكرة (مقدار RAM المطلوب)، والتوازي (عدد الخيوط). وتجعل متطلبات الذاكرة المرتفعة موازاتها على وحدات GPU صعبة للغاية، وتجعل تنفيذها على ASICs غير عملي تمامًا.

# Argon2id recommended parameters (OWASP 2023)
# Memory: 64MB (65536 KiB)
# Iterations: 3
# Parallelism: 4 threads
# Output length: 32 bytes
# argon2 -id -t 3 -m 16 -p 4 -l 32

صعوبة الذاكرة: لماذا تُحبط هجمات GPU؟

تحتوي وحدات GPU على آلاف النوى، لكنها تملك ذاكرة محدودة لكل نواة؛ وهي تتفوق في تنفيذ العمليات البسيطة قليلة الاعتماد على الذاكرة بالتوازي. وتتطلب الدوال صعبة الذاكرة مثل Argon2 وscrypt مقدارًا كبيرًا من RAM لكل عملية تجزئة. فإذا أراد مهاجم تشغيل 10,000 عملية Argon2id بالتوازي، تتطلب كل منها 64MB من الذاكرة، فسيحتاج إلى 640GB من ذاكرة GPU، وهو مقدار يتجاوز بكثير ما يتوفر في أي عنقود GPU. وتجبر هذه الخاصية، المسماة صعوبة الذاكرة، المهاجمين إما على استخدام عمليات بطيئة ومتسلسلة، أو على تحمل تكاليف عتاد استثنائية تجعل الهجمات غير مجدية اقتصاديًا.

ضبط عامل العمل عمليًا

يعتمد عامل العمل المناسب على عتادك ووقت التأخير المقبول. والهدف العام هو 100-300 مللي ثانية على عتاد الخادم المستخدم في بيئة الإنتاج لكل عملية مصادقة. ومع تحسن العتاد، ينبغي زيادة عامل العمل؛ ولهذا تخزّن bcrypt وArgon2 المعاملات إلى جانب التجزئة، ما يسمح بـ ترقيات شفافة: عند تسجيل الدخول التالي، تحقّق من كلمة المرور، ثم أعد تجزئتها باستخدام المعاملات الجديدة الأعلى. وتحتفظ OWASP بالمعاملات الدنيا الموصى بها حاليًا لـ PBKDF2 وbcrypt وArgon2id، وينبغي مراجعتها سنويًا.

scrypt: دالة KDF الأخرى صعبة الذاكرة

صمّم Colin Percival خوارزمية scrypt عام 2009، وكانت أول دالة KDF صعبة الذاكرة تحظى بتبني واسع، وتُستخدم في Litecoin والعديد من مديري كلمات المرور. وتُضبط scrypt باستخدام N (كلفة CPU/الذاكرة)، وr (حجم الكتلة)، وp (عامل التوازي). ومثل Argon2، تتطلب قيم N المرتفعة مقدارًا كبيرًا من RAM لكل عملية. وتُعد scrypt آمنة، لكن يُفضَّل Argon2id عمومًا للتطبيقات الجديدة لأنها فازت في PHC وخضعت لتحليل تشفيري أكبر. وكلاهما خيار مقبول.

ما يجب عدم استخدامه: MD5 وSHA-1 وSHA غير المملح

يجب عدم استخدام عدة أساليب للتجزئة مع كلمات المرور مطلقًا: MD5 (مكسورة، ويمكن حساب مليارات التجزئات في الثانية على عتاد المستهلكين)، وSHA-1 (المشكلة نفسها)، وSHA-256 غير المملح (سريع، ما يجعل Rainbow Tables فعالة بسهولة)، والتشفير البسيط (قابل للعكس، وسرقة المفتاح تعني كشف جميع كلمات المرور). استخدم اختراق تاريخي مثل LinkedIn (2012) SHA-1 غير مملح، فكُشفت 117 مليون كلمة مرور، وكُسر معظمها خلال أيام. أما Adobe (2013) فقد شفّر كلمات المرور بدلًا من تجزئتها، وهو سوء فهم جوهري أدى إلى كشف 153 مليون حساب. وتندرج هذه الحوادث ضمن نطاق المعرفة المطلوب في امتحان Security+.

اشتقاق مفاتيح التشفير

تُستخدم KDFs أيضًا لاشتقاق مفاتيح التشفير من كلمات المرور، بدلًا من تخزين تجزئات كلمات المرور. فعندما يعيّن المستخدم كلمة مرور رئيسية لخزنة مشفرة، يستخدم التطبيق KDF لاشتقاق مفتاح التشفير الفعلي AES-256 من كلمة المرور. ولهذا يستطيع مديرو كلمات المرور فك تشفير خزنتك محليًا؛ إذ يشغّلون KDF على كلمتك الرئيسية لإعادة إنشاء مفتاح التشفير، الذي لا يغادر جهازك مطلقًا. أما HKDF (HMAC-based Key Derivation Function) فهو المعيار لاشتقاق مفاتيح متعددة من سر واحد ذي إنتروبيا عالية، ويُستخدم في TLS 1.3 لاشتقاق مفاتيح المصافحة ومفاتيح التطبيق.

حشو بيانات الاعتماد والحماية باستخدام KDF

تعيد هجمات حشو بيانات الاعتماد استخدام أزواج أسماء المستخدمين وكلمات المرور المسروقة من عملية اختراق ما ضد خدمات أخرى. تقلل دوال KDF القوية الفترة المتاحة لكسر كلمات المرور دون اتصال بعد حدوث الاختراق؛ فإذا كان على المهاجم إنفاق 300 مللي ثانية لكل محاولة بدلاً من ميكروثوانٍ، يصبح كسر كلمة مرور عشوائية مكوّنة من 10 أحرف غير ممكن عملياً من الناحية الحسابية. ومع ذلك، لا تحمي دوال KDF من إعادة استخدام كلمة المرور عبر المواقع؛ فهذا يتطلب من المستخدمين استخدام كلمات مرور فريدة. إن الجمع بين كلمات المرور الفريدة + تخزين Argon2id + المصادقة متعددة العوامل يجعل الهجمات المعتمدة على بيانات الاعتماد غير فعالة عملياً.

اختبار سريع

اختبر مدى فهمك لمفاهيم CompTIA Security+ (SY0-701) الواردة في هذا الدرس.

مراجعة الدرس

تعلمت في هذا الدرس أن دوال KDF الخاصة بكلمات المرور بطيئة عمداً، مع إمكانية ضبط عوامل العمل فيها لجعل هجمات القوة الغاشمة غير المتصلة غير ممكنة عملياً من الناحية الحسابية، وأن الدوال التي تتطلب قدراً كبيراً من الذاكرة، مثل Argon2id وscrypt، تقاوم المعالجة المتوازية باستخدام GPU لأنها تتطلب قدراً كبيراً من ذاكرة RAM لكل عملية حسابية، وأن MD5 وSHA-1 والتجزئات غير المملحة غير مناسبة إطلاقاً لتخزين كلمات المرور، كما أثبتت ذلك عدة عمليات اختراق بارزة. بعد ذلك، سنستكشف التشفير ما بعد الكمي والخوارزميات التي اختارتها NIST لتحل محل RSA وECC.

الأسئلة الشائعة

هل درس «دوال اشتقاق المفاتيح: PBKDF2 وbcrypt وArgon2» مجاني؟

نعم — نص درس «دوال اشتقاق المفاتيح: PBKDF2 وbcrypt وArgon2» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Security+ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Security+ Academy 4 دروس في المجموع.

ماذا ستتعلم في «دوال اشتقاق المفاتيح: PBKDF2 وbcrypt وArgon2»؟

قارنوا خوارزميات تجزئة كلمات المرور من حيث مقاومتها لهجمات GPU وASIC، وتعرّفوا إلى كيفية ضبط عوامل العمل وصعوبة الذاكرة. تتمرن على Security+ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Security+ Academy؟

لا تُشترط خبرة سابقة. Security+ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «دوال اشتقاق المفاتيح: PBKDF2 وbcrypt وArgon2»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Security+ Academy هذا؟

نعم. كل درس في Security+ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مصافحة TLS 1.3 واستئناف 0-RTT
  2. التشفير الموثّق: AES-GCM وChaCha20-Poly1305
  3. دوال اشتقاق المفاتيح: PBKDF2 وbcrypt وArgon2
  4. التشفير ما بعد الكمي: CRYSTALS-Kyber وDilithium
← العودة إلى Security+ Academy