یکی از عادتهای خوب برای حضور در فضای مجازی، انتخاب رمزعبور مناسب است. رمزعبوری که هم خوب به خاطر بماند و هم به حد کافی پیچیده طولانی باشد که امنیت ما را تضمین کند. اما این فقط یک روی ماجراست. میزبان که وظیقه نگهداری از رمزعبورها را بر عهده دارد با چالش دیگری رو به رو است.
به عنوان یک میزبان، نگهداری از تعداد بسیار زیادی رمزعبور به صورت نوشته ساده عاقلانه به نظر نمیآید و معمولا از رمزنگاری برای حفظ آنها استفاده میشود. اما استفاده از رمزنگاری با کلید برای میزبانی رمزعبور چندان پر طرفدار نیست. چرا که نگهداری از کلید رمزنگاری دردسرهای خودش را دارد و کسی که به کلید دسترسی پیدا کند با یک نگاه همه رمزعبورها را بدست میآورد!
استفاده از توابع درهمساز رمزنگارانه که به صورت توابع یک طرفه غیر قابل بازگشت طراحی شدهاند، طرفداران بیشتری دارد. توابع در هم ساز، یک پیام با طول متغییر را به یک چکیده پیام با طول ثابت تبدیل میکنند.
به این شکل که میزبانها رمزعبور را نگهداری نمیکنند و صرفا چکیده آن را در بانک اطلاعاتی ثبت میکنند. سپس در زمان اعتبارسنجی، چکیدهای از رمزعبور ارسالی میسازند و با چکیده موجود در بانک اطلاعاتی مقایسه میکنند. مدیران سیستم این روش را بیشتر میپسندند. البته برخی از آنها که اعتماد کمتری به توابع درهم ساز دارند، برای امنیت بیشتر، چندین بار توابع درهمساز را به صورت متوالی اجرا میکنند و چکیده آخر را مورد استفاده قرار میدهند.
اما با ظهور جدولهای رنگین کمانی، کارایی این روش هم کمتر شده است. جدولهای از پیش ساخته شدهای که به ازای ترکیبهای مختلف حروف، چکیده آنها در آن موجود است. به این ترتیب شخصی که به بانک اطلاعاتی از چکیده رمزعبورها دسترسی پیدا میکند، با استفاده یک جدول رنگین کمانی به راحتی آنها را به رمزعبورهای اولیه تبدیل میکند.
خوشبختانه درست مانند پختن غذا در رمزنگاری هم همیشه افزودن کمی نمک وضعیت را تغییر میدهد!
با اضافه کردن یک مقدار تصادفی به رمزعبورها و سپس اجرای تابع درهم ساز بر روی آنها، چکیدههای منحصر به فردتری تولید میشوند که در جدولهای رنگین کمانی معمول پیدا نمیشوند.
جدولهای رنگین کمانی که همین حالا عدهای در حال ساختن آنها هستند، با افزوده شدن نمک به فرآیند در هم سازی تا حد بسیار زیادی بی اثر شده اند. اما قانون مور به ما یادآوری میکند که با گذشت زمان و کوچکتر شدن ترانزیستورها، پردازندههای سریعتری خواهیم داشت. در نتیجه به مرور زمان با سرعت بیشتری جدولهای رنگین کمانی (با نمکهای متفاوت) ساخته میشوند.
محققان امنیتی برای مقابله با این چالش راهحلهایی پیشنهاد کردند. به عنوان مثال نایلز پروز۱ و دیوید مازیرس۲، ساز و کار انطباق پذیری معرفی کردند که میتوان هزینه زمانی برای محاسبه آن را به دلخواه تغییر داد. ایده اصلی bcrypt وابسته کردن عملیات به یکدیگر به صورت زنجیرهای است که با گذشت زمان و افزایش قدرت محاسباتی، میتوان طول این زنجیر را بیشتر کرد تا زمان بیشتری برای محاسبه صرف شود.
استفاده از توابع در هم ساز در فناوریهای نو ظهوری مانند بیتکوین و به وجود آمدن انگیزههای اقتصادی برای افزایش سرعت اجرای توابع درهم ساز که به عنوان مثال منجر به ساخت مدارهای مجتمع خاص منظورهای شده است که با صرف انرژی بسیار کمی میتوانند تا ۱۰۰۰ میلیارد چکیده پیام در ثانیه تولید کنند، محققان امنیتی را به فکر پیدا کردن یک راهحل بهتر انداحته است.
کلین پرسیوال۳، وابسته کردن فرآیند تولید چکیده به حافظه را به عنوان یک راه حل استفاده میکند. در scrypt ابتدا بر اساس رمز عبور (و یک مقدار نمک) یک جدول در حافظه ساخته میشود. در هر خانه از این جدول، آدرس خانه دیگری از جدول قرار دارد و میزان فضایی که این جدول از حافظه اشغال میکند دلخواه است. سپس یک خانه از این جدول را به عنوان خانه شروع انتخاب میکنیم. مقداری که داخل این خانه است، آدرس خانه بعدی را مشخص میکند. به خانه اشاره شده میرویم و این کار را به تعداد دلخواهمان تکرار میکنیم. با توجه به اینکه مقادیر خانههای این جدول با استفاده از یک تابع در هم ساز استاندارد ایجاد شدهاند، هر گاه به تعداد تکرار دلخواهمان رسیدیم، مقدار خانه آخر را به عنوان چکیده انتخاب میکنیم.
آن طور که کلین در مقالهاش توضیح میدهد، ساخت منابع حافظهای (مثل RAM)، هزینه بیشتری نسبت به منابع محاسباتی دارد که در نتیجه ساخت جدول رنگین کمانی برای این روش هزینه بسیار بیشتری به همراه دارد.
البته روش اخیر هنوز جدید است و این خبر خوبی در رمزنگاری نیست. چراکه هنوز ابعاد مختلف آن به طور کامل مورد بررسی قرار نگرفته است و تلاشها برای یافتن روشی امنتر برای میزبانی از رمزعبور ادامه دارد.
۱ Niels Provos
۲ David Mazières
۳ Colin Percival
Nice. Congrats on your first post.
A lot to learn here and I am very grateful for all the follow up and explanation links.
Thanks.