AmirMohammad Montazerion
1 ماه پیش توسط AmirMohammad Montazerion مطرح شد
2 پاسخ

مقدار هش رمز عبور

سلام وقت بخیر.
ببخشید در مورد هش‌کردن رمز اگر دوتا کاربر یک رمز ۱۲۳۴۵ مثلاً داشته باشن مقدار هش‌هاشون با هم برابره؟
اگر برابره پس تو مرحله لاگین بعداً به مشکل می‌خوریم و دو یوزر برگردونده‌میشن!
چطور این مشکل رو حل کنیم؟!


ثبت پرسش جدید
محمدجوکار
تخصص : دانشجوی برنامه‌نویسی
@mjokarr 1 ماه پیش مطرح شد
2

سلام دوست عزیز
تا جایی که من حضور ذهن دارم، هش کردن به ۲ چیز بستگی داره.
یکی نوع الگوریتیمیه که هش باهاش اتفاق می‌افته و یکی هم کلیدِ رمزنگاریه.
فکر کنید رمز یکیه، ولی اگر با الگریتم‌های مختلف یا کلیدهای متخلف اون هش به وجود بیاد، هش‌های به وجود اومده از یک رمز، با هم برابر نیستن.
اما اگر شما ۱۲۳۴ رو با یک الگریتم به وجود بیارید، بله طبیعتاً یکی هستن.
اصلا باید یکی باشن که بعدا بتونن برگردونده بشن.
اصل هش کردنه پسورد، به خاطر لو نرفتنش توسط سایر افراده وگرنه هیچچ مشکلی توی ولیدیشن یا آتوریزیشن ایجاد نمیکنه.
شما قرار نیست توسط رمز، افراد رو برگردونین، توسط یک کلید یونیک این کار رو میکنید مثل یوزرنیم، ایمیل یا شماره تلفن. اینا یونیک میشن و برای ورود بهشون هم رمز‌هایی ایجاد شده که مشکلی نداره اگه با سایر رمز‌ها یکی باشه..

اما درکل حرف شما درسته و نباید هش‌ها یکی باشن، در این صورت اگه اطلاعات مهم باشه، میتونه توسط هکرها مورد مقایسه قرار بگیره. یعنی حمله میکنن یه رمز رو پیدا میکنن، حالا میان اون رمز رو با سایر یوزرنیم‌های احتمالی وارد میکنن، و اگه کسی رمزش مشابه باشه فورا لاگین میشه... (بدیش اینه).
حالا راه حل شما: یه سیستم وجود داره به نام salt که مثلا php دیفالت توی فانکشن‌‌هاش دارتش خودش.
توی این سیستم وقتی کاربر ۱۲۳۴ رو به عنوان رمز ورودی مینویسه، توی salt برای هرکاربر به صورت جداگانه یه کلید رندوم ساخته میشه و اضافه میشه به ابتدای رمز ورودی. مثلا اینطوری aU7jH1234 و بعدا این رمز، به صورت هش شده در میاد و وارد دیتابیس میشه‌.
حالا مقایسه‌ش چطوریه؟ فک کنید کاربر با این روش رجیستر کرده قبلا و هش پسوردش هم توی دیتابیس ذخیره‌‌ست، الان لاگ‌اوت کرده و میخواد مجدد لاگ‌این کنه؛ خب یوزرنیمش رو میزنه و و برای رمزش هم مینویسه ۱۲۳۴. خب توی سیستم salt میره پسورد هش شده‌ی اون یوزرنیم رو از دیتابیس میاره و ابتدا از هش خارجش میکنه، چون خودش میدونه قبلا برای این یوزر چه کلید رندومی اضافه کرده بوده، اون قسمت رو ازش حذف میکنه و با داده‌ی ورودیه کاربر مقایسه میکنه.
اینطوریه که میشه جلوی مشکلات احتمالی رو گرفت


بردیا مظاهری
تخصص : مهندس نرم افزار
@l3ardia 1 ماه پیش مطرح شد
1
  1. رمز رو hash شده توی دیتابیس نگه دار که اگه یوقت دیتابیس هک شد کسی نتونه به رمز ها دسترسی داشته باشه.
    ۲. وقتی کسی وارد میشه با رمز عبورش نباید وارد بشه با نام کاربریش باید وارد بشه. شما وقتی از دیتابیس فراخوانی می کنی با نام کاربریش فراخوانیش کن. و رمز عبوری که فرستاده رو با همون الگوریتم hash کن و چک کن که با هم برابر باشه.
    ۳. ممکنه که حتی hash ها لزوما برابر نباشه ولی رمز صحیح باشه. بستگی به الگوریتمی که استفاده می کنی داره. اگه از الگوریتم bcrypt استفاده کنی هیچ دو تا رمزی عین هم hash نمیشه. ولی الگوریتم تطبیق رمز ها طوری کار می کنه که می تونه بفهمه اینا با هم یکی هستن یا نه. دلیلش هم برای security بیشتره. فرض کن یه هکری دیتابیس رو هک کنه و بتونه یکی از رمز ها رو متوجه بشه. اینجوری اگه رمز های یکسان نگاشت یکسانی داشته باشن می تونه یه سرچ بزنه ببینه کسی دیگه هم رمزش شبیه این هست یا نه و جای همه شون مثلا اکسس بگیره.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام