اگر فکر می کنید که تفاوتی بین 3 واژه Hashing ، Encryption و Encoding وجود دارد پس درست حدس زدید. شما شخصی هستید که به این موضوع فکر کرده اید و این نوشته این تفاوت را به شما نشان خواهد داد.
در مورد این 3 واژه سردرگمی بسیار زیادی وجود دارد. همانطور که ممکن است شبیه به نظر برسند، همه آنها مفاهیم کاملاً متفاوتی دارند.
قبل از بررسی این 3 واژها ، ابتدا چند نکته را بررسی می کنیم.
از نقطه نظر امنیتی هنگام ارسال داده/پیام در بستر اینترنت مهمترین اطلاعات چه چیز هایی هستند؟
ابتدا، میخواهید به طرف مقابلتان اطلاع دهید که پیام از طرف شما ارسال شده است – نه از طرف شخص دیگری.
دوم، شما تمایل دارید پیام دقیقاً در همان قالب باشد – بدون هیچ گونه تغییر یا اصلاح تحویل گردد.
و سوم، شما می خواهید پیام شما در برابر دسترسی افراد بد نیت ( مانند هکرها، کلاهبرداران و انواع دیگر مجرمان سایبری) محافظت گردد.
این 3 عملکرد را می توان به صورت زیر تعیین کرد:
- تایید هویت (Identity Verification)
- تمامیت (Integrity)
- محرمانه بودن (Confidentiality)
این عملیات دقیقا توسط Hashing و Encryption انجام می شود! بنابر این ، ممکنه فکر کنید که \”که Hashing و Encryption یکسان باشند؟\” پاسخ خیر است .
بیایید با Hashing شروع کنیم .
درهم سازی یا Hashing چیست؟
بیایید سعی کنیم دنیای وب را بدون Hashing تصور کنیم. فرض کنید، تولد کسی است و شما تصمیم دارید یک پیام \”تولدت مبارک\” برای او ارسال کنید. دوست گیک (و بامزه!) شما تصمیم می گیرد با هزینه شما کمی خوش بگذراند، بنابراین پیام \”تولدت مبارک\” شما را به پیام \”بمیری\” تبدیل می کند (تصور کنید چه اتفاقی می افتد!). حتی امکان دارد دوستی شما به هم بخورد.
جدا از شوخی، Hashing از تمامیت داده های شما محافظت می کند. یعنی از داده های شما در برابر تغییرات احتمالی محافظت می کند تا داده های شما یک بیت تغییر نکند.
در اصل، Hash عددی است که از طریق یک الگوریتم Hash از متن مورد نظر تولید می شود. این عدد از متن اصلی کوچکتر است.
الگوریتم به گونه ای طراحی شده است که هیچ کدام از دو هش تولید شده برای دو متن مختلف یکسان نباشد. و بازگشت از مقدار هش به متن اصلی غیرممکن است (البته تقریباً!).
به نوعی شبیه گاوی است که روی پله ها حرکت می کند – می تواند به طبقه بالا حرکت کند اما پایین نمی رود!!
به پیام \”تولدت مبارک\” خود برگردیم. اگر پیام خود را هش کرده باشید، دوست شما پیام مورد نظر را بررسی می کند و مقداری متفاوتی از آنچه که باید برگردد را میبیند. در آن مرحله، دوست شما متوجه خواهد شد که پیام دستکاری شده است.
منحصر به فرد بودن یکی از ضروری ترین ویژگی های هش است. نمی تواند یک مقدار هش برای متن های مختلف وجود داشته باشد. حتی کوچکترین تغییر/تغییر مقدار هش را به طور کامل تغییر می دهد. این اثر بهمن(Avalanche Effect) نامیده می شود.
بیایید با یک نمونه Hashing را بررسی کنیم. در مثال زیر، الگوریتم SHA-1 را اعمال کرده ایم. اجازه دهید بررسی کنیم که چه اتفاقی خواهد افتاد.
متن: همه دونات دوست دارند.
SHA-1 مقدار هش متن بالا: daebbfdea9a516477d489f32c982a1ba1855bcd
وارد بحث دونات نمی شویم و فعلاً روی هش کردن تمرکز کنیم. حالا اگر کمی تغییر در جمله بالا ایجاد کنیم، مقدار هش کاملا تغییر خواهد کرد.
متن جدید: همه عاشق دونات هستند.
SHA-1 مقدار هش متن جدید: 8f2bd584a1854d37f9e98f9ec4da6d757940f388
ببینید چگونه مقدار هش به طور کامل تغییر کرد؟ حتی اگر یک حرف تغییر کند متن هش کاملا تغییر خواهد کرد.
شاید متفاوت باشد اما ما در آموزش لینوکس مقدماتی برای هکر ها آموزش داده ایم که چگونه یک هکر می تواند رد پاهای خود را درهم ریزی کند تا کارهای صورت گرفته را نتوان تشخیص داد.
موارد استفاده از Hashing
- هش کردن شیوه ای موثر برای مقایسه و جلوگیری از تکرار در پایگاههای داده است.
- در امضای دیجیتال و گواهینامه های SSL استفاده می شود.
- از هش می توان برای یافتن یک قطعه خاص از داده ها در پایگاه های داده بزرگ استفاده کرد.
- به طور گسترده ای در گرافیک کامپیوتری استفاده می شود.
- برای ذخیره رمز عبور از آن استفاده می گردد.
رمزگذاری یا Encryption چیست؟
تصور اینترنت بدون رمزگذاری تقریبا غیرممکن است . رمزگذاری چیزی است که دنیای مجازی اینترنت را ایمن نگه می دارد.
با رمزگذاری داده ها آنها را ایمن و محرمانه نگه می داریم. اساساً، این فرآیند تبدیل داده های محرمانه شما به یک قالب غیرقابل خواندن است به طوری که هیچ هکر یا مهاجمی نتواند داده های شما را دستکاری یا سرقت کند. بنابراین، در خدمت هدف محرمانگی (Confidentiality) .
رمزگذاری داده ها از طریق کلیدهای رمزنگاری انجام می شود. اطلاعات قبل از ارسال و رمزگشایی توسط گیرنده رمزگذاری می شوند. بنابراین، داده ها زمانی که \”در بستر ارتباطی\” قرار دارند ایمن هستند یعنی غیر قابل خواندن هستند.
بر اساس ماهیت کلیدها، رمزگذاری را می توان به دو دسته اصلی طبقه بندی کرد:
- رمزگذاری متقارن
- رمزگذاری نامتقارن
رمزگذاری متقارن
در رمزگذاری متقارن، داده ها با استفاده از یک کلید رمزنگاری رمزگذاری و رمزگشایی می شوند. به این معنی که کلید مورد استفاده برای رمزگذاری برای رمزگشایی نیز استفاده می شود.
ما در آموزش زبیکس اطلاعاتی را که باید بین سرور و کلاینت رد و بدل شوند را توسط رمزگذاری متقارن ایمن سازی کی کنیم. این یکی دیگر از کاربردی های رمزگذاری است.
رمزگذاری نامتقارن
رمزگذاری نامتقارن یک تکنیک نسبتاً جدید در مقایسه با همتای خود (رمزگذاری متقارن) است. که شامل استفاده از دو کلید مختلف است، یکی برای رمزگذاری و دیگری برای رمزگشایی. یک کلید به عنوان \”کلید عمومی\” و دیگری به عنوان \”کلید خصوصی\” شناخته می شود.
کلید عمومی تقریباً در همه جا وجود دارد. حتی شما بدون اینکه بدانید آن را در اختیار دارید. هر بار که از یک وب سایت دارای HTTPS بازدید می کنید، کلید عمومی در مرورگر وب شما ذخیره می شود.
وقتی هر داده ای را به یک سایت رمزگذاری شده ارسال می کنید، با استفاده از کلید عمومی رمزگذاری می شود. از طرف دیگر، کلید خصوصی فقط در اختیار گیرنده است و باید محتاطانه نگه داشته شود. کلید خصوصی برای رمزگشایی داده های رمزگذاری شده استفاده می شود. استفاده از دو کلید مجزا فرآیند رمزگذاری را ایمن تر و کمی کندتر می کند.
هر دوی این تکنیکها در گواهیهای SSL/TLS استفاده میشوند. رمزگذاری نامتقارن ابتدا در فرآیند دست تکانی SSL اعمال می شود. اعتبار سنجی سرور در این مرحله انجام می گردد. هنگامی که اتصال بین سرور و مشتری برقرار شد، رمزگذاری نامتقارن از رمزگذاری داده ها مراقبت می کند.
Encoding چیست؟
برخلاف رمزگذاری و درهم سازی، Encoding برای اهداف امنیتی استفاده نمی شود. اساساً، فقط یک تکنیک برای تبدیل داده ها به فرمت های دیگر می باشد تا بتواند توسط سیستم های متعدد استفاده شود. در Encoding از کلید استفاده نمی شود.
الگوریتمی که برای رمزگذاری داده ها استفاده می شود برای رمزگشایی آن نیز استفاده می شود. ASCII و UNICODE نمونه هایی از این الگوریتم ها هستند.
بیایید کمی به عقب برگردیم
- Hashing: رشته ای از اعداد تولید شده برای تایید تمامیت (Integrity) داده ها از طریق الگوریتم های هش است.
- Encryption: تکنیکی است که برای حفظ محرمانه بودن داده ها از طریق تبدیل داده ها به فرمت غیرقابل کشف استفاده می شود.
- Encoding: تبدیل داده ها از یک فرمت به فرمت دیگر.