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

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

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

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

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

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

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

چرا مهم است

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

امنیت یک رمز عبور زمانی که کاربر آن را در کادر ورود تایپ می‌کند تعیین نمی‌شود، بلکه در همان میلی‌ثانیه‌ای که به سرور می‌رسد و طی مرحله‌ای به نام «سالتینگ» (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]

نکات کلیدی

  • سیستم‌های مدرن هرگز خود رمزهای عبور را ذخیره نمی‌کنند، بلکه هش‌های ریاضی و غیرقابل بازگشت آن‌ها را نگه می‌دارند.
  • هش کردن اولیه قطعی است، به این معنی که یک رمز عبور یکسان همیشه هش یکسانی تولید می‌کند.
  • جداول رنگین‌کمانی با پیش‌محاسبه میلیون‌ها هش، از این ویژگی برای شکستن فوری پایگاه‌های داده سرقت‌شده سوءاستفاده می‌کنند.
  • «سالت» (Salt) یک رشته تصادفی و منحصربه‌فرد است که قبل از هش شدن به رمز عبور اضافه می‌شود و تضمین می‌کند رمزهای عبور یکسان، هش‌های متفاوتی تولید کنند.
  • سالتینگ مهاجمان را مجبور می‌کند هش‌ها را به‌صورت جداگانه محاسبه کنند و جداول رنگین‌کمانی را از نظر ریاضی بی‌اثر می‌کند.
  • امنیت مدرن، سالتینگ را با الگوریتم‌های کند هشینگ ترکیب می‌کند تا حملات جستجوی فراگیر (Brute-force) را بیشتر به تاخیر بیندازد.

منابع

پوشش منابع

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]تیم سردبیری کوهستانمعماران امنیت

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

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

نظرات

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

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

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