امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
salted hash
نویسنده پیام
arnh آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 959
موضوع‌ها: 75
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 38
( 172 تشکر در 76 ارسال )
ارسال: #1
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...rityBriefs
http://www.obviex.com/samples/EncryptionWithSalt.aspx
http://www.obviex.com/samples/Code.aspx?...&Lang=C%23
http://www.dotnetjunkies.com/tutorial/77...7FF14.dcik
۲۹-فروردین-۱۳۸۵, ۱۸:۰۱:۲۷
وب سایت ارسال‌ها
پاسخ
arnh آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 959
موضوع‌ها: 75
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 38
( 172 تشکر در 76 ارسال )
ارسال: #2
يك نمونه عملي:
نگارش هاي ورژن 2 به بعد فوروم IPB (قبل از آن فقط هش كردن ساده بود) .

براي مثال فوروم IPB 2.0.3 از كد زير براي توليد salt استفاده مي كند:
کد:
function generate_password_salt($len=5)
{
$salt = '';

srand( (double)microtime() * 1000000 );

for ( $i = 0; $i < $len; $i++ )
{
$num = rand(33, 126);

if ( $num == '92' )
{
$num = 93;
}

$salt .= chr( $num );
}

return $salt;
}
اين اطلاعات در جدول ibf_members_converge ذخيره مي شود:
کد:
CREATE TABLE `ibf_members_converge` (
`converge_id` int(10) NOT NULL auto_increment,
`converge_email` varchar(250) NOT NULL default '',
`converge_joined` int(10) NOT NULL default '0',
`converge_pass_hash` varchar(32) NOT NULL default '',
`converge_pass_salt` varchar(5) NOT NULL default '',
PRIMARY KEY (`converge_id`),
KEY `converge_email` (`converge_email`)
) TYPE=MyISAM;
و در نهايت با استفاده از كد زير اعتبار سنجي پسورد وارد شده را انجام مي دهد:
کد:
function generate_compiled_passhash($salt, $md5_once_password)
{
return md5( md5( $salt ) . $md5_once_password );
}
هنگام ثبت نام:
پسورد دريافت مي شود و سپس هش مي شود. بعد بعنوان ورودي تابع فوق بعنوان md5_once_password دريافت مي گردد. نمك كار (salt) با استفاده از تابع generate_password_salt توليد مي شود. نهايتا generate_compiled_passhash در هنگام رجيستر كردن كاربران درون فيلد converge_pass_hash ذخيره مي گردد.

هنگام لاگين:
Salt از فيلد converge_pass_salt خوانده مي شود و بعد درون تابع مورد استفاده قرار مي گيرد.
پسورد دريافت مي شود و سپس هش مي شود. بعد بعنوان ورودي تابع فوق بعنوان md5_once_password دريافت مي گردد.
حاصل نهايي تابع بايد با مقدار موجود در فيلد converge_pass_hash يكسان باشد.

خوش باشيد
۲۹-فروردین-۱۳۸۵, ۱۸:۰۳:۳۹
وب سایت ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  Hash - Code - Encryption arnh 4 5,171 ۰۵-اردیبهشت-۱۳۸۵, ۱۶:۲۲:۱۱
آخرین ارسال: ashkan

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS