چگونه با امنیت یک پسورد را ذخیره کنیم؟

1394-03-25

الگوریتم های معمول شامل md5, sha128, sha256, sha512, bcrypt و به همراه تکنیک salt است. اما از کدام الگوریتم برای ذخیره پسورد استفاده کنیم؟ مطمئنا جواب ما BCrypt است. اما چرا؟ در ادامه مطلب همراه ما باشید…

 چگونه با امنیت یک پسورد را ذخیره کنیم؟

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

سرورهای مدرن میتوانند در هر ثانیه 330MB از حجم داده هش شده توسط MD5 را محاسبه کنند. اگر رمز عبور شما بوسیلهMD5 ذخیره شده است و فقط از حروف کوچک به همراه اعداد و طول 6 کاراکتر باشد، میتوان رمز عبور احتمالی را در هر 40 ثانیه حدس زد، و اینکار بدون هیچ هزینه ای انجام میشود.

اما اگر کمی هزنیه انجام دهید و یک سوپر کامپیوتر کلاستر (Supercomputer cluster) ایجاد کنید، میتوانید حدود 700 میلیون پسورد را در هر ثانیه امتحان کنید، که به این معناست که میتوان پسوردهای احتمالی را در کمتر از یک ثانیه حدس زد.

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

استفاده از bcrypt

خب چگونه bcrypt قرار است امنیت را برای ما بیاورد؟ bcrypt آهسته عمل میکند.

Bcrypt از الگوریتم رمزنگاری Blowfish استفاده میکند و بدلیل سرعت پایین آن در رمزنگاری میتواند انتخاب خوبی برای ذخیره پسوردها در دیتابیس باشد. رمزنگاری در bcrypt دارای یک مشخصه به نام work factor است که بسته به انتخاب آن میتوان زمان هش شدن یک پسورد را طولانی کرد.

برای مثال این تابعی است که ما در مطلب گذشته برای استفاده از bcrypt گفتیم. در این تابع work factor در عدد 11 است.

function generateHash($password){
    if(defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH){
        $salt='$2y$11$' . substr(md5(uniqid(rand(),true)),0,22);
        return crypt($password,$salt);
    }
}

 

اگر شما عدد 11 را به عددهایی بالاتر از 16 تغییر دهید، خواهید دید که محاسبه آن خیلی بیشتر طول میکشد. البته به یاد داشته باشید که شما باید عددی را انتخاب کنید که با سرور شما هماهنگی داشته باشد. Joseph در سایت خودش تست هایی (Benchmarks) را که ازbcrypt با work factorهای مختلف امتحان کرده است گذاشته است، در این سایت میبینید که برای مثال اگر work factor در شماره 16 باشد، محاسبه آن حدود 5 ثانیه طول میکشد که البته در کامپیوترهای مختلف متفاوت است.

در تست دیگری که انجام شده است، اگر work factor در عدد 12 باشد، محاسبه عبارت yaaa حدود 3 میلی ثانیه طول میکشد در حالی که MD5 آن را در کمتر از یک میکروثانیه محاسبه میکند.

Bcrypt به شما امکان انتخاب بین سرعت و امنیت را میدهد و شما میتوانید با توجه به ویژگی‌های سرور خود به یک عدد متعادل برسید، تا به این صورت پسورد های شما به جای حدس زدن در هر 40 ثانیه در هر چندین سال یکبار حدس زده شوند

 

 

در تماس باشید

درباره ما

لاراوب ارایه دهنده وب سرویس های ارز ، سکه ، طلا به صورت لحظه ای و وب سرویس قیمت 177 خودروی داخلی وخارجی قیمت بازار و کارخانه وب سرویس انس طلا ، مثقال طلا، گرم طلای ۱۸ وب سرویس قیمت موبایل وب سرویس ثبت احوال بررسی کد ملی و انواع وب سرویس ها می باشد .

وب سرویس های ارز ، سکه ، طلا به صورت لحظه ای و وب سرویس قیمت خودروی داخلی وخارجی ،وب سرویس انس طلا ، مثقال طلا، گرم طلای ۱۸ ، مثقال طلا ، شاخص بورس ، نفت سبک، نفت برنت، نفت اپک، بنزین (گالن)،وب سرویس لحظه ای قیمت موبایل ، تبلت سامسونگ ، اپل ، گازوئیل، انس پالادیوم