خطوات الاستخدام
أدخل طول الملح بالبت (مثلاً 16 أو 32 أو 64). الملح (Salt) هو قيمة عشوائية تُضاف إلى كلمة المرور قبل عملية التجزئة (hashing) لمنع هجمات جداول قوس قزح (Rainbow Tables) وهجمات القاموس المعجلة. كلما زاد طول الملح، زاد عدد الاحتمالات الممكنة، مما يجعل تخزين جداول مسبقة الحساب غير عملي. على سبيل المثال، ملح بطول 16 بت يعطي 2^16 = 65536 احتمالاً، بينما ملح بطول 32 بت يعطي أكثر من 4 مليارات احتمال.
بعد إدخال طول الملح، تقوم الحاسبة بحساب عدد أملاح الملح الممكنة (عدد القيم الفريدة) باستخدام الصيغة: عدد الأملاح = 2^saltBits. ثم تحسب الفائدة الأمنية بناءً على هذا العدد. فائدتان رئيسيتان: (1) إبطاء هجمات جداول قوس قزح حيث أن المهاجم يحتاج إلى إنشاء جدول منفصل لكل ملح؛ (2) إبطاء هجمات القاموس الموزعة لأن نفس كلمة المرور بنفس الملح ستنتج تجزئة مختلفة لكل مستخدم.
ستظهر النتيجة بعدد الأملاح الممكنة (كتابة علمية أو صيغة عشرية) وشرح مبسط لما يعنيه هذا الرقم من الناحية الأمنية. على سبيل المثال: ملح 32 بت يوفر أكثر من 4 مليار ملح، مما يعني أن المهاجم يحتاج إلى مساحة تخزين تزيد عن 4 مليار ضعف لتخزين جداول قوس قزح لكلمة مرور واحدة. كما ستعرض الحاسبة توصيات NIST وOWASP بأن طول الملح الموصى به لا يقل عن 32 بت، ويفضل 64 بت أو أكثر.
يمكنك اختبار أطوال مختلفة ومقارنة النتائج: كلما زاد طول الملح، زادت الفائدة الأمنية خطياً في اللوغاريتم (أي يتضاعف عدد الأملاح مع كل بت إضافي). لكن يجب مراعاة أن طول الملح الزائد لا يؤثر على أداء التحقق من كلمة المرور بشكل كبير لأن عملية التجزئة هي الأكثر استهلاكاً للوقت (مثل bcrypt أو Argon2).
نوصي باستخدام ملح لا يقل عن 32 بت للتطبيقات القياسية، و64 بت للتطبيقات عالية الأمان. تذكر أيضاً أن الملح يجب أن يكون عشوائياً وفريداً لكل مستخدم، ولا يُعاد استخدامه. هذه الحاسبة توضح لك القوة الرياضية لطول الملح وتساعدك في اتخاذ قرارات تصميم أمنية أفضل.
أمثلة محلولة
تطبيقات عملية على طول الملح الأمني بخطوات الحل كاملة.
الحل
لنحلل السيناريو: ملح بطول 16 بت يعني وجود 2^16 = 65,536 ملحاً ممكناً. إذا كان المهاجم يريد إنشاء جدول قوس قزح لكل ملح لتكسير كلمات المرور الشائعة (مثلاً 1000 كلمة مرور شائعة)، فإنه سيحتاج إلى تخزين 65,536 جدولاً، كل جدول يعالج نفس كلمات المرور. مساحة التخزين المطلوبة تعادل 65,536 * (حجم الجدول الواحد). لنفترض أن كل جدول يشغل 1 ميجابايت (تقديري)، فهذا يعني حوالي 65.5 جيجابايت. على الرغم من أن هذا كبير نسبياً، إلا أنه ليس مستحيلاً، خاصة مع الأقراص الرخيصة. كما أن المهاجم يمكنه تحسين الهجوم باستخدام قواعد بيانات ضخمة مسبقة الحساب أو استخدام قوة الحوسبة المتوازية. بالإضافة إلى ذلك، في حالة وجود 10,000 مستخدم فقط، فإن عدد الأملاح الفعلية المستخدمة (10,000 ملح فريد) هو أقل من العدد الكلي الممكن (65,536)، مما يقلل العبء على المهاجم قليلاً. لذلك، 16 بت تعتبر ضعيفة نسبياً في السياقات الحديثة. التوصية: استخدام ملح لا يقل عن 32 بت (4.29 مليار ملح) مما يجعل الهجمات غير عملية بسبب الحاجة إلى تخزين تيرابايت من البيانات لكل كلمة مرور شائعة.
الحل
تتميز خوارزمية bcrypt بأنها بطيئة بطبيعتها (عامل التكلفة Cost factor)، وتستخدم ملحاً مدمجاً. طول الملح 128 بت يعني أن عدد الأملاح الممكنة هو 2^128، وهو رقم فلكي (حوالي 3.4 × 10^38). لأي كلمة مرور، هناك 2^128 تجزئة ممكنة (ملخَّصة بواسطة الملح). في هجوم القاموس، يحاول المهاجم كلمات مرور شائعة. لكن الملح يغير التجزئة لكل مستخدم، لذا لا يمكن للمهاجم تحضير جداول مسبقة الحساب. عند تخمين كلمة مرور، يجب على المهاجم حساب bcrypt لكل ملح محتمل لكل مستخدم. مع 128 بت، حتى لو أراد المهاجم مهاجمة مستخدم واحد فقط، فإنه لا يعرف الملح مسبقاً (عادة الملح معروف إذا تم تسريب قاعدة البيانات، لكنه يظل فريداً). افتراضياً، إذا كان لدى المهاجم قاعدة بيانات تحتوي على الملح، فسيحسب bcrypt لهذا الملح فقط لكل كلمة مرور. وبالتالي، طول الملح لا يضيف عبئاً حسابياً مباشراً على المهاجم في هجوم القاموس بعد معرفة الملح؛ العبء الحسابي يأتي من تكلفة bcrypt نفسها. ولكن طول الملح يحمي من هجمات precomputation حيث لا يمكن بناء جدول شامل لجميع الأملاح. لذلك، الطول 128 بت يعطي حماية فائقة ضد جداول قوس قزح ويضمن أن كل مستخدم لديه تجزئة فريدة حتى لو كانت كلمات المرور متطابقة، مما يمنع هجمات العبور (Pass the Hash) وغيرها. زمن تكسير كلمة المرور الواحدة يعتمد فقط على قوة كلمة المرور وعامل التكلفة في bcrypt، وليس على طول الملح. باختصار، طول الملح يوفر حماية رياضية ضد الهجمات التي تعتمد على الحساب المسبق، بينما تتحمل خوارزمية التجزئة مسؤولية إبطاء التخمين.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة طول الملح الأمني.
مرجع — ملح 16 بت: 65,536 ملحة
- طول الملح بالبت (8-1023)
- 16
مرجع — ملح 32 بت: 4.29 مليار ملحة
- طول الملح بالبت (8-1023)
- 32
مرجع — ملح 64 بت: 1.8447e19
- طول الملح بالبت (8-1023)
- 64
مرجع — ملح bcrypt (128 بت): 3.4e38
- طول الملح بالبت (8-1023)
- 128
مرجع — الحد الأدنى 8 بت: 256
- طول الملح بالبت (8-1023)
- 8
مرجع — مضاعفة ببت واحد: 256 → 512
- طول الملح بالبت (8-1023)
- 9