رفتن به محتوای اصلی
کوهستان
توضیح کوهستانامنیت رمز عبورمقاله آموزشی· 6 دقیقه مطالعه· در راهنماها

چگونه هش کردن و سالتینگ با جلوگیری از حملات جدول رنگین‌کمانی، امنیت رمزهای عبور را تامین می‌کنند

سرورها با اضافه کردن یک رشته منحصربه‌فرد از کاراکترهای تصادفی به هر رمز عبور پیش از درهم‌سازی ریاضی آن، حملات مبتنی بر پایگاه‌داده‌های از پیش محاسبه‌شده را از نظر ریاضی غیرممکن می‌سازند.

به قلم کامران صادقی

به‌طور خلاصه

  • سیستم‌های مدرن هرگز خود رمزهای عبور را ذخیره نمی‌کنند، بلکه هش‌های ریاضی و غیرقابل بازگشت آن‌ها را نگه می‌دارند.
  • هش کردن اولیه قطعی است، به این معنی که یک رمز عبور یکسان همیشه هش یکسانی تولید می‌کند.
  • جداول رنگین‌کمانی با پیش‌محاسبه میلیون‌ها هش، از این ویژگی برای شکستن فوری پایگاه‌های داده سرقت‌شده سوءاستفاده می‌کنند.

امنیت یک رمز عبور زمانی که کاربر آن را در کادر ورود تایپ می‌کند تعیین نمی‌شود، بلکه در همان میلی‌ثانیه‌ای که به سرور می‌رسد و طی مرحله‌ای به نام «سالتینگ» (Salting) شکل می‌گیرد. سرور با اضافه کردن یک رشته تصادفی و منحصربه‌فرد از کاراکترها به رمز عبور پیش از درهم‌سازی ریاضی آن، تضمین می‌کند که حتی اگر دو کاربر دقیقا یک رمز عبور را انتخاب کنند، داده‌های ذخیره‌شده آن‌ها کاملا متفاوت به نظر برسد.

همین یک عملیات ساده است که از هک شدن همزمان میلیون‌ها حساب کاربری توسط مهاجمان با استفاده از پایگاه‌داده‌های از پیش محاسبه‌شده جلوگیری می‌کند. درک این مکانیزم نشان می‌دهد که چرا سیستم‌های احراز هویت مدرن می‌توانند بدون اینکه بدانند رمز عبور شما چیست، آن را با امنیت کامل ذخیره کنند.[8]

برای درک اهمیت سالتینگ، ابتدا باید بدانید سیستم‌ها چگونه رمزهای عبور را ذخیره می‌کنند. پایگاه‌های داده مدرن متن واقعی رمز عبور را ذخیره نمی‌کنند. در عوض، آن‌ها از یک تابع هش رمزنگاری استفاده می‌کنند؛ یک الگوریتم ریاضی یک‌طرفه که هر ورودی را به یک رشته کاراکتر با طول ثابت (معمولا ۲۵۶ بیت) تبدیل می‌کند.

این فرآیند به‌گونه‌ای طراحی شده که غیرقابل بازگشت باشد، به این معنی که نگاه کردن به هش به‌دست‌آمده هیچ سرنخی درباره رمز عبور اصلی به شما نمی‌دهد. وقتی کاربری قصد ورود دارد، سیستم به سادگی رمز عبوری را که تایپ شده هش می‌کند و آن را با هش ذخیره‌شده در پایگاه داده تطبیق می‌دهد. اگر این دو رشته کاملا مطابقت داشته باشند، سیستم اجازه دسترسی را صادر می‌کند، آن هم بدون اینکه هرگز اعتبارنامه را به‌صورت متن ساده ذخیره کرده باشد.[1][5]

بر اساس نشریه ویژه 800-63B موسسه ملی استاندارد و فناوری (NIST)، هش کردن نیاز اساسی برای ذخیره‌سازی امن اعتبارنامه‌ها است. دستورالعمل‌های آن‌ها تاکید می‌کند که سیستم‌ها هرگز نباید رمزهای عبور را در قالبی قابل بازگشت ذخیره کنند. با این حال، هش کردن اولیه به تنهایی یک نقص کشنده دارد: کاملا قطعی است. یک ورودی یکسان همیشه خروجی کاملا یکسانی تولید می‌کند. اگر رمز عبور کاربری "password123" باشد، هش به‌دست‌آمده همیشه یکسان خواهد بود، فارغ از اینکه چه سیستمی آن را تولید می‌کند یا حساب کاربری چه زمانی ایجاد شده است.[4][7]

بدون سالت، رمزهای عبور یکسان همیشه خروجی هش یکسانی تولید می‌کنند که آن‌ها را در برابر جداول از پیش محاسبه‌شده آسیب‌پذیر می‌کند.

این پیش‌بینی‌پذیری باعث پیدایش حمله «جدول رنگین‌کمانی» (Rainbow Table) شد. جدول رنگین‌کمانی یک پایگاه داده عظیم و از پیش محاسبه‌شده است که رمزهای عبور متن ساده را به مقادیر هش مربوطه آن‌ها متصل می‌کند.

از آنجا که الگوریتم‌های هشینگ عمومی و قطعی هستند، یک مهاجم می‌تواند لیستی از ۱۰ میلیارد رمز عبور رایج را بردارد، همه آن‌ها را از طریق یک الگوریتم هش استاندارد اجرا کند و نتایج را ذخیره نماید. وقتی آن‌ها به یک پایگاه داده نفوذ کرده و لیستی از رمزهای عبور هش‌شده را می‌دزدند، دیگر نیازی به حدس زدن تک‌تک آن‌ها ندارند.[2][6]

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

این روش زمان پردازش محاسباتی را با فضای ذخیره‌سازی مبادله می‌کند و به مهاجمان اجازه می‌دهد تنها با ارجاع متقاطع یک فایل عظیم، بیش از ۱۰۰,۰۰۰ رمز عبور را در ثانیه بشکنند. برای سیستم‌های قدیمی که به هشینگ اولیه بدون محافظت‌های اضافی متکی هستند، یک پایگاه داده سرقت‌شده می‌تواند تقریبا بلافاصله و به‌طور کامل در معرض خطر قرار گیرد.[3][6]

دقیقا همین‌جاست که «سالت» (Salt) رمزنگاری وارد عمل می‌شود تا زنجیره حمله را بشکند. سالت یک رشته کاراکتر تصادفی و منحصربه‌فرد است که برای هر کاربر در همان لحظه ایجاد حساب کاربری یا تغییر رمز عبور تولید می‌شود. پیش از اینکه رمز عبور کاربر وارد الگوریتم هش شود، سرور این رشته تصادفی را به آن اضافه می‌کند.

سپس رشته ترکیبی به‌دست‌آمده هش شده و خروجی نهایی در پایگاه داده ذخیره می‌شود. نکته مهم این است که خود سالت یک راز نیست؛ بلکه به‌صورت متن ساده درست در کنار هش در پایگاه داده ذخیره می‌شود، زیرا هدف آن ایجاد تمایز است، نه پنهان‌کاری.[1][2]

از آنجا که سالت برای هر کاربر کاملا منحصربه‌فرد است، دو کاربری که تصادفا رمز عبور یکسانی (مانند "password123") انتخاب می‌کنند، ورودی‌های کاملا متفاوتی برای تابع هش خواهند داشت. در نتیجه، هش‌های نهایی ذخیره‌شده آن‌ها هیچ شباهتی به هم نخواهند داشت. همین افزودن ساده، کارایی جدول رنگین‌کمانی را از بین می‌برد. مهاجم دیگر نمی‌تواند به لیست از پیش محاسبه‌شده رمزهای عبور رایج تکیه کند، زیرا سالت منحصربه‌فرد هر بار هش نهایی را تغییر می‌دهد و تطابق‌های از پیش محاسبه‌شده را بی‌فایده می‌کند.[2][5]

سالتینگ تضمین می‌کند که حتی اگر دو کاربر رمز عبور یکسانی داشته باشند، هش‌های ذخیره‌شده آن‌ها کاملا متفاوت است.

برای شکستن یک هش سالت‌دار با استفاده از جدول رنگین‌کمانی، مهاجم باید یک جدول عظیم و کاملا جدید برای تک‌تک کاربران موجود در پایگاه داده محاسبه کند و سالت منحصربه‌فرد آن کاربر را در هر محاسبه بگنجاند. زمان محاسباتی و فضای ذخیره‌سازی مورد نیاز برای تولید میلیون‌ها جدول رنگین‌کمانی سفارشی، این حمله را از نظر ریاضی و مالی غیرممکن می‌سازد. سالتینگ با مجبور کردن مهاجم به محاسبه هش‌ها برای هر کاربر به‌صورت جداگانه، مزیت مقیاس‌پذیری را که باعث کارایی جداول رنگین‌کمانی می‌شد، از بین می‌برد.[1][3][6]

اگرچه جداول رنگین‌کمانی در امنیت سایبری مدرن تا حد زیادی منسوخ در نظر گرفته می‌شوند (نشریات صنعتی کاهش استفاده از آن‌ها را از اوایل سال ۲۰۲۱ به دلیل پذیرش گسترده سالتینگ گزارش کرده‌اند)، اصول زیربنایی آن‌ها همچنان بخش مهمی از معماری سیستم است.

دستورالعمل‌های به‌روزشده NIST تاکید می‌کنند که سالت‌ها باید حداقل ۳۲ بیت طول داشته باشند و با استفاده از یک تولیدکننده اعداد تصادفی تاییدشده ایجاد شوند تا اطمینان حاصل شود که قابل پیش‌بینی یا تکرار نیستند. یک سالت بسیار کوتاه یا قابل پیش‌بینی از نظر تئوری می‌تواند به مهاجم اجازه دهد جداولی را برای رایج‌ترین مقادیر سالت از پیش محاسبه کند.[3][4][7]

یک سالت بسیار کوتاه یا قابل پیش‌بینی از نظر تئوری می‌تواند به مهاجم اجازه دهد جداولی را برای رایج‌ترین مقادیر سالت از پیش محاسبه کند.

علاوه بر این، سیستم‌های احراز هویت مدرن، سالتینگ منحصربه‌فرد را با الگوریتم‌های هشینگ عمدا کند مانند bcrypt، scrypt یا Argon2 ترکیب می‌کنند. این الگوریتم‌ها به‌طور خاص طراحی شده‌اند تا از نظر محاسباتی پرهزینه باشند و یک تاخیر زمانی عمدی ۱۰۰ میلی‌ثانیه‌ای به هر محاسبه هش اضافه کنند.

این تاخیر برای یک کاربر قانونی که وارد سیستم می‌شود کاملا نامحسوس است، اما برای مهاجمی که تلاش می‌کند یک هش سالت‌دار را با روش جستجوی فراگیر (Brute-force) بشکند، ویرانگر است. این الگوریتم‌ها با کاهش شدید تعداد حدس‌هایی که سخت‌افزار مهاجم می‌تواند در ثانیه بزند (به کمتر از ۱۰ حدس)، تضمین می‌کنند که حدس زدن تک‌تک رمزهای عبور قرن‌ها طول خواهد کشید.[1][5]

ترکیب یک سالت تصادفی و منحصربه‌فرد با یک الگوریتم هشینگ پرهزینه از نظر محاسباتی، پایه و اساس امنیت رمز عبور مدرن را تشکیل می‌دهد. این کار مزیت ریاضی را به مدافع برمی‌گرداند و تضمین می‌کند که حتی در صورت نفوذ به پایگاه داده و سرقت هش‌ها، اعتبارنامه‌های درون آن همچنان قفل باقی بمانند.

از آنجا که ریاضیات هشینگ مطلق است، مستندات امنیتی در سراسر صنعت کاملا بر مکانیک پیاده‌سازی تمرکز دارند تا تفسیرهای فردی، و هیچ‌یک از دستورالعمل‌های فنی ذکرشده برای تثبیت این استانداردها به نقل‌قول‌های مستقیم متکی نیستند. این رویه امنیتی بنیادین تضمین می‌کند که یک سرور در معرض خطر به‌طور خودکار منجر به در خطر قرار گرفتن حساب‌های کاربری نمی‌شود و از اکوسیستم دیجیتال گسترده‌تر در برابر خرابی‌های زنجیره‌ای محافظت می‌کند.[8]

اصطلاحات کلیدی

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

پرسش‌های متداول

هش رمزنگاری چیست؟

یک تابع ریاضی یک‌طرفه که ورودی مانند رمز عبور را به یک رشته کاراکتر با طول ثابت تبدیل می‌کند. این تابع به‌گونه‌ای طراحی شده که غیرقابل بازگشت باشد.

چرا جداول رنگین‌کمانی خطرناک هستند؟

آن‌ها به مهاجمان اجازه می‌دهند با استفاده از یک پایگاه داده عظیم و از پیش محاسبه‌شده، رمزهای عبور متن ساده را برای هش‌های سرقت‌شده فورا جستجو کنند و نیازی به حدس زدن تک‌تک رمزهای عبور نداشته باشند.

آیا سالت مخفی نگه داشته می‌شود؟

خیر، سالت به‌صورت متن ساده در کنار هش در پایگاه داده ذخیره می‌شود. هدف آن ایجاد تمایز در محاسبه هش است، نه پنهان‌کاری.

آیا یک رمز عبور سالت‌دار همچنان قابل هک شدن است؟

بله، اما مهاجم باید رمز عبور را با روش جستجوی فراگیر (Brute-force) و حدس زدن تک‌تک آن‌ها بشکند. وقتی این روش با یک الگوریتم هشینگ کند ترکیب شود، این فرآیند می‌تواند قرن‌ها طول بکشد.

بررسی عمیق دیدگاه‌ها

معماران امنیت

تاکید می‌کنند که سالتینگ یک نیاز پایه‌ای است که باید با الگوریتم‌های هشینگ پرهزینه از نظر محاسباتی ترکیب شود.

برای معماران امنیت، سالتینگ یک ویژگی پیشرفته نیست، بلکه حداقل نیاز برای ذخیره‌سازی اعتبارنامه‌ها است. آن‌ها استدلال می‌کنند که اگرچه سالتینگ با موفقیت جداول رنگین‌کمانی را خنثی می‌کند، اما این تنها نیمی از معادله است. از آنجا که پردازنده‌های گرافیکی (GPU) مدرن می‌توانند میلیاردها هش را در ثانیه محاسبه کنند، معماران اصرار دارند که سالتینگ باید با الگوریتم‌های عمدا کند مانند bcrypt یا Argon2 ترکیب شود. این ترکیب تضمین می‌کند که حتی اگر مهاجم جداول از پیش محاسبه‌شده را رها کرده و به حدس زدن با روش جستجوی فراگیر روی آورد، اصطکاک محاسباتی این حمله را از نظر مالی غیرممکن می‌سازد.

حسابرسان انطباق

بر رعایت دستورالعمل‌های نظارتی سخت‌گیرانه تمرکز دارند و اطمینان حاصل می‌کنند که سالت‌ها به اندازه کافی طولانی بوده و به‌طور تصادفی تولید شده‌اند.

متخصصان انطباق، ذخیره‌سازی رمز عبور را از دریچه چارچوب‌های نظارتی، عمدتا دستورالعمل‌های تعیین‌شده توسط موسسه ملی استاندارد و فناوری (NIST)، بررسی می‌کنند. از دیدگاه آن‌ها، یک سیستم تنها در صورتی امن است که بتوان ثابت کرد آستانه‌های ریاضی خاصی را رعایت می‌کند. آن‌ها سیستم‌ها را حسابرسی می‌کنند تا مطمئن شوند سالت‌ها حداقل ۳۲ بیت طول دارند و توسط تولیدکننده‌های اعداد تصادفی امن از نظر رمزنگاری تولید شده‌اند، زیرا یک سالت قابل پیش‌بینی یا استفاده مجدد، یک نقص انطباق حیاتی محسوب می‌شود که می‌تواند پس از نفوذ منجر به جریمه‌های نظارتی شدید شود.

عوامل تهدید (بستر تاریخی)

جداول رنگین‌کمانی را روشی بسیار کارآمد، هرچند اکنون منسوخ‌شده، برای سوءاستفاده از هشینگ قطعی می‌دانند.

از نظر تاریخی، عوامل تهدید جداول رنگین‌کمانی را میانبر نهایی برای سرقت اعتبارنامه‌ها می‌دانستند. مهاجمان با مبادله زمان پردازش با ظرفیت ذخیره‌سازی عظیم، می‌توانستند کل پایگاه‌های داده هش‌های بدون سالت را در عرض چند دقیقه به خطر بیندازند. اگرچه پذیرش گسترده سالتینگ منحصربه‌فرد تا حد زیادی این بردار حمله خاص را منسوخ کرده است، روش‌شناسی زیربنایی حملات از پیش محاسبه‌شده همچنان یک مفهوم بنیادین در امنیت تهاجمی است که مهاجمان را مجبور می‌کند برای دور زدن محافظت‌های رمزنگاری مدرن، به سمت تکنیک‌های پیچیده‌تر جستجوی فراگیر یا مهندسی اجتماعی تغییر مسیر دهند.

معماران امنیت 40%حسابرسان انطباق 40%عوامل تهدید تاریخی 20%
معماران امنیت
تاکید می‌کنند که سالتینگ یک نیاز پایه‌ای است که باید با الگوریتم‌های هشینگ پرهزینه از نظر محاسباتی مانند bcrypt ترکیب شود.
حسابرسان انطباق
بر رعایت دستورالعمل‌های نظارتی سخت‌گیرانه تمرکز دارند و اطمینان حاصل می‌کنند که سالت‌ها به اندازه کافی طولانی بوده و به‌طور تصادفی تولید شده‌اند.
عوامل تهدید تاریخی
جداول رنگین‌کمانی را روشی بسیار کارآمد، هرچند اکنون منسوخ‌شده، برای سوءاستفاده از هشینگ قطعی در سیستم‌های قدیمی می‌دانند.

دیدگاه‌هایی که این گزارش پوشش نداده

  • کاربران نهایی
  • مدیران سیستم‌های قدیمی

منابع

پوشش منابع

8 منبع

3 دیدگاه شناسایی‌شده

معماران امنیت 40%حسابرسان انطباق 40%عوامل تهدید تاریخی 20%
  1. [1]WorkOSمعماران امنیت

    Rainbow table attacks: What they are and how to prevent them

    مطالعه در WorkOS →
  2. [2]Inventive HQعوامل تهدید تاریخی

    What Are Rainbow Tables and How Do Salts Protect Passwords?

    مطالعه در Inventive HQ →
  3. [3]CSO Onlineعوامل تهدید تاریخی

    Rainbow tables explained: How they work and why they're (mostly) obsolete

    مطالعه در CSO Online →
  4. [4]Drataحسابرسان انطباق

    The Complete Guide to NIST Password Guidelines

    مطالعه در Drata →
  5. [5]Geisel Softwareمعماران امنیت

    Password Hashing: Protecting Data From Rainbow Table Attacks

    مطالعه در Geisel Software →
  6. [6]Beyond Identityمعماران امنیت

    Rainbow Table Attack

    مطالعه در Beyond Identity →
  7. [7]StrongDMحسابرسان انطباق

    NIST Password Guidelines: 2026 Updates & Best Practices

    مطالعه در StrongDM →
  8. [8]تیم سردبیری کوهستانمعماران امنیت

    تحلیل تیم سردبیری کوهستان

    مطالعه در تیم سردبیری کوهستان →

نظرات

همیشه در جریان باشید

هر زاویه. هر روز.

اخبار راهنماها با پوشش کامل منابع و تحلیل دیدگاه‌ها، هر روز و رایگان.