انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: abedzadeh در 17 دی 1393، 01:57 بظ
-
سلام دوستان
این چند روز یه بحثی در مورد هش کردن پسوردها در انجمن بود
سوالی که برام پیش اومده اینه که اگه سالت ها اتفاقی تولید و به پسورد هش شده اضافه میشن ، چطور دفعه ی بعدی که کاربر پسورد رو وارد میکنه و هش میشه ، دوباره همون سالت تولید میشه ؟
پس منظور از اتفاقی چیه ؟
-
میتونی یک salt ثابت داشته باشی تو کد برنامه موقع هش کردن و مقایسه.
نمونههایی که من دیدم از ثبت salt تو دیتابیس استفاده میکردند.
-
salt بصورت PlainText توی دیتابیس ذخیره میشه.
-
پس آیا میشه گفت اگه یه نفر علاوه بر فایل پسورد های هش شده ، به دیتابیس سالت ها هم دسترسی پیدا کنه ، عملا سالت ها بی تاثیرند ؟
-
میتونی یک salt ثابت داشته باشی تو کد برنامه موقع هش کردن و مقایسه.
نمونههایی که من دیدم از ثبت salt تو دیتابیس استفاده میکردند.
فکر میکنم شما salt رو با pepper اشتباه گرفتید.
-
پس آیا میشه گفت اگه یه نفر علاوه بر فایل پسورد های هش شده ، به دیتابیس سالت ها هم دسترسی پیدا کنه ، عملا سالت ها بی تاثیرند ؟
فرض کنید توی یک سایت با 100 هزار عضو. که پسورد 2هزار نفر از عضوهای این سایت 123456 هست که MD5 Hash این عدد برابر با :
e10adc3949ba59abbe56e057f20f883e
حالا یک هکر تونسته دیتابیس رو هک کنه و تمامی اطلاعات افراد رو داره.
حالا اگر هکر بیاد مقدار e10adc3949ba59abbe56e057f20f883e رو جستجو کنه میبینه که پسورد ۲هزار نفر از افراد 123456 هست :)
ولی اگر پسورد ها با Salt ترکیب و سپس Hash شده باشند، ما الان دوهزار پسورد 123456 داریم که Hash هیچکدوم شبیه به هم نیست.
-
هممم ، متوجه شدم ، ممنون
اشتباهم این بود که فکر میکردم سالت ها بعد از هش شدن اضافه میشن
خیلی ممنون
-
میتونی یک salt ثابت داشته باشی تو کد برنامه موقع هش کردن و مقایسه.
نمونههایی که من دیدم از ثبت salt تو دیتابیس استفاده میکردند.
فکر میکنم شما salt رو با pepper اشتباه گرفتید.
درسته، برا بخش اول (اضافه کردن به صورت ثابت) pepper درست هست.
-
اشتباهم این بود که فکر میکردم سالت ها بعد از هش شدن اضافه میشن
Salt یک بار قبل از هش شدن به گذرواژه اضافه میشه و بعد از اون هم یا به صورت مجزا یا به خود Hash اضافه میشه.
-
اشتباهم این بود که فکر میکردم سالت ها بعد از هش شدن اضافه میشن
Salt یک بار قبل از هش شدن به گذرواژه اضافه میشه و بعد از اون هم یا به صورت مجزا یا به خود Hash اضافه میشه.
عجبا :D
ممنون
-
من متوجه نمیشم چطوری هست وقتی یه عبارت مثل 12345 رو با salt هش میکنیم هر بار یه نتیجه متفاوت میاد اما وقتی بررسی میکنیم همشون با هم برابر هستن ???
اگه salt به یک شکل قبل از هش شدن اضافه میشه پس باید تمام هش ها مثل هم باشه
اگه هم قبل از هش شدن به شکل های متفاوتی اضافه میشه پس عبارت ها فرق داره و هش ها برابر هم نیستن !
-
خوب فرض میکنیم که گذرواژه ما 12345 هستش.
ابتدا یک Hash به صورت تصادفی ایجاد میکنیم، فرض کنید ABCDEFG هستش.
حالا 12345ABCDEFG رو داریم و توسط یک روش Hashing مناسب مثلا SHA-1 کار تبدیل رو انجام میدیم. خروجی هست:
1ecf5773d52f6f220c6dcb8d8c18a85512b9bb48
برای اینکه Salt به صورت تصادفی ایجاد شده، اون رو هم لازم داریم و میتونیم به همون Hash اضافه کنیم. نتیجه میشه:
1ecf5773d52f6f220c6dcb8d8c18a85512b9bb48ABCDEFG
این متن رو میتونیم مستقیما در پایگاه دادهای که داریم ذخیره کنیم. و چون Salt به صورت تصادفی ایجاد میشه، همیشه نتیجه متفاوتی خواهیم داشت.
اندازه یک Hash همیشه ثابت هست، مثلا برای SHA1 که به صورت Hexadecimal نمایش داده میشه، همیشه ۴۰ حرف هستش، در نتیجه از حرف ۴۱ به بعد Salt قرار داره.
حالا میخوایم گذرواژه جدید رو تست کنیم. ابتدا گذرواژه رو از کاربر میپرسیم، گذرواژه Hash شده رو از پایگاه داده میخونیم و Salt اون رو استخراج میکنیم، ایندفعه بجای تولید تصادفی Salt از Saltای که استخراج کردیم Hash رو به روش قبل میسازیم و با Hashای که توی پایگاه داده هست مقایسه میکنیم. اگر برابر باشه، یعنی گذرواژه جدید درسته.
-
من متوجه نمیشم چطوری هست وقتی یه عبارت مثل 12345 رو با salt هش میکنیم هر بار یه نتیجه متفاوت میاد اما وقتی بررسی میکنیم همشون با هم برابر هستن ???
اگه salt به یک شکل قبل از هش شدن اضافه میشه پس باید تمام هش ها مثل هم باشه
اگه هم قبل از هش شدن به شکل های متفاوتی اضافه میشه پس عبارت ها فرق داره و هش ها برابر هم نیستن !
Salt هربار بصورت Random تولید میشه.
چون هر بار Salt جدیدی تولید میشه، Hash هم فرق میکنه.
ولی توجه داشته باشید که Saltی که داره تولید میشه هم ذخیره میشه. چون اگر ذخیره نشه دیگه نمیتونیم اعتبارسنجی کنیم.
-
@nixoeen
@کامروا
متوجه شدم، متشکرم :)