PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : امن ترین رمزگذاری برای ذخیره سازی password در دیتابیس



iroo
April 11th, 2017, 18:45
سلام و خسته نباشید

معمولا برای ذخیره سازی یکسری اطلاعات مهم توی دیتابیس ما از md5 - hash - crc32 و... استفاده می کنیم که بصورت ظاهری پسورد مستقیم تو دیتابیس ذخیره نمیشه....

اما امنیت این نوع کد گذاری هم بالا نیست و راحت کد رو بدین دست یکی حتی با سرچ ساده میاد دیکد میکنه و رمز رو می بینه


به نظرتون برای ذخیره سازی یک مقدار بسیار امنیتی چطوری کد کنیم و با خیال راحت تو دیتابیس ذخیره کنیم؟


ممنون میشم راهنمائیم بکنید

تشکر

MJmoonwalk
April 11th, 2017, 19:16
پسورد قوی وظیفه خود کاربر است. شما برای نگهداری همون md5 با کمی نمک (جستجو کن password salt) میتونی ذخیره کنی.

iroo
April 11th, 2017, 19:20
پسورد قوی وظیفه خود کاربر است. شما برای نگهداری همون md5 با کمی نمک (جستجو کن password salt) میتونی ذخیره کنی.

درسته
فرض کنید کاربر این رمز رو داد: " F36*Y%5eg653G "
حالا این md5 یا هش میشه و تو دیتابیس ذخیره میشه، همین مقداری که تو دیتابیس ذخیره شده رو بدین به کسی به راحتی میتونه پسورد اصلی رو در بیاره! درسته؟؟؟ پس درواقع اون طور که میتونست از رمز محافطت کنه نتونسته این کد گذاری خوب عمل کنه
من توی انجمن فک کنم مجید آنلاین بود یک مطلب در این مورد دیده بودم که رمز گذاری بسیار امنی رو معرفی کرده بود و....

shahinmq
April 11th, 2017, 19:36
عرض سلام و احترام
می تونید الگوی خودتون رو درست کنید که اگر رمزتون هم لو رفت حتی با دیکد کردن به رشته ی اصلی دسترسی نداشته باشند.
ساده ترین راه می تونید رشته ی پسورد را بگیرید و تک تک کاراکتر ها را جدا کنید.
حال کد اسکی هر کاراکتر را بدست بیارید و با عددی دیگر یا حروفی دیگر ترکیب کنید.
در نهایت کل کاراکتر هارا کنار یکدیگر بزارید و دوباره هَش کنید.

Sent from my SM-G920F using Tapatalk

mojtabakh18
April 11th, 2017, 19:38
دوست عزیز سلام

به اصطلاح یک مقدار نمک‌به پسورد بزنید

بعد md5 کنین کسی نمیتوپه دیکد کنه

مگه اینکه روز ها شاید هم هفته هاوقت بزاره اونم اگه بشه

شما تست‌ کن‌سایت های دیکد‌md5 انلاین

یه پسورد رو مقداری نمک بزن بعد ببین‌میتونه دیکد کنه یا نه

۹۹ درصد نمیتونه

shahinmq
April 11th, 2017, 19:44
دوست عزیز سلام

به اصطلاح یک مقدار نمک‌به پسورد بزنید

بعد md5 کنین کسی نمیتوپه دیکد کنه

مگه اینکه روز ها شاید هم هفته هاوقت بزاره اونم اگه بشه

شما تست‌ کن‌سایت های دیکد‌md5 انلاین

یه پسورد رو مقداری نمک بزن بعد ببین‌میتونه دیکد کنه یا نه

۹۹ درصد نمیتونه
درواقع این سایت ها دیکد نمی کنن و از دیتابیس پسورد استفاده می کنند.
اگر شخص واقعا به دنبال پسورد باشه هفته ها و شاید سال ها با استفاده از روش هایی این کار را خواهد کرد.
به عنوان مثال با روش brute force می تونید پسورد را دیکد کنید اما پردازنده ی قوی نیاز هست که قطعا کسی که چنین کاری بخواهد انجام بده با سیستم شخصی انجام نمیده و استفاده از این روش قطعی هست اما زمان زیادی صرف خواهد کرد.این روش تمام حالت ها و کاراکترها را کنار هم قرار خواهد داد تا مقدار هش پیدا شود.
البته اگر از الگوی پیچیده تر استفاده کنید زمانی که به پسورد برسند بازهم به چیزی نرسیده اند.

Sent from my SM-G920F using Tapatalk

AtrafNet
April 11th, 2017, 20:50
سلام
اگه برای php می خواین خود php در لینک زیر گفته که برای هش کردن پسورد و سایر اطلاعات مهم به جای الگوریتم های md5 و sha1 و... از Blowfish که پیشنهادی خودش هست استفاده کنید.

http://php.net/manual/en/faq.passwords.php

http://s8.picofile.com/file/8291789026/php_crypt.png

mojtabakh18
April 11th, 2017, 23:54
درواقع این سایت ها دیکد نمی کنن و از دیتابیس پسورد استفاده می کنند.
اگر شخص واقعا به دنبال پسورد باشه هفته ها و شاید سال ها با استفاده از روش هایی این کار را خواهد کرد.
به عنوان مثال با روش brute force می تونید پسورد را دیکد کنید اما پردازنده ی قوی نیاز هست که قطعا کسی که چنین کاری بخواهد انجام بده با سیستم شخصی انجام نمیده و استفاده از این روش قطعی هست اما زمان زیادی صرف خواهد کرد.این روش تمام حالت ها و کاراکترها را کنار هم قرار خواهد داد تا مقدار هش پیدا شود.
البته اگر از الگوی پیچیده تر استفاده کنید زمانی که به پسورد برسند بازهم به چیزی نرسیده اند.

Sent from my SM-G920F using Tapatalk

قطعا کسی همچین سیستمی داره

نمیاد پسورد ماها رو دیکد کنه خخخ

shahinmq
April 12th, 2017, 00:00
قطعا کسی همچین سیستمی داره

نمیاد پسورد ماها رو دیکد کنه خخخ

خیلی پیچیده نیست ، قبلا نوشتیم و افرادی دیگر هم نوشتند.

از مقدار 0 شروع به تست کردن میکنه و کد کردن می کند تا انواع ترکیب ها را بررسی کنه و درنهایت مقدار کد شده را با کد شما را مقایسه می کند.

زمانی که دو مقدار کد شده برابر هم باشند یعنی کد پیدا شده.

فقط با سیستم شخصی برای پسورد های طولانی اصلا قابل استفاده نیست و درصورتی که زمان استفاده طولانی شود کار بجایی خواهد رسید که ماوس شما هم تکون نمی خوره و فشار زیادی روی cpu خواهد بود(طبق تجربه)

kiava
April 12th, 2017, 03:18
شما میتونید به اخر هر رمز یه عدد خاصی اضافه کنید مثلا اگر کاربر این رمز رو زد

1234kiava
به اخرش طبق تعریف شده 5678 اضافه بشه

1234kiava5678

بعدش هش میکنید sha1 بهتره تا md5 و بعدش تعیین میکنید هر کاربری رمز رو زد به اخرش اون الگوریتم رو اضافه کنه وبرسی کنه اگر توی دیتابیس بود وارد بشه

k-pax
April 12th, 2017, 08:30
ببینید دیکد کردن md5 راحت نیست و یا باید پسورد توی دیتابیس دیکد کننده باشه و یا به روش brute force استفاده کنه !

که البته زمان پیدا شدن پسورد در روش brute force بستگی زیادی به طول پسورد داره . مثلا پسورد 10-12 حرفی شاید 100 سال طول بکشه :D
حالا هرچی این پردازنده قوی تر باشه کمتر اما با سرورهای فوق پرسرعت ناسا هم زمان خیلی زیادی طول میکشه که بخواید یه پسورد 10 حرفی دیکد کنید!

من خودم از یه روش استفاده میکنم . که شاید بتونه بهتون کمک کنه !

پسورد اول را sha1 میکنم
یه عبارت مشخص بهش اضافه میکنم و در نهایت بصورت md5 تو دیتابیس ذخیره میکنم !

با این روش حتی پسورد 123 هم قایل دیکد شدن نیست !


بهتره برنامنویس برای پسورد محدودیت بزاره و بگه کمتر از 6 یا 8 حرف نباشه ! و از حروف بزرگ و کوچیک و اعداد استفاده شده باشه !
اینجوری خیلی بهتره !


فرض کنید کاربر این رمز رو داد: " F36*Y%5eg653G "
حالا این md5 یا هش میشه و تو دیتابیس ذخیره میشه، همین مقداری که تو دیتابیس ذخیره شده رو بدین به کسی به راحتی میتونه پسورد اصلی رو در بیاره! درسته؟؟؟ پس درواقع اون طور که میتونست از رمز محافطت کنه نتونسته این کد گذاری خوب عمل کنه
فکر نکنم کسی بتونه چنین پسوردی دیکد کنه . مگر اینکه از قبل توی دیتابیسش باشه!
جایی خودنم که دیتابیس پسوردها چیزی حدود 30 ترابایت هستش . ! و هرروز هم داره زیادتر میشه !

iroo
April 12th, 2017, 11:46
سلام
اگه برای php می خواین خود php در لینک زیر گفته که برای هش کردن پسورد و سایر اطلاعات مهم به جای الگوریتم های md5 و sha1 و... از Blowfish که پیشنهادی خودش هست استفاده کنید.

http://php.net/manual/en/faq.passwords.php

http://s8.picofile.com/file/8291789026/php_crypt.png


ممنونم_رفیق
در مورد crypt() (http://php.net/manual/en/function.crypt.php) شنیدم، میشه راهنمائی کنید تو این زمینه یا یه مثالی بزنید، واقعا امن هست؟

درمورد Blowfish - brute force چی هستند اینا؟؟؟ روش که دوستان گفتم به ذهنم خوب اومد، پسورد کاربر + یه مقدار پیش و روش های متنوع کد گذاری

AtrafNet
April 12th, 2017, 12:01
ممنونم_رفیق
در مورد crypt() (http://php.net/manual/en/function.crypt.php) شنیدم، میشه راهنمائی کنید تو این زمینه یا یه مثالی بزنید، واقعا امن هست؟

درمورد Blowfish - brute force چی هستند اینا؟؟؟ روش که دوستان گفتم به ذهنم خوب اومد، پسورد کاربر + یه مقدار پیش و روش های متنوع کد گذاری


منم اطلاع دقیقی از روش Blowfish ندارم اما پاراگراف اول تصویر بالا گفته که md5 و sha1 و sha256 برای این جهت هش کردن پسورد امن نیستن چون اینا بیشتر برای ارائه سرعت بالا در تولید خروجی هش شده ایجاد شدن و خط بعدش گفته یه کامپیوتر قدرتمند می تونه با روش Brute Force به رمز اصلی دست پیدا کنه که فکر کنم منظور اینجا از php علاوه بر امنیت بیشتر Blowfish سرعت کند ترش هم هست که اینجا مزیت حساب میشه چون با Brute Force مسلماً وقت خیلی بیشتری نسبت به md5 و sha1 نیازه تا بشه (شاید یه روزی) کرکش کرد :)
اینو باید از کارشناس های خود php بپرسید که چرا Blowfish رو پیشنهاد دادن.
می تونید تو این زمینه لینک های زیر هم مطالعه کنید:

http://www.the-art-of-web.com/php/blowfish-crypt/
https://joshtronic.com/2013/06/06/encrypting-passwords-in-php/

lizard.tiny
April 12th, 2017, 16:57
درود

برای اینکار باید دنبال الگوریتم های اختصاصی خودتون باشید

به عنوان مثال زمانی که کاربرا عضو میشه و اکانت ایجاد میشه یک کاراکتر Random واسش در نظر بگیرید ( به صورت یونیک )

حالا اون رو با پسورد ترکیب کنید

در ساده ترین حالت :



$randomCode = "2s5cHdh";$password = "12345";
$encodePassword = md5($randomCode .'_'. $password);

یا استفاده از مقادیر ثابت دیگه مثل نام کاربری



$randomCode = "2s5cHdh";$username = "admin";$password = "12345";
$encodePassword = md5($randomCode .'_'. $password .'_'. $username);

اما پیشنهاد بنده این هست که همیشه به جز استفاده از مقار یونیک در تیبل کاربرا یک کد ثابت هم در خود سورس قرار بدید تا در صورت هک شدن دیتابیس و دسترسی به کدهای یونیک دسترسی به کد ثابت موجود در سورس فراهم نباشه, تا اینجا اگه دیتابیس شما هک بشه 50 درصد امنیت کاربران حفظ میشه مگر اینکه سورس و الگوریتم در اختیار هکر قرار بگیره

میتونید هم از ترکیب md5 و sha1 به صورت ترگیبی با الگوریتم جدا استفاده کنید

و راهای بسیار دیگه که با کمی خلاقیت و تسلط به برنامه نویسی PHP میتونید امنیت پسورد کاربرانتون رو چندین برابر کنید

البته این مورد یک مثال خیلی ساده و ابتدایی هست, با صرف کمی زمان و کمی مطالعه میتونید الگوریتم اختصاصی خودتون رو بنویسید که از پیچیده گی بسیار بیشتری برخوردار باشه

اما در هر صورت هر چیزی که قابل کد شدن باشه قابلیت دیکد هم داره اما با توجه به سختی و نوع الگوریتم زمان بیشتر یا کمتری رو میگیره

sinaazemat
April 13th, 2017, 22:36
درود بر شما. به نظر من با ترکیب دو رمز نگاری میتوانید امنیت رو بالا ببرید به عنوان مثال یکبار پسورد رو با md5 رمز نگاری کرده و همون پسورد رمز نگاری شده رو با hash مجددا رمز نگاری کنید. با این کار امکان decode کردن به حد صفر میرسد.
به عنوان مثال من عدد 123 رو با این روش رمز نگاری کردم به صورت زیر در امد.
6e5dcee9fc558420d007c8f06f284c33
طراحی سایت (http://sina-web.ir)

hegza
April 14th, 2017, 02:54
بنظر من بهترین ترکیب کریپت با md5 هست
1.طول رشته در فیلد دیتا بیس کوتاه میشه در کلیت حجم نصف و سرچ رو نیز بهبود میده
مشابه زیر

function hashPass($value){
$value=crypt('$#%#$%@#'.$value.'^&()(@',md5("!#^&$value"));
return $value;
}

M.Abooali
April 14th, 2017, 13:32
برای اینکار باید دنبال الگوریتم های اختصاصی خودتون باشید


بسیاری از توصیه های دوستان خوب بود. اما بهترین اشاره همین نقل قول فوق است.


ضمن این که فراموش نکنید شما مثلا دارید رمز حساب کاربری انجمن یک نفر را ذخیره می کنید یا رمز حساب بانکی کاربر.

منظورم این است سطح امنیت را لحاظ کنید و مثلا برای دوچرخه خود قفلی طراحی نکنید که حملش به ماشین نیاز داشته باشد.


به نظر من md5 به صورت ترکیب با یک الگو که فقط برنامه نویس ازش خبر دارد به قدر کافی (حتی در رده یک بانک) میتواند ایمن باشد. شما میتوانید salt را با الگویی اختصاصی خودتان تولید کنید. در جایی که هیچ کس ازش خبردار نیست. تا نیاز نباشد مثل خیلی اسکریپت ها salt را کنار رمز بزارید (مثل IPB) که راحت در دسترس باشد. مثلا بر اساس روز هفته یا ip رجیستر شده کاربر با کمک md5 یا شاها یک salt یونیک برای اون کاربر ایجاد می کنید.

از اونجا که تاریخ رجیستر کاربر یا مثلا IP که باش در سایت شما رجیستر کرده همیشه موجود است، همواره میتونید این salt را بازیابی کنید و نیاز نیست در دیتابیس ذخیره اش کنید. کسی هم نمی داند این salt از کجا آمده و بر فرض انکرایپت کردن هش md5 شما به رمز درستی دست پیدا نمی کند.


اگر موضوع فرای آن باش و دیتای فوق محرمانه باشند که دیگر طبق الگوها اصلا داشتن پسورد فاقد امنیت است و باید رفت سراغ کلید رمزنگاری این حرف ها (بیشتر در رده اطلاعاتی سازمان ها).

در اون متد شما شبیه ssl عمل می کنید. کلید رمز نگاری خصوصی دست کاربر است و عمومی در سمت سایت عرضه شده و تطابق اون مجوز احراز هویت کاربر. البته جایی که شما دیتا را انکرایپت شده ذخیره نمی کنید استفاده از این متد بی معنی است. این متد جایی کاربرد دارد که شما میخوای مدیر سایت هم به اطلاعات حساب شما دسترسی نداشته باشد. یعنی هیچ کس جز خود کاربر. (نه فقط لاگین کردن بلکه کل اطلاعات حساب).

hegza
April 14th, 2017, 16:05
بسیاری از توصیه های دوستان خوب بود. اما بهترین اشاره همین نقل قول فوق است.


ضمن این که فراموش نکنید شما مثلا دارید رمز حساب کاربری انجمن یک نفر را ذخیره می کنید یا رمز حساب بانکی کاربر.

منظورم این است سطح امنیت را لحاظ کنید و مثلا برای دوچرخه خود قفلی طراحی نکنید که حملش به ماشین نیاز داشته باشد.


به نظر من md5 به صورت ترکیب با یک الگو که فقط برنامه نویس ازش خبر دارد به قدر کافی (حتی در رده یک بانک) میتواند ایمن باشد. شما میتوانید salt را با الگویی اختصاصی خودتان تولید کنید. در جایی که هیچ کس ازش خبردار نیست. تا نیاز نباشد مثل خیلی اسکریپت ها salt را کنار رمز بزارید (مثل IPB) که راحت در دسترس باشد. مثلا بر اساس روز هفته یا ip رجیستر شده کاربر با کمک md5 یا شاها یک salt یونیک برای اون کاربر ایجاد می کنید.

از اونجا که تاریخ رجیستر کاربر یا مثلا IP که باش در سایت شما رجیستر کرده همیشه موجود است، همواره میتونید این salt را بازیابی کنید و نیاز نیست در دیتابیس ذخیره اش کنید. کسی هم نمی داند این salt از کجا آمده و بر فرض انکرایپت کردن هش md5 شما به رمز درستی دست پیدا نمی کند.


اگر موضوع فرای آن باش و دیتای فوق محرمانه باشند که دیگر طبق الگوها اصلا داشتن پسورد فاقد امنیت است و باید رفت سراغ کلید رمزنگاری این حرف ها (بیشتر در رده اطلاعاتی سازمان ها).

در اون متد شما شبیه ssl عمل می کنید. کلید رمز نگاری خصوصی دست کاربر است و عمومی در سمت سایت عرضه شده و تطابق اون مجوز احراز هویت کاربر. البته جایی که شما دیتا را انکرایپت شده ذخیره نمی کنید استفاده از این متد بی معنی است. این متد جایی کاربرد دارد که شما میخوای مدیر سایت هم به اطلاعات حساب شما دسترسی نداشته باشد. یعنی هیچ کس جز خود کاربر. (نه فقط لاگین کردن بلکه کل اطلاعات حساب).
درود
راه که زیاد
اما باید دید هدف چیه
مثلا برای خیلی ایمن شدن میشه یوزر و یا ایمیل یا ... md5 کرد و substr و روز ماه ثبت شده از رشته انم اون که طبیعتا 31 حداکثر میشه مثلا 5 تا رو گرفت و موارد مشابه که فرمودین
اما واقعا نیاز نیست مهمترین اصل کامپایل کدها هست که میشه تا حدودی زیادی امنیت رو بالا برد یا شخصی سازی فانکشن های دیفالت php در سرور اختصاصی سایت و...

AMIB
April 15th, 2017, 01:43
روش‌های از من درآوردی را فراموش کنید
همون طور که یکی از دوستان گفتند، بهترین روش استفاده از دستورات اضافه شده در php جدید با نام password_hash و password_verify هست
آخرین اصول امنیتی روز در این توابع پیاده‌سازی شده و امکان استفاده از روش‌های متداول برای بازیابی رمزها در توابع فوق تقریبا غیرممکن است

hegza
April 15th, 2017, 04:20
روش‌های از من درآوردی را فراموش کنید
همون طور که یکی از دوستان گفتند، بهترین روش استفاده از دستورات اضافه شده در php جدید با نام password_hash و password_verify هست
آخرین اصول امنیتی روز در این توابع پیاده‌سازی شده و امکان استفاده از روش‌های متداول برای بازیابی رمزها در توابع فوق تقریبا غیرممکن است
سلام بر شما
هیچ چیز غیره ممکنی در دنیای انفورماتیک وجود ندارد
لازمه عرض کنم برای md5 و ... هیمن تعریف و تمجید شما در قدیم بود
کلا هر چیزی پابلیک باشه شانس لو رفتن الگوریتمش بیشتر میشه
من درآوردی رو من نمیدونم چی مینامید
ولی همون توابع رو هم کسانی نوشتن که من بودن از مریخ که نیومدن
سعی کنید دیدتون رو کمی ئسیع تر کنید
با تشکر

M.Abooali
April 15th, 2017, 07:24
اشاره به این موضوع بد نیست که اساسا md5 یا اکثر انکرایپشن ها یک الگوریتم مخفی نیستند اصلا که مثلا روزی لو رفته باشند و نا امن شده باشند :|

در حقیقت بحث بر سر پیشرفت سخت افزار ها و رشد تکنولوژی هایی مثل کلود کامپوتینگ هستش. در زمان ساخت md5 به طور مثال احتمال برات فورس 100% را در عرض 20 سال میدادن با یک ابر رایانه قدرتمند و هزینه اجاره این ابر رایانه برای 20 سال را می گفتند هزینه ای که باید صرف شکستن md5 شود.

اما با رشد سخت افزارها (اولین رایانه خود بنده رمش 4 مگابایت بود و سورفیس زیر دستم الان 8192 مگابایت) این را شما تعمیم بدین به ابر رایانه ها و البته با در نظر داشتن تکنولوژِی های کلود که هزینه دسترسی به یک ابر رایانه را هم کاهش داده اند. خوب حالا دیگر نه 20 سال زمان نیاز است نه آنقدرها هزینه بالا ... پس md5 دیگر امن نیست.

اگر نه از همان روز اول هم الگوریتم md5 یا مثلا sha ها کاملا مشخص و عمومی بوده است.

--- نکته دوم در ادامه بحث اصلی

طرح ها و پیشنهادات بنده و اکثر دوستان تنها زمانی کاربردی است که دقیقا طرف صرفا قصد دارد هش شما را باز گرداند به مرجعش. اگر بحث این باشد که طرف به الگوریتم ذخیره سازی شما در دیتابیس دست داشته باشد داستان کاملا متفاوت است و هر چقدر که پیجیده و من درآوردی کار کنید نهایتاً با کمی دقت قابل استخراج هست الگوریتم شما.

در این موارد همان بحث کامپایل یا انکرایپت کردن قسمت احراز هویت ضروری است. اما در خصوص مدل کلید تامین امنیت بدون انکرایپ یا کامپایل نیز تامین شده و بر فرض 100 برابر شدن قدرت پردازنده ها باز هم هزینه و زمان مورد نیاز برای شکستن یک رشته 1 یا 2 مگابایتی چندین برابر عمر نوح است 8-| و البته باز اشاره کنم این متدی نیست که شما مثلا برای یک انجمن یا حتی درگاه واسط بخواین ازش استفاده کنید.

AMIB
April 15th, 2017, 11:55
سلام بر شما
هیچ چیز غیره ممکنی در دنیای انفورماتیک وجود ندارد
لازمه عرض کنم برای md5 و ... هیمن تعریف و تمجید شما در قدیم بود
کلا هر چیزی پابلیک باشه شانس لو رفتن الگوریتمش بیشتر میشه
من درآوردی رو من نمیدونم چی مینامید
ولی همون توابع رو هم کسانی نوشتن که من بودن از مریخ که نیومدن
سعی کنید دیدتون رو کمی ئسیع تر کنید
با تشکر
بنده عرض کردم تقریبا غیر ممکن
در حال حاضر این روش در فریم‌ورک‌های پیشرفته مثل لاراول و خیلی از سیستم‌های مدیریت محتوا استفاده می‌شود
قطعا افرادی که روی این سیستم‌ها کار می‌کنند اگر استفاده از روش‌های شخصی بهتر بود، این کار را انجام می‌دادند

- - - Updated - - -

md5 و sha1 دو الگوریتم تهیه‌ی Hash هستند که برای کاربردی غیر از رمز ساخته شده‌اند
با استفاده از این الگوریتم‌ها با دقت بالایی می‌شود شباهت دو رشته یا محتوای دو فایل را بررسی کرد
در زمان قدیم به دلیل کند بودن سخت‌افزارها و نبود بانک رمز برای این دو الگوریتم، استفاده از این‌ها برای رمز تا حدودی قابل قبول بود ولی الان دیگر قابل قبول نیست و استفاده از الگوریتم‌های مخصوص رمز که در php هم به صورت تخصصی پیاده‌سازی شده بهترین روش است

Azade.Kaveh
April 15th, 2017, 12:39
بهترین حالت ممکن استفاده 2 بار از md5 هست یعنی ب صورت زیر :

ex : [ md5(md5('Azade')); ] encoded

به هیچ عنوان امکان نداره به داده اولیه دسترسی داشته باشن چون در کل md5 سیستم انکریپت یا انکود نیست فقط یک سیستم کدگذاری غیرقابل بازگشت هست که با توجه به طول کاراکتر نوع داده و متن داده یک کد یکسان تولید میکنه .

hegza
April 15th, 2017, 16:28
بنده عرض کردم تقریبا غیر ممکن
در حال حاضر این روش در فریم‌ورک‌های پیشرفته مثل لاراول و خیلی از سیستم‌های مدیریت محتوا استفاده می‌شود
قطعا افرادی که روی این سیستم‌ها کار می‌کنند اگر استفاده از روش‌های شخصی بهتر بود، این کار را انجام می‌دادند

- - - Updated - - -

md5 و sha1 دو الگوریتم تهیه‌ی Hash هستند که برای کاربردی غیر از رمز ساخته شده‌اند
با استفاده از این الگوریتم‌ها با دقت بالایی می‌شود شباهت دو رشته یا محتوای دو فایل را بررسی کرد
در زمان قدیم به دلیل کند بودن سخت‌افزارها و نبود بانک رمز برای این دو الگوریتم، استفاده از این‌ها برای رمز تا حدودی قابل قبول بود ولی الان دیگر قابل قبول نیست و استفاده از الگوریتم‌های مخصوص رمز که در php هم به صورت تخصصی پیاده‌سازی شده بهترین روش است

درود
بله بدون شک چیزی که اجماع روش زیاده پس ایمن تره و باگ کمتری داره و مدام باگ گیری میشه مثل لینوکس و دنیای سرورها!
و بشخصه پیشنهادی که دادم از روی نظر شخصیم نبود کل استک اور فلو و سایتهای مشابه رو زیرو رو کردم تا دیدم اکثریت به این سبک کریپت اشاره کردن با مقداری زیادی نمک و نه یک نمک معمولی

اما بهرحال بستگی داره برای چه کاری اینو لازم دارید. در حالت متوسط بهتره از پیشنهاد شما بهره برد ولی در سطح پیشرفته و .... بهتره وقت گذاشت و یک کلاس اختصاصی برای این نوشت که دسترسی پرویت داشته باشه
بهرحال ایمن کردن رمز کاربران برای کاربران مفید هست(نه خود سایت) وگرنه وقتی سرور هک بشه یا دیتا پابلیک بشه دیگه سرویس دهنده مبدا اتک رو خورده و اینو برای حفظ حریم خصوصی افراد هست و مصون ماندن اطلاعات آنها در دیگر سایتها چون اکثر کاربران از یک پسورد یونیک استفاده میکنند برای جی میل/انجمن/بانک و....
که بهتره کاربران رو توجیح کرد براساس اسم دامنه سایت یک رمزگذاری برای خودشون داشته باشند
مثلا تعداد حروف وبهاستینگ تالک 11 هست معادلش در کیبورد !! رو بکار ببرند و برای جی میل % حالا اول یا آخر رمز یا هر دو

M.Abooali
April 18th, 2017, 01:16
با استفاده از این الگوریتم‌ها با دقت بالایی می‌شود شباهت دو رشته یا محتوای دو فایل را بررسی کرد


این که روشن است. مگر اساساً فلسفه موجودیت هش به منظور اقدامی غیر از قیاس بوده است؟

از ابتدا هش ها آمده اند برای قیاس پذیری آسان. به این صورت که 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 چون این کار اونجا بسیار ساده هست و با یک خط کد امکان پذیر است. عملا هش های بنده اصلا قابل شناسیی نبودند که کسی بخواهد برات فورس اختصاصی اونها را به کار بست.

AMIB
April 18th, 2017, 10:56
این که روشن است. مگر اساساً فلسفه موجودیت هش به منظور اقدامی غیر از قیاس بوده است؟

...


وقتی حس می‌کنید اطلاعات شما از جامعه‌ی بزرگ توسعه دهندگان php که ممکن است در برابر تک تک آن‌ها حرفی برای گفتن نداشته باشید، بیشتر است
و وقتی تصور می‌کنید سلیقه شخصی شما از جامعه‌ی جهانی برنامه‌نویسان php بهتر است و لاراول را فاجعه می‌نامید

بقیه‌ی صحبت‌های شما ارزش نقد کردن ندارند

از روش‌های شخصی خودتان برای رمزگزاری استفاده کنید

در بهترین حالت شاید بتوانید با صرف زمان زیاد به امنیتی برسید که با یک دستور php می‌شد برسید
اگر در این میان خطاهایی داشته باشید نهایتا هم وقت را صرف کردید هم امنیت رمزها پایین آمده‌اند.

و در آخر اینکه
سلایق شخصی و اوهام خودتان را به دیگران پیشنهاد ندهید. ممکن است یک فرد تازه کار فکر کند که این حرف‌ها درست هستند و باعث اتلاف وقت دیگران هم بشوید

m2n
April 18th, 2017, 12:02
md5 امن ترین نوع می باشد ولی 100 درصدنیست، ساده عرض کنم در بحث امنیت چیزی به اسم 100 درصد وجود نداره.

iroo
April 18th, 2017, 12:18
ممنون از تمامی دوستانی که در این تاپیک شرکت کردن، نظر دادن و راهنمائی کردن، از همگی بسیار ممنونم و سپاس گذارم

M.Abooali
April 18th, 2017, 13:15
یک اخلاق ناپسند که در این انجمن من بهش برخورد کردم چندین بار ظرف فعالیت مجدد خودم، هر جا علمی بحث می کنیم معمولا افرادی هستند جای بحث علمی و ارائه استدلال با بیسواد خواندن طرفشان سعی در اثبات درستی نظرات خودشان دارد.

بنده برابر استانداردهای cc که برای همه قابل دست یابی هست البته اگر مثل بنده بیسواد باش آشنا باشند و یک سری روابط علمی و منطقی در برنامه نویسی که اتفاقا خاص هیچ زبانی هم نیست و در اصل علوم و منطق عمومی رایانه ای هست، راهکار دادم و به دفاع ازش پرداختم.


حالا شما اگر استدلالی برای یک روش دیگر یا نادرستی روش بنده دارید به صورت علمی بیانش کنید جای این که بگید:


همه این را استفاده می کنند.
چون همه میگن درست ترین هست. شما میخوای بگی غلطه؟
پشیمان می شوید
دیگران را گمراه نکنید.


ترس شما از گمراهی دیگران جالب ترین قسمتش هست،
چشم دوست عزیز. بنده بیسواد از دیگران بابت نظرات غیر علمی خودم عذر خواهی می کنم. شما به سواد خویش ببخشید.


سلایق شخصی و اوهام خودتان را به دیگران پیشنهاد ندهید. ممکن است یک فرد تازه کار فکر کند که این حرف‌ها درست هستند و باعث اتلاف وقت دیگران هم بشوید


توهین شما صرفا تحقیر کننده خودتان است. شما حتی تصورش هم نمی تونید بکنید تجربیات و دانش من رو در این عرصه. به هر حال باعث خندیدن من شدید بسیار.


----- از اونجا که هدف بنده صرفا نشر علم است مقصود از CC استاندارد Common Criteria می باشد.

https://en.wikipedia.org/wiki/Common_Criteria

hegza
April 18th, 2017, 14:47
وقتی حس می‌کنید اطلاعات شما از جامعه‌ی بزرگ توسعه دهندگان php که ممکن است در برابر تک تک آن‌ها حرفی برای گفتن نداشته باشید، بیشتر است
و وقتی تصور می‌کنید سلیقه شخصی شما از جامعه‌ی جهانی برنامه‌نویسان php بهتر است و لاراول را فاجعه می‌نامید

بقیه‌ی صحبت‌های شما ارزش نقد کردن ندارند

از روش‌های شخصی خودتان برای رمزگزاری استفاده کنید

در بهترین حالت شاید بتوانید با صرف زمان زیاد به امنیتی برسید که با یک دستور php می‌شد برسید
اگر در این میان خطاهایی داشته باشید نهایتا هم وقت را صرف کردید هم امنیت رمزها پایین آمده‌اند.

و در آخر اینکه
سلایق شخصی و اوهام خودتان را به دیگران پیشنهاد ندهید. ممکن است یک فرد تازه کار فکر کند که این حرف‌ها درست هستند و باعث اتلاف وقت دیگران هم بشوید
درود
ببینید دوست من
نظر شما برای من قابل احترام هست
اما فکر نمیکنید شما هم دارید بر نظر شخصی خود پافشاری میکنید؟
بنظرم بهتره بجای بحث های حاشیه ای مضرات و فواید روش های مختلف رو بیان کرد تا تصمیم گیرنه بقول شما دچار اشتباه نشه
و با سبک سنگین کردن مباحث به این نتیجه برسه که کدوم براش مناسب تره
بهرحال بدون شک بهترین حالت در شرایط معمولی همون پیشنهاد php.net هست اما بسته به نوع اسکریپت باید دقت بیشتر کرد
همین اسکریپت انجمن ها/شاپ سازها/بلاگ و... از روش های خاص خودشون بهره میبرند. با اینکه به تعداد زیاد توسعه دهنده دارند و اوپن سورس هم هستند(منظورم هم رایگان ها هم غیره رایگان)