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

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

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

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

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

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

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