bcrypt والأملاح المولدة عشوائيًا
الخلفية
bcrypt هي خوارزمية تجزئة كلمة المرور التي تستخدم التمليح لتعزيز الأمان. يتضمن التمليح دمج بيانات عشوائية في تجزئة كلمة المرور، مما يضمن أنه حتى كلمات المرور المتطابقة ستنتج نتائج تجزئة مختلفة.
توليد الملح والتجزئة
تتضمن فئة PHP المقدمة وظيفة تسمى genSalt () التي تولد ملح عشوائي باستخدام الدالة openssl_random_pseudo_bytes() . يتم بعد ذلك استخدام هذا الملح كجزء من عملية تجزئة bcrypt في وظيفة genHash().
تأخذ وظيفة genHash() كلمة مرور وتجمعها مع الملح الذي تم إنشاؤه عشوائيًا. التجزئة الناتجة عبارة عن مزيج من كلمة المرور الأصلية والملح والبادئة الخاصة بالخوارزمية ($2y$) التي تشير إلى خوارزمية bcrypt ومعلماتها (على سبيل المثال، عامل عبء العمل).
التحقق من كلمة المرور
للتحقق من كلمة المرور، تقوم وظيفة التحقق () المقدمة بمقارنة كلمة المرور المدخلة مع التجزئة المخزنة. يقوم بذلك عن طريق ربط كلمة المرور المقدمة مع التجزئة المخزنة واستخدام وظيفة crypt() لتجزئتها مرة أخرى.
فهم منطق مقارنة التجزئة
المفتاح لفهم سبب الملح الذي تم إنشاؤه عشوائيًا لا يؤثر على التحقق من كلمة المرور هو فحص تنسيق التجزئة المخزنة. يتكون التجزئة من جزأين رئيسيين:
بادئة الخوارزمية ($2y$)، وعامل عبء العمل (على سبيل المثال، 10)، والملح (على سبيل المثال، abcdefg...)- كلمة المرور المجزأة
-
عندما تقوم وظيفة التحقق () بتجزئة كلمة المرور المقدمة مع التجزئة المخزنة، فإنها تستخدم فقط الجزء الملح كمدخل لها. وهذا يضمن دمج الملح في عملية التحقق.
الاستنتاج
باختصار، بينما يقوم bcrypt بإنشاء أملاح عشوائية لضمان أمان كلمة المرور، فإن عملية التحقق من كلمة المرور تأخذ في الاعتبار فقط الجزء الملح من التجزئة المخزنة. وهذا يسمح بالتحقق من كلمة المرور المقدمة مقابل التجزئة المخزنة، على الرغم من أن الملح يتم إنشاؤه بشكل عشوائي.