حماية كلمات المرور بالـ Salt بسهولة

x32x01
  • بواسطة x32x01 ||

يعني إيه "ملح" (Salt)؟ 🤔

الـ ملح (Salt) هو قيمة عشوائية بنضيفها لكلمة المرور قبل ما نتشفّرها أو نعمل لها هاش. فبدل ما نشفر كلمة المرور لوحدها، بندمجها مع الملح الأول.
ده بيخلي حتى لو كان عندك كلمة مرور بسيطة أو مشهورة، الناتج المشفر يطلع مختلف عن بقية الناس.

مثال بسيط:
لو كلمة السر بتاعتك: password123
ولو الملح: xYz$1
هنشفّر: password123xYz$1 → الناتج هيبقى هاش مختلف عن اللي لو حد تاني استخدم password123 من غير ملح.

ليه نستخدم الملح؟ 🛡️

  • مكافحة Rainbow Tables: الجداول دي بتدي هاشات جاهزة لكلمات سر شائعة. الملح يخلّي كل هاش فريد ومينفعش تستخدم الجداول دي.
  • منع التكرار: لو اتسربت قاعدة بيانات فيها هاشات، مش هتعرف تفرق إن في كذا مستخدم ليهم نفس الباسورد لأن الملح بيغيّر الناتج لكل مستخدم.
  • يزيد صعوبة الكسر: حتى لو المهاجم عنده الهِش، لازم يعمل هجوم على كل مستخدم على حدة لأن كل واحد له ملح خاص.



نصايح عملية: ازاي تستخدم الملح صح ✅


1. استخدم ملح فريد لكل مستخدم

مش بنستخدم ملح ثابت للموقع كله. لازم كل حساب ليه ملح مختلف (random salt per user).

2. خزن الملح جنب الهاش

الملح مش سرّ، بتخزنه في قاعدة البيانات مع الهش علشان لما المستخدم يدخل تقدر تعيد نفس العملية وتتحقق من الباسورد.

3. استعمل خوارزميات مصممة للـ Password Hashing

بدل ما تفكر في عمل هاشرات يدوية، استخدم خوارزميات محسوبة ومأمونة زي:
  • bcrypt
  • Argon2 (موصى به جدًا)
  • scrypt
الخوارزميات دي بتعمل ملح تلقائيًا وتقدر تضبط "الثمن" الحسابي (cost) علشان ترفع صعوبة الكسر.

4. ممكن تضيف "فلفل" (Pepper)

الـ pepper قيمة سرية بتتحط على مستوى التطبيق (مش مخزنة في قاعدة البيانات) بتزود طبقة أمان إضافية لو اتسرّبت الداتا. لكن خلي بالك لازم تتخزن بأمان في مكان منفصل (مثل server env variable أو HSM).

5. لا تستخدم خوارزميات عاملة بسرعة

زي MD5 أو SHA1 لوحدهم - دول سريعين وسهل يكسرهم بالـ brute-force. استخدم bcrypt/Argon2 لأنها بطيئة مقصودة وبالتالي صعبة على المهاجم.



مثال عملي بسيط (Python + bcrypt) 🐍

Python:
import bcrypt

# إنشاء هاش جديد لكلمة المرور (bcrypt بيتعامل مع salt داخلياً)
password = b"password123"
hashed = bcrypt.hashpw(password, bcrypt.gensalt())

print(hashed)  # خزّن الناتج في DB (كـ bytes أو string)

# للتحقق:
entered = b"password123"
if bcrypt.checkpw(entered, hashed):
    print("Password OK")
else:
    print("Wrong password")
ملاحظة: في لغات/أطر تانية برضو في دوال جاهزة (PHP password_hash, Node.js bcrypt أو argon2) - دايمًا استخدم الأدوات الرسمية بدل الحلول اليدوية.

خلاصة سريعة ✨

  • الـ Salt مهم جدًا لحماية كلمات المرور من هجمات جاهزة وعمليات الكسر الجماعي.
  • استخدم ملح فريد لكل مستخدم وخوارزميات حديثة زي bcrypt أو Argon2.
  • فكر في pepper لو عايز طبقة حماية إضافية.
  • ودايمًا خليك محدث بممارسات الأمان وأدوات المصادقة الحديثة (مثل 2FA) لتقوية الحماية أكتر.
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
734
x32x01
x32x01
x32x01
الردود
0
المشاهدات
657
x32x01
x32x01
x32x01
الردود
0
المشاهدات
747
x32x01
x32x01
x32x01
الردود
0
المشاهدات
736
x32x01
x32x01
x32x01
الردود
0
المشاهدات
557
x32x01
x32x01
x32x01
الردود
0
المشاهدات
551
x32x01
x32x01
x32x01
الردود
0
المشاهدات
651
x32x01
x32x01
x32x01
الردود
0
المشاهدات
743
x32x01
x32x01
x32x01
الردود
0
المشاهدات
551
x32x01
x32x01
x32x01
الردود
0
المشاهدات
727
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,831
المشاركات
2,028
أعضاء أكتب كود
464
أخر عضو
رشن7
عودة
أعلى