برای درک اهمیت Salt و Pepper، ابتدا باید چالشهای مربوط به ذخیرهسازی رمزهای عبور را درک کنیم. یک اشتباه رایج در گذشته، ذخیرهسازی رمزهای عبور به صورت متن ساده (Plaintext) در پایگاه داده بود. این روش به شدت ناامن است، زیرا در صورت نفوذ مهاجم به پایگاه داده، تمام رمزهای عبور به راحتی قابل دسترسی خواهند بود.
برای غلبه بر این مشکل، از توابع هش (Hash Functions) استفاده میشود. توابع هش، ورودی (در اینجا رمز عبور) را به یک رشته با طول ثابت و به ظاهر تصادفی تبدیل میکنند که به آن "هش" (Hash) گفته میشود. ویژگیهای کلیدی یک تابع هش امن عبارتند از:
بنابراین، به جای ذخیره رمز عبور به صورت متن ساده، سیستمها هش رمز عبور را ذخیره میکنند. هنگام ورود کاربر، رمز عبور وارد شده هش شده و با هش ذخیرهشده مقایسه میشود. اگر هشها یکسان باشند، احراز هویت موفقیتآمیز است.
هرچند استفاده از توابع هش گامی رو به جلو در امنیت رمز عبور بود، اما به تنهایی کافی نیست. مهاجمان با استفاده از دو نوع حمله اصلی میتوانند هشها را مورد هدف قرار دهند:
حملات دیکشنری (Dictionary Attacks): مهاجمان لیستی از رمزهای عبور رایج (از دیکشنریها، رمزهای عبور فاش شده و غیره) را تهیه میکنند، هش آنها را محاسبه کرده و با هشهای موجود در پایگاه داده مقایسه میکنند. اگر هشی مطابقت پیدا کند، رمز عبور مربوطه فاش میشود.
جداول رنگینکمان (Rainbow Tables): این جداول، مجموعهای از هشهای از پیش محاسبهشده برای کلمات عبور احتمالی هستند. مهاجمان با ساخت این جداول، میتوانند فرآیند حمله دیکشنری را سرعت بخشند، زیرا نیازی به محاسبه هش در لحظه حمله ندارند. این جداول میتوانند بسیار بزرگ باشند و شامل میلیونها یا حتی میلیاردها جفت هش-رمز عبور باشند.
مشکل اصلی در اینجاست که برای یک رمز عبور یکسان، هش تولید شده همواره یکسان خواهد بود. به عنوان مثال، اگر هزاران کاربر رمز عبور "123456" را انتخاب کرده باشند، هش تمامی آنها یکسان خواهد بود. این موضوع باعث میشود که حملات دیکشنری و جداول رنگینکمان بسیار موثر باشند، زیرا مهاجم با پیدا کردن یک هش، میتواند به طور همزمان به رمز عبور تعداد زیادی از کاربران دسترسی پیدا کند.
اینجاست که "Salt" وارد عمل میشود. Salt یک رشته داده تصادفی است که قبل از هش کردن به رمز عبور اضافه میشود. به عبارت دیگر، به جای هش کردن مستقیم رمز عبور، سیستم ترکیبی از Salt و رمز عبور را هش میکند:
(Salt + Password)
نحوه عملکرد Salt:
هنگام ورود کاربر:
مزایای استفاده از Salt:
استفاده از Salt مزایای امنیتی قابل توجهی را به ارمغان میآورد:
خنثیسازی جداول رنگینکمان: با استفاده از Salt، حتی اگر دو کاربر رمز عبور یکسانی داشته باشند، Saltهای آنها متفاوت خواهد بود. در نتیجه، هشهای تولید شده نیز کاملاً متفاوت خواهند بود. این امر باعث میشود که جداول رنگینکمان بیاستفاده شوند، زیرا مهاجم باید برای هر ترکیب Salt و رمز عبور، یک ورودی جداگانه در جدول خود داشته باشد که این امر از نظر محاسباتی و ذخیرهسازی غیرممکن است.
کاهش اثربخشی حملات دیکشنری: Salt باعث میشود که حملات دیکشنری کندتر و ناکارآمدتر شوند. مهاجم دیگر نمیتواند یک بار هش یک رمز عبور رایج را محاسبه کند و آن را برای یافتن چندین حساب کاربری استفاده کند. او باید برای هر Salt منحصر به فرد، رمزهای عبور دیکشنری را مجدداً با آن Salt ترکیب کرده و هش کند، که این فرآیند زمانبر و نیازمند منابع زیادی است.
ایجاد هشهای منحصر به فرد: Salt تضمین میکند که هر کاربر، حتی با رمز عبور یکسان، هشی منحصر به فرد داشته باشد. این امر باعث میشود که در صورت فاش شدن پایگاه داده، مهاجم نتواند به راحتی تشخیص دهد که کدام کاربران از رمز عبور مشابهی استفاده میکنند.
در حالی که Salt در برابر بسیاری از حملات موثر است، یک سناریوی حمله وجود دارد که Salt به تنهایی نمیتواند از آن جلوگیری کند: حملهای که در آن مهاجم نه تنها به پایگاه داده هشها (و Saltها) دسترسی پیدا میکند، بلکه کنترل کامل سرور و کدهای برنامه را نیز به دست میآورد. در چنین سناریویی، مهاجم به تمام اطلاعاتی که برای بازسازی هشها نیاز دارد، دسترسی پیدا میکند و میتواند با آفلاین بروت فورس کردن هشها، رمزهای عبور را کرک کند.
اینجاست که "Pepper" (فلفل) وارد میشود. Pepper یک راز مشترک و مخفی است که توسط کل سیستم استفاده میشود و در جایی غیر از پایگاه داده هشها ذخیره میشود.
نحوه عملکرد Pepper:
Pepper یک راز طولانی و تصادفی است که:
فرآیند هش کردن با استفاده از Salt و Pepper میتواند به یکی از اشکال زیر باشد (بسته به پیادهسازی):
مزایای استفاده از Pepper:
Pepper لایه امنیتی اضافی و بسیار مهمی را فراهم میکند:
محافظت در برابر نفوذ کامل به پایگاه داده: حتی اگر مهاجم به پایگاه داده حاوی هشها و Saltها دسترسی پیدا کند، بدون داشتن Pepper نمیتواند هشهای رمز عبور را به درستی محاسبه کند و بنابراین قادر به آفلاین بروت فورس کردن یا کرک کردن رمزها نخواهد بود. Pepper به عنوان یک کلید اصلی عمل میکند که در صورت فاش شدن پایگاه داده، از دسترسی مهاجم به رمزهای عبور جلوگیری میکند.
پیچیدهتر کردن حملات Brute-force: مهاجم برای هر تلاش کرک، نیاز به دسترسی به Pepper دارد. اگر Pepper به درستی محافظت شود، این امر باعث میشود حملات آفلاین عملاً غیرممکن شوند و مهاجم تنها بتواند حملات آنلاین (که کندتر هستند و توسط سیستمهای تشخیص نفوذ قابل شناسایی هستند) را امتحان کند.
افزایش مقاومت در برابر حملات هدفمند: در صورت حمله یک مهاجم بسیار پیشرفته که توانایی نفوذ عمیق به زیرساخت را دارد، Pepper آخرین خط دفاعی است که از فاش شدن گسترده رمزهای عبور جلوگیری میکند.
ملاحظات و چالشهای Pepper:
برای دستیابی به حداکثر امنیت رمز عبور، استفاده از Salt و Pepper باید با توابع هش با هزینه بالا (مانند PBKDF2، bcrypt، scrypt یا Argon2) ترکیب شود. این توابع به طور عمدی کند طراحی شدهاند تا حتی با وجود سختافزارهای قدرتمند، فرآیند هش کردن زمانبر باشد. این کندی، حملات بروت فورس و دیکشنری را برای مهاجمان بسیار گران و زمانبر میکند.
رویکرد ایدهآل برای هش کردن رمزهای عبور به صورت زیر است:
Stored_Hash = KDF(Salt + Pepper + Password)
در این حالت:
Salt و Pepper دو لایه دفاعی مکمل و حیاتی در استراتژی امنیت رمز عبور هستند. Salt با منحصر به فرد کردن هشهای رمز عبور، جداول رنگینکمان و حملات دیکشنری را خنثی میکند و همراه با هش در پایگاه داده ذخیره میشود. Pepper، به عنوان یک راز سیستمی که در خارج از پایگاه داده نگهداری میشود، لایه امنیتی قدرتمندتری را اضافه میکند و از رمزهای عبور حتی در صورت نفوذ کامل مهاجم به پایگاه داده (اما نه سرور یا KMS) محافظت میکند.
ترکیب هوشمندانه Salt، Pepper و توابع هش مقاوم در برابر حملات بروت فورس (مانند Argon2) یک رویکرد امنیتی جامع و استاندارد صنعتی را برای ذخیرهسازی رمزهای عبور ارائه میدهد. عدم استفاده از هر یک از این اجزا، یک ضعف امنیتی جدی محسوب میشود که میتواند منجر به فاش شدن گسترده رمزهای عبور و به خطر افتادن اطلاعات کاربران شود. در دنیایی که تهدیدات سایبری روز به روز پیچیدهتر میشوند، پیادهسازی دقیق و صحیح این اصول امنیتی برای حفاظت از حریم خصوصی و امنیت کاربران از اهمیت بالایی برخوردار است.
0 نظر
هنوز نظری برای این مقاله ثبت نشده است.