نوشته شده توسط
AmirSky
برای کد های سمت سرور چی؟ به چه شکل قراره پسورد چک بشه؟ آیا قصد داری همون پسوردی که از سمت کلاینت ارسال میشه رو در دیتابیس ذخیره کنی؟
پسوردی که از کلاینت میاد یا قبلا توسط جاوااسکریپت هش شده یا نه.
اگر توسط جاوااسکریپت هش نشده باشه ما خودمون قبل از درج در دیتابیس یا اقدام به احراز هویت، مشابه همون کار رو روش انجام میدیم.
یعنی سمت سرور اینطور عمل میکنم (این دقیقا کدی است که همین الان توی برنامم داره کار میکنه):
if(strpos($_POST['password'], $site_salt)!==0) $_POST['password']=$site_salt.'-'.hash('sha256', $site_salt.$_POST['password']);
بعد این هش رو میتونیم بجای پسورد کاربر فرض کنیم. میشه این هش رو مستقیما در دیتابیس ذخیره کرد (چون قبلا هش شده)، اما چون سیستم هشی که در سمت کلاینت اعمال شده از نظر امنیتی برای ذخیرهء ثابت دراز مدت روی سرور چندان کامل نیست (key stretching و سالت رندوم نداره) بنابراین یک مرحلهء دیگر هم به یک روش امنیتی تر هش میشه و سپس هش حاصل در دیتابیس ذخیره میشه.
درعوض Base64 شما چه الگوریتم برگشت پذیری رو پیشنهاد میکنید؟
در مورد موضوع این تاپیک که الگوریتم های برگشت پذیر متقارن کاربردی ندارن. نامتقارن هم مثلا RSA میتونه باشه که البته گفتم بخاطر کندی و سنگین بودنش در سمت کلاینت، ازش استفاده نکردم.
اما اگر سوال کلی است و میگید برای رمزگذاری برگشت پذیر بطور کلی از چه الگوریتم هایی استفاده کنیم، در بین انواع متقارن خب AES که معرف همگانه و تقریبا همه جا در هر زبانی هم پیدا میشه (حتی تاجاییکه یادمه پیاده سازی جاوااسکریپت هم داره). البته الگوریتم های دیگه مثل 3DES و Twofish هم هستن.
برای کاربردهای با امنیت معمولی کلید 128 بیتی کفایت میکنه. برای کاربردهای نیازمند امنیت طولانی مدت (یعنی مثلا میخواید مطمئن باشید حتی تا 50 سال دیگه هم کل توان پردازشی بشریت قادر به رمزگشایی دیتای شما نیست - البته این به کیفیت کلید/پسورد استفاده شده هم بستگی داره) از کلید 256 بیتی استفاده کنید. در بین این سه تا که گفتم، 3DES تا حداکثر طول کلید 168 بیت ساپورت میکنه و نمیتونید از 256 بیت استفاده کنید (البته 168 هم خودش خیلی زیاده ها).
بین Twofish و AES هم AES بهتره چون استانداردتره و ساپورت بهتری داره و سرعتش هم بیشتره.
بنابراین AES انتخاب استاندارده.
بین الگوریتم های نامتقارن هم که باز چندتا هست و فعلا RSA از نظر امنیت کافیه (هنوز رایانه های کوانتمی فرصت ساخته شدن نداشتن) و ساپورت خوبی داره، ولی یکسری الگوریتم های جدیدتر هم هستن که خصوصیات بهتری مثل امنیت بیشتر (بخصوص مقاومت دربرابر رایانه های کوانتمی) و سرعت بیشتر و طول کلید کوتاهتر برای امنیت برابر دارن. اینکه اونا رو بخواید استفاده کنید هیچ مشکلی نداره، فقط فکر میکنم RSA در دسترس تره و کلا براتون راحتی و سازگاری بیشتری به بار میاره.
فقط اینو بدونید که الگوریتم های نامتقارن درکل به میزان چشمگیری کندتر از الگوریتم های متقارن هستند. بخاطر همین فقط جایی ازشون استفاده میشه که نیاز به کلید خصوصی و عمومی است. کلا کاربردشون کمتره و برای رمزگذاری داده های حجیم استفاده نمیشن یا بصورت مستقیم استفاده نمیشن.
ضمنا حداقل طول کلید فعلی برای RSA برابر 3072 بیت است (برابر امنیت کلید 128 بیتی برای الگوریتم های متقارن).
البته کلیدهای 2048 بیتی RSA هم تا سال 2030 امن محسوب میشن (در ارتباط با طول کلید میتونید این مقاله رو ببینید: http://en.wikipedia.org/wiki/Key_length).