پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
اشاره به این موضوع بد نیست که اساسا md5 یا اکثر انکرایپشن ها یک الگوریتم مخفی نیستند اصلا که مثلا روزی لو رفته باشند و نا امن شده باشند :|
در حقیقت بحث بر سر پیشرفت سخت افزار ها و رشد تکنولوژی هایی مثل کلود کامپوتینگ هستش. در زمان ساخت md5 به طور مثال احتمال برات فورس 100% را در عرض 20 سال میدادن با یک ابر رایانه قدرتمند و هزینه اجاره این ابر رایانه برای 20 سال را می گفتند هزینه ای که باید صرف شکستن md5 شود.
اما با رشد سخت افزارها (اولین رایانه خود بنده رمش 4 مگابایت بود و سورفیس زیر دستم الان 8192 مگابایت) این را شما تعمیم بدین به ابر رایانه ها و البته با در نظر داشتن تکنولوژِی های کلود که هزینه دسترسی به یک ابر رایانه را هم کاهش داده اند. خوب حالا دیگر نه 20 سال زمان نیاز است نه آنقدرها هزینه بالا ... پس md5 دیگر امن نیست.
اگر نه از همان روز اول هم الگوریتم md5 یا مثلا sha ها کاملا مشخص و عمومی بوده است.
--- نکته دوم در ادامه بحث اصلی
طرح ها و پیشنهادات بنده و اکثر دوستان تنها زمانی کاربردی است که دقیقا طرف صرفا قصد دارد هش شما را باز گرداند به مرجعش. اگر بحث این باشد که طرف به الگوریتم ذخیره سازی شما در دیتابیس دست داشته باشد داستان کاملا متفاوت است و هر چقدر که پیجیده و من درآوردی کار کنید نهایتاً با کمی دقت قابل استخراج هست الگوریتم شما.
در این موارد همان بحث کامپایل یا انکرایپت کردن قسمت احراز هویت ضروری است. اما در خصوص مدل کلید تامین امنیت بدون انکرایپ یا کامپایل نیز تامین شده و بر فرض 100 برابر شدن قدرت پردازنده ها باز هم هزینه و زمان مورد نیاز برای شکستن یک رشته 1 یا 2 مگابایتی چندین برابر عمر نوح است 8-| و البته باز اشاره کنم این متدی نیست که شما مثلا برای یک انجمن یا حتی درگاه واسط بخواین ازش استفاده کنید.
پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
نقل قول:
نوشته اصلی توسط
hegza
سلام بر شما
هیچ چیز غیره ممکنی در دنیای انفورماتیک وجود ندارد
لازمه عرض کنم برای md5 و ... هیمن تعریف و تمجید شما در قدیم بود
کلا هر چیزی پابلیک باشه شانس لو رفتن الگوریتمش بیشتر میشه
من درآوردی رو من نمیدونم چی مینامید
ولی همون توابع رو هم کسانی نوشتن که من بودن از مریخ که نیومدن
سعی کنید دیدتون رو کمی ئسیع تر کنید
با تشکر
بنده عرض کردم تقریبا غیر ممکن
در حال حاضر این روش در فریمورکهای پیشرفته مثل لاراول و خیلی از سیستمهای مدیریت محتوا استفاده میشود
قطعا افرادی که روی این سیستمها کار میکنند اگر استفاده از روشهای شخصی بهتر بود، این کار را انجام میدادند
- - - Updated - - -
md5 و sha1 دو الگوریتم تهیهی Hash هستند که برای کاربردی غیر از رمز ساخته شدهاند
با استفاده از این الگوریتمها با دقت بالایی میشود شباهت دو رشته یا محتوای دو فایل را بررسی کرد
در زمان قدیم به دلیل کند بودن سختافزارها و نبود بانک رمز برای این دو الگوریتم، استفاده از اینها برای رمز تا حدودی قابل قبول بود ولی الان دیگر قابل قبول نیست و استفاده از الگوریتمهای مخصوص رمز که در php هم به صورت تخصصی پیادهسازی شده بهترین روش است
پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
بهترین حالت ممکن استفاده 2 بار از md5 هست یعنی ب صورت زیر :
ex : [ md5(md5('Azade')); ] encoded
به هیچ عنوان امکان نداره به داده اولیه دسترسی داشته باشن چون در کل md5 سیستم انکریپت یا انکود نیست فقط یک سیستم کدگذاری غیرقابل بازگشت هست که با توجه به طول کاراکتر نوع داده و متن داده یک کد یکسان تولید میکنه .
پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
نقل قول:
نوشته اصلی توسط
AMIB
بنده عرض کردم تقریبا غیر ممکن
در حال حاضر این روش در فریمورکهای پیشرفته مثل لاراول و خیلی از سیستمهای مدیریت محتوا استفاده میشود
قطعا افرادی که روی این سیستمها کار میکنند اگر استفاده از روشهای شخصی بهتر بود، این کار را انجام میدادند
- - - Updated - - -
md5 و sha1 دو الگوریتم تهیهی Hash هستند که برای کاربردی غیر از رمز ساخته شدهاند
با استفاده از این الگوریتمها با دقت بالایی میشود شباهت دو رشته یا محتوای دو فایل را بررسی کرد
در زمان قدیم به دلیل کند بودن سختافزارها و نبود بانک رمز برای این دو الگوریتم، استفاده از اینها برای رمز تا حدودی قابل قبول بود ولی الان دیگر قابل قبول نیست و استفاده از الگوریتمهای مخصوص رمز که در php هم به صورت تخصصی پیادهسازی شده بهترین روش است
درود
بله بدون شک چیزی که اجماع روش زیاده پس ایمن تره و باگ کمتری داره و مدام باگ گیری میشه مثل لینوکس و دنیای سرورها!
و بشخصه پیشنهادی که دادم از روی نظر شخصیم نبود کل استک اور فلو و سایتهای مشابه رو زیرو رو کردم تا دیدم اکثریت به این سبک کریپت اشاره کردن با مقداری زیادی نمک و نه یک نمک معمولی
اما بهرحال بستگی داره برای چه کاری اینو لازم دارید. در حالت متوسط بهتره از پیشنهاد شما بهره برد ولی در سطح پیشرفته و .... بهتره وقت گذاشت و یک کلاس اختصاصی برای این نوشت که دسترسی پرویت داشته باشه
بهرحال ایمن کردن رمز کاربران برای کاربران مفید هست(نه خود سایت) وگرنه وقتی سرور هک بشه یا دیتا پابلیک بشه دیگه سرویس دهنده مبدا اتک رو خورده و اینو برای حفظ حریم خصوصی افراد هست و مصون ماندن اطلاعات آنها در دیگر سایتها چون اکثر کاربران از یک پسورد یونیک استفاده میکنند برای جی میل/انجمن/بانک و....
که بهتره کاربران رو توجیح کرد براساس اسم دامنه سایت یک رمزگذاری برای خودشون داشته باشند
مثلا تعداد حروف وبهاستینگ تالک 11 هست معادلش در کیبورد !! رو بکار ببرند و برای جی میل % حالا اول یا آخر رمز یا هر دو
پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
نقل قول:
با استفاده از این الگوریتمها با دقت بالایی میشود شباهت دو رشته یا محتوای دو فایل را بررسی کرد
این که روشن است. مگر اساساً فلسفه موجودیت هش به منظور اقدامی غیر از قیاس بوده است؟
از ابتدا هش ها آمده اند برای قیاس پذیری آسان. به این صورت که 2 ورودی متفاوت خروجی همسان (از نظر طول رشته) اما یونیک داشته باشند. به این ترتیب امکان تفکیک و تشخیص برابری آنها بدون نیاز به بررسی خود ورودی ها امکان پذیر است.
این مفهوم چه برای فایل که شما گفتید چه برای رمز صدق می کند. اینجا هم کسی چیزی بیش از این از هش انتظار ندارد.
اتفاقا انکرایپت کردن رمز یک اقدام با ریسک بالا هست (نظر شخصی نیست طبق اصول CC البته بنده هم کاملا موافقش هستم). چون در صورت شکست انکرایپشن لو رفتن همه رمز ها 100% امکان پذیر است.
اما بحث برات فورس کردن برای هر هش زمانی یکسان می برد و اینطور نیست اگر یک رمز هش شده با برات فورس کشف شد، دیگر باقی رمزها به سرعت و به راحتی شکسته شوند! بلکه تک تک آنها همان قدر زمان خواهند برد.
بنابراین اصلا این تصور که به صورت انکرایپت دخیره بشود رمز یک اشتباه محض است که البته از نظر اصول عمومی امنیت (CC) نیز مردود می باشد. رمز ها باید هش باشند.
پس بهتره قفط سر این که چه الگو هشی استفاده شود بحث کرد.
-----
موضوع بعد این اکثریت از چه چیزی استفاده می کنند و مثلا لاراول (به نظر من یک فاجعه در php) از این سیستم استفاده می کند پس بهترین است اصلا استدلال علمی و منطقی نمی باشد.
به نظر من جالب نیست در جمع کسانی که کارشان 0 و 1 است یک طرفشان کامپیوتر و به نوعی مطلقا منطق حاکمیت دارد بخواهیم با استدلال های این چنینی به یک راهکار برتری بدهیم و مهر تائید بهش بزنیم.
بنده همچنان تاکید میکنم اگر کدها در فضای ایزوله هستند و بحث دسترسی کرک به کد وجود ندارد، قطعا الگوریتم های اختصاصی امن ترین ها هستند تا این عمومی ها یا پیشنهادات خود php حتی.
در جمع بندی نظرات خودم، ترکیب چند نوبتی و salt شناور به نسبت هر رمز را همچنان کاربردی ترین شیوه می دانم.
نقل قول:
ex : [ md5(md5('Azade')); ] encoded
به هیچ عنوان امکان نداره به داده اولیه دسترسی داشته باشن چون در کل md5 سیستم انکریپت یا انکود نیست فقط یک سیستم کدگذاری غیرقابل بازگشت هست که با توجه به طول کاراکتر نوع داده و متن داده یک کد یکسان تولید میکنه .
اینطور نیست دوست عزیز. اگر شما ده بار هم md5 را داخل هم کار بزارید. و خروجی شما صرفا md5 باشد سودی برای شما ندارد. وقتی برات فورس روی هش شما صورت میگیرد ریسک لو خوردن آن بالاست چون خروجی شما یک md5 است در هر حال !
اما اگر salt استفاهد کنید، ساختار md5 را دستخوش تغییراتی می کنید که مراحل برات فورس آن زمان گیر تر خواهد شد (مگر salt شما را داشته باشند که در این حالت تازه زمان مورد نیاز مثل حالت فوق خواهد بود).
یک اشتباه که برخی میکنند فکر میکنند برات فورس روی هش ها از 0000000000000000 شروع میشود و مثلا تzzzzzzzzzzzzzzz قراره برود جلو ... در صورتی که اینطور نیست.
ما برات فورس ویژه sha-1 داریم، برات فورس ویژه md5 داریم و به همین ترتیب برات فورس های اختصاصی داریم که خیلی زمان کوتاه تری به نسبت یک برات فورس عمومی احتیاج دارند که کاراکتر به کاراکتر بخواهد عمل کند.
مثلا یکی از خلاقیت های خود بنده اینورت کردن نصف رشته هش می باشد. البته بیشتر در پروژه های ruby چون این کار اونجا بسیار ساده هست و با یک خط کد امکان پذیر است. عملا هش های بنده اصلا قابل شناسیی نبودند که کسی بخواهد برات فورس اختصاصی اونها را به کار بست.
پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
نقل قول:
نوشته اصلی توسط
M.Abooali
این که روشن است. مگر اساساً فلسفه موجودیت هش به منظور اقدامی غیر از قیاس بوده است؟
...
وقتی حس میکنید اطلاعات شما از جامعهی بزرگ توسعه دهندگان php که ممکن است در برابر تک تک آنها حرفی برای گفتن نداشته باشید، بیشتر است
و وقتی تصور میکنید سلیقه شخصی شما از جامعهی جهانی برنامهنویسان php بهتر است و لاراول را فاجعه مینامید
بقیهی صحبتهای شما ارزش نقد کردن ندارند
از روشهای شخصی خودتان برای رمزگزاری استفاده کنید
در بهترین حالت شاید بتوانید با صرف زمان زیاد به امنیتی برسید که با یک دستور php میشد برسید
اگر در این میان خطاهایی داشته باشید نهایتا هم وقت را صرف کردید هم امنیت رمزها پایین آمدهاند.
و در آخر اینکه
سلایق شخصی و اوهام خودتان را به دیگران پیشنهاد ندهید. ممکن است یک فرد تازه کار فکر کند که این حرفها درست هستند و باعث اتلاف وقت دیگران هم بشوید
پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
md5 امن ترین نوع می باشد ولی 100 درصدنیست، ساده عرض کنم در بحث امنیت چیزی به اسم 100 درصد وجود نداره.
پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
ممنون از تمامی دوستانی که در این تاپیک شرکت کردن، نظر دادن و راهنمائی کردن، از همگی بسیار ممنونم و سپاس گذارم
پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
یک اخلاق ناپسند که در این انجمن من بهش برخورد کردم چندین بار ظرف فعالیت مجدد خودم، هر جا علمی بحث می کنیم معمولا افرادی هستند جای بحث علمی و ارائه استدلال با بیسواد خواندن طرفشان سعی در اثبات درستی نظرات خودشان دارد.
بنده برابر استانداردهای cc که برای همه قابل دست یابی هست البته اگر مثل بنده بیسواد باش آشنا باشند و یک سری روابط علمی و منطقی در برنامه نویسی که اتفاقا خاص هیچ زبانی هم نیست و در اصل علوم و منطق عمومی رایانه ای هست، راهکار دادم و به دفاع ازش پرداختم.
حالا شما اگر استدلالی برای یک روش دیگر یا نادرستی روش بنده دارید به صورت علمی بیانش کنید جای این که بگید:
نقل قول:
همه این را استفاده می کنند.
چون همه میگن درست ترین هست. شما میخوای بگی غلطه؟
پشیمان می شوید
دیگران را گمراه نکنید.
ترس شما از گمراهی دیگران جالب ترین قسمتش هست،
چشم دوست عزیز. بنده بیسواد از دیگران بابت نظرات غیر علمی خودم عذر خواهی می کنم. شما به سواد خویش ببخشید.
نقل قول:
سلایق شخصی و اوهام خودتان را به دیگران پیشنهاد ندهید. ممکن است یک فرد تازه کار فکر کند که این حرفها درست هستند و باعث اتلاف وقت دیگران هم بشوید
توهین شما صرفا تحقیر کننده خودتان است. شما حتی تصورش هم نمی تونید بکنید تجربیات و دانش من رو در این عرصه. به هر حال باعث خندیدن من شدید بسیار.
----- از اونجا که هدف بنده صرفا نشر علم است مقصود از CC استاندارد Common Criteria می باشد.
https://en.wikipedia.org/wiki/Common_Criteria
پاسخ : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس
نقل قول:
نوشته اصلی توسط
AMIB
وقتی حس میکنید اطلاعات شما از جامعهی بزرگ توسعه دهندگان php که ممکن است در برابر تک تک آنها حرفی برای گفتن نداشته باشید، بیشتر است
و وقتی تصور میکنید سلیقه شخصی شما از جامعهی جهانی برنامهنویسان php بهتر است و لاراول را فاجعه مینامید
بقیهی صحبتهای شما ارزش نقد کردن ندارند
از روشهای شخصی خودتان برای رمزگزاری استفاده کنید
در بهترین حالت شاید بتوانید با صرف زمان زیاد به امنیتی برسید که با یک دستور php میشد برسید
اگر در این میان خطاهایی داشته باشید نهایتا هم وقت را صرف کردید هم امنیت رمزها پایین آمدهاند.
و در آخر اینکه
سلایق شخصی و اوهام خودتان را به دیگران پیشنهاد ندهید. ممکن است یک فرد تازه کار فکر کند که این حرفها درست هستند و باعث اتلاف وقت دیگران هم بشوید
درود
ببینید دوست من
نظر شما برای من قابل احترام هست
اما فکر نمیکنید شما هم دارید بر نظر شخصی خود پافشاری میکنید؟
بنظرم بهتره بجای بحث های حاشیه ای مضرات و فواید روش های مختلف رو بیان کرد تا تصمیم گیرنه بقول شما دچار اشتباه نشه
و با سبک سنگین کردن مباحث به این نتیجه برسه که کدوم براش مناسب تره
بهرحال بدون شک بهترین حالت در شرایط معمولی همون پیشنهاد php.net هست اما بسته به نوع اسکریپت باید دقت بیشتر کرد
همین اسکریپت انجمن ها/شاپ سازها/بلاگ و... از روش های خاص خودشون بهره میبرند. با اینکه به تعداد زیاد توسعه دهنده دارند و اوپن سورس هم هستند(منظورم هم رایگان ها هم غیره رایگان)