جمعه 6 اسفند 1395 |  عضویت / ورود

hash چیست؟ MD5 چیست؟ و چگونه بفهمید یک فایل به درستی دانلود شده است؟+پیشنهادی به سایت‌های دانلود


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

اگر از اینترت زیاد فایل دانلود کرده باشید، احتمالاً دیده‌اید که برخی سایت‌ها در کنار فایلی که برای دانلود قرار می‌دهند، یک کد نسبتاً طولانی و عجیب و غریب نیز قرار می‌دهند. مثلاً اگر برای دانلود VLC به سایت رسمی‌اش رفته باشید (اینجا) با چنین صحنه‌ای روبه‌رو می‌شوید:

http://img.aftab.cc/news/90/md5.png

شاید با خود فکر کرده باشید که این کد دیگر به چه درد می‌خورد؟

بحث تخصصی و دانشگاهی آن بسیار طولانی است و دانشجویان رشته IT معمولاً هم در کارشناسی و هم در ارشد با این مباحث سر و کار دارند، اما من اینجا، فقط یک توضیح عامیانه ارائه می‌کنم.

Hash چیست؟

هش که گاهی اوقات به آن اثر انگشت هم گفته می‌شود، فرایندی است که یک داده با حجم زیاد را به یک مقدار کوتاه با طول ثابت تبدیل می‌کند. یعنی اگر شما فایلی با حجم 100 مگابایت به این الگوریتم بدهید، به شما یک کد 32 رقمی تحویل می‌دهد. حتی اگر یک داده بسیار کوتاه مثل «Hello» را هم به آن بدهید، باز یک کد 32 رقمی تحویل خواهد داد.

به طور خیلی ساده، این الگوریتم بیت‌های خاصی از داده را انتخاب می‌کند و طی یک سری عملیات ریاضی یک کد مختص آن داده به دست می‌آورد. (البته این الگوریتم‌ها پیچیده‌تر از آن هستند که تصور می‌کنید، اما به بیان ساده همین کار را می‌کنند)

چند نکته:

- کدی که تحویل داده می‌شود، مثل یک اثر انگشت برای آن فایل یا داده است!

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

پیشنهادی به سایت‌های دانلودی:

می‌خواهم همین‌جا از فرصت استفاده کنم و از همه افرادی که فایلی را (به خصوص فایل‌های حجیم را) برای دانلود می‌گذارند، بخواهم که لطف کنند و یک کد MD5 از آن در کنار فایل قرار دهند تا کاربر در مواقعی که پیغام خطا می‌بیند، به دانلود خود شک نکند تا مجبور نباشد چندین بار آن فایل را دانلود کند و در نهایت متوجه شود که اصلاً فایل کلاً از ابتدا ایراد داشته!!

مثلاً اگر قرار است فایل firefox.exe را برای دانلود بگذارید، از آن فایل یک MD5 تهیه کنید و زیر آن بگذارید. این کار، چند ثانیه بیشتر طول نخواهد کشید!

اگر این فرهنگ جا بیفتد، چقدر صرفه‌جویی در ترافیک مصرفی و پهنای باند سایت شما و همینطور ترافیک مصرفی کاربر خواهد شد!
ضمن اینکه اگر فایلی از طرف شما به عنوان مدیر سایت، به درستی آپلود نشده باشد اگر یک کاربر مطمئن باشد که به درستی دانلود کرده و کد MD5 را به شما ارائه کند، شما با کد MD5 فایلی که روی سیستم خودتان است مقایسه می‌کنید و اگر مشابه نبود، این یعنی اینکه فایل به درستی آپلود نشده!

در زیر لینک دانلود، کد MD5 را قرار دهید و از طرفی یک لینک هم به یک مقاله بدهید با این عنوان «کد MD5 چیست؟» تا کاربر پس از مطالعه بداند که چطور صحت فایل را بررسی کند.

(ما در آفتابگردان سعی خواهیم کرد از این پس، این کار را برای تمام فایل‌هایی که برای دانلود خواهیم گذاشت انجام دهیم)

- کد هش، برگشت‌پذیر نیست!

این طبیعی‌ست که از کد هش نمی‌توان عبارت اصلی را استخراج کرد. یعنی شما نمی‌توانید از آن 32 رقم، کل آن 100 مگابایت داده را به دست آورید!
در اصطلاح گفته می‌شود: الگوریتم هش نباید معکوس‌پذیر باشد!

- آیا دو عبارت، کد هش یکسان نخواهند داشت؟

برای اثبات اینکه قطعاً دو عبارت پیدا خواهند شد که کد هش یکسانی داشته باشند، به تصویر زیر دقت کنید:

http://img.aftab.cc/news/90/conflict.png

دایره بزرگ، داده‌های قابل تصور است که طبیعتاً بی‌نهایت است. دایره کوچک، محدوده هش MD5 یا SHA-1 است که محدود است به یک تعداد کد 32 رقمی یا بیشتر. شما می‌خواهید دایره بزرگ را در دایره کوچک جا دهید! مشخص است که حتماً دو داده خواهیم داشت که کد هش یکسان داشته باشند. (Conflict)
البته این تصادم یا برخورد آنقدر احتمالش کم است که می‌توان گفت هرگز این اتفاق رخ نمی‌دهد!

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

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

-- اگر سایتی توانست بگوید پسورد شما چه بوده، هرگز امن نیست!

برای اینکه یک سایت را از لحاظ امنیتی تست کنید، فرض کنید پسوردتان را فراموش کرده‌اید. سایت‌ها معمولاً بخشی دارند به نام «پسوردم را فراموش کرده‌ام» به آنجا بروید و سعی کنید پسوردتان را بازیابی کنید. اگر آن سایت بتواند بگوید پسورد شما چه بوده (مثلاً بتواند پسورد را به ایمیل شما بفرستد) هرگز به آن سایت اعتماد نکنید! مشخص می‌شود که ناشی‌ترین برنامه‌نویس را داشته است.

سایت‌ها باید بتوانند پسورد شما را ریست کنند (یعنی بعد از اینکه مطمئن شدند شما صاحب این اکانت هستید، اجازه دهند که پسورد جدیدی انتخاب کنید) نه اینکه بگویند پسوردتان چه بوده!

- یعنی پسوردی که هش شد، هرگز توسط هکرها کشف نخواهد شد؟

در حالت کلی خیر، اما اگر پسورد شما یک پسورد روتین باشد، می‌توان آن‌را به راحتی فهمید!!
مثلاً یکی از راه‌ها این است که هکرها یک لیست از پرکاربردترین پسوردها پیدا می‌کنند (مثل 123456 یا 4321 و غیره) آن‌ها را هش می‌کنند تا کد هش شده‌اش به دست آید. حالا بررسی می‌کنند که کد هش شده‌ی پسورد شما برابر با کدامیک از این پسوردهای هش شده است!؟ به همین راحتی پسورد شما را کشف می‌کنند!
این لیست آنقدر بزرگ است که احتمال اینکه پسورد شما یکی از آن‌ها باشد زیاد است!
پس اینکه همه و بارها گفته‌اند که پسوردی انتخاب کنید که روتین نباشد و هیچ شخص دیگری استفاده نکرده باشد به همین خاطر است

ابزارهای هش:

- HashTab، ابزاری برای به دست آوردن کد MD5 یک فایل:

اگر می‌خواهید کد MD5 فایلی را به دست آورید، برنامه جالب HashTab را از طریق لینک زیر دانلود کنید:

http://yourl.ir/hashtab

پس از نصب، اگر روی فایل مورد نظرتان کلیک راست کرده و Properties را انتخاب کنید، خواهید دید که یک تب جدید به نام File Hashes وجود خواهد داشت که با کلیک روی آن، کد هش MD5 و SHA-1 مربوط به آن فال را خواهید دید.

http://img.aftab.cc/news/90/hashtab.png

- ابزار آنلاین برای محاسبه کد هش MD5 و SHA-1 یک عبارت:

در آدرس زیر:

http://yourl.ir/hash

ابزاری آماده کرده‌ایم که با وارد کردن یک عبارت بتوانید کد هش شده آن را ببینید. اگر برنامه‌نویس باشید، شاید گاهی نیاز پیدا کنید پس آدرسش را به خاطر بسپارید.

مثلاً اگر وارد کنید: 123456 ، خواهید دید:

کد هش شده با الگوریتم md5:
e10adc3949ba59abbe56e057f20f883e
کد هش شده با الگوریتم SHA-1:
7c4a8d09ca3762af61e59520943dc26494f8941b

 

- توجه: هدف این مقاله، بحث اساسی در مورد هش و بررسی این الگوریتم‌ها نبود چرا که ساعت‌ها توضیح نیاز دارد. امیدوارم توانسته باشم یک توضیح قابل فهم از این مفاهیم جذاب ارائه کرده باشم.

موفق باشید؛
حمید رضا نیرومند

کلمات کلیدی: MD5چیست؟، الگوریتم MD5، امنیت در طراحی وب،Hashچیست؟، هش، هش چیست؟، هش یا اثر انگشت، کد MD5 چیست؟، کد هش، کاربردهای کد هش، دانلود برنامه HashTab، معرفی برنامه، محاسبه کد هش، ابزار آنلاین محاسبه کد هش




بازدیدها از این مطلب: 12157 بار   امتیاز متوسط :   تعداد آراء: 4   امتیاز دهید:

نظرات طرح شده

نام: [ کاربر جدید ]
Email:

نظر: (اگر فیلد نظر خالی باشد، نظر شما ثبت نمی‌شود)


اجازه استفاده از تگهای HTML را ندارید


جمع عدد 12 با 11 را در كادر زیر وارد نمایید:
(این كار برای جلوگیری از فعالیت موتورهای اسپمر است)


* توجه: نظر شما بعد از بررسی، نمایش داده خواهد شد.

سعید فلاح (امتیاز : 0)(لینک نظر)
توسط سعید فلاح در مورخه : سه شنبه، 9 اسفند، 1390
خیلی جالب و کارآمد بود..

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

این کار بسیار کاربردی هست. سعی میکنم Hash رو در پایین لینک دانلودهام قرار بدم و این مقاله رو به دوستام معرفی کنم.



موفق باشید


[ ارسال جوابیه ]


[بدون موضوع]                توسط goodi659 در مورخه : پنجشنبه، 12 مرداد، 1391(لینک نظر)
سایت گراواتار هم نشانک هایش از این کد استفاده کرده:



*Creating the Hash*



http://fa.gravatar.com/site/implement/hash/


[ ارسال جوابیه ]


[بدون موضوع]                توسط bagherok در مورخه : پنجشنبه، 19 مرداد، 1391(لینک نظر)
سلام استاد

بعضی از برنامه نویسی های رو دیدم که در یه جاهای سورس های php رو با md5 کد کرده اند.

چطور مرورگر میتونه این کد هارو اجراکنه.

مثلا تو فوتر قالب های وردپرس یه کدی قرار میدند(مثلا سازنده قالب) که اگه اون کد رو پاک کنی سایت بالا نمیاد.


[ ارسال جوابیه ]


محمد (امتیاز : 0)(لینک نظر)
توسط محمد در مورخه : سه شنبه، 16 آبان، 1391
سلام.چطور میشه عکس بالا عمل کرد.اگه کد هش رو داشته باشم بخوام اصلشو بدست بیارم.

با تشکر


[ ارسال جوابیه ]


h (امتیاز : 0)(لینک نظر)
توسط h در مورخه : جمعه، 16 اسفند، 1392
سلام

لینک دانلود به میلم فرستاده نمی شود .لطفا برررسی فرمایید باتشکر


[ ارسال جوابیه ]


مهدی                توسط مهدی در مورخه : شنبه، 4 مرداد، 1393(لینک نظر)
نکات اساسی و به قول خودمون لپ مطلب رو گفتی. ممنون. بسیار کارآمد و مفید بود.


[ ارسال جوابیه ]


علی                توسط علی در مورخه : شنبه، 3 آبان، 1393(لینک نظر)
خیلی خوب بود مرسی

من یه ویندوز دانلود کردم مونده بودم SHA1 که نوشته چیه


[ ارسال جوابیه ]


mehdi m/n/m (امتیاز : 0)(لینک نظر)
توسط mehdi m/n/m در مورخه : چهارشنبه، 31 تیر، 1394
vaghan ali bod merc

3>


[ ارسال جوابیه ]


[بدون موضوع]                توسط در مورخه : یکشنبه، 6 دی، 1394(لینک نظر)
به نظرم مطلب کوتاه و مفیدی بود. با نهایت تشکر


[ ارسال جوابیه ]


محمد                توسط محمد در مورخه : شنبه، 1 اسفند، 1394(لینک نظر)
سلام

ممنون

استفاده كردم


[ ارسال جوابیه ]


DaneSh (امتیاز : 0)(لینک نظر)
توسط DaneSh در مورخه : پنجشنبه، 6 اسفند، 1394
Ronald Rivest ast digar , gahi delesh mikhad ye hamchinn chizayi doros kone :)


[ ارسال جوابیه ]


sahar (امتیاز : 0)(لینک نظر)
توسط sahar در مورخه : شنبه، 11 اردیبهشت، 1395
عالی بود ممنون


[ ارسال جوابیه ]


mohsen farajollahi (امتیاز : 0)(لینک نظر)
توسط mohsen farajollahi در مورخه : پنجشنبه، 2 دی، 1395
با عرض سلام و خسته نباشید خدمت شما دوست عزیز
مطلب واقعا عالی بود ولی من هنوز یک سوالی در ذهنم مونده!!!!
نمیدونم تا به حال با وردپرس کار کردید یا نه ولی یک بار من رمز عبورم رو گم کردم.
طبق جست و جو در اینترنت به یک سایتی رفتم که پسورد من رو به هش تبدیل میکرد و من اون رو به جای پسورد قبلیم توی دیتابیسم ذخیره کردم و تونستم باز به وردپرس با پسورد جدید لاگین شم.
پس چه طور ممکن هست که یک هکر با این کار نتونه اطلاعات ما رو به دست بیاره؟!
فکر کنم یک بحث جداست... ولی چه طور میتونیم خودمون رو کامل ایمن کنیم؟!
و در ضمن یک سوال دیگه ویروس های کامپیوتری هم کد هش دارند؟! چون من تو یک بدافزار ایرانی به نام مارمولک که تحقیق میکردم یک کد هش به من تحویل داده بود!
و آیا ممکن هست هش دو فایل که اصلا ربطی به هم ندارند و فرق میکنند یکی باشه؟!
با تشکر از فعالیت شما من با اینکه سنم هنوز کمه ولی با سایت شما اکثر چیز ها رو یاد گرفتم ممنون :)


[ ارسال جوابیه ]