ما هو bcrypt؟
Bcrypt هي دالة تجزئة كلمات المرور صممها Niels Provos وDavid Mazières، المبنية على شيفرة Blowfish. على خلاف البصمات السريعة مثل MD5 أو SHA-256، فإن bcrypt بطيئة عمداً ومكلفة حسابياً — مما يجعل هجمات القوة العمياء ضد تجزئات كلمات المرور المسروقة غير عملية. يُنشئ bcrypt ملحاً عشوائياً لكل كلمة مرور تلقائياً، لذا تُنتج كلمات المرور المتطابقة تجزئات مختلفة.
كيف يعمل bcrypt؟
تعمل خوارزمية bcrypt بالكامل في متصفحك. إليك ما يحدث خطوة بخطوة:
- تُرمَّز كلمة المرور الخاصة بك على هيئة بايتات UTF-8 وتُغذى في جدولة مفاتيح bcrypt، التي تهيئ مصفوفة P (4,184 بايت) وصناديق S لشيفرة Blowfish باستخدام كلمة المرور والملح.
- يُتولد ملح عشوائي بطول 128 بِتّاً. يُخلط الملح في جدولة المفاتيح بحيث يُنتج كل ملح فريد تجزئة مختلفة تماماً حتى لنفس كلمة المرور.
- تُكرر جدولة المفاتيح لعدد 2^تكلفة جولة (مثلاً 2^10 = 1,024 تكراراً بتكلفة 10). كل تكرار يُعيد تشفير الملح ومدخلات مصفوفة P، مما يجعل الحساب أبطأ نسبياً كلما زادت التكلفة.
- الناتج النهائي هو سلسلة من 60 محرفاً بتنسيق
$2b$<cost>$<salt><hash>، حيث التكلفة مُبطَّنة بالأصفار (مثلاً 10)، والملح 22 محرفاً من Base64، والتجزئة 31 محرفاً من Base64. - للتحقق، تُعاد تشغيل الخوارزمية ذاتها بكلمة المرور المرشحة والملح المستخرج من التجزئة المخزنة. إذا تطابقت التجزئة المشتقة مع التجزئة المخزنة، فكلمة المرور صحيحة.
ما عامل التكلفة الذي ينبغي أن أستخدمه؟
عامل التكلفة هو لوغاريتم عدد التكرارات — التكلفة 10 تعني 2^10 = 1,024 جولة، والتكلفة 12 تعني 4,096 جولة. اختر بناءً على احتياجاتك الأمنية وعتادك:
- التكلفة 4-6 (16-64 جولة) — فقط للتطوير والاختبار. سريعة جداً للاستخدام الإنتاجي؛ توفر حماية ضئيلة.
- التكلفة 8 (256 جولة) — الحد الأدنى للتطبيقات غير الحرجة. حوالي 6 مللي ثانية على العتاد الحديث.
- التكلفة 10 (1,024 جولة) — المستوى الأساسي الموصى به حالياً. تستغرق ~25 مللي ثانية. جيدة لمعظم تطبيقات الويب.
- التكلفة 12 (4,096 جولة) — موصى بها لبوابات المسؤولين والأنظمة المالية والتطبيقات عالية الأمان. تستغرق ~100 مللي ثانية.
- التكلفة 14 (16,384 جولة) — أمان عالٍ. تستغرق ~400 مللي ثانية. استخدمها لكلمات المرور الرئيسية ومفاتيح التشفير أو حين يكون زمن تسجيل الدخول مقبولاً.
لماذا نستخدم مولِّد bcrypt هذا؟
- الخصوصية: تُجزَّأ كل كلمة مرور محلياً في متصفحك. لا تغادر أي بيانات جهازك.
- وضع مزدوج: توليد تجزئات جديدة أو التحقق من الموجودة جنباً إلى جنب.
- عامل تكلفة مرن: اضبط عامل العمل من 4 (سريع) إلى 15 (بطيء جداً) ليناسب احتياجات تطبيقك.
- متوافق مع المعايير: يُنتج تجزئات بالتنسيق القياسي
$2b$المتوافق مع كل لغة وإطار عمل رئيسي.
ما هي التطبيقات الشائعة لـ bcrypt؟
يُستخدم bcrypt على نطاق واسع في الصناعة لتخزين كلمات المرور والتحقق منها:
- مصادقة مستخدمي تطبيقات الويب — تخزين تجزئات كلمات مرور المستخدمين في قواعد البيانات بحيث لا تُحفظ كلمات المرور النصية أبداً.
- تجزئة مفاتيح API — تجزئة أسرار API قبل تخزينها، فلا يُسرب اختراق قاعدة البيانات بيانات اعتماد صالحة.
- تدقيق الترحيل — التحقق من أن تجزئات كلمات المرور القديمة من نظام سابق لا تزال قادرة على مصادقة المستخدمين بعد ترقية طبقة المصادقة.
كيف تبدو تجزئة bcrypt؟
تجزئة كلمة المرور hunter2 بعامل تكلفة 10 تُنتج سلسلة مثل $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy. يتحلل التنسيق كالتالي: $2b$ (إصدار الخوارزمية)، 10 (عامل التكلفة)، $، ثم 22 محرفاً من الملح و31 محرفاً من التجزئة، جميعها مُرمَّزة بـ Base64. كل تشغيلة بكلمة المرور ذاتها تُنتج تجزئة مختلفة بسبب الملح العشوائي.
يعمل مولِّد bcrypt هذا بالكامل في متصفحك باستخدام تنفيذ JavaScript نقي. جزّئ كلمات المرور قبل تخزينها، وتحقق من التجزئات الموجودة، وضبط عامل التكلفة لمطابقة متطلباتك الأمنية — كل ذلك دون إرسال بايت واحد إلى خادم.