MD5 مرده است! بهترین روش برای ذخیره رمز عبور کاربران

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

حالا چطور می توانیم کلمات عبور کاربران را در دیتابیس به صورت امن ذخیره کنیم؟

۳ روش برای ذخیره رمز عبور کاربران در پایگاه داده به ذهن می رسد

۱- ذخیره به صورت متن معمولی

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

۲- کدگذاری قبل از ذخیره

اینکه رمز عبور را قبل از ذخیره کردن با یک کلید کدگذاری کنیم روش دیگریست ولی یک اشکال بزرگ دارد. اگر هکر بتواند کلید را پیدا کند می تواند به راحتی همه رمزهای عبور را به شکل خام برگشت دهد. بعضی از کمپانی های بزرگ مثل Adobe از این روش استفاده می کنند!

۳- هش کردن رمز عبور

هش کردن به تبدیل یک متن به کاراکترهایی بر اساس الگوریتم های خاص می گویند که بر عکس کدگذاری، قابل برگشت به متن اصلی خود نیستند.الگوریتم های زیادی برای هش وجود دارد مثل md5, sha1, bcrypt و … .احتمال زیاد md5 را شنیده اید یا با آن کار کرده اید.

در همین رابطه :   آموزش نصب ساده PHP و اتصال به MySQL در آن

md5 مرده است

یکی از مهم ترین دلایل مردن md5 این است که سرعت الگوریتم آن بسیار بالاست.یک کامپیوتر مدرن با کارت گرافیک معمولی می تواند ۱۰ میلیارد رمز md5 را در هر ثانیه کرک کند. در این باره می توانید ویدیوی زیر را ببینید:

حالا چطور رمز های عبور را به صورت امن در سال ۲۰۱۸ ذخیره کنیم؟

جواب استفاده از یک الگوریتم هش بسیار کند به همراه پسوند یا پیشوند (salt) است. توصیه اول php الگوریتم bcrypt است. این الگوریتم بسیار کند می باشد و اگر کمی پسوند و پیشوند هم داشته باشد تقریبا هیچ هکری نمی تواند آن را کرک کند چون خیلی زمان نیاز خواهد داشت.

php یک تابع بنام password_hash برای هش کردن رمز های عبور اضافه کرده است و همچنین تابع password_verify را برای چک کردن صحت تطابق دو رمز عبور (زیرا در این الگوریتم، عبارت هش شده یک متن ، متفاوت از هم خواهد بود و تطابق معمولی هش == هش پاسخگو نیست).

یک نمونه از نحوه استفاده از این دو تابع کاربردی را می توانید در زیر ببینید:

<?php

echo password_hash("rasmuslerdorf", PASSWORD_BCRYPT)."\n";

$hash = '$2y$07$BCryptRequires22Chrcte/VlQH0piJtjXl.0t1XkA8pw9dMXTpOq';

if (password_verify('rasmuslerdorf', $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
?>

منبع

دسته بندی : PHP

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

More in HTML 5
دانلود رایگان ۱۰ قالب واکنش گرای Bootstrap

خوشبختانه خیلی از توسعه دهندگان و طراحان قالب هستند که قالب های وب سایت زیبا و رایگانی را طراحی و...

Close