التجزئة والملح وأمانك: لماذا هذا مهم في عام 2025؟
\n\nتخيل: لقد أنشأت موقعًا رائعًا، كل شيء يعمل، والمستخدمون يسجلون. ولكن في يوم من الأيام، تتسرب قاعدة البيانات إلى الإنترنت. ماذا سيرى المخترقون؟ إذا كنت تخزن كلمات المرور كنص عادي، فهذه كارثة. إذا كنت تستخدم md5 القديم، فهذا نفس الشيء تقريبًا. أما إذا كنت تستخدم التجزئة الآمنة مع الملح (secure hash and salt)، فسيرى المخترقون مجرد مجموعة لا معنى لها من الرموز. في عام 2025، هذا ليس مجرد توصية، بل هو معيار أمان.
\n\nفي هذه المقالة، سنشرح كيفية تجزئة كلمات المرور بشكل صحيح في PHP باستخدام الخوارزميات الحديثة والملح وأفضل الممارسات. ستتعرف على سبب خطورة الطرق القديمة، وكيفية الانتقال إلى تخزين آمن لكلمات المرور في 10 دقائق.
\n\nلماذا md5 و sha1 ضاران؟
\n\nيرتكب العديد من المطورين المبتدئين نفس الخطأ: استخدام md5($password) أو sha1($password). في عام 2025، هذه ليست مجرد ممارسة سيئة، بل هي طريق مباشر للثغرات الأمنية. لماذا؟
- \n
- سرعة الحساب. تم تصميم MD5 و SHA1 للسرعة، وليس للأمان. تسمح وحدات معالجة الرسومات (GPU) الحديثة بمعالجة مليارات التجزئات في الثانية. \n
- غياب الملح. إذا اختار مستخدمان نفس كلمة المرور، ستكون تجزئاتهما متطابقة. وهذا يسمح باستخدام جداول قوس قزح (Rainbow Tables). \n
- التصادمات. تم العثور على تصادمات عملية لـ MD5 — حيث يعطي مدخلان مختلفان نفس التجزئة. \n
لحسن الحظ، في PHP هناك دوال مدمجة تحل كل هذه المشاكل. وهذا لا يتطلب تثبيت مكتبات خارجية.
\n\npassword_hash و password_verify: سلاحك السري
\n\nمنذ PHP 5.5.0، ظهرت في اللغة دالتان سحريتان: password_hash() و password_verify(). تقومان تلقائيًا بتوليد ملح، وتستخدمان خوارزميات قوية من الناحية التشفيرية، وتحميان من هجمات التوقيت.
مثال على الاستخدام البسيط:
\n\n// تجزئة كلمة المرور\n$password = "MySuperSecureP@ssw0rd!";\n$hash = password_hash($password, PASSWORD_DEFAULT);\necho $hash; // $2y$10$...\n\n\nماذا حدث هنا؟ الدالة password_hash:
- \n
- قامت بتوليد ملح عشوائي \n
- اختارت الخوارزمية المثلى (bcrypt افتراضيًا) \n
- حسبت التجزئة \n
- أرجعت سلسلة نصية تحتوي على التجزئة والملح ومعلومات عن الخوارزمية \n
التحقق من كلمة المرور بنفس السهولة:
\n\n// التحقق من كلمة المرور\n$inputPassword = "MySuperSecureP@ssw0rd!";\nif (password_verify($inputPassword, $hash)) {\n echo "كلمة المرور صحيحة!";\n} else {\n echo "كلمة المرور خاطئة.";\n}\n\n\nلاحظ: لا تحتاج إلى تخزين الملح بشكل منفصل. إنه مدمج بالفعل في التجزئة. هذا هو التجزئة الآمنة مع الملح (secure hash and salt) عمليًا.
\n\nما هي الخوارزمية التي يجب اختيارها في عام 2025؟
\n\nافتراضيًا، تستخدم password_hash خوارزمية bcrypt. هذا اختيار ممتاز لمعظم المشاريع. لكن لدينا خيارات أخرى:
| الخوارزمية | \nالثابت | \nالتوصية | \n
|---|---|---|
| Bcrypt | \nPASSWORD_BCRYPT | \n اختيار ممتاز، مدعوم في كل مكان | \n
| Argon2i | \nPASSWORD_ARGON2I | \n مقاوم لهجمات القنوات الجانبية | \n
| Argon2id | \nPASSWORD_ARGON2ID | \n أفضل اختيار في عام 2025 | \n
Argon2id هو الفائز في مسابقة PHC (مسابقة تجزئة كلمات المرور). إنه مقاوم لكل من هجمات GPU وهجمات التوقيت. إذا كان PHP الخاص بك مبنيًا بدعم Argon2 (وهو معيار في PHP 8.x)، فاستخدمه.
\n\nضبط تكلفة التجزئة
\n\nإحدى الأفكار الرئيسية لـ التجزئة الآمنة مع الملح (secure hash and salt) هي جعل عملية الحساب بطيئة بما يكفي لإعاقة المهاجمين، ولكن ليس بطيئة جدًا بحيث تؤثر على تجربة المستخدم. يمكنك التحكم في ذلك باستخدام معامل cost (لـ bcrypt) أو memory_cost و time_cost (لـ Argon2).
مثال مع bcrypt:
\n\n// ضبط التكلفة\n$options = [\n 'cost' => 12, // القيمة الافتراضية هي 10، يمكنك زيادتها\n];\n$hash = password_hash($password, PASSWORD_BCRYPT, $options);\n\n\nومثال مع Argon2id:
\n\n// ضبط معاملات Argon2id\n$options = [\n 'memory_cost' => 1<<17, // 128 ميجابايت\n 'time_cost' => 4, // 4 تمريرات\n 'threads' => 2, // خيطان\n];\n$hash = password_hash($password, PASSWORD_ARGON2ID, $options);\n\n\nتذكر: كلما زادت التكلفة، زاد الأمان، ولكن أيضًا زاد وقت المعالجة. اختبر على الخادم الخاص بك للعثور على التوازن الأمثل.
\n\nالخاتمة: الأمان ليس خيارًا، بل ضرورة
\n\nفي عام 2025، أصبح أمان كلمات المرور أكثر أهمية من أي وقت مضى. باستخدام الدوال المدمجة في PHP مثل password_hash و password_verify مع خوارزميات حديثة مثل bcrypt أو Argon2id، يمكنك حماية مستخدميك وبياناتهم بسهولة. لا تنتظر حتى يحدث الاختراق — ابدأ بتطبيق أفضل الممارسات اليوم.
ابدأ الآن: راجع مشروعك، واستبدل أي استخدام لـ md5 أو sha1، وطبق التجزئة الآمنة مع الملح. مستخدموك سيشكرونك!