MD5 مخفف Message-Digest 5 الگوریتمی برای خلاصه سازی عبارات می باشد. یک عبارات با هر طولی می تواند به عنوان ورودی انتخاب شود و در خروجی خلاصه ای از اثر انگشت دیجیتالی آن را با طول ۱۲۸ بیت در اختیار داشت. منظور از عبارت، هر رشته ای از بیت ها مانند یک متن یا یک فایل می باشد. این الگوریتم در سال ۱۹۹۱ توسط پروفسوررونالد ریوست اختراع شد.

الگوریتم MD5 برای داشتن سرعت بالا در ماشین های ۳۲ بیتی طراحی شده است در عین حال احتیاجی به جانشینی ها در جداول بزرگ ندارد. این الگوریتم را با کدهای بسیار کمی می توان نوشت. الگوریتم MD5 توسعه ای از الگوریتم MD4 می باشد با این تفاوت که MD5 کمی کندتر از MD4 عمل می کند اما در طراحی آن بسیار محافظه کارانه عمل شده است.

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

 

MD5 یک الگوریتم هش کردن (Hash function) می باشد. در الگوریتم های هش برای همه ی ورودی های با طول متفاوت، طول کد تولید شده ثابت و غیرقابل بازگشت می باشد. بنابراین در حقیقت روشن نیست که یک عبارت معادل یک رشته MD5 چیست . در MD5 نیز فایل های ورودی با هر اندازه و هر فرمتی که باشند، کد خروجی همیشه برابر با ۱۲۸ بیت (۱۶ بایت) خواهد بود که معمولا آن را در قالب ۳۲ عدد هگزادسیمال (مبنای ۱۶) نمایش می دهند.

همانطور که ذکر شد ویژگی دیگر این الگوریتم غیر قابل بازگشت بودن یا یک طرفه بودن کد تولید شده می باشد. یعنی نمی توان با استفاده از کد خروجی، ورودی الگوریتم را تشخیص داد. این ویژگی باعث شده است در موارد بسیاری از MD5 برای ذخیره سازی داده ها مانند ذخیره رمزهای عبور استفاده شود.

کدهای تولید شده توسط الگوریتم MD5 منحصر بفرد نیز می باشند. برای هر فایل ورودی، کد MD5 تولید شده یکتا خواهد بود و به همین دلیل آن را اثر انگشت فایل می نامند. به عنوان مثال اگر یک فایل را به عنوان ورودی به الگوریتم MD5 بدهیم، خروجی آن یک کد ۱۲۸ بیتی می باشد که با کد تولید شده برای هر فایل دیگری متفاوت می باشد و در صورتی که حتی یک بیت از فایل تغییر کند، کد MD5 آن تغییر عمده خواهد کرد و به همین دلیل است که در سایت های دانلود در کنار فایل، کد MD5 آن را نیز برای اطمینان از صحت فایل دانلود شده قرار می دهند. البته به طور مطلق نمی توان گفت که MD5 کد تکراری تولید نمی کند ولی احتمال تکراری بودن کد تولید شده یک در ۲۱۲۸=۳.۴*۱۰۳۸ می باشد که احتمال بسیار کمی است و می توان گفت صفر است.

کاربرد MD5

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

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

 

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

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

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

 

روشهای تولید MD5

در زبان های مختلف برنامه نویسی تابع های متفاوتی در خصوص تولید MD5 از یک عبارت موجود است. همینطور برای سهولت کار نرم افزارها و برخی وب سایت ها ابزارهای در این زمینه ارائه کرده اند.

یک ابزار ساده جهت تولید رشته های MD5 از عبارت دریافتی که به صورت آنلاین می باشد، “مولد MD5 کدباکس” است که با کمک آن به راحتی می توانید پیدا کنید برای هر عبارت MD5 آن چیست یعنی مولد MD5

رمزگشایی MD5

الگوریتم MD5 یکی از پرکاربردترین الگوریتم های هش کردن داده ها می باشد که می توان از آن برای اطمینان از صحت فایل ها و ذخیره سازی امن داده ها استفاده نمود. برنامه های بسیاری برای بدست آوردن کد MD5 یک فایل و یا یک متن وجود دارد. شما می توانید به صورت آنلاین در برخی سایت ها، کد MD5 داده ورودی خود را بدست آورید و یا از برنامه های معروفی مانند Md5sum، Md5Checker، WinMd5، WinMd5sum استفاده نمایید.

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

 

MD5 یا Message-Digest 5 الگوریتمی برای خلاصه سازی پیام می باشد که پیامی را با طول متفاوت به عنوان ورودی می گیرد و خلاصه پیام یا اثر انگشت دیجیتالی آن را با طول ۱۲۸ بیت به عنوان خروجی برمی گرداند. در اینجا منظور از پیام، هر رشته ای از بیت ها مانند یک متن یا یک فایل می باشد. این الگوریتم در سال ۱۹۹۱ توسط پروفسور رونالد ریوست اختراع شد. MD5 توسعه ای از الگوریتم MD4 است با این تفاوت که از امنیت بیشتری نسبت به MD4 برخوردار است ولی سرعت کمتری نسبت به آن دارد.

MD5 یک الگوریتم هش کردن (Hash function) می باشد. در الگوریتم های هش برای همه ی ورودی های با طول متفاوت، طول کد تولید شده ثابت و غیرقابل بازگشت می باشد. در MD5 نیز فایل های ورودی با هر اندازه و هر فرمتی که باشند، کد خروجی همیشه برابر با ۱۲۸ بیت (۱۶ بایت) خواهد بود که معمولا آن را در قالب ۳۲ عدد هگزادسیمال (مبنای ۱۶) نمایش می دهند. به عنوان مثال اگر رشته ی PARSDATA را به عنوان ورودی به MD5 بدهیم کد تولید شده C4442A612D1434C3792CAD960D686554 خواهد بود.

همانطور که ذکر شد ویژگی دیگر این الگوریتم غیر قابل بازگشت بودن یا یک طرفه بودن کد تولید شده می باشد. یعنی نمی توان با استفاده از کد خروجی، ورودی الگوریتم را تشخیص داد. این ویژگی باعث شده است در موارد بسیاری از MD5 برای ذخیره سازی داده ها مانند ذخیره رمزهای عبور استفاده شود.
کدهای تولید شده توسط الگوریتم MD5 منحصر بفرد نیز می باشند. برای هر فایل ورودی، کد MD5 تولید شده یکتا خواهد بود و به همین دلیل آن را اثر انگشت فایل می نامند. به عنوان مثال اگر یک فایل را به عنوان ورودی به الگوریتم MD5 بدهیم، خروجی آن یک کد ۱۲۸ بیتی می باشد که با کد تولید شده برای هر فایل دیگری متفاوت می باشد و در صورتی که حتی یک بیت از فایل تغییر کند، کد MD5 آن تغییر عمده خواهد کرد و به همین دلیل است که در سایت های دانلود در کنار فایل، کد MD5 آن را نیز برای اطمینان از صحت فایل دانلود شده قرار می دهند. البته به طور مطلق نمی توان گفت که MD5 کد تکراری تولید نمی کند ولی احتمال تکراری بودن کد تولید شده یک در ۲۱۲۸=۳.۴*۱۰۳۸  می باشد که احتمال بسیار کمی است و می توان گفت صفر است.