bcrypt و salt: ترکیب طلایی برای مقابله با حملات Rainbow Table

امنیت رمز عبور یکی از مهم‌ترین دغدغه‌های توسعه‌دهندگان وب و مدیران سیستم است. رمزهای عبور ساده یا ذخیره‌سازی نادرست آن‌ها می‌تواند به فاجعه‌های امنیتی منجر شود. یکی از حملات رایج در این حوزه، Rainbow Table Attack است؛ حمله‌ای که با استفاده از جداول از پیش محاسبه‌شده تلاش می‌کند هش‌ها را به رمز اصلی برگرداند. برای مقابله با این تهدید، الگوریتم bcrypt همراه با تکنیک salt به عنوان ترکیب طلایی شناخته می‌شود.


📌 Rainbow Table چیست؟

Rainbow Table یک پایگاه داده‌ی بزرگ از رمزهای عبور و هش‌های متناظر آن‌هاست. هکرها با استفاده از این جدول می‌توانند به سرعت هش‌های موجود در دیتابیس‌های هک‌شده را با رمزهای واقعی تطبیق دهند.
به عنوان مثال، اگر رمز عبور "123456" باشد، هش آن در جدول از قبل محاسبه شده و هکر می‌تواند به راحتی رمز اصلی را پیدا کند. این حمله به دلیل سرعت بالا و نیاز نداشتن به محاسبات سنگین، بسیار خطرناک است.


🎯 نقش salt در امنیت

برای مقابله با Rainbow Table، استفاده از salt ضروری است. Salt یک رشته‌ی تصادفی است که قبل از هش کردن به رمز عبور اضافه می‌شود. این کار باعث می‌شود حتی اگر دو نفر رمز عبور یکسانی داشته باشند، هش‌های آن‌ها کاملاً متفاوت باشند.
به عنوان مثال:

  • رمز عبور: mypassword

  • Salt کاربر A: Xy12!

  • Salt کاربر B: Ab9#

نتیجه این است که هش کاربر A و B کاملاً متفاوت خواهد بود، حتی با وجود رمز عبور یکسان. این تفاوت باعث می‌شود جداول Rainbow Table عملاً بی‌اثر شوند.


⚙️ bcrypt چگونه کار می‌کند؟

bcrypt یکی از محبوب‌ترین الگوریتم‌های هش برای رمز عبور است که ویژگی‌های زیر را دارد:

  • استفاده از salt داخلی: bcrypt به صورت خودکار یک salt تصادفی تولید و به رمز عبور اضافه می‌کند.

  • تکرار چندمرحله‌ای (Cost Factor): bcrypt هش کردن را چندین بار تکرار می‌کند. این ویژگی باعث می‌شود محاسبات برای هکرها بسیار زمان‌بر و پرهزینه شود.

  • خروجی استاندارد و قابل ذخیره‌سازی: خروجی bcrypt شامل اطلاعاتی درباره‌ی salt و تعداد تکرارهاست، بنابراین سیستم می‌تواند به راحتی رمز عبور وارد شده را دوباره بررسی کند.


🛡️ چرا bcrypt و salt ترکیب طلایی هستند؟

  • مقاومت در برابر Rainbow Table: به دلیل وجود salt، هیچ جدول از پیش محاسبه‌شده‌ای نمی‌تواند به راحتی رمز عبور را پیدا کند.

  • افزایش هزینه حمله: تکرارهای متعدد در bcrypt باعث می‌شود حملات Brute Force بسیار کندتر شوند.

  • امنیت بلندمدت: حتی با پیشرفت سخت‌افزارها، می‌توان سطح سختی bcrypt را افزایش داد تا همچنان مقاوم باقی بماند.


📝 مثال کدنویسی با bcrypt

const bcrypt = require('bcrypt');

const password = "mypassword123";
const hashed = await bcrypt.hash(password, 12); // 12 = سطح سختی

console.log(hashed);
// خروجی: رشته‌ای طولانی شامل salt و هش

در این مثال، bcrypt به صورت خودکار یک salt تولید کرده و رمز عبور را چندین بار هش می‌کند. نتیجه یک رشته‌ی غیرقابل برگشت است که امنیت بالایی دارد.


📊 کاربرد عملی در وب

  • ذخیره‌سازی امن رمز عبور کاربران در دیتابیس‌ها

  • جلوگیری از حملات Rainbow Table و Brute Force

  • استفاده در سیستم‌های احراز هویت مدرن مانند NestJS و Express

  • امنیت در اپلیکیشن‌های موبایل و سرویس‌های ابری


نتیجه‌گیری

حملات Rainbow Table یکی از تهدیدهای جدی در حوزه‌ی امنیت رمز عبور هستند. اما با استفاده از الگوریتم bcrypt و تکنیک salt می‌توان این حملات را عملاً بی‌اثر کرد. ترکیب این دو روش نه تنها امنیت رمز عبور را تضمین می‌کند، بلکه آینده‌نگرانه است و می‌تواند در برابر پیشرفت سخت‌افزارها نیز مقاوم باقی بماند.

✅ پس اگر به دنبال امنیت واقعی در پروژه‌های وب هستید، bcrypt و salt همان ترکیب طلایی هستند که باید همیشه در پیاده‌سازی‌های خود استفاده کنید.