تخطَّ إلى المحتوى

Rainbow Table

هجوم جدول قوس قزح Rainbow Table

هجوم يستخدم جدولًا محسوبًا مسبقًا يربط بصمات (hashes) شائعة بكلمات المرور الأصلية، لتحويل كسر بصمة إلى بحث فوري بدل تجربة كل احتمال — يُبطله salt فريد لكل مستخدم.

بدل تجربة كل كلمة مرور ممكنة عند كل اختراق (بطيء)، يبني المهاجم جدولًا ضخمًا مرّة واحدة يربط ملايين كلمات المرور الشائعة ببصماتها المحسوبة سلفًا بخوارزمية معيّنة (مثل MD5 أو SHA-1 بلا تمليح). عند تسريب قاعدة بيانات بصمات، يبحث المهاجم كل بصمة بالجدول مباشرة بدل إعادة حسابها — سريع جدًّا مقارنة بالتجربة المباشرة.

الدفاع بسيط ومباشر: **salt** فريد وعشوائي لكل مستخدم يُضاف قبل التجزئة. جدول قوس قزح واحد يعمل لملايين الحسابات بلا salt، بينما مع salt فريد يحتاج المهاجم جدولًا منفصلًا لكل حساب — غير عملي بالكامل.

الصياغة

hash(password)   // ❌ بلا salt — عرضة لجدول محسوب مسبقًا

📄 مثال

// ✅ آمن: خوارزمية تجزئة حديثة تُضمّن salt فريدًا تلقائيًّا لكل استدعاء
const bcrypt = require("bcrypt");

const hashed = await bcrypt.hash(password, 12); // salt عشوائي مضمَّن تلقائيًّا
const isValid = await bcrypt.compare(inputPassword, hashed);
// كل مستخدم يحصل على salt مختلف حتى لو كانت كلمة المرور نفسها

أهم النقاط

النقطةالوظيفة
saltقيمة عشوائية فريدة لكل مستخدم تُضاف قبل التجزئة، تُبطل الجداول المحسوبة مسبقًا
خوارزميات عرضةMD5, SHA-1, SHA-256 بلا salt — سريعة الحساب وقابلة للجدولة مسبقًا بكميات ضخمة
خوارزميات مقاوِمةbcrypt, scrypt, Argon2id — تدمج salt وتُبطئ الحساب عمدًا لتصعيب الهجوم

💡 نصائح عملية

  • لا تبنِ آلية salt يدويًّا — استخدم مكتبة تجزئة كلمات مرور متخصّصة (bcrypt/Argon2id) تديره لك بشكل صحيح تلقائيًّا

⚠️ أخطاء شائعة

  • استخدام salt واحد ثابت لكل المستخدمين — يُرجع الوضع لنفس ضعف عدم وجود salt أصلًا، لأن جدولًا واحدًا يكسر الجميع

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CYBERSECURITY الكامل بالعربي.