Vahid_Nasiri
جمعه 06 آذر 1383, 12:56 عصر
salted hash
طبقه بندی میزان امنیت پسوردهای ذخیره شده کاربران درون دیتابیس:
حالت معمولی و بدون رمزگذاری (امنیتی ندارد)
رمزگذاری کردن پسورد (یک ستاره)
هش کردن پسورد (دو ستاره)
استفاده از salt (سه ستاره)
Salted Hash چیست؟
یکی از حملاتی که در مورد پسوردهای هش شده در دیتابیس ممکن است صورت گیرد استفاده از مجموعه ای از کلمات هش به صورت یک دیکشنری آماده و مقایسه آنها با موارد موجود است (Dictionary Attack) . برای اینکه اینگونه حملات در عمل بی اثر شوند (زمان بسیار بیشتری را نیاز داشته باشند) ، اضافه کردن رشته ای اتفاقی به هر پسورد وارد شده (به آن salt نیز می گویند) و سپس هش کردن کل مجموعه ی مقدار اتفاقی و پسورد، می تواند صورت گیرد.
ذخیره سازی اطلاعات درون دیتابیس کاربران:
در این حالت ساختار جدول کاربران ما چیزی شبیه به مورد زیر خواهد بود:
username, char(30), primary key
salt, char(10)
password_hash, char(40)
و مثالی از داده های ذخیره شده پس از اعمال این روش :
Username=Jsmith
Salt=BXZLUOZXAC
password_hash=89A4C867DE091B91BDD8097B4B32E10A1368 96C3
اعتبار سنجی کاربران در لحظه ورود به سایت:
در این حالت الگوریتم کار به صورت زیر خواهد بود:
· در دیتابیس ، نام کاربر وارد شده جستجو شده و در صورت یافت شدن ، مقادیر salt و password_hash دریافت می شود. در غیراینصورت پیغام 'کاربر یافت نشد' نمایش داده خواهد شد.
· پسوردی را که کاربر وارد کرده است با مقدار salt موجود در دیتابیس کنار هم قرار داده و سپس hash کل مجموعه حساب می شود.
· مقدار هش محاسبه شده در قسمت دو را با هش دریافت شده و موجود در دیتابیس (مربوط به قسمت 1) ، مقایسه می کنیم. اگر این دو مقدار با هم مساوی بودند کاربر مجاز به ورود می باشد
روشهای تولید salt و همچنین محاسبه هش:
اگر به موضوع این مقاله علاقمند شدید به مآخذ ذکر شده مراجعه نمایید ، نمونه الگوریتم های مربوطه را خواهید یافت.
مآخذ مورد استفاده:
http://www.15seconds.com/issue/000217.htm
http://msdn.microsoft.com/msdnmag/issues/03/08/SecurityBriefs
http://www.obviex.com/samples/EncryptionWithSalt.aspx
http://www.obviex.com/samples/Code.aspx?Source=HashCS&Title=Hashing%20Data&Lang=C%23
http://www.dotnetjunkies.com/tutorial/77D4AFDC-585D-4539-A364-30028327FF14.dcik
طبقه بندی میزان امنیت پسوردهای ذخیره شده کاربران درون دیتابیس:
حالت معمولی و بدون رمزگذاری (امنیتی ندارد)
رمزگذاری کردن پسورد (یک ستاره)
هش کردن پسورد (دو ستاره)
استفاده از salt (سه ستاره)
Salted Hash چیست؟
یکی از حملاتی که در مورد پسوردهای هش شده در دیتابیس ممکن است صورت گیرد استفاده از مجموعه ای از کلمات هش به صورت یک دیکشنری آماده و مقایسه آنها با موارد موجود است (Dictionary Attack) . برای اینکه اینگونه حملات در عمل بی اثر شوند (زمان بسیار بیشتری را نیاز داشته باشند) ، اضافه کردن رشته ای اتفاقی به هر پسورد وارد شده (به آن salt نیز می گویند) و سپس هش کردن کل مجموعه ی مقدار اتفاقی و پسورد، می تواند صورت گیرد.
ذخیره سازی اطلاعات درون دیتابیس کاربران:
در این حالت ساختار جدول کاربران ما چیزی شبیه به مورد زیر خواهد بود:
username, char(30), primary key
salt, char(10)
password_hash, char(40)
و مثالی از داده های ذخیره شده پس از اعمال این روش :
Username=Jsmith
Salt=BXZLUOZXAC
password_hash=89A4C867DE091B91BDD8097B4B32E10A1368 96C3
اعتبار سنجی کاربران در لحظه ورود به سایت:
در این حالت الگوریتم کار به صورت زیر خواهد بود:
· در دیتابیس ، نام کاربر وارد شده جستجو شده و در صورت یافت شدن ، مقادیر salt و password_hash دریافت می شود. در غیراینصورت پیغام 'کاربر یافت نشد' نمایش داده خواهد شد.
· پسوردی را که کاربر وارد کرده است با مقدار salt موجود در دیتابیس کنار هم قرار داده و سپس hash کل مجموعه حساب می شود.
· مقدار هش محاسبه شده در قسمت دو را با هش دریافت شده و موجود در دیتابیس (مربوط به قسمت 1) ، مقایسه می کنیم. اگر این دو مقدار با هم مساوی بودند کاربر مجاز به ورود می باشد
روشهای تولید salt و همچنین محاسبه هش:
اگر به موضوع این مقاله علاقمند شدید به مآخذ ذکر شده مراجعه نمایید ، نمونه الگوریتم های مربوطه را خواهید یافت.
مآخذ مورد استفاده:
http://www.15seconds.com/issue/000217.htm
http://msdn.microsoft.com/msdnmag/issues/03/08/SecurityBriefs
http://www.obviex.com/samples/EncryptionWithSalt.aspx
http://www.obviex.com/samples/Code.aspx?Source=HashCS&Title=Hashing%20Data&Lang=C%23
http://www.dotnetjunkies.com/tutorial/77D4AFDC-585D-4539-A364-30028327FF14.dcik