07-19-2015, 09:28 AM
نقل قول:من بهتون یک رشته دادم گفتم هکش کنید! رشته اولیه رو هم ازتون نخواستم باز دروغ نگید جانم! حتا بهتون گفتم بده گندت هکش کنه!ظاهرا حرفت رو مقداری عوض کردی. در جریان بحث قبلی فکر کنم بصورت ضمنی هم که شده اشاره داشتید به اینکه رشتهء اولیه رو بدست بیارم و اصولا بحث و برداشت شما درمورد کاربرد هش پسورد بود. حالا میگید گفتید هکش کن!
باید بگم اینکه بگی هکش کن یک حرف کلی و مبهمی هست! یعنی چی دقیقا؟
فرضا هک کردنی که شما میگی هم میشه به این گفت که رشتهء اولیه رو بدست بیاریم، میشه به این گفت که اصولا هر رشته ای که این هش رو تولید بکنه بدست بیاریم، که اینا قضیهء Preimage و second preimage هست و نه collision.
و دیگه چی میشه گفت؟ منظور شما از هک کردن یک رشتهء هش دقیقا چیه؟
اونی که در منابع اومده و انجام میشه چیز دیگه هست به شکل دیگری هست.
مثال میزنم!
مثلا میان یکسری مشخصات رو میدن به یک شرکت CA (شرکتهای صادر کنندهء گواهینامه های دیجیتال) میگن اینو برای ما امضاء کن گواهینامهء دیجیتالش رو بهمون بده. شرکت CA بررسی میکنه میبینه اطلاعات مشکلی نداره و مثلا مربوط به گوگل نمیشه مربوط به موجودیت دیگری نیست مربوط به همون سایت همون اشخاصه، اون اطلاعات رو امضاء میکنه و گواهینامهء دیجیتال میده به طرفها. حالا اگر اون گواهینامه از الگوریتم md5 برای هش اطلاعات استفاده کرده باشه (که درواقع این هش هست که با کلید خصوصی CA امضاء میشه، نه اطلاعات اولیه بصورت خام)، طرفها میتونن با روشهایی که هست و ضعفی که md5 در زمینه collision داره اطلاعات متفاوتی رو تولید کنن که دقیقا همون هش رو تولید میکنه، بعد میان اطلاعات جدید و متفاوت رو با اطلاعات اولیه که CA بررسی و امضاء کرده جایگزین میکنن و به این شکل یک گواهینامهء دیجیتال معتبر برای اطلاعاتی جعلی بدست میارن مثلا میتونن خودشون رو جای گوگل جا بزنن و به این شکل حمله های MITM انجام بدن.
پس دقت کردی که در اینجا حمله به این شکله که هر دو رشتهء اولیه توسط هکر انتخاب میشن و اینکه بگیم فلان رشتهء خروجی هش که معلوم نیست رشتهء اولیه چی بوده رو هک کن، هیچ معنی نمیده و به این سناریوها مربوط نمیشه.
این یک نمونه برات و برای خوانندگان زدم که بدونی چقدر بی سوادی در این زمینه و چقدر حرفهایی که میزنی یا حالا از روی نادانی یا از روی حقه بازی و مغلطه، بی معنی و مسخره است! ولی قبلا گفتم بازم میگم متاسفانه گیر بد کسی افتادی که هم سمج و حرفه ای بحث با افرادی مثل توئه و هم سواد و تخصصش در این زمینه بسیار بالاتر از افراد معمولیه.
مورد و مثال دیگر هم که درمورد تولید فایلهای با هش یکسان میشه گفت. که اونم کاربردهای خودش رو داره. بهرحال در تمام این کاربردها ما دو ورودی/رشته متفاوت پیدا میکنیم که هش یکسانی دارن. این دو ورودی توسط هکر انتخاب میشن یا حداقل یک ورودی از قبل مشخصه و دانسته توسط هکر، میاد ورودی متفاوت دیگری رو پیدا میکنه که همون هش رو تولید کنه. هش خروجی در این بین هیچ اهمیتی نداره که چی باشه، و شکل حمله با رشتهء هش خروجی شروع نمیشه، بلکه با داده اولیه شناخته شده یا تعیین شده توسط هکر شروع میشه. میزان و شکل کنترل و دستکاری این که هکر میتونه روی این دادهء اولیه و همچنین دادهء دوم (جایگزین) داشته باشه حالا جزییات فنی و بحث خودش رو داره ولی بر اساس منابع و نمونه ها در این شکی نیست که درمورد md5 اونقدری انعطاف داره دست هکر اونقدری باز هست که بتونه عملا ازش سوء استفاده جدی بکنه.
این داستانها جزییات فنی بیش از این داره (مثلا لزوما اینطور نیست که رشتهء اولیه بتونه براحتی هر چیزی باشه - ممکنه محدودیت های خاصی داشته باشه یا مثلا بقول منابع ظاهرا میگن که نیاز به یک Prefix مشترک داره که باید دید تا چه حد میتونه دلخواه یا تحت کنترل هکر باشه - بهرحال چیزی که هست قابل سوء استفاده است و عملا هم تست شده ثابت شده) که حتی منم کامل کامل نمیدونم 100% مطمئن نیستم و توضیحات من یک مقدار کلی و با اغماض از جزییات و نکات فنی بود، ولی بهرحال کلیت مثال درسته و فقط میخواستم اینو برسونم که چیزی که شما میگی بی معنی و بی ربطه! اینکه یک هش رو به من بدی و بعد بگی هکش کن، ربطی به حفره و سناریوهای مطرح شده درش نمیبینم! شما خودت بگو چیزی که میگی دقیقا یعنی چی تا بهت بگم! هکش کنم یعنی چی دقیقا؟ رشتهء اولیه رو بدست بیارم؟ رشته ای که لزوما رشتهء اولیه نیست ولی همون هش رو داره بدست بیارم؟ چکار کنم دقیقا؟ چیز دیگه ای به ذهن من نمیرسه!
گذشته از تمام اینها اصولا نیازی هم نیست که من حفره و سناریویی رو که مطرح کردم خودم عملا اجرا کنم چون منابع معتبر و نمونه هاش توی نت هست و مطلبی تردیدناپذیر و ثابت شده است که افرادی تونستن این کار رو انجام بدن. بطور مثال شما بگرد توی نت دنبال collision برای الگوریتم sha256 ببین پیدا میکنی؟ چرا نیست؟ و پس چرا برای md5 ده ها نمونه هست؟ چرا گواهینامه های دیجیتال فقط اونایی که از md5 استفاده میکنن آسیب پذیر هستن و جعل شدن؟ چرا فایلهای متفاوتی میشه تولید کرد که هش md5 اونا یکسانه ولی هش sha256 خیر؟ خب اگر مطلع و متخصص این رشته باشید میفهمید که چرا و اینکه این نمونه ها هست اثبات کاملی هست بر شکسته شدن امنیت md5. مثل همون مثال گاوصندوق که برات زدم! وقتی کسانی مدارکی رو که در گاوصندوق بوده بدست میارن ارائه میدن نشون میده ثابت میکنه که تونستن گاوصندوق رو باز کنن، حالا حتی اگر کسی جریان این کار رو ندیده باشه فیلمی ازش نباشه روشش مشخص نباشه. ولی درمورد md5 حتی روش و ابزارهاش هم در دسترسه تازه و متخصصان تایید کردن. ولی من دیگه ضرورت ندیدم و بارها گفتم رشته و هدف و کاربرد و اولویت من این وادی نیست که خودم بخوام برم عملا تست کنم (که معلوم هم نیست چقدر مطالعه و یادگیری بخواد چقدر سخت باشه چقدر زمان ببره شاید کم شاید هم زیاد). برای من همین منابع و نمونه ها اثبات تردیدناپذیره و چیزی که به دردم میخوره برام کاربرد داره همینه که بدونم از چه الگوریتم هشی و چطور استفاده کنم تا در برابر این حمله ها آسیب پذیر نباشه. اینقدر سواد دارم که حداقل مثل امثال تو بر اساس حدس و تصورات سطحی و بی پایه و شانس برنامه ننویسم. برای کاربردهای معمولی برنامه های محدود و شخصی یا برای شرکتها سازمانهای کوچک و کم اهمیت خب اکثرا مهم نیست، ولی برای کارهای جدی تر کارهای عمومی تر مهمتر مهمه که امنیت با تخصص بوده باشه و روی شانس و تصور و اطلاعات سطحی غیرمعتبر بنا نشده باشه، چون اونوقت هست که آدمهایی که دانش و توانش رو دارن ممکنه برن سراغ برنامت و حفره و اکسپلویتش رو دربیارن!