هش چیست و چگونه برای امنیت بیشتر از آن استفاده کنیم؟

 

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

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


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

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

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

 

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

چطور هش (Hash) را محاسبه کنیم؟

حالا می رسیم به اصل مطلب. چطور باید هش رو به دست بیاریم؟ برنامه ها و سایتهایی هستن که این کار رو انجام میدن، اما همونطور که توی تصویر بالا دیدین، من از پاورشل ویندوز استفاده کردم و بدون استفاده از نرم افزارهای جانبی هش رو به دست آوردم. برای انجام کار از این روش، توی منوی استارت ویندوز، عبارت PowerShell رو تایپ کنین و از لیست بالاش Windows PowerShell رو اجرا کنین. یه صفحه ای شبیه به صفحه ی بالا باز میشه. حالا دستور:

Get-FileHash   FileName.ext

رو تایپ کنین. البته به جای Filename.ext باید اسم فایل خودتون رو همراه با مسیرش بنویسین و توجه کنین که اگه توی اسم یا مسیر فایل تون کاراکتر فضای خالی وجود داره، کل عبارت مربوط به اسم و مسیر فایل رو توی گیومه قرار بدین. مثلا اینطوری:

“Get-FileHash  “C:New FolderFile Name.ext

بعدش هم کلید Enter رو بزنین و براساس حجم فایل تون، چند لحظه منتظر بمونین تا هش محاسبه بشه و به نمایش در بیاد. فقط باید به این نکته هم توجه کنین که محاسبه ی هش الگوریتم های مختلفی داره. توی مثال بالا از الگوریتم SHA256 استفاده شده، ولی ممکنه شما بخواین فایلی رو دانلود کنین و به هر دلیلی هش SHA256 در کار نباشه و مثلا رشته ی MD5 رو براتون روی سایت گذاشته باشن، در این حالت می تونین از سوئیچ Algorithm- به همراه دستور بالا استفاده کنین. چطوری؟ اینطوری 🙂

 Get-FileHash   “C:New FolderFile Name.ext” -Algorithm MD5

اینجا از الگوریتم MD5 برای محاسبه ی هش استفاده کردیم. الگوریتم های دیگه ای مثل SHA256 ,SHA384, SHA512, SHA1 و… هم روی میز موجود است 🙂 فقط نکته ای که نباید فراموش کنیم اینه که باید از الگوریتم یکسانی در مبدا و مقصد استفاده بشه تا جواب درست به دست بیاد. یعنی اگه سایتی از الگوریتم MD5 برای محاسبه ی هش استفاده کرده و رشته ی هش رو در اختیار ما گذاشته، ما هم باید از الگوریتم MD5 برای محاسبه استفاده کنیم و در اینصورت اگه رشته ی موجود در سایت با رشته ای که خودمون به دست آوردیم دقیقا یکسان بود، یعنی فایلی که ازش استفاده می کنیم دقیقا همون فایلی هست که باید باشه…

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

دو واحد کار عملی:

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


ممکنه رشته ای که توی سایت قرار گرفته و رشته ای که شما به دست میارین از لحاظ بزرگ/کوچک بودن کاراکترها با هم تفاوت داشته باشن که این به معنی مغایرت نیست. یعنی a و A در این مورد تفاوتی باهم ندارن.

 

مطالب مرتبط

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *