لماذا “الملح” يعزز أمان كلمات مرورك (ولكن “الفلفل” لا يفعل!)

دقائق القراءة: 11

ملاحظة هامة: يستعرض هذا المقال الجانب النظري لكيفية كسر كلمات المرور المجزأة (hashed passwords). إن فهم آليات عمل المجرمين السيبرانيين أمر بالغ الأهمية لتطوير أنظمة حماية قوية ضد هذه الأنواع من الهجمات. ومع ذلك، فإن محاولة اختراق نظام لا تملكه قد يكون غير قانوني في نطاق سلطتك القضائية (بالإضافة إلى أن اختراق أنظمتك الخاصة قد ينتهك، وكثيراً ما يفعل، أي ضمان للمنتج). يفترض هذا المقال أن لديك مستوى معيناً من المعرفة بوظائف التجزئة (hashing functions) وتقنيات كسر كلمات المرور الأساسية. إذا كنت غير ملم بهذه المواضيع، يُنصح بالاطلاع على المقالات ذات الصلة.

فهم أساسيات تجزئة كلمات المرور

كسر التجزئات: هل هي حقًا وظائف أحادية الاتجاه؟

لنفترض أنك تمكنت من الحصول على مجموعة من كلمات المرور المجزأة. إن محاولة كسر هذه التجزئات باستخدام القوة الغاشمة (brute force) ستستغرق وقتاً طويلاً جداً. فكيف يمكن تسريع هذه العملية؟ قد تتساءل: ألم تكن وظائف التجزئة (hash functions) أحادية الاتجاه؟ كيف يمكن كسرها إذن؟

للأسف، ليست جميع وظائف التجزئة المستخدمة لكلمات المرور بنفس قوة وأمان وظائف التجزئة المعيارية. على سبيل المثال، وظيفة التجزئة المعروفة باسم LM Hash، والتي كانت تُستخدم في أجهزة Windows القديمة، ضعيفة لدرجة أنه يمكن كسرها في غضون ثوانٍ قليلة. لا يتطلب الأمر عكس هندسة التجزئة (reverse engineer the hash)؛ بل يمكن للمهاجم استخدام مجموعات معدة مسبقاً من كلمات المرور النصية الواضحة (plaintext passwords) وقيم التجزئة المقابلة لها. تتيح هذه المجموعات للمخترق معرفة أي قيمة نصية واضحة تنتج تجزئة معينة.

عند إدخال كلمة مرور، يقوم الحاسوب بتجزئة هذه القيمة ومقارنتها بالقيمة المخزنة (حيث ستتطابق)، مما يتيح لك المصادقة. وبالتالي، لا تحتاج فعلياً لتخمين كلمة مرور شخص ما، بل فقط قيمة ستنشئ نفس التجزئة.

مفهوم التصادمات (Collisions): تحدي التجزئة

هذه الظاهرة تُعرف باسم “التصادم” (collision). نظراً لأن التجزئة يمكن أن تأخذ بيانات بأي طول أو محتوى، فهناك عدد لا محدود من الاحتمالات للبيانات التي يمكن تجزئتها. وبما أن التجزئة تحول هذا النص إلى محتوى ذي طول ثابت (على سبيل المثال، 32 حرفاً)، فهناك عدد محدود من التركيبات الممكنة للتجزئة. إنه عدد كبير جداً من الاحتمالات، ولكنه ليس لانهائياً. في نهاية المطاف، سينتج مجموعتان مختلفتان من البيانات نفس قيمة التجزئة.

هجمات جداول البحث: كيف يتم كسر التجزئات؟

تعتبر الجداول المعدة مسبقاً (pre-computed tables) مفيدة للغاية في تحقيق التصادمات، حيث توفر وقتاً وجهداً حسابياً كبيراً. يُطلق على استخدام مجموعة من التجزئات المعدة مسبقاً للبحث عن تجزئة كلمة مرور معينة اسم “هجوم جدول البحث” (lookup-table attack).

يستخدم مسؤولو الأنظمة هذه الجداول لاختبار قوة كلمات مرور المستخدمين لديهم، وغالباً ما تكون متاحة عبر الإنترنت أو للشراء. ومع ذلك، يمكن للمخترقين ذوي النوايا الخبيثة استخدامها أيضاً. إذا كانت كلمة المرور غير آمنة (على سبيل المثال، كلمة مرور مكونة من 5 أحرف)، يمكن كسرها بسهولة نسبياً. فكلمة مرور مكونة من 5 أحرف صغيرة فقط يمكن أن تنتج 11,881,376 كلمة مرور مختلفة (26^5).

حتى لو كانت تجزئة كلمة المرور هذه آمنة تشفيرياً (تستخدم خوارزمية مناسبة)، فسيظل من السهل جداً حساب جميع كلمات المرور الممكنة وتجزئاتها المقابلة. تعمل جداول البحث بفعالية كبيرة مع هذا النوع من تجزئات كلمات المرور. ومع ذلك، كلما زاد طول كلمات المرور، زادت متطلبات التخزين (وبالتالي تكلفة التخزين) اللازمة لكل كلمة مرور محتملة وتجزئتها المقابلة بشكل هائل.

على سبيل المثال، إذا كانت كلمة المرور التي تحاول كسرها مكونة من 8 أحرف وتستخدم أرقاماً (10 أرقام)، أحرفاً صغيرة (26)، أحرفاً كبيرة (26)، وبعض الأحرف الخاصة (10)، فإن عدد كلمات المرور المحتملة يقفز إلى 722,204,136,308,736. هذا يتطلب مساحة تخزين هائلة، خاصة عند الأخذ في الاعتبار أن كل كلمة مرور يتم تجزئتها باستخدام دالة تجزئة مثل SHA-256.

الجداول القوس قزح (Rainbow Tables): تقنية متقدمة لكسر كلمات المرور

تُعالج جداول القوس قزح (Rainbow Tables) مشكلة متطلبات التخزين الهائلة من خلال تقديم حلول تقلل من الحاجة إلى مساحة تخزين كبيرة، ولكنها في المقابل تتطلب وقتاً أطول لحساب كلمات المرور المحتملة. في أبسط صورها، هي جداول بحث معدة مسبقاً تمكنك من العثور بسرعة على النص الواضح (plaintext) الذي يطابق التجزئة (hash) التي بحوزتك. إذا كانت التجزئة والنص الواضح موجودين في الجدول الذي تملكه – على غرار هجمات القاموس (dictionary attacks) – فأنت تبحث فقط عما إذا كانت كلمة المرور موجودة في الجدول. إذا لم تكن موجودة، فلن تتمكن من كسر كلمة المرور. يمكن العثور على هذه الجداول عبر الإنترنت مجاناً أو للشراء.

كيف تعمل الجداول القوس قزح؟

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

لإنشاء الجدول، تقوم بإنشاء “سلاسل” (chains) من التجزئات والنصوص الواضحة باستخدام دالة تجزئة (hashing function) ودالة اختزال (reduction function). دالة الاختزال تقوم ببساطة بإنشاء نص واضح من تجزئة (هي لا تعكس هندسة التجزئة، بل تنشئ نصاً واضحاً مختلفاً منها). وهي أيضاً دالة أحادية الاتجاه.

لذلك، لحساب الجدول، تستخدم إحدى تجزئاتك، مثل h1، في دالة الاختزال R() لإنشاء النص الواضح p1. يمكن تمثيل ذلك كالتالي: R(h1) = p1. ثم تستخدم دالة التجزئة H() مع p1 لإنشاء تجزئة جديدة: H(p1) = h2.

باستخدام مثالنا السابق: إذا كانت مجموعة النصوص الواضحة هي [abcdefghijklmnopqrstuvwxyz]{5} (نحن نبحث عن جدول قوس قزح لجميع كلمات المرور المكونة من أحرف صغيرة بطول 5 أحرف) ونحن نستخدم خوارزمية التجزئة MD5:

  • قد تكون التجزئة ab56b4d92b40713acc5af89985d4b786 (h1).
  • الآن، نطبق دالة الاختزال، والتي يمكن أن تكون بسيطة مثل أخذ آخر 5 أحرف في التجزئة:
R(ab56b4d92b40713acc5af89985d4b786) = cafdb
H(cafdb) = 81a516edabf924cd0f727d329e855b1f

لماذا سميت بالجداول القوس قزح؟

يستخدم كل عمود في جداول القوس قزح دالة اختزال مختلفة. فلو تم تلوين كل عمود، لكان قوس قزح طويلاً ورفيعاً جداً. استخدام دوال اختزال مختلفة يقلل من عدد دمج السلاسل (chain merges) أو التصادمات التي كانت تحدث بشكل متكرر مع “سلاسل التجزئة” (hash-chains)، وهي التقنية التي سبقت جداول القوس قزح. هذا يعني أساساً أنه إذا واصلت استخدام نفس دالة الاختزال، فهناك احتمال أن ينتهي بك الأمر بسلسلتين مختلفتين تتقاربان إلى نفس النص الواضح. استخدام دوال اختزال مختلفة يقلل من فرصة حدوث ذلك، على الرغم من أنه ليس مستحيلاً.

بناء السلاسل: جوهر عمل الجداول القوس قزح

لإنشاء سلسلة، تستخدم دالة الاختزال ودالة التجزئة (كلاهما أحادي الاتجاه) لإنشاء “سلسلة” من التجزئات والنصوص الواضحة. تستمر كل من هذه “السلاسل” لعدد k من الخطوات، وعندما تنتهي السلسلة، يتم تخزين النص الواضح الأول والتجزئة الأخيرة فقط في السلسلة. لذا، تبدو السلسلة النموذجية كالتالي:

p1 -> h1 = H(p1) -> R1(h1) = p2 -> H(p2) = h2 -> R2(h2) = p3 -> H(p3) = h3

كل دالة اختزال مختلفة (ممثلة بـ R1، R2، R3، إلخ).

يبدو جدول عينة من السلاسل (كل صف هو سلسلة بطول 5 خطوات) كالتالي. لاحظ أن هذا الجدول مأهول ببيانات وهمية فقط لإعطائك مثالاً – دالة التجزئة ليست دالة تجزئة ستجدها مستخدمة لتجزئة كلمات المرور. دوال الاختزال، R1 و R2، معرفة كالتالي: R1 تأخذ أول 3 أرقام من التجزئة، و R2 تأخذ آخر حرفين من التجزئة:

الخطوة 1 التجزئة 1 الاختزال 1 الخطوة 2 التجزئة 2 الاختزال 2 الخطوة 3
p1 h1 = H(p1) R1(h1) = p2 H(p2) = h2 R2(h2) = p3 H(p3) = h3
2 abdu2934 293 83kdnif8 if ike83jd3
15 dks2ne94 294 ld932nd9 ld ldie938d
20 ld93md8d 938 lxked93k lx 93mdkg8d

في جدول القوس قزح، يتم حفظ نقطة البداية الأولى (النص الواضح) ونقطة النهاية (التجزئة) فقط لتوفير مساحة التخزين، مثل هذا:

starting point (plaintext) --> endpoint, after k steps through the chain (hash)
p1 --> h1k
p2 --> h2k
p3 --> h3k

عندما يكون لديك تجزئة (h) لا تعرف نصها الواضح (?)، ستقارنها بالسلاسل. أولاً، ستتحقق مما إذا كانت التجزئة موجودة في قائمة التجزئات النهائية (h1k، h2k، إلخ). إذا كان الأمر كذلك، يمكنك الانتقال إلى الخطوة 3. إذا لم يكن الأمر كذلك، يمكنك اختزال التجزئة إلى نص واضح مختلف (باستخدام R1) ثم تجزئة هذا النص الواضح (باستخدام دالة التجزئة ودالة الاختزال التالية المذكورة أعلاه) ومقارنته بقائمة التجزئات النهائية (h1k، h2k، h3k، إلخ).

عندما تتطابق مع إحدى التجزئات النهائية، فمن المحتمل أن تحتوي هذه السلسلة على التجزئة الأصلية. للعثور على التجزئة الأصلية في السلسلة، خذ نقطة البداية النصية الواضحة لتلك السلسلة (لذا إذا كانت تتطابق مع h1k، ابدأ بـ p1) وقم بتطبيق دوال التجزئة والاختزال للتحرك على طول السلسلة حتى تصل إلى التجزئة المعروفة ونصها الواضح المقابل. بهذه الطريقة يمكنك التحرك عبر التجزئات في السلسلة دون أن تشغل مساحة تخزين على جهازك.

بينما لا يمكنك التأكد من أن السلاسل ستحتوي على التجزئة التي تحتاجها، كلما زاد عدد السلاسل التي أنشأتها (أو تشير إليها)، زادت درجة يقينك. لسوء الحظ، يستغرق إنشاء كل سلسلة وقتاً طويلاً، وزيادة عدد السلاسل يزيد من الوقت الذي تحتاجه.

الحماية ضد هجمات كسر كلمات المرور

الدفاع المتعدد الطبقات (Layered Defense)

أولاً، يجب تطبيق دفاع متعدد الطبقات على جميع الأنظمة. إذا تمكنت من منع اختراق أنظمتك بطرق أخرى (بحيث لا يتمكن المهاجم من الحصول على نسخة من كلمات المرور المجزأة)، فلن يتمكن المهاجم من كسرها في المقام الأول.

تقنية التمليح (Salting): إضافة عشوائية للأمان

يمكنك أيضاً استخدام “التمليح” (salting)، وهي عملية إضافة قيمة عشوائية (salt) إلى كلمة المرور قبل تجزئتها. هذا يعني أن القيمة المحسوبة مسبقاً التي قد يجدها المهاجم (والتي تطابق التجزئة) لن تعمل. فالنص المشفر لا يعتمد فقط على النص غير المشفر.

بما أن “الملح” يختلف لكل كلمة مرور، يجب كسر كل كلمة مرور على حدة. أصبحت تقنية التمليح الآن خياراً مدمجاً في معظم أنواع التجزئة الرئيسية. بينما لا تستخدم أنظمة Windows حالياً التمليح بشكل افتراضي، يمكنها تشفير التجزئات المخزنة إذا استخدمت أداة SYSKEY.

تقنية التكرار (Rounds): تعقيد عملية التجزئة

يمكنك أيضاً استخدام “التكرار” (rounds)، أو تجزئة كلمة المرور عدة مرات. استخدام التكرار (خاصة إذا تم اختيار عدد التكرارات عشوائياً لكل مستخدم) يجعل مهمة المخترق أكثر صعوبة. تكون هذه التقنية أكثر فعالية عند دمجها مع التمليح.

لسوء الحظ، المخترق الذي يحصل على كلمات المرور المجزأة سيحصل أيضاً على عدد التكرارات المستخدمة و”الملح” المستخدم (لأن الحصول على تلك القائمة يعني على الأرجح اختراق النظام). يتم تخزين “الملح” وعدد التكرارات المستخدمة مع تجزئة كلمة المرور، مما يعني أنه إذا حصل المهاجم على أحدهما، فسيحصل على الآخر. ومع ذلك، لن يتمكنوا من استخدام جداول القوس قزح المعدة مسبقاً والمتاحة عبر الإنترنت، وسيتعين عليهم حساب جداولهم الخاصة (وهو أمر يستغرق وقتاً طويلاً للغاية).

تقنية “الفلفل” (Peppering): سرية إضافية

إحدى الطرق الأخرى المصممة لزيادة صعوبة كسر كلمة المرور هي استخدام “الفلفل” (pepper). يشبه “الفلفل” “الملح”، ولكن بينما “الملح” ليس سرياً (يتم تخزينه مع كلمة المرور المجزأة)، يتم تخزين “الفلفل” بشكل منفصل (على سبيل المثال، في ملف تكوين) لمنع المخترق من الوصول إليه. هذا يعني أن “الفلفل” سري، وتعتمد فعاليته على هذه السرية.

يجب أن يكون “الفلفل” مختلفاً لكل تطبيق يُستخدم فيه، ويجب أن يكون طويلاً بما يكفي ليكون آمناً. يوصي المعهد الوطني للمعايير والتكنولوجيا (National Institute of Standards and Technology) بأن يكون طوله 112 بت على الأقل. بينما يمكن أن يكون استخدام “الفلفل” فعالاً في بعض الحالات، إلا أن هناك بعض السلبيات. أولاً، لا توجد خوارزمية حالية تدعم “الفلفل” بشكل مباشر، مما يعني عملياً أنه من المستحيل تطبيق هذه التقنية على نطاق واسع، إلا إذا كنت تقوم بإنشاء خوارزمياتك الخاصة. وكما يقول الخبير بروس شناير (Bruce Schneier): “لا تفعل ذلك”. للاطلاع على مقال أطول حول مشاكل “الفلفل”، يمكنك مراجعة هذا الرابط.

كلمات المرور القوية والسياسات الأمنية

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

هل أنت مرتبك بشأن ما يجعل كلمة المرور قوية؟

صورة توضيحية من xkcd حول كيفية اختيار كلمات مرور قوية

هل يجب أن أقلق بشأن الاختراق؟

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

إذا كانت هناك طريقة أسهل للحصول على كلمة مرورك، فمن المحتمل أن يكون هذا هو ما سيحاوله الفاعل الخبيث أولاً (مثل هجمات التصيد الاحتيالي phishing!). هذا يعني أن تفعيل أفضل ممارسات الأمن السيبراني الأساسية هو على الأرجح أسهل طريقة لمنع التعرض للاختراق. في الواقع، ذكرت شركة Microsoft مؤخراً أن مجرد تفعيل المصادقة الثنائية (2FA) سيؤدي إلى حظر 99.9% من الهجمات الآلية.

صورة توضيحية من xkcd حول فعالية المصادقة الثنائية في الحماية

الخلاصة التقنية

في عالم الأمن السيبراني المتطور، تُعد حماية كلمات المرور حجر الزاوية لأي نظام آمن. لقد استعرضنا كيف يمكن لتقنيات مثل جداول البحث وجداول القوس قزح أن تشكل تهديداً خطيراً لكلمات المرور المجزأة إذا لم يتم تأمينها بشكل صحيح. الحلول الفعالة تكمن في تطبيق دفاع متعدد الطبقات، واعتماد تقنيات مثل “التمليح” (salting) التي تضيف عشوائية فريدة لكل تجزئة، مما يجعل هجمات الجداول المعدة مسبقاً غير مجدية. بينما تُقدم فكرة “الفلفل” (peppering) مستوى إضافياً من السرية، فإن عدم وجود دعم خوارزمي واسع النطاق يجعلها غير عملية حالياً. في النهاية، يظل الالتزام بكلمات مرور قوية ومعقدة، وتفعيل المصادقة الثنائية (2FA)، وتطبيق سياسات أمنية صارمة، هو خط الدفاع الأول والأكثر فعالية ضد الغالبية العظمى من الهجمات السيبرانية.

قراءات إضافية

  • مزيد من التفاصيل حول سلاسل التجزئة (hash chains)
  • شرح آخر لجداول القوس قزح (rainbow tables)
  • قائمة بجداول القوس قزح المتاحة عبر الإنترنت

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *