PDA

View Full Version : محدود کردن طول پسورد - یک کار اشتباه و احمقانه



eshpilen
چهارشنبه 24 خرداد 1391, 14:31 عصر
در خیلی سایتها و سیستمها میان و حداکثر طول پسورد رو به چند ده کاراکتر محدود میکنن. اما چرا؟

نباید روی طول پسورد اینقدر محدودیت گذاشت.
پسوردها میتونن طولانی باشن. ممکنه بعضی ها از یکسری جملات و عبارات خاصی بعنوان پسورد استفاده کنن که نیاز به طول بیشتری داشته باشه. به اینها Passphrase (http://en.wikipedia.org/wiki/Passphrase) گفته میشه که یک روش برای بالاتر بردن امنیت نسبت به پسوردهای کوتاه معمولی هست که در عین حال قابل بخاطر سپردن باشه.

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

بخاطر همین بنده حداکثر طول پسورد در پروژهء خودم رو برابر 100 کاراکتر قرار دادم. تازه الان فکر میکنم بهتره بیشترش کنم! مثلا 500 کاراکتر چطوره؟ زیاد کردنش ضرر خاصی نداره بنظرم. حالا خیلی هم زیاد نمیذاریم که از نظرهای دیگه شاید مشکلی پیش بیاد، ولی فکر میکنم یه محدودیت هایی مثل 20 کاراکتر و 30 کاراکتر واقعا درست نیست. تازه بعضی سایتها محدودیت کمتر از این میذارن. واقعا خنده داره این کار. از یک طرف میگن پسورد قوی باشه و مثلا حداقل 6 کاراکتر باشه و از اونور مثلا حداکثر طولش رو به 15 کاراکتر محدود میکنن! (لابد منظورشون اینه که دیگه خیلی هم قوی نباشه!!)

djsaeedkhan
چهارشنبه 24 خرداد 1391, 16:35 عصر
سلام
حرف شما درست است ولی بیشتر کاربران مگه می خوان پسورد 20کاراکتری داشته باشن. معمولا کاربران یه پسورد نهایت 10 رقمی دارن که تو همه سایت ها استفاده می کنن
حالا به نظر من اگر سایتی میاد محدودیت میزاره (به نظر من) بیشتر بخاطر این هست هم کاربر نتونه رشته های بیخودی، مثلا یه متن بذاره. همچنین کسی نتونه بیاد کد های اسکریپتی رو در کادر وارد کنه. اینجوری تا حدی امنیت برقرار میشه. همچنین هرچه رشته بیشتر باشه ممکنه هش شدن فضای بیشتری در دیتابیس بگیره
حالا شما بجای اینکه بیای 500 کاراکتر بذاری نامحدود بزار. چه کاریه؟ مگه چند نفر میان پسورد 500 کارکتری میذارن

Bahram0110
چهارشنبه 24 خرداد 1391, 16:37 عصر
همون 20، 30 تا کافیه خیلی وسواس نداشته باشید. اشتباه نیست، احمقانه هم نیست.

eshpilen
چهارشنبه 24 خرداد 1391, 21:11 عصر
سلام
حرف شما درست است ولی بیشتر کاربران مگه می خوان پسورد 20کاراکتری داشته باشن.
منظور شما از این گفته واضح نیست.
بالاخره باید محدودیت 20 تا و 30 تا بذاریم یا نه؟
اگر مثلا 200 کاراکتر رو اجازه بدیم اونایی که میخوان پسورد 20 تایی انتخاب کنن که محدود نمیشن. ولی عکسش برقرار نیست.
اینم که بیشتر کاربران یک کاری میکنن دلیل نمیشه. بیشتر کاربران اطلاعات کافی ندارن و بقدر کافی احتیاط نمیکنن.




حالا به نظر من اگر سایتی میاد محدودیت میزاره (به نظر من) بیشتر بخاطر این هست هم کاربر نتونه رشته های بیخودی، مثلا یه متن بذاره.منظورت از رشتهء بیخودی و متن دقیقا چیه مثلا و چرا اشکال داره؟
Passphrase ها خودشون متشکل از جملات هستن (یا میتونن باشن).
اصطلاحات کلی و مبهمی مثل «بیخودی» معنی خاصی نمیده! برای هرچیزی نیاز به دلیل و اثبات است.


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

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


همچنین هرچه رشته بیشتر باشه ممکنه هش شدن فضای بیشتری در دیتابیس بگیرهطول خروجی هش ثابته و ارتباطی به طول رشتهء ورودی نداره.


حالا شما بجای اینکه بیای 500 کاراکتر بذاری نامحدود بزار. چه کاریه؟ مگه چند نفر میان پسورد 500 کارکتری میذارنحالا 500 تا مثال بود که بگم مشکلی نداره واقعا و نیازی به محدودیت جدی نیست. وگرنه بنظرم 200 تا کافی باشه.
من طول یک عبارت نسبتا طولانی انگلیسی رو اندازه گرفتم دیدم نزدیک 100 کاراکتره. گفتم شاید کسی بخواد عبارت طولانی تر از این هم بذاره. ممکنه متشکل از چند جمله باشه.


همون 20، 30 تا کافیه خیلی وسواس نداشته باشید. اشتباه نیست، احمقانه هم نیست.
هیچ سند و دلیلی در گفتار شما دیده نمیشه که بتونه باعث اعتماد و پذیرش اون بشه.

eshpilen
چهارشنبه 24 خرداد 1391, 21:44 عصر
راستی یک مطلب جالب و نسبتا مرتبط از متخصص معروف امنیت و رمزنگاری Bruce Schneier:

Simply, people can no longer remember passwords good enough to reliably defend against dictionary attacks, and are much more secure if they choose a password too complicated to remember and then write it down. We're all good at securing small pieces of paper. I recommend that people write their passwords down on a small piece of paper, and keep it with their other valuable small pieces of paper: in their wallet.

—Bruce Schneier (http://en.wikipedia.org/wiki/Bruce_Schneier), 2005


منبع: http://en.wikipedia.org/wiki/Password_strength


ترجمه: «بسادگی، مردم دیگر نمیتوانند پسوردهایی را که بقدر کافی خوب هستند تا بصورت قابل اعتمادی دربرابر حملات دیکشنری دفاع کنند بخاطر بسپارند، و آنها بسیار ایمن تر هستند اگر پسوردهایی را انتخاب کنند که بیش از حد برای بخاطر سپردن پیچیده هستند، و سپس آن پسوردها را یادداشت کنند. ما همه در حفظ امنیت قطعات کوچک کاغذ خوب هستیم. من توصیه میکنم که مردم پسوردهای خود را روی یک قطعهء کوچک کاغذ یادداشت کنند، و آنرا به همراه بقیهء قطعه کاغذهای ارزشمندشان نگهداری کنند: در کیف پولشان.»

------------------------------

این گفتهء Bruce Schneier نشون میده که نیاز به قوی تر شدن پسوردها چقدر نسبت به گذشته بیشتر شده (تازه این رو در سال 2005 گفته).
از این لحاظ واقعا جالبه چون از قدیم تاحالا و همینطور خیلی افراد و متخصصان دیگر در حال حاضر میگفتن و میگن که پسوردهاتون رو جایی یادداشت نکنید. اما نظر Bruce Schneier خلاف اینه و میگه پسوردهایی که اونقدر ساده باشن که بیشتر مردم بتونن به سادگی بخاطر بسپارن امروزه دارای امنیت کافی نیستن (با وجود حمله هایی که هست و پیشرفت های زیادی که در زمینهء هک و کرک وجود داشته، نیازهای حداقل استحکام پسوردها هم افزایش پیدا کرده).
بنابراین بنده فکر میکنم وضع محدودیت های غیرضروری روی فرمت و طول پسورد واقعا کار حرفه ای نیست.
باید گذاشت پسورد بتونه تقریبا هر کاراکتر و هر عبارتی رو داشته باشه، و محدودیت طول هم فکر میکنم حداقل باید تا 100 یا 200 کاراکتر رو اجازه داد. تازه کاراکتر هم منظور کاراکتر یونیکد هست که هر کاراکتر اون میتونه چند بایت باشه. یک نفر باید بتونه مثلا یک یا چند جمله به زبان فارسی رو بعنوان پسورد خودش قرار بده. یک شاعر باید بتونه یک بیت از یک شعر رو در پسورد خودش داشته باشه. یک برنامه نویس باید بتونه یک خط کد برنامه نویسی رو در پسورد خودش داشته باشه. خلاصه هرکس هرچیزی رو که میتونه در ایجاد یک پسورد قوی و در عین حال طوری که بتونه راحت بخاطر بسپاره و استفاده کنه بکار ببره. چون هرچی محدودهء انتخاب پسوردها بیشتر باشه تعداد حالتهای ممکن بیشتر میشه و آنتروپی و امنیت بالا میره. البته بنده نمیگم مثلا یک کد برنامه نویسی معروف مثل <script>alert('XSS');</script> رو بدون هیچ تغییری بعنوان پسورد بکار ببریم. چون طبیعتا چنین پسوردی هم میتونه ضعیف باشه و به دیکشنری های کرک اضافه بشه. ولی میشه اون رو مقداری تغییر داد و سفارشی کرد یا بعنوان بخشی از یک پسورد بکار برد. بهرحال هرچی گزینه های ممکن بیشتر باشن در مجموع فضای حالت پسوردهای ممکن بزرگتر میشه که این به نفع امنیت عمومی هست.

colors
چهارشنبه 24 خرداد 1391, 22:37 عصر
منم موافقم که نباید هیچ محدودیتی وجود داشته باشه، ولی مثلا کی میاد پسورد 200 کارکتری بزاره که جدا از حفظ کردنش باید 1 دقیقه ای رو صرف تایپ کردنش کرد و فکر کنید اگه یه بار اشتباه بزنیم باید مجددا 200 کارکتر رو تایپ کرد...
ولی ایجاد محدودیت طول پسورد هیچوقت احمقانه نیست!

eshpilen
پنج شنبه 25 خرداد 1391, 08:59 صبح
منم موافقم که نباید هیچ محدودیتی وجود داشته باشه، ولی مثلا کی میاد پسورد 200 کارکتری بزاره که جدا از حفظ کردنش باید 1 دقیقه ای رو صرف تایپ کردنش کرد و فکر کنید اگه یه بار اشتباه بزنیم باید مجددا 200 کارکتر رو تایپ کرد...
ولی ایجاد محدودیت طول پسورد هیچوقت احمقانه نیست!
بنده نگفتم هیچ محدودیتی نباشه. حداکثر طول 100 یا 200 خودش یه محدودیته.
گفتم محدودیت درحد 15 و 20 کاراکتر و 30 کاراکتر نباید باشه. چون برای داشتن یک محدودهء بقدر کافی بزرگ از پسوردهای ممکن و امکان تامین بهینهء امنیت کافی بهتره 100 تا و 200 رو هم اجازه بدیم.

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

تازه پسورد که در بیشتر سیستمها بصورت مستقیم در کوئری ها درج نمیشه (قبل از استفاده هش میشه) و در سورس HTML هم که مسلما درج نمیشه، و بنابراین کمترین خطر و امکان سوء استفاده رو برای سایت داره.
از نظر تایپ کردن هم فکر نمیکنم تایپ 100 کاراکتر اونقدرها هم سخت و زمانبر باشه. بنظرم اغراق زیادی کردید. مثلا بنده 200 کاراکتر رو هم در زمان خیلی کوتاهتری میتونم با دقت بالا تایپ کنم. کاربر حرفه ای واقعا اینقدر مشکل نداره با 100 تا و 200 تا. اگر پسورد رو حفظ باشید (درمورد Passphrase ها که حفظ کردن کار سختی نیست) میتونید خیلی سریع و با نرخ خطای کم تایپش کنید.
ضمنا شاید کسی به هر علتی پسورد خودش رو از جایی کپی و پیست بکنه و اصلا بحث تایپ نباشه یا فقط قسمتی از اون رو تایپ بکنه. چه میدونم شاید متنی چیزی رو از داخل فایلی یا جای دیگه (حتی عباراتی که در خود صفحه استفاده شدن) کپی پیست بکنه یا از طریق Password manager ها و این حرفا. بطور کلی هرچی انعطاف و امکانها برای پسورد بیشتر باشه بهتره. تعداد حالتها و احتمالات بالا میره که به نفع امنیت کاربران و به ضرر هکرها و کرکرها میشه.

اینم باید درنظر گرفت که در خیلی از سیستمها آدم با فواصل کوتاه لاگین نمیکنه که دشواری تایپ پسورد براش مسئلهء مهمی باشه. مثلا اکانتی که همیشه یا اکثرا در خانه استفاده میکنیم و گزینهء Remember me رو موقع لاگین چک زدیم میتونه برای ماهها نیاز به لاگین مجدد رو رفع کنه. حتی روزی یک بار وارد کردن پسورد هم لزوما کار سختی نیست.

در نهایت هم کار از محکم کاری عیب نمیکنه. وقتی حداکثر طول 100 کاراکتر هیچ مشکل و خطر و هزینهء خاصی برای سایت و برنامه نداره، پس لزومی نداره بر اساس تصور و حدسیات و سلیقهء خودمون محدودیت های جدی تری وضع کنیم.

ضمنا نباید همهء سایتها و کاربردها رو هم از نظر نیازهای امنیتی یکسان فرض کرد.
بعضی کاربردها و موارد خاص از نظر امنیتی بسیار مهمتر هستن و ممکنه نیاز به پسوردهای خیلی قویتری داشته باشن.

colors
پنج شنبه 25 خرداد 1391, 10:35 صبح
از نظر تایپ کردن هم فکر نمیکنم تایپ 100 کاراکتر اونقدرها هم سخت و زمانبر باشه. بنظرم اغراق زیادی کردید. مثلا بنده 200 کاراکتر رو هم در زمان خیلی کوتاهتری میتونم با دقت بالا تایپ کنم. کاربر حرفه ای واقعا اینقدر مشکل نداره با 100 تا و 200 تا. اگر پسورد رو حفظ باشید (درمورد Passphrase ها که حفظ کردن کار سختی نیست) میتونید خیلی سریع و با نرخ خطای کم تایپش کنید.


حرفتون کاملا درسته، اصلا نباید 100 تا 200 هم باشه, ولی به خودتون نگاه نکنید که میتونید بفرض 200 کارکتر رو زیر 1 دقیقه تایپ کنید.همه کاربران سایت ما که حرفه ای نیستن!
مثلا این حدودا یه پسورد 200 کارکتری تشکیل شده از اعداد، حروف و ... است ( امنیتش بالاست )


Ck^x5ue7MMt^JDHM8VCA]6rBOpaeIS^NSmKrnyuOgMIBMIKlrUuPed4WiBGAs9NZmdtGy8U 8FWL]kMe5Tj6rnAA7rdQapKO2M_abRExG7rZLKDgFgi7fLY2vsm3xJU 3LN7XUwT9p^LWgR1ABmJB6CONzzYuQBwFGy8uF28CiOoz5H3gi QCqFdAtMopa3Eg5zzg^8h2

حالا به نظر شما به خاطر سپردن و وارد کردن این کد کار آسونیه؟؟
بین کارکترها هیچ فاصله ای نیست. نمیدونم چرا فاصله میندازه

MMSHFE
پنج شنبه 25 خرداد 1391, 11:15 صبح
دوستان گرامی، صحبت جناب eshpilen بنظرم درسته. من خودم 255 کارکتر محدودیت میگذارم و نوعش رو چون Hash میکنم، CHAR با طول 32 (یا برحسب نوع Hash، عددی بیشتر) میگذارم. حتی اگه قرار باشه رمز رو بصورت متن خام بگذاریم (که خیلی ناشیانه هست) یا برای کاربردهای دیگه مثل نام کاربری، میشه نوعش رو VARCHAR با طول 255 گذاشت که اگه یکی مثلاً 10 کارکتر نوشت، بقیه اش با 245 کارکتر Space پر نشه و بیهوده حجم دیتابیس بالا بره. بعلاوه این یک قابلیت هست که به کاربران میدیم. مجبورشون نکردیم که رمز 255 کارکتری بگذارن. میگیم تا اینقدر مجازین. حالا یکی حافظه و سرعت تایپش خوبه یا از نرم افزارهای مدیریت رمز عبور و... استفاده میکنه، میاد رمزهای طولانی میگذاره. کسی هم که اینطوری نیست، رمز کوتاه میگذاره.

بهزاد علی محمدزاده
پنج شنبه 25 خرداد 1391, 12:25 عصر
من فکر می کنم آنچه که جا افتاده برای طول پسورد ها ، همونطور که اشاره کردن بر می گرده به حافظه انسان . فکر کنم 7 تا 9 رقم رو می تونه به خاطر بسپاره . یکی از اساتیدمون می گفت شما برای حفظ کردن بعضی شماره ها مجبورید یه آهنگ خاصی بهش بدین تا بتونید اون و حفظ کنید .

اما اینکه ما محدودیت براش بذاریم یا نه !!! خیلی برام جالب بود که راستی چرا محدودیت ؟ آیا ما از قبل یه پیش فرض و براش تعیین می کنیم و میگیم خب اون که نمی تونه بیشتر از این حفظ کنه و پس حتما بیشتر از این هم وارد نخواهد کرد ؟ یا اینکه از قواعد شمارش کمک می گیریم ؟

ما اگر شش تا خونه داشته باشیم که در هر کدام از اینها کاربر بتونه 26 حرف وارد کنه ( به جز عدد ) . و تکرار پذیر هم باشه = 26 * 26 * 26 * 26 * 26 * 26 = 308915776 حالت می تونه کلمه عبور انتخاب کنه ... حتی برای استفاده از نرم افزار مدیریت رمز این تعداد حالت به نظر کافی میاد ...

حالا ما اگر به این کاراکتر های خاص و حروف بزرگ و اعداد رو هم اضافه کنیم ... دیگه نیازی به یه رشته طولانی هست ؟

MMSHFE
پنج شنبه 25 خرداد 1391, 12:45 عصر
بحث نیاز نیست. بحث اینه که شاید یکی بخواد فهرست بازیگران مورد علاقه خودش رو بعنوان رمز عبور بگذاره! منطقی نیست که بهش بگیم نگذار! بحث User Friendly بودنه. سایت ما یه محصوله و نباید مشتری رو مجبور به سازگاری با محصول بکنیم. محصول باید با مشتریها سازگار بشه.

بهزاد علی محمدزاده
پنج شنبه 25 خرداد 1391, 14:16 عصر
بله متوجه ام . منظورم از مطرح کردن سوال ها اینه که بدونیم واقعا چرا محدودیت برای کلمات عبور گذاشته شده . آیا اینها دلایلی برای محدودیت هاست ؟ چرا اکثر سیستم ها و وب سایت ها محدودیت در پسورد دارند ؟ آیا کلمه عبور چیزیه که ما بخوایم کاربر هر طور دلش خواست وارد کنه یا اینکه باید این و هدایت کنیم به سمت انتخاب کلمات عبور مناسب ؟ ( کاربر گرامی لطفا برای کلمه عبور خود از حروف کوچک و بزرگ و ارقام استفاده کنید ... ) .

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

eshpilen
پنج شنبه 25 خرداد 1391, 20:09 عصر
ما اگر شش تا خونه داشته باشیم که در هر کدام از اینها کاربر بتونه 26 حرف وارد کنه ( به جز عدد ) . و تکرار پذیر هم باشه = 26 * 26 * 26 * 26 * 26 * 26 = 308915776 حالت می تونه کلمه عبور انتخاب کنه ... حتی برای استفاده از نرم افزار مدیریت رمز این تعداد حالت به نظر کافی میاد ...
این محاسبه درصورتیکه پسوردها بصورت کاملا تصادفی تولید بشن درسته. ولی طبق تحقیقات و تجربه های بدست آمده، انسانها در تولید دیتای رندوم واقعا ضعیف عمل میکنن و بر اثر اهمال یا ناخودآگاه الگوها و انحرافهای مشخصی از حالت رندوم واقعی در نتایج اونها دیده میشه که باعث میشه آنتروپی پسوردهای اونها خیلی کمتر از این حد باشه. بنابراین نمیشه پسوردهای انتخاب شده توسط افراد رو با این فرمول مطابقت داد. مگر اینکه پسورد رو خود سیستم بصورت رندوم تولید بکنه (بعضی سیستمها این کار رو میکنن یا بصورت آپشنال امکانش رو دارن که کاربر میتونه انتخاب بکنه). و البته الگوریتم و منبع آنتروپی برای تولید چنین پسوردهای رندمی باید بقدر کافی امن باشه. حالا این خودش یه بحث دیگه میشه؛ بنده بعد از کلی تحقیق و مطالعه و کار یک تابع رندوم امن برای پروژهء خودم تهیه کردم؛ تازه باوجود دانش و تخصص قابل توجهی که در این امور و علم رمزنگاری داشتم تونستم از پس این کار بربیام، وگرنه یک برنامه نویس معمولی اصلا چنین بینش و مهارتی رو نداره. البته اون تابع الان آماده هست و دیگران میتونن ازش استفاده کنن (در پروژهء سیستم رجیستر و لاگینی که بصورت بازمتن منتشر کردم).

دوما خیر این تعداد حالت کافی نیست.


NIST (http://en.wikipedia.org/wiki/NIST) recommends 80-bits for the most secure passwords, which can nearly be achieved with a 95-character choice (e.g., the original ASCII character set) with a 12-character random password (12 x 6.5 bits = 78).[2] (http://en.wikipedia.org/wiki/Password_strength#cite_note-NIST-1) A 2010 Georgia Tech Research Institute (http://en.wikipedia.org/wiki/Georgia_Tech_Research_Institute) study also recommended a 12-character random password, but as a minimum length requirement.[3] (http://en.wikipedia.org/wiki/Password_strength#cite_note-gtri-2)[18] (http://en.wikipedia.org/wiki/Password_strength#cite_note-msnbc-17)


ترجمه: «NIST برای امن ترین پسوردهای مورد نیاز 80 بیت آنتروپی را توصیه میکند، که میتواند تقریبا با انتخاب 12 کاراکتر رندوم از یک مجموعهء 95 کاراکتری بدست آید. یک تحقیق سال 2010 Georgia Tech Research Institute (http://en.wikipedia.org/wiki/Georgia_Tech_Research_Institute) همچنین یک پسورد رندوم 12 کاراکتری را توصیه کرد، اما بعنوان یک حداقل طول مورد نیاز.»

اونکه شما میگی البته برای اکانتهای سایتهای عادی و موارد غیرمهم شاید در ظاهر کفایت کنه. و البته سایت باید مکانیزمهایی مثل محدودیت بر روی تعداد پسوردهای قابل تست در زمان مشخص رو داشته باشه. منظورم سیستمهایی هست که مثلا بعد از چند بار وارد شدن پسورد اشتباه در مدت زمان خاصی، اکانت رو برای مدت معینی مسدود میکنن و امکان تست پسوردهای بیشتری رو نمیدن. وگرنه اگر چنین سیستمی نداشته باشن که این تعداد حالت به هیچ وجه کافی نیست. فرضا یک سرور قوی رو درنظر بگیریم که هکر بتونه 1000 درخواست لاگین در ثانیه رو به اون ارسال بکنه؛ در این صورت تست کل این تعداد حالت پسورد فقط حدود 4 شبانه روز طول میکشه! و این یعنی فاجعهء کامل. حتی برای سرورهای ضعیف تر و Brute force های خیلی کندتر هم مسلما باز چنین پسوردهایی اصلا کافی نیستن، چون میشه در زمان کوتاهی تمام یا بخش قابل توجهی از این محدوده رو تست کرد. منظور از زمان کوتاه در این مورد میتونه تا چند ماه یا حتی چند سال هم باشه. یعنی باید پسورد و سیستم شما اینقدر قوی باشه که حتی با چند سال حملهء مداوم هم نشه شانس موفقیت قابل توجهی داشت. توجه کنید لزومی نداره که حتما تمام پسوردهای محدوده تست بشن و پسورد تمام کاربران کشف بشه، بلکه یک کسری از اونهم برای هکر موفقیت کافی بحساب میاد. حتی مثلا اگر 1% از پسوردها رو کشف بکنه بازم خودش کلیه و 1% از مثلا 100 هزار اکانت میشه 1000 اکانت.

تازه سیستمهایی که تمهیداتی مثل قفل اکانت رو دارن بازم با چنین پسوردهایی درمقابل Brute force آسیب پذیر هستن. مثلا یک سایتی که فرض کنیم 100 هزار کاربر داشته باشه، و روی هر اکانت بشه در هر 15 دقیقه 5 پسورد رو تست کرد، نتیجه میشود که در هر ثانیه میشه حدود 555 پسورد رو تست کرد (در زمانهای مختلف روی اکانتهای مختلف). هکر نمیاد لزوما روی یک اکانت تمرکز بکنه که مجبور بشه در هر 15 دقیقه فقط 5 پسورد رو تست بکنه، بلکه میاد و روی تمام 100 هزار اکانت این کار رو انجام میده و در هر زمان روی اکانتهایی که در وضعیت قفل نیستن پسوردهای تست نشده رو تست میکنه. نوشتن برنامهء خودکار برای این کار سخت نیست، و با استفاده از Botnet هم که اینطور حمله ها رو انجام بدن بسیار خطرناک تر و کشف و جلوگیری از اون دشوارتر میشه، چون حتی اگر علاوه بر سیستم محدودیت بر اساس اکانت، سیستم محدودیت تلاش لاگین بر اساس IP هم داشته باشید، بازم نمیتونه درمقابل Botnet ها بقدر کافی موثر/مطمئن باشه (هکر از IP های بسیار زیادی اقدام میکنه و در نتیجه نمیشه این همه IP مورد استفاده رو براحتی و سرعت کافی Detect و محدود کرد و در شرایط مناسب که سایت بطور معمول ترافیک قابل توجهی داشته باشه ممکنه مسئولین سایت اصلا متوجه هم نشن - تازه این نیاز به نظارت مستمر و دخالت انسان یا وجود سیستمهای افزوده و پیشرفته محافظتی داره که اکثر یا حداقل خیلی از سایتها و برنامه ها چنین امکاناتی ندارن).

پس این چیزی که شما میگی اصلا کافی نیست. بسیار ضعیف تر از چیزیه که فکر میکنید.

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

حمله های آفلاین برای کرک هش پسوردها مسلما با چنین پسوردهای ضعیفی خیلی راحتتر و سریعتر میشن و نرخ و شانس موفقیت کرکر خیلی بالاتر میره. تازه اگر سیستم و برنامه نویس بقدر کافی حرفه ای بوده باشه و از Salt رندوم با تعداد حالتهای کافی به ازای هر اکانت/پسورد استفاده کرده باشه، و باز خیلی حرفه ای بوده باشه و Key stretching هم استفاده کرده باشه (که بیشتر سیستمها استفاده نکردن و بخش بزرگی از برنامه نویسان اصلا نمیدونن یعنی چی و چیه و چطور باید پیاده کرد). وگرنه که دیگه هیچی! فاتحه خوندس!

نرخ تست پسورد بصورت آفلاین درحال حاضر بسیار وحشتناک هست. اونایی که باهاشون هش های ضعیف و غیرحرفه ای رو کرک میکنن (که گهگاه نرم افزارهای نسبتا معروف و پرکاربردی هم ممکنه بین اینها پیدا بشن) که با استفاده از هش های از پیش محاسبه شده و دیکشنری های بزرگ از پسوردهای متداول، سرعت بسیار زیادی در کرک کردن دارن. یعنی تقریبا زمانی نمیبره!
اون سیستمهایی هم که روشهای حرفه ای تری برای هش کردن پسورد داشتن و نمیشه از چیزهایی مثل Rainbow table روشون استفاده کرد، بازم سخت افزارها و نرم افزارهای امروزی سرعت بسیار بالایی رو میتونن در محاسبهء هش ها بدست بدن که مسلما یک چنین پسوردهای ضعیفی در برابر این سرعت کاملا آسیب پذیر هستن.


As of 2011, commercial products are available that claim the ability to test up to 2,800,000,000 passwords per second on a standard desktop computer using a high-end graphics processor.


ترجمه: «از 2011، محصولات تجاری ای در دسترس هستند که ادعا میکنند قادرند تا 2 میلیارد و 800 میلیون پسورد بر ثانیه را روی یک رایانهء استاندارد دسکتاپ با استفاده از یک پردازندهء گرافیکی جدید تست کنند.»

میدونی این سرعت یعنی چی؟ وحشتناکه. میگه حدود 3 میلیارد پسورد فقط در یک ثانیه!! کل تعداد پسوردهای ممکنی که شما گفتی حدود 309 میلیون بیشتر نیست. من حساب کردم تازه اگر Key stretching با 2 به توان 16 دور بکار برده باشی، کل این بازه رو میشه در کمتر از 2 ساعت تست کرد. Key stretching نباشه که هیچ! در کسری از ثانیه هش کرک میشه!!


حالا ما اگر به این کاراکتر های خاص و حروف بزرگ و اعداد رو هم اضافه کنیم ... دیگه نیازی به یه رشته طولانی هست ؟بله نباید محدودیت زیادی روی طول و کاراکترها و عبارتهای ممکن گذاشت. بنظر بنده حداکثر طول باید حداقل 100 کاراکتر باشه. تازه بنظر بنده معیار باید کاراکتر یونیکد باشه. بنظرم خیلی ها ممکنه این اشتباه رو بکنن که با strlen طول پسورد رو چک کنن، درحالیکه strlen برحسب بایت عمل میکنه و نه کاراکتر یونیکد. مثلا یک حرف فارسی از دو بایت تشکیل شده؛ بنابراین یک پسورد فارسی با طول 20 کاراکتر، عملا 40 بایت میشه.

ضمنا باید فکر استفاده از Passphrase ها رو هم کرد. Passphrase ها به شکل کلمات و جملات هستن.

در این مقاله در این مورد توضیح داده: http://en.wikipedia.org/wiki/Passphrase
بخشهایی ازش رو میذارم.


to achieve the 80-bit strength recommended for high security (non-military) by NIST, a passphrase would need to be 58 characters long, assuming a composition that includes uppercase and alphanumeric


ترجمه: «برای دستیابی به امنیت 80 بیت توصیه شده توسط NIST برای امنیت بالا (غیرنظامی)، یک passphrase نیاز دارد 58 کاراکتر طول داشته باشد، با فرض ترکیبی که شامل حروف بزرگ و اعداد نیز باشد»


five-letter words each contain 2.3 bits of entropy, which would mean only a 35-character passphrase is necessary to achieve 80 bit strength.[4] (http://en.wikipedia.org/wiki/Passphrase#cite_note-entropy2-3)



ترجمه: «کلمات 5 حرفی هرکدام 2.3 بیت آنتروپی دارند، که بدین معناست که برای دستیابی به امنیت 80 بیت تنها یک passphrase با طول 35 کاراکتر نیاز است.»

البته passphrase ها برای سایت ها و اکانتهای آنلاین متداول نیستن و معمولا برای چیزهایی مثل عملیات رمزگذاری درنظر گرفته شدن. چون پسوردها برای اینطور کاربردها که امنیت کافی درمقابل حمله های آفلاین مهمه بیش از حد ضعیف هستن و پسوردهای طولانی و پیچیده هم که برای بخاطر سپردن خیلی دشوار هستن (انسان passphrase ها رو خیلی راحتتر میتونه حفظ کنه چون عمدتا از کلماتی که از قبل بلده و در زندگی باهاشون سروکار داره تشکیل شدن). براتون منبع و مثال آوردم که یک پسورد میتونه چقدر دربرابر امکانات کرک امروزی ضعیف باشه. مثلا اون پسورد 6 کاراکتری شما، در ظرف مدت بسیار کوتاهی کرک میشه. 3 میلیارد تست پسورد در یک ثانیه! تازه با یک رایانهء منفرد عادی و کارت گرافیک. حمله های موازی و توزیع شده با چند صد و چند هزار رایانه و سخت افزارهای اختصاصی که دیگه هیچی!

خلاصه برای پسورد کاربران محدودیت 20 کاراکتر و 30 کاراکتر نذارید. نه لزومی داره و نه از نظر امنیتی عاقلانه است. بنظر بنده حداقل 100 کاراکتر یونیکد اجازه بدید. یک وقت کسی شاید به هر دلیلی خواست از یک پسورد یا passphrase واقعا قوی استفاده کنه. لزومی هم نداره حتما اون رو حفظ کرده باشه. ممکنه از یه جایی یا Password manager درش بیاره.

هرچند شاید 99% کاربران اینقدر اطلاع یا تخصص نداشته باشن یا اهمیتی ندن و پسوردهای خیلی ضعیف تری انتخاب کنن، اما این دلیل نمیشه ما برای اون 1% امکان امنیت درست و حسابی نذاریم، اونم وقتی که این کار هزینه ای نداره.

شما یک مغازه ابزارفروشی/قفل‌سازی برید، انواع قفل داره از زپرتی و ارزان تا اونایی که واقعا قوی هستن (و در ضمن گران قیمت که افراد کمی میخرن). اینطور نیست که بگن به اون قفل های قوی و گران نیازی نیست یا کسی نمیخره.

ضمنا این طول 58 کاراکتر یا 35 کاراکتر که در بالا برای passphrase گفته بنظرم مربوط به passphrase هایی میشه که با روش تخصصی و بقدر کافی بصورت رندوم تولید میشن. در خیلی موارد ممکنه از روشهای با امنیت کمتری استفاده بشه که نتیجتا طول passphrase باید بیشتر باشه تا امنیت خوبی بدست بیاد. ممکنه افراد مختلف از روشهای مختلف استفاده کنن. ممکنه جملات خاصی رو از جایی بردارن و در پسورد خودشون وارد کنن. شاید اینها روشهای اصولی و اونقدر امن و passphrase واقعی نباشن، اما بهرحال اضافه کردن امکانات بیشتر و اینکه کاربران محدودیت کمتری داشته باشن ایدهء خوب یا اصلا کار لازمیه. اینکه با این وضعیت امنیت که گفتیم سایت هم بیاد بگه پسورد حداکثر 20 کاراکتر، واقعا بنظر عاقلانه و حرفه ای نمیاد! میاد؟ از کجا با چه تخصصی و اثبات و دلیل و محاسباتی به این رسیدن که چنین کاری بکنن؟ اصلا هیچ پایه و پیشنیاز و تخصص چنین تحلیل و تصمیمی رو نداشتن. غیر از اینه؟ خب بجای 20 تا بذار 100 تا حداقل. چی میشه؟ اینطوری حداقل در چیزی که تخصص نداری و نمیتونی مطمئن باشی از خودت قانون و محدودیت الکی وضع نکردی.

eshpilen
جمعه 26 خرداد 1391, 12:52 عصر
حالا ما اگر به این کاراکتر های خاص و حروف بزرگ و اعداد رو هم اضافه کنیم ... دیگه نیازی به یه رشته طولانی هست ؟
تعداد کل این کاراکترها نهایتا همون 95 تا میشه که NIST گفته باید پسوردش 12 کاراکتر باشه. و یه منبع دیگه تازه میگه 12 کاراکتر حداقلشه.

6 تا کافی نیست.

دربرابر حمله های آنلاین اول حساب کنیم ببینیم این پسورد 6 کاراکتری چقدر مقاومت داره:

(95^6)/1000/60/60/24/365
جواب این محاسبه میشه حدود 23 سال.
یعنی با نرخ 1000 تست در ثانیه، 23 سال طول میکشه تا کل این بازه رو تست کنیم.
اما در رمزنگاری نصف این تعداد رو حساب میکنن. یعنی میگن با تست نصف بازه 50% شانس موفقیت وجود داره. پس باید بگیم 12 سال.
این بنظر بقدر کافی امن میاد؛ نه؟
البته نرخ 1000 تست در ثانیه رو بنده بصورت کاملا حدسی برآورد کردم. روی سایتهای بزرگ که سرورهای خیلی قوی و چندین سرور دارن و روزانه به صدها هزار یا حتی میلیونها کاربر کلی سرویس میدن، احتمالا این نرخ بتونه بالاتر هم بره. نه؟ مثلا اگر نرخش 10 برابر بیشتر بشه، در کمی بیش از یک سال میشه پسورد یک اکانت رو بدست آورد. البته با فرض اسکن مداوم.

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

حالا حمله های آفلاین و کرک هش رو محاسبه کنیم:

(95^6)/3000000000/60
جوابش میشه حدود 4 دقیقه.
هش ساده یک پسوردی 6 کاراکتری که هر کاراکترش از بین 95 کاراکتر انتخاب شده باشه، حداکثر در کمی بیش از 4 دقیقه کرک میشه. تازه فقط با یک رایانهء دسکتاپ معمولی و البته فقط یک کارت گرافیک قوی. تازه طبق رویهء معمول 50% نصفش رو باید بگیم که میشه 2 دقیقه.

البته این محاسبه که انجام دادم ممکنه یک مقدار تغییراتی داشته باشه. چون اون حدود 3 میلیارد تست در ثانیه معلوم نیست دقیقا درمورد چه عملیات و الگوریتمی بوده. مثلا آیا کرک HMAC بود، کرک AES128 بوده، یا کرک SHA1 یا SHA256. بهرحال این گرچه میتونه مقداری تفاوت ایجاد بکنه، اما تفاوتش اکثرا خیلی زیاد نیست که بگیم محاسبات ما غلط از آب درمیان. پس ما همون مقداری رو که گفته ملاک قرار میدیم. بهرحال یک مقدار خطا و تقریب در این محاسبات طبیعی هستن و مشکلی نداره.

حالا فرض میکنیم از Key stretching با تعداد دور 2 به توان 16 برای تولید هش ها استفاده کرده باشیم:

(95^6)*(2^16)/3000000000/60/60/24
این بار کرک هش تقریبا 186 روز طول میکشه.
و البته اگر طبق رویهء معمول بخوایم نصف این زمان رو حساب کنیم، باید بگیم 50% موفقیت در 93 روز.
میبینیم که Key stretching تونسته چه تفاوت فاحشی رو ایجاد کنه. 2 دقیقه کجا و 93 روز کجا.
ولی باید توجه داشت 93 روز هم برای امنیت جدی اصلا کافی بحساب نمیاد! اما باز همین Key stretching هم مسلما بی فایده نیست. بهرحال کرکر باید 93 شبانه روز منبع پردازشی ارزشمند خودش رو به کرک یک هش اختصاص بده، و این میتونه در خیلی موارد باعث صرفنظر کردن کرکر بشه. مسئلهء دیگر اینه که، کرک تمام هشهای یک چنین دیتابیسی که مثلا هش پسورد 100 هزار کاربر در اون وجود داره، نیاز به حدود 25 هزار سال زمان داره!! اما بدون Key stretching، تمام اون صدهزار هش رو میشه در 278 روز کرک کرد (100%). یا نصفش رو در 139 روز. پس ما با استفاده از Key stretching یک کار واقعا بزرگ و مفیدی رو انجام دادیم. هرچیزی به جای خودش. برای امنیت کامل هم پسورد باید زیادی ضعیف نباشه و هم برنامه باید از روشهای پیشرفته و اصولی مثل سالت رندوم و ثابت و Key stretching استفاده کرده باشه.

تازه یادتون باشه تمام این محاسبات و استانداردها بر این فرض بنا شدن که یک پسورد کاملا رندوم داشته باشیم. پسوردهایی که انسان همینطوری بدون استفاده از ابزار و روش مخصوص تولید میکنه، نمیتونن کاملا رندوم محسوب بشن. این مسئله رو تحقیقات و آمار ثابت کرده.

پس شد 12 کاراکتری رندوم!
وقتی پسورد رو خود انسان تولید میکنه طبیعتا باید طولش بیشتر باشه تا بتونیم خوشبین باشیم که همونقدر امنیت رو بطور تقریبی بدست میاره.
در این بین مسئلهء استفاده از Passphrase ها هم مطرح هست و کاملا امکان داره و میتونه مفید باشه که از Passphrase هم استفاده بشه.
حالا Passphrase هم اگر توسط انسان انتخاب بشه طبیعتا طولش باید بیشتر باشه. ممکنه کسی عبارتهایی رو از بخشهایی از کتابی یا کتابهایی که در کتابخانهء خودش یا حتی روی رایانهء خودش داره بعنوان Passphrase یا بخشی از اون انتخاب کنه. و اصلا بعید نیست که طول چنین پسوردهایی از 50 کاراکتر هم بیشتر بشه و حتی به 100 هم برسه.
اگر از نظر آماری میپرسید، خب طبیعی هست که اکثر افراد دربارهء این قضایا دانش و بینش کافی ندارن یا به هر دلیلی اهمال میکنن، و بنابراین پسوردهای بسیار ضعیف تری رو انتخاب میکنن. اما این دلیل نمیشه که امکان های دیگران و افراد حرفه ای و کسانی که میخوان امنیت درست و حسابی داشته باشن رو بگیریم.

بهزاد علی محمدزاده
جمعه 26 خرداد 1391, 13:26 عصر
ممنون اطلاعات خوبی بود .



میبینیم که Key stretching تونسته چه تفاوت فاحشی رو ایجاد کنه. 2 دقیقه کجا و 93 روز کجا.


کرکر از پردازش ابری هم می تونه برای کاهش این زمان استفاده کنه ؟

eshpilen
شنبه 27 خرداد 1391, 14:37 عصر
خب هرچی قدرت پردازشی بیشتری رو به کار بگیری سرعتت هم بیشتر میشه دیگه.
دیگه ابری و غیرابری نداره. ممکنه ابرارایانه استفاده کنی. ممکنه هزارتا لپ تاپ رو کلاستر کنی. ممکنه سرویس ابری کرایه کنی. بالاخره ابری هم پشتش همون رایانه های مختلف هستن دیگه؛ فقط ساختار و انتزاع و روش استفادش به یه شکل خاصی هست که میگن ابری. ممکنه از شبکه های توزیع شده در اینترنت استفاده کنی (اینو یه نگاه بکن (http://en.wikipedia.org/wiki/Distributed.net)). ممکنه از Botnet استفاده کنی (که میتونه تا چند میلیون رایانه هم برسه).
ولی طبیعتا هرچی قدرت پردازشی بیشتری بخوای دسترسی بهش دشوارتر و گران تر میشه. اما سرویسهای کرایه ای هم وجود دارن. لزومی نداره طرف این همه منابع گران قیمت رو شخصا تهیه کنه و هزینهء هنگفتی بپردازه.

اما اگر طول پسوردها یا کلیدهای رمزنگاری کافی باشه طبیعتا محاسباتی پشت اونها هست که نشون میدن درحال حاضر (و حداقل تا چند سال آینده) توان پردازشی لازم برای کرک کردن اونها در دسترس هیچکس نیست. البته نمیشه هیچ چیزی رو 100% تضمین کرد، اما این محاسبات تئوریک و تست و تحلیل و تجربه های جاری دیگه نهایت چیزی هست که در دسترس هست.

مثلا رمزنگاری متقارن با کلید 128 بیتی، مثل AES128، درحال حاضر امن بحساب میاد و حتی تا 10 سال و 20 سال دیگه هم باید امن باشه (اگر اتفاق خارق العاده ای در روند پیشرفت فناوری پردازشی رخ نده - ظاهرا ساخته شدن رایانه های کوانتمی کامل و قوی رو باید یک اتفاق خارق العاده تلقی کنیم). اما با اینحال عده ای شک دارن و میگن باید از 256 بیت استفاده کرد. تاجاییکه دیدم اونها معمولا دوتا استدلال دارن، یکی امکان ساخته شدن رایانه های کوانتمی قدرتمند در آینده نه چندان دور (علما در این مورد اختلاف نظر دارن!)، و دوما امکان کشف ضعف در الگوریتم رمزنگاری که ممکنه استحکام بیتی رمزها رو کاهش بده. میگن مثلا امنیت 128 بیت اگر بر اثر چنان ضعفهایی نصف بشه (64 بیت) دیگه امن نیست، اما امنیت رمزنگاری 256 بیت با همون الگوریتم به 128 بیت کاهش پیدا میکنه که همچنان امن باقی میمونه.
هرچند الگوریتمی مثل AES تاحالا پس از سالها تحقیق و تحلیل و تجربه عملی امتحان خودش رو خوب پس داده و هنوز ضعف مهمی درش پیدا نشده.

حالا محاسبات امنیت بر چه اساسی اینقدر مطمئن هستن، فقط بر اساس عظیم بودن سخت افزار مورد نیاز نیست، بلکه بر اساس مقدار انرژی مورد نیاز هم هست.
مثلا چرا میگن 2 به توان 128 قابل شکستن نیست؟
چون بر اساس قوانین فیزیک کوانتم، یک مقدار حداقل انرژی برای تغییر حالت مادی وجود داره. یعنی در نهایت هرچقدر هم که رایانه ها برای ذخیرهء بیت ها از اجزای کوچکتر و حساس تری استفاده کنن، مثلا برسه در ابعاد ذرات اتمی، دیگه از اون حداقل واحد انرژی کمتر مصرف نمیشه برای تغییر وضعیت یک بیت، حتی اگر تغییر وضعیت یک ذرهء بسیار بسیار کوچک باشه مثل فوتون و غیره.
بعد میان حساب میکنن که برای Brute-force کردن فلان الگوریتم با کلید 128 بیتی حداقل چه تعداد تغییر حالت مورد نیاز خواهد بود. به علت عظیم بودن عددی مثل 2 به توان 128، تعداد این تغییر حالتهای مورد نیاز بسیار بسیار زیاده که در نتیجه وقتی حتی در اون حداقل واحد انرژی کوانتمی که بسیار کوچک است ضرب بشه بازم در کل انرژی عظیمی خواهد شد، که میشه گفت بشریت نمیتونه چنین انرژی رو درحال حاضر و در آیندهء نزدیک تامین کنه. حالا تازه خیلی انرژی های مربوط به مسائل جانبی و مسائل اتلاف انرژی به شکل حرارت و انرژی مورد نیاز برای خنک سازی و غیره و غیره رو اصلا بحساب نیاوردن! یعنی مسئله رو خیلی ساده و در بدبینانه ترین حالت تحلیل کرد که در واقعیت اصلا اینقدر ساده و راحت نیست کرک کردن.
تازه این بحث انرژی بود. اینکه اصلا بتونن اونقدر سخت افزار عظیم مورد نیاز برای چنان توان پردازشی ای رو جمع آوری بکنن یا نه باز خودش احتمالا اگر غیرممکن نباشه ولی بسیار دشوار خواهد بود (حتی در آیندهء نزدیک با پیشرفت فناوری) و هزینه های هنگفتی خواهد داشت.

اما البته رایانه های کوانتمی اگر ساخته بشن، میگن رمزنگاری متقارن 128 بیت شکسته میشه. ولی اینکه شکسته میشه بخاطر این نیست که سرعت رایانه های کوانتمی از رایانه های فعلی خیلی بیشتره، بلکه مثل RSA یک الگوریتمی هم برای Brute-force کردن رمزنگاری های متقارن روی رایانه های کوانتمی کشف شده که میتونه در نصف مرتبهء الگوریتمهای استاندارد فعلی عمل کنه. یعنی 2 به توان 128 عملا میشه 2 به توان 64. پس شکسته شدن رمزنگاری 128 بیتی بوسیلهء رایانه های کوانتمی، نقص اون محاسبات انرژی مورد نیاز نیست، بلکه ضعف الگوریتم رمزنگاری دربرابر رایانه های کوانتمی هست. یعنی احتمالا باید نتیجه بگیریم که یجورایی تعداد تغییرحالتهای مورد نیاز هم نصف میشه.
البته این ضعف با دوبرابر کردن طول کلید برطرف میشه. یعنی رمزنگاری با کلید 256 بیتی همچنان توسط رایانه های کوانتمی هم غیرقابل شکست خواهد بود (البته با دانش و امکانهایی که تا امروز کشف شدن)، چون نصف هم که بشه باز 2 به توان 128 حالت و تغییر وضعیت داره.

حالا بنده نظر علما رو در این زمینه تاجاییکه مشاهده کردم متخصصان و دانشمندان اعتقاد دارن که ساختن رایانه های کوانتمی کامل و قوی که باهاشون بشه اینطور کارها رو واقعا انجام داد چیزی نیست که در آیندهء خیلی نزدیک انتظارش بره، و اصلا بعضی ها شک دارن که چنین چیزی در نهایت هم شدنی باشه، چون مشکلات بزرگی در راه ساختن رایانه های کوانتمی همه کاره با مقیاس بزرگ وجود دارن که هنوز کسی راه حل تئوریک و عملی قطعی برای اونها ارائه نکرده.
ولی یکسری شرکتها و افراد ادعاهای مغایر با این نظرات رو بیان کردن که البته سند و دلیل قابل اتکایی پشت هیچکدام از این ادعاها ندیدم تاحالا. احتمالا شایعات منتشر شده ای بیش نیست. مثلا یک شرکت ادعا کرده که یک رایانهء کوانتمی ساخته (بحثش در تالار گفتگوی عمومی بود که بنده هم در اون مطالبی رو دادم)، اما هنوز حتی نتونسته ثابت کنه که اون رایانه واقعا کوانتمیه!! (ظاهرا جزییات و اطلاعات بیشتری هم ازش نمیدن و میگن چون اسرار تجاریه) و ضمنا حتی اگر کوانتمی باشه، هنوز ثابت نشده که میتونه برتری قابل توجهی نسبت به رایانه های کلاسیک داشته باشه. و حتی اگر اینطور باشه، هنوز در ابعاد بسیار کوچک هست و محدودیت های جدی ای داره که میشه گفت برای کاربردهای واقعی کاربرد و برتری ای نداره (و حتی خیلی ضعیف تر از رایانه های عادی فعلی است) و بیشتر یک چیز آزمایشی و تحقیقاتی میتونه باشه و نمونهء اولیه ای که تا رسیدن به رایانه های کوانتمی بدردبخور راه طولانی و سختی رو در پیش داره. یعنی این نظر دانشمندان و متخصصان و جامعهء علمی و آکادمیک بوده درمورد این قضیه و سر و صدایی که سر این ادعا راه افتاد.

اما خب آدم چه میدونه! ممکنه چند سال دیگه دیدی ورق همهء اینا برگشت :لبخند:

راستی شما توجه کردی که برای پسورد گفتن 80 بیت که معادل کردن به یک پسورد رندوم 12 کاراکتری از 95 کاراکتر برای هر مکان.
حساب کنیم اگر 2 به توان 16 تا هم با Key stretching به امنیتش اضافه کنیم، تازه میشه 96 بیت استحکام.
تازه اونکه گفتن 80 بیت اصلا شک دارم که Key stretching هم بخواد. چون هیچ کجا چنین چیزی نگفتن.
وقتی 80 بیت یا 96 بیت اینقدر امنیت داره، ببین دیگه 128 بیت چقدر قویه.
ولی از طرف دیگه میتونیم اینطور هم فکر کنیم که شاید نباید برای کاربردهای واقعا مهم و حساس به کمتر از 128 بیت راضی بشیم. حالا اونایی که میگن 256 باید استفاده کرد که دیگه هیچی. اگر بخوای یه پسورد 128 بیت یا 256 بیت استحکام داشته باشه طبیعتا طولش باید بیشتر باشه.

من حساب کردم برای امنیت معادل 128 بیت باید پسورد 20 کاراکتر باشه (شامل ارقام، حروف بزرگ و کوچک، و علامتهای روی کیبورد (شامل کاراکتر فاصله) که کلا میشه 95 کاراکتر).
برای امنیت 256 بیت هم نیاز به 39 کاراکتر هست.
اگر 2 به توان 16 تا Key stretching اضافه کنیم میتونیم دو کاراکتر از طول کم کنیم.

eshpilen
چهارشنبه 30 اسفند 1391, 04:24 صبح
الان داشتم این مقاله رو میخوندم: https://www.owasp.org/index.php/Authentication_Cheat_Sheet
نکته: لینکش واسه منکه بدون فیلتر*ش*کن باز نمیشه.

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

بنابراین ترجمهء بخشهایی از اون رو براتون میذارم:


طول پسورد:

پسوردهای کوتاهتر از 10 کاراکتر ضعیف محسوب میشوند.

درحالیکه تعیین حداقل طول موجب مشکلات در بخاطرسپاری پسوردها میشود، برنامه ها باید کاربران را به استفاده از passphrase (جملات یا ترکیبی از کلمات) تشویق کنند که میتوانند بسیار طولانی تر از پسوردهای معمولی باشند و در عین حال هنوز خیلی راحتتر بخاطر سپرده شوند.

حداکثر طول پسورد نباید بیش از حد کم درنظر گرفته شود، بخاطر آنکه آن از ایجاد passphrase توسط کاربران جلوگیری خواهد کرد. حداکثر طول معمول برای پسورد، 128 کاراکتر است.

passphrase های کوتاهتر از 20 کاراکتر معمولا ضعیف محسوب میشوند اگر آنها تنها از حروف لاتین کوچک تشکیل شده باشند.


دقت کردید که گفته حداکثر طول پسورد رو 128 کاراکتر بگیرید :چشمک:
علتش هم همون چیزی که بنده بارها گفتم؛ یعنی امکان استفاده از passphrase.

$ M 3 H R D A D $
چهارشنبه 30 اسفند 1391, 09:51 صبح
سایت skype خواستم عضو بشم ب هیچ صراتی مستقیم نشده بود
حتما از
,./;'[]\
دقیقا اینا تو پسوردم استفاده کردم تا کوتاه اومد !
این سایتها که با جاوا اسکریپت و یک رول خاصی میان درصد قوی بودن پسورد و مسنجند و بعدش فرم اجازه سابمیت داره واقعا بی فایده هستند !!!!!!!!!!!!!!!!
پسورد باید حد بالایی داشته باشه تا 255 تا یا 100 تا
ما برنامه نویسیم رول مینویسیم... نه مه بگیم چرا یکی میزاره 123456 همون برنامه یکی میاد 255 کاراکتر مینویسه