جدول رنگین‌کمانی

یک جدول رنگین کمانی(به انگلیسی: rainbow table)، یک جدول از پیش محاسبه شده است برای معکوس کردن تابع کدنویسی درهم ساز(هش کریپتوگرافیک).معمولا برای شکستن کد های هش از آن استفاده می کنند.این جدول ها گاهی برای بازیابی گذرواژه (یا شماره کارت های اعتباری و...)استفاده می شوند.این جدول ها دارای طول مشخصی هستند و شامل تعدادی مولفه ی محدود می باشند.این یک مثال کاربردی از یک مبادله ی فضا-زمانی می باشد که از پردازش کامپیوتری کمتر و ذخیره سازی بیشتری نسبت به یک حمله بروت فورس استفاده می کند و هش را نیز در هر تلاش محاسبه می کند.اما در عین حال از پردازش کامپیوتری بیشتر و ذخیره سازی کمتری نسبت به یک جدول جستجو (جدول لوک آپ) ساده با یک ورودی در هش،استفاده می کند.استفاده از یک تابع مشتقی کلیدی که از یک سالت بهره می برد میتواند این حمله را غیزقابل نفوذ کند.

جدول های رنگین کمانی توسط فیلیپ اوچسلین و بعنوان یک اپلیکیشن از یک الگوریتم ساده تر توسط مارتین هلمن اختراع شد.[1]

یک جدول رنگین کمان ساده با ۳ مرحله






زمینه

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

بعد از جمع آوری یک هش کد،استفاده از هش مذکور بعنوان پسورد،با عدم موفقیت مواجه می شود،زیرا سیستم احراز هویت آن را برای بار دوم نیز هش می کند. برای دستیابی به پسورد یک کاربر،یک پسوردی که میزان یکسانی هش تولید می کند،معمولا از طریق یک بروت فورس یا دیکشنری اتک(حمله ی لغت نامه ای) باید پیدا شود.

جدول های رنگین کمانی معمولا آن دسته ابزاری هستند که ایجاد شده اند تا تنها با بررسی میزان هش شده از یک پسورد مشتق می گیرند.

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

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

کاربردها

تقریباً تمام ویرایش‌های یونیکس و لینوکس و BSD از رشته درهم سازی شده با Salt استفاده می‌کنند. هر سیستم کامپیوتری که در آن احراز هویت پسورد وجود دارد،باید شامل بانک اطلاعاتی از پسورد ها باشد،با استفاده از مبهم ساختن (برای در امان ماندن از مهاجمین) یا با استفاده از پلین تکست،و روش های متفاوتی برای ذخیره سازی این پسورد ها وجود دارد.

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

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

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

جدول های رنگین کمانی معمولا آن دسته ابزاری هستند که ایجاد شده اند تا تنها با بررسی میزان هش شده از یک پسورد مشتق می گیرند.

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

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

جدول های رنگین کمانی اصلاحیه های هستند بر این تکنیک زنجیره ای راه حلی را برای مشکلی بنام تصادم(برخورد) فراهم کرده اند.

ریشه یابی

اصطلاح "جداول رنگین کمان" برای اولین بار در مقاله اولیه دکتر اوچسلین استفاده شد.این اصطلاح به روشی است که از توابع کاهش متفاوتی برای افزایش میزان موفقیت حمله استفاده می شود. در روش اصلی هلمن از جدولهای کوچک زیادی با عملکرد متفاوت استفاده می شود. جداول رنگین کمان بسیار بزرگتر هستند و در هر ستون از یک تابع کاهش متفاوت استفاده می کنند. هنگامی که از رنگ ها برای نشان دادن توابع کاهش استفاده می شود ، رنگین کمان در جدول رنگین کمان ظاهر می شود.

شکل 2 مقاله دکتر اوچسلین حاوی گرافیکی سیاه و سفید است که نحوه ارتباط این بخش ها را نشان می دهد. دکتر اوچسلین برای ارائه در کنفرانس Crypto 2003 ، رنگی را به این گرافیک اضافه کرد تا ارتباط رنگین کمان روشن تر شود.گرافیکی پیشرفته ای که در کنفرانس ارائه شده است در سمت راست نشان داده شده است.



مقدمه ی زنجیر های درهمسازی

برای زنجیرهای هش به غیر از آنچه در اینجا ذکر شد ، زنجیره درهم سازی را ببینید.

فرض کنید ما یک تابع درهم ساز کد (تابع هش کد) H  و یک سری محدود از کد های P داریم،هدف محاسبه ی اولیه ساختار یک دیتا می باشد.از هر خروجی H در تابع درهم ساز داده شده میتوان یک عنصر p در P را مانند H(P)=h پیدا کرد،یا نشان داد که عنصر p در P وجود ندارد.ساده ترین روش برای انجام آن،محاسبه ی (H(P برای همه ی p های داخل P  است.اما آن موقع ذخیره کردن جدول نیازمند (|P|n)  بیت فضا می باشد که در آن |P| اندازه ی سری p و n  اندازه ی یک خروجی از H است که مانعی برای |P| بزرگ می باشد.

هش چین تکنیکی برای کاهش این فضای درخواست شده می باشد.ایده ی مشخص کردن یک تابع کاهشی R می باشد که میزان هش را به میزان ولیو ها در P تقلیل دهد.به یاد داشته باشید،تابع کاهشی درواقع معکوسی از تابع درهم ساز نیست،بلکه بیشتر یک تابع متفاوت با دامنه ی تابع و با دامنه ی مشترک درهم ساز می باشد.با تناوبی کردن تابع درهم ساز با تابع کاهشی (reduction function) زنجیره هایی از کد های متناوب هش ولیو هایی(یا میزانی از هش) شکل میگیرد.برای مثال اگر p یک سری پسورد های شش حرفی با حروف کوچ بود و هش ولیو ها ۳۲ بیتی بودند،این زنجیره به این شکل در می آمد:

که تنها نیاز برای تابع کاهشی این است که بتواند یک مقدار پلین تکست را به اندازه ی مشخصی درآورد.

برای تولید کردن جدول،ما چندین کد اولیه از P انتخاب می کنیم،زنجیره هایی از تعدادی طول k ثابت شده را در هرکدام محاسبه می کنیم و فقط اولین و آخرین کد در هر زنجیره را ذخیره می کنیم.اولین کد نقطه ی شروع و آخرین کد نقطه ی پایان نامیده می شود.برای مثال زنجیره ی “aaaaaa”   نقطه ی شروع می شود و “kiebgt” نقطه پایان و هیچکدام از کد های دیگر (یا هش ولیو ها)ذخیره نمی شوند.

حال هش ولیوی داده شده ی h را میخواهیم معکوس کنیم (کد مطابق آن را برایش پیدا کنیم) یک زنجیره را که با h شروع می شود،با اعمال R،سپس H،سپس R و ... محاسبه می کنیم اگر در هر نقطه یک ولیو(مقدار)‌ مطابق با یکی  از نقاط پایان مشاهده کنیم،نقطه شروع متناظر را نیز میگیرم و از آن استفاده می کنیم تا زنجیره را بازسازی کنیم.احتمال زیادی وجود دارد که این زنجیره شامل ولیوی h باشد،در این صورت مستقیما ولیوی ماقبل آن در چین سیفر p می باشد،که ما بدنبال آن هستیم.

برای مثال اگر به ما هش 920EC10 داده شده باشد،ما زنجیره ی آن را با اعمال اولیه R محاسبه می کنیم:

چون “KIEBGT” یکی از نقاط پایان در جدول ما می باشد،ما کد متناظر شروع کننده ی “aaaaaa” را برمیداریم و زنجیره ی آن را دنبال می کنیم تا به 920ECF10 برسیم:

بنابراین کد(پسورد) SGFNYD  (یا هر پسوردی دیگری که هش ولیوی یکسانی دارد)می باشد.به یاد داشته باشید که این زنجیره همیشه شامل هش ولیوی h نمی باشد؛حتی ممکن است زنجیره ای که با  h شروع شده با زنجیره ای که نقطه ی شروع متفاوتی دارد ادغام شود. برای مثال ممکن است به ما هش ولیوی FB107E70 داده شده باشد و وقتی زنجیره ی آن را دنبال می کنیم به KEIBGT برسیم:

اما FB107E70 زنجیره ای نیست که با “aaaaaa” شروع شود،که به این اخطار غلط (فالس آلارم) گفته می شود.در این حالت ما آن تطابق را رد می کنیم و به گسترش زنجیره ی h به جستجوی تطابق (مچ) دیگری می پردازیم.اگر زنجیره ی h به اندازه ی طول زنجیره ی k بدون هیچ تطابق(مچ) مناسبی گسترش پیدا کرد،به این نتیجه می رسیم که پسورد (کد) مورد نظر در هیچکدام از زنجیره ها تولید نشده است.

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

هش چین های ساده چندین نقص دارند،جدی ترین آن ها این است،که اگر در هر نقطه ای دو زنجیره برخورد کنند (یعنی هردو ولیوی یکسانی تولید کنند) آن ها ادغام می شوند و در نتیجه جدول کد (پسورد) های زیادی را با وجود پرداخت هزینه محاسباتی یکسان،پوشش نمی دهد.زیرا زنجیره های قبلی کاملا آنجا ذخیره نگشته اند و پیدا شدن تشخیص درست در این حالت غیر ممکن است.برای مثال، اگر سومین ولیو در زنجیره ۳ با دومین ولیو در زمینه ی ۷ تطابق داشته باشد،آن دو زنجیره تقریبا توالی یکسانی از ولیو ها را پوشش می دهند،اما ولیوی آخر آن ها یکسان نخواهد بود.تابع درهم ساز H بعید است که برخوردی داشته باشد،با توجه به اینکه اتفاق نیفتادن آن یک ویژگی مهم برای ایمنی تابع محسوب می شود.اما تابع کاهشی R به دلیل لزومش بر درست پوشش دادن پلین تکست های مشابه،نمی تواند برای ایجاد نشدن برخورد از خود مقاومتی نشان دهد.

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

جدول های رنگین کمانی

جدول های رنگین کمانی بطور موثری مشکل برخورد کردن با هش چین های معمولی را بوسیله ی جابجایی یک تابع کاهشی R با یک توالی از توابع مرتبط به R1 از طریق Rk  حل می کند.از این طریق برای اینکه دو زنجیره به هم برخورد کنند و ادغام شوند،آن ها باید به ولیوی مشترکی با تکراری یکسان برخورد کنند. در نتیجه در این حالت،آخرین ولیو ها در هر زنجیره دارای یک هویت مختص به خود خواهند بود.آخرین پس پردازش رد شده میتواندزنجیره ها را در داخل جدول بچیند و هرگونه تکرار زنجیره هایی را که ولیوی نهایی مشترکی با سایر زنجیره ها دارند حذف کند.سپس زنجیره های جدید تولید می شوند تا داخل جدول را پر کنند،این زنجیره ها نیز از برخورد به هم مصون نیستند(می توانند بصورت کوتاه همپوشانی داشته باشند) اما آن ها ادغام نخواهند شد و به شدت آمار برخورد زنجیره ها به هم را کاهش می دهند.

استفاده از توالی توابع کاهشی نحوه ی چگونگی انجام جستجو را تغییر داده است،زیرا هش ولیو مورد نظر میتواند در هر مکانی در زنجیره پیدا شود.این ضروری است که k زنجیره های متفاوت تولید شوند.اولین زنجیره فرض می کند که هش ولیو در موقعیت یکی مانده به آخر هش قرار گرفته است و RK-1 را بکار می برد،سپس H،سپسRK و ... تا آخرین زنجیره که همه ی توابع کاهشی را که با H متناوب هستند بکار می برد.این یک راه جدید برای تولید یک هشدار غلط ایجاد می کند،و اگر ما موقعیت هش ولیو را غلط حدس بزنیم در آن صورت باید بدون استفاده از آن یک زنجیره را ارزیابی کنیم.

اگرچه جدول های رنگین کمانی باید زنجیره های بیشتری را دنبال کنند،اما آن ها این مسئله را با داشتن جدول ها کمتر جبران می کنند.افزایش اندازه ی هش چین های ساده نسبت به اندازه ی مشخصی به دلیل ادغام زنجیره ها آن ها را ناکار آمد می کند؛برای مقابله با این موضوع آن ها چندین جدول نگه داری می کنند و هر سرچی باید از یک جدول جداگانه صورت بگیرد.جدول های رنگین کمانی می توانند عملکرد مشابهی با جدولهایی که k بار از آن ها بزرگتر هستند داشته باشند و این نکته به آن ها اجازه می دهد که k فاکتور عملکرد جستحو را اجرا کنند.

مثال

  1. با شروع از هش(re3xes) در تصویر پایین،یک جدول آخرین تقلیل (کاهش) استفاده شده در جدول را محاسبه می کند و چک می کند که آیا کد در آخرین ستون جدول ظاهر شده یا خیر(گام 1)
  2. اگر آزمایش شکست بخورد(رامبو در جدول ظاهر نمی شود) دیگری زنجیره را با تقلیل یکی مانده به آخر محاسبه می کند.(این دو تقلیل در گام دوم معرفی شده اند). (یادداشت:این تست های بعدی نیز شکست بخورند جدول های دیگری با تقلیل ۳ مانده به آخر،۴ مانده به آخر و ...ادامه می دهند.اگر هیچ زنجیره ای حامل پسورد مورد نظر نباشد در این صورت حمله شکست خورده است.)
  3. اگر تست مثبت باشد‌ (گام ۳،لینوکس ۲۳ در آخرین زنجیره و جدول ظاهر می شود) پسورد(کد) در ابتدای زنجیره ای که لینوکس ۲۳ را تولید می کند بازیابی می شود،اینجا ما پسورد را در ابتدای زنجیره تطابقی ذخیره شده در جدول پیدا می کنیم
  4. در این مرحله (گام ۴)یک جدول،زنجیره ای تولید می کند و آن را در هر تکرارهش با هش هدف(مورد نظر)مقایسه می کند.آزمایش به درستی انجام می شود و ماهش re3xes را در زنجیره پیدا می کنیم،پسورد کنونی culture،همان کدی است که کل زنجیره ها را تولید کرده است؛حمله موفقیت آمیز بوده است.









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

جدول های رنگین کمانی مخصوص توابع در هم سازی هستند که برایشان ساخته شده است.برای مثال جدول های MD5 فقط هش های MD5  را میتوانند کرک کنند. تئوری این تکنیک توسط فیلیپ اوکسلین بعنوان یک شکل سریع از تبادل زمان/حافظه اختراع شده بود،که او آن را در کشف گذرواژه ویندوز پیاده سازی کرده بود. قوی ترین برنامه ی کرک رنگین کمانی بعدا بوجود آمد که می توانست جدول های رنگین کمانی را برای مجموعه ی مشخصه های متفاوت برای هشینگ الگوریتم ها(الگوریتم های خرد شده) تولید و استفاده کند که شامل هش LM,MD5 و SHA-1 می شود.

در حالت ساده که تابع کاهشی باتابع درهم ساز هیچ برخوردی ندارد،دادن یک جدول رنگین کمانی کامل (که آن شما را برای پیدا کردن کد تطابق داده شده که از هر هش داده می شود،مطمئن می کند) به اندازه ی سری پسورد |P| و به زمان T که زمان مورد نیاز برای محاسبه ی جدول است،با طول جدول  L و با  t میانگین زمان مورد نیاز برای پیدا کردن کد مطابق با هش داده شده مستقیما با هم در ارتباط اند؛

بنابراین پسورد الفبایی ۸ رقمی با حروف کوچک (P|~3*1012) به راحتی با استفاده از یک کامپیوتر شخصی قابل ردیابی است،درحالیکه یک پسورد الفبایی ۱۶ رقمی با حروف کوچک (P|~1025) کاملا برای جدول های رنگین کمانی یک دفاع غیرقابل ردیابی محسوب می شود.

حفاظت در برابر جدول های رنگین کمانی

یک جدول رنگین کمانی در مقابل هش های یکطرفه که شامل سالت (salt) بزرگ می باشند بی تاثیر است.برای مثال یک هش کد را در نظر بگیرید که با استفاده از دنبال کردن تابع روبرو تولید شده است.(که در آن "||" الحاق اپراتور است):

یا

سالت ولیو پنهان نیست و شاید بصورت تصادفی ساخته و با هش کد زخیره شود.یک مقدار زیادی از سالت ولیو از حملات پیش پردازش جلوگیری می کند،که شامل جدول های رنگین کمانی نیز می باشد و اطمینان حاصل می کند که پسورد کاربران بطور منحصر به فردی هش شده (ریز شده) است.به این معنی که دو کاربر با پسوردی یکسان هش های متفاوتی خواهند داشت.(با فرض اینکه از سالت های متفاوتی استفاده شده است). برای رسیدن به نتیجه ای موفق مهاجم باید همه ی جدول ها را برای هر سالت ولیو (میزان سالت) ممکن پیش پردازش کند.سالت باید به اندازه ی کافی بزرگ باشد وگرنه مهاجم می تواند یک جدول برای هر سالت ولیو ایجاد کند.برای پسورد های قدیمی یونیکس(unix) از سالت ۱۲ بیتی استفاده می شد؛و این نیاز به ۴۰۹۶ عدد جدول داشت،که یک افزایش هزینه ی قابل توجهی برای مهاجم داشت،ولی با توجه به هارد درایو های (دیسک های سخت) ترابایتی غیر عملی نیز نبود.روش های SHA2-crypt  و bcrypt که در LINUX و BSD Unixes و سولاریس استفاده می شوند سالت ۱۲۸ بیتی دارند.این سالت ولیوی بزرگ حمله در مقابل این سیستم ها را برای تقریبا هر مقدار کد(اینجا منظور از مقدار طول کد است)غیر قابل نفوذ می کند.حتی اگر مهاجم میتوانست یک میلیون جدول در ثانیه ایجاد کند،باز هم او نیاز به میلیون ها سالت داشت تا جدول هارا برای همه ی سالت های ممکن بسازد.

تکنیک دیگری که به جلوگیری از حمله های پیش پردازشی کمک می کند،بسط دادن کلیدی (key stretching) می باشد.وقتی از بسط دادن استفاده می شود، سالت،کد و بعضی از هش ولیو های واسطه توسط تابع درهم ساز اصولی،چندین بار به اجرا در می آیند تا زمان محاسبه ی مورد نیاز را برای هش کردن (خرد کردن)هر کد افزایش دهند.برای مثال MD5-CRYPT از ۱۰۰۰ لوپ (حلقه) تکراری استفاده می کند که بطور مداوم (پشت سر هم) سالت،کد و هش ولیوی واسطه را به تابع درهم ساز MD5 اصلی خود باز می گرداند. هش کد کاربری دنباله سالت ولیو (که پنهان نیست) و هش نهایی می باشد.این زمان اضافه برای کار مورد توجه قرار نمی گیرد چون آن ها باید فقط چندین ثانیه صبر کنند هر دفعه که وارد سیستم می شوند. از طرفی بسط دادن تاثیرات حمله ی بروت فورس را نیز در تناسب با تعداد تکرار ها کاهش می دهد،زیرا تعداد تلاش هایی را که یک مهاجم می تواند در زمان داده شده مشخصی داشته باشد کاهش می دهد.این ویژگی ها در MD5 CRYPT  و BYCRYPT اجرا شده اند. همچنین به مقدار زیادی زمان مورد نیاز را  برای ایجاد یک پیش پردازش افزایش می دهد،اما بدلیل عدم وجود سالت این اتفاق تنها یک بار نمی تواند روی دهد.

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

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

تلاش های مخصوص و متمرکزی که بر روی LM هش (LM hash) تمرکز کرده و یک الگوریتم هش قدیمی استفاده شده توسط شرکت ماکروسافت همگی در دسترس عموم قرار دارند. هش LM  منحصرا آسیب پذیر می باشد،زیرا پسورد ها با بیش از ۷ مولفه،به دو بخش شکسته می شوند؛ که هر کدام از آن ها بصورت جداگانه هش شده(خرد شده)اند.انتخاب یک پسوردی که دارای ۱۵ مولفه یا بیشتر می باشد میتواند ضمانت کند که در این صورت هش LM ایجاد نخواهد شد.

استفاده ی عام

تقریبا همه ی توزیعات (محصولات) و تغییرات یونیکس، لینوکس و BSD از سالت ها استفاده می کنند؛گرچه بسیاری از اپلیکیشن ها فقط از یک هش (معمولا MD5) بدون سالت،استفاده می کنند. ویندوز ماکروسافت نسخه ی NT/2000 از LAN Manager و NT LAN manager با روش هشینگ (خرد کردن) (براساس MD4) استفاده می کند،که سالت نشده نیز می باشد و این مسئله آن را به یکی از معروف ترین جدول های تولید شده تبدیل کرده است.

جستارهای وابسته

یادداشت

  1. Hellman, M. E. (1980). "A cryptanalytic time-memory trade-off" (PDF). IEEE Transactions on Information Theory. 26 (4): 401–406. doi:10.1109/TIT.1980.1056220.

منابع

پیوند به بیرون

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.