PDA

View Full Version : آمارهای جالبی دربارهء کرک هش پسورد / key stretching



eshpilen
پنج شنبه 06 بهمن 1390, 00:21 صبح
جدول زیر هزینهء تقریبی سخت افزار مورد نیاز برای کرک هش پسورد در طول متوسط یک سال را نشان میدهد.
ما هشدار میدهیم که این مقادیر بسیار تقریبی هستند و تنها هزینهء مدارهای رمزنگاری فناوری سال 2002 را منعکس میکنند.
کاملا ممکن است که هزینه های سایر سخت افزارها (مدار کنترل، بردها، منبع تغذیه) و هزینه های عملیات (مصرف برق، خنک کننده) هزینه ها را با فاکتور 10 برابر بیشتر کند، و همچنین بطور یکسانی ممکن است که پیشرفت ها در فناوری نیمه هادی و طرح های بهبودیافته مدار رمزنگاری، هرکدام هزینه ها را با یک فاکتور 10 کاهش دهند.
بهرحال ما اعتقاد داریم که تقریب های ارائه شده در اینجا برای هدف مقایسهء توابع اشتقاق کلید مفید هستند (م: توابع اشتقاق کلید (http://en.wikipedia.org/wiki/Key_derivation_function) الگوریتم هایی هستند که پسوردها را به کلیدهای رمزنگاری تبدیل میکنند).

پسوردهای استفاده شده:

- یک رشتهء تصادفی شامل 6 حرف کوچک؛ مثل sfgroy.
- یک رشتهء تصادفی شامل 8 حرف کوچک؛ مثل ksuvnwyf.
- یک رشتهء تصادفی شامل 8 کاراکتر از میان 95 کاراکتر اسکی قابل چاپ؛ مثل 6,uh3y[a.
- یک رشتهء تصادفی شامل 10 کاراکتر از میان 95 کاراکتر اسکی قابل چاپ؛ مثل H.*W8Jz&r3.
- یک رشتهء متنی شامل 40 کاراکتر؛ مثل This is a 40-character string of English.
- یک رشتهء متنی شامل 80 کاراکتر؛ مثل This is an 80-character phrase which you probably won’t be able to crack easily..

تصویر جدول ضمیمه است.

توضیحات مترجم:

این تخمین ها بر اساس قیمت سخت افزارهای سفارشی مخصوص کرک و عملیات رمزنگاری تهیه شده اند، نه کرک روی PC.
همانطور که مشاهده میکنید، بطور مثال هش یک پسورد 8 کاراکتری که در آن از حروف بزرگ و کوچک و اعداد و علامتهای مختلف استفاده شده است، در مدت یک سال با صرف هزینه های بسیار متفاوتی امکان پذیر است که این هزینه ها به الگوریتم استفاده شده برای تولید هش از پسورد بستگی دارند. بطور مثال هزینه برای کرک یک مرحله MD5 ساده کمتر از یک دلار است! اما با استفاده از الگوریتم های مخصوص مجهز به متد key stretching (http://en.wikipedia.org/wiki/Key_stretching) میتوان این هزینه را بسیار بالاتر برد. بطور مثال با الگوریتم PBKDF2 به 18 هزار دلار هزینه برای سخت افزار پایه جهت کرک چنین پسوردی نیاز خواهد بود، با الگوریتم bcrypt به 130 هزار دلار، و با الگوریتم scrypt به 4.8 میلیون دلار!

تعداد دورهای اینگونه الگوریتم ها (مجهز به key stretching) قابل تنظیم است که منجر به تفاوت زمان اجرا میشود؛ در مثال و هزینه هایی که ذکر کردم زمان اجرا بر روی یک پردازندهء 2.5 گیگاهرتزی Intel Core 2 Duo درحدود 100 میلی ثانیه (معادل یک دهم ثانیه) تنظیم شده است. زمان اجرای 100 میلی ثانیه از آنجا انتخاب شده است چون از نظر محققان این زمان حداکثر زمانی است که بصورت معقولی میتوان بر روی سیستمهای لاگین تحمیل کرد.

ضمنا توجه داشته باشید که این هزینه ها برای کرک فقط یک هش پسورد هستند. بنابراین اگر کرکر بخواهد 10 هش را مورد حملهء Brute-force قرار دهد، بطور مثال به 10 سال زمان یا 10 برابر هزینهء بیشتر برای سخت افزار پایه نیاز خواهد داشت (یا مثلا 2 سال زمان و 5 برابر هزینهء سخت افزار). هزینهء برق و موارد دیگر هم که جداست و محاسبه نشده است.

هزینهء سخت افزار مورد نیاز برای کرک یک سالهء پسورد 8 کاراکتری که هر کاراکتر از میان یکی از حروف کوچک انگلیسی انتخاب شده است:

PBKDF2: کمتر از یک دلار
bcrypt: چهار دلار
scrypt: صد و پنجاه دلار

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

یک مرحله MD5: کمتر از یک دلار
PBKDF2: هجده هزار دلار
bcrypt: صد و سی هزار دلار
scrypt: چهار و هشت دهم میلیون دلار

هزینهء کرک یک سالهء پسورد 10 کاراکتری هر کاراکتر متشکل از حروف کوچک و بزرگ و اعداد و علامتهای مختلف:

یک مرحله MD5: هزار و صد دلار
PBKDF2: صد و شصت میلیون دلار
bcrypt: یک و دو دهم میلیارد دلار
scrypt: چهل و سه میلیارد دلار

هزینهء کرک یک سالهء پسورد متنی (به اینگونه پسوردها Passphrase گفته میشود) 40 کاراکتری:

یک مرحله MD5: یک دلار
PBKDF2: دویست هزار دلار
bcrypt: یک و نیم میلیون دلار
scrypt: پنجاه و دو میلیون دلار

=====================

منبع: http://www.tarsnap.com/scrypt/scrypt.pdf

eshpilen
پنج شنبه 06 بهمن 1390, 00:46 صبح
توضیحی که لازم میبینم عرض کنم این است که توجه داشته باشید که این بحث مربوط به کرک هش پسوردهاست.
یعنی به شرط اینکه هکر به اطلاعات سایت دست پیدا کند، با استفاده از هش پسورد کاربران که در سایت ذخیره شده است بتواند به پسورد آنها پی ببرد.
این حمله ایست که هکر با استفاده از رایانه های خودش و بدون ارتباط با سایت اجرا میکند.

یعنی نگران این نباشید که فرضا اگر اکانت شما در سایت برنامه نویس یک پسورد 8 کاراکتری دارد پس پسورد شما آنقدر ضعیف است که اکانت شما براحتی هک میشود.
سایتها و نرم افزارهای درست و حسابی اغلب مجهز به یک سیستم Account lockdown هستند، یعنی پس از تعدادی تلاش لاگین ناموفق اکانت کاربر را برای مدتی قفل میکنند، یا بهرحال بوسیلهء مکانیزم دیگری جلوی تست تعداد زیادی پسورد در فاصلهء زمانی کوتاه روی اکانت کاربران را میگیرند، بنابراین اکانت شما به این سادگی هک نخواهد شد.

ضمنا تاخیری که انتقال ارتباطات از طریق اینترنت و محدودیت های سرور ایجاد میکنند خودش تاحدی موجب محدود شدن سرعت حمله های Brute-force میشود (اما نباید زیاد روی این اتکا کرد).

yones_safari
پنج شنبه 06 بهمن 1390, 11:02 صبح
یک مرحله MD5: کمتر از یک دلار

:قهقهه:
دادا امنیت sha512 همراه با سالت رندوم چه جوریه؟؟؟؟؟گزارشی از شکستش وجود داره؟؟؟؟؟

mbf5923
پنج شنبه 06 بهمن 1390, 11:35 صبح
جالب بود
راستی یه سوال
چند وقت پیش یه نفر ظاهرا روسی اعلام کرده بود که کدهای MD5 برای تمامی ترکیب های اعداد و حروف تا 128 کارکتر رو داره!
این به نظرتون امکان پذیره با توجه به هزینه های بالایی که اعلام شده یا اینکه طرف بلوف زده؟

eshpilen
پنج شنبه 06 بهمن 1390, 12:06 عصر
:قهقهه:
دادا امنیت sha512 همراه با سالت رندوم چه جوریه؟؟؟؟؟گزارشی از شکستش وجود داره؟؟؟؟؟
برای ذخیرهء پسورد کاربران نیاز به key stretching (http://en.wikipedia.org/wiki/Key_stretching) هم داره.
البته اینها هم که میبینید شکسته شدن نیست. این شکست الگوریتم های هش نیست.
این بخاطر ضعیف بودن پسوردهای انسان و کم بودن آنتروپی آنهاست که کرک آنها به روش Brute-force ممکن میشود. وگرنه مثلا یک پسورد رندوم طولانی قابل کرک شدن به این روشها نیست.
ما از متد key stretching (http://en.wikipedia.org/wiki/Key_stretching) استفاده میکنیم تا Brute-force را چند هزار برابر دشوارتر/زمانبرتر/گرانتر و بنابراین محدودتر کنیم و به این شکل از کرک شدن هش پسوردهای انسان محافظت بسیار بیشتری صورت بگیرد.

eshpilen
پنج شنبه 06 بهمن 1390, 12:14 عصر
جالب بود
راستی یه سوال
چند وقت پیش یه نفر ظاهرا روسی اعلام کرده بود که کدهای MD5 برای تمامی ترکیب های اعداد و حروف تا 128 کارکتر رو داره!
این به نظرتون امکان پذیره با توجه به هزینه های بالایی که اعلام شده یا اینکه طرف بلوف زده؟
از لحاظ تئوریک نمیتونم برای شدنی بودن چنین چیزی نظریه ای بیارم.
اما بنظر من همه چیز در جهان هستی امکان داره!
ولی یک ادعا مسلما به هیچ دردی نمیخوره.
راست میگه ثابت کنه!
ما راهی نداریم جز اینکه بر مبنای تحلیل تئوریک و محاسبات و آزمون و تجربیات و واقعیات و آمار در دسترس خودمون تصمیم بگیریم، نه اینکه هر روز یکی یه چیزی ادعا کنه و همه بر اساس اون یه کار دیگه بکنن.

البته بهرحال MD5 دیگه باید کنار گذاشته بشه و قبلا درش ضعف های جدی پیدا و مورد تست سوء استفادهء عملی هم واقع شده.

mbf5923
پنج شنبه 06 بهمن 1390, 12:19 عصر
یکی از دوستان میگفت اجازه میداد یه کد md5 بهش بدی و سریعا معادلش رو میداد! و اگه بیشتر میخواستی پولی بوده. ظاهرا سایت داشت که میپرسم و میذارم اینجا
اما فکر کنم با این روش key stretching که گفتین به هیچ عنوان نشه معادل کد رو بدست آورد درسته؟

eshpilen
پنج شنبه 06 بهمن 1390, 17:13 عصر
یکی از دوستان میگفت اجازه میداد یه کد md5 بهش بدی و سریعا معادلش رو میداد! و اگه بیشتر میخواستی پولی بوده. ظاهرا سایت داشت که میپرسم و میذارم اینجا
از این سایتها قبلا دیدم و تست کردم.
از rainbow table یا Brute-force یا ترکیبی از هردوش میتونن استفاده کنن.
محدودیتی که دیدم دارن اینه که فقط هشهای بدون salt رو کرک میکنن.
دوما تمام این روشها بر کم بودن تعداد حالتهای رشتهء اولیه که هش میشه استوار هستن.
یعنی md5 شکسته نمیشه، بلکه رشتهء ورودی تعداد حالتهاش اونقدری محدوده که هش های تمام حالتهای مختلفش در زمان شدنی ای قابل محاسبه/ذخیره هست.
بنابراین شما یه رشتهء رندومی اگر داشته باشی که تعداد حالتهاش بقدر کافی زیاد باشه، این سایتها نمیتونن کرکش کنن (خواستی نمونه هاش رو تست میکنیم).
پسورد هم اگر خیلی قوی باشه، قابل کرک نیست (حتی بدون سالت و حتی بدون key stretching). ولی طبیعتا اینطور پسوردها طولانی هستن و ساختار رندوم دارن و بنابراین حفظ کردن اونها برای انسان دشواره.


اما فکر کنم با این روش key stretching که گفتین به هیچ عنوان نشه معادل کد رو بدست آورد درسته؟نه با ورودیها/پسوردهایی که خیلی ضعیف هستن.
یعنی انتظار نداشته باشید هش رشته ای مثل 'my password' کرک نشه.
رشتهء ورودی باید طول/تعداد حالتهای ممکن زیادتری داشته باشه (و جزو پسوردهای متداول یا کلمات دیکشنری نباشه).

فرض کنید یک گاو صندوقی که توش اسناد محرمانهء مهمی هست میتونه رمز از عدد 3 رقمی تا عدد 20 رقمی داشته باشه.
و فرض کنید گاوصندوق به هر مدتی که دزد بخواد تحت اختیارش هست تا اون رو باز کنه. ولی فقط باید رمزش رو پیدا کنه و حق نداره/نمیتونه از روش دیگری برای باز کردنش استفاده کنه.
و یک دزد میتونه در هر 3 ثانیه یک رمز رو چک کنه (برای سادگی مثال، زمان چک کردن اعداد با تعداد ارقام مختلف رو یکسان فرض میکنیم).
حالا...
اگر پسورد 3 رقمی باشه، دزد میتونه از 000 تا 999 رو در 50 دقیقه چک کنه.
اگر رمز 6 رقمی باشه، حدود 35 روز زمان نیاز داره.
اگر رمز 10 رقمی باشه، به 951 سال وقت نیاز داره.

حالا ما کاری میکنیم که زمان مورد نیاز برای چک کردن هر رمز 1000 برابر بشه (key stretching).
در این صورت...
پیدا کردن رمز 3 رقمی به 35 روز زمان نیاز داره.
رمز 6 رقمی به 96 سال وقت نیاز داره.
رمز 10 رقمی به 951000 سال.

چیزی که میبینیم، رمز قوی 10 رقمی حتی بدون key stretching قابل کرک نبود. چون کسی 951 سال وقت نداره و بعد از این مدت هم محتویات گاوصندوق دیگه کاربرد و اهمیتی نخواهند داشت.
رمز 6 رقمی امن نبود چون با صرف 35 روز میشد اون رو باز کرد، ولی وقتی از key stretching استفاده کردیم این زمان به 96 سال رسید که میتونیم اون رو یک زمان امن فرض کنیم، چون نه برای کسی ممکنه یا صرف میکنه اینهمه زمان صرف کنه و نه بعد از 96 سال اون اسناد به دردی میخورن.
پس key stretching میتونه خیلی از رمزهایی رو که ناامن هستن امن کنه.
اما key stretching نمیتونه رمزهایی رو که خیلی ضعیف و ناامن هستن، مثل رمز سه رقمی، امن کنه. در مثال بالا میبینیم که زمان پیدا کردن رمز 3 رقمی حتی بعد از key stretching برابر با 35 روز هست که زمان عملی و به صرفه ای برای بدست آوردن اسناد محرمانه تلقی میشه.

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