مقایسه Hashing و Encryption
تفاوت رمزنگاری و هشینگ در چیست؟
دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و … با برترین های ایران
مکانیزم هاي encryption و hash عمليات به ظاهر مشابهي رو بر روي اطلاعات انجام ميدن و اون هم رمزنگاری اطلاعات هستش. خب در نگاه اول تفسیر بدي نیست ولي اين دو عمليات تفاوت های پايه اي بسیار مهمي با هم دارند که توي اين مقاله مي خوایم به اون ها بپردازیم.به عنوان نکته اول اين که وقتي ما در مورد رمزنگاری اطلاعات صحبت مي کنيم مهم هست که داریم در مورد اطلاعات در حال انتقال صحبت مي کنيم (يعني اطلاعات در حال انتقال در شبکه) و يا اطلاعات ساکن (یعني اطلاعاتي که در قالب هاي مشخص روي دیسک ذخیره شدند.) اين نکته رو فعلا داشته باشید تا بهش برسیم.
مکانیزم encryption یه مکانیزم دو طرفه هستش. یعنی اطلاعات شما با استفاده از يک عبارت که به اون کليد ميگیم، توسط يک الگوریتمی مياد و encrypt می شه و اگه کليد مربوطه رو کسی داشته باشه مي تونه مقدار encrypt شده رو decrypt کنه و به اطلاعات دسترسی پیدا کنه. حالا اين کليد می تونه مدل هاي مختلف داشته باشه مثل Preshaed Key، Private/public key، PKI with CA و…
مکانیزم hash یه مکانیزم يک طرفه هستش. یعني برای اطلاعات شما با استفاده از يک الگوریتمی مياد و مقدار hash و يا به عبارت صحیح تر، مقدار Message Digest رو محاسبه مي کنه. به اين عمليات مي گيم یک طرفه، چون شما از مقدار Message Digest محاسبه شده نمي تونید به مقدار اولیه اطلاعاتتون برسید. (یا بهتره بگیم قرار نیست که برسید، چون مثلاً type7 که یک مکانیزم hashing براي passwordهاي سیسکو هست به دلیل مشکلاتي که داره به راحتي قابل کرک کردن یا بازگردانی است)
تفاوت مهم ديگه در خصوص حجم هست. مقدار Message Digest تولید شده توسط يک الگوریتم hash هميشه ثابته، چه شما يک عبارت 8 کاراکتری رو hash کنید، چه يه فايل 8 گيگي. اين مورد در رابطه با encryption کاملا متفاوت هست. چراکه حجم دیتاي encrypt شده کاملا وابسته هست به حجم اطلاعاتي که دارید encrypt می کنید.
خب حالا بریم سراغ موارد کاربرد اين دو عمليات تا در قالب مثال هاي پياده سازی شده بهتر تفاوت اين دو رو درک کنيم. با توجه به نکته ای که در ابتدای مقاله گفتم، اول مي ريم سراغ دیتای در حال انتقال و بعدش مي ریم سراغ دیتای ساکن. تفاوت ها در همين دو تا پاراگراف بیان شدن و هدف از مثال ها اين هست که ديدگاه درستی نسبت به مکانیزم هاي موجود ايجاد بشه.
خیلی وقت ها به جهت امن سازی و نگهداری passwordها از مکانیزم hash استفاده مي شه. مثلا سیسکو از اين روش زیاد استفاده مي کنه (مثلا امن سازی پسورد های دسترسی به تجهیزات، مکانيزم هاي Routing Protocols Authentication و…). اتفاقی که ميفته اينه که در اين مکانیزم مقدار password اصلا ذخیره نميشه. و تنها مقدار hash شده یا همون Message Digest هست که داره ذخیره مي شه. نحوه چک کردن password هم به اين صورت هست که عبارتی که به عنوان پسورد وارد می شه، مقدار Message Digest براي اون محاسبه مي شه و اگر با مقدار ذخیره شده يکسان بود، نتيجه اين خواهد بود که مقدار password وارد شده صحیح بوده است.پس برای نگهداری passwordها معمولا از مکانیزم هاي hashing استفاده می شه.
فرایند بالا در مکانیزم encryption متفاوت است. اگه شما با استفاده از مکانیزم preshared key بیاید يک عبارت رو encrypt کنید، مقدار password همون مقداری هست که برای dycrypt کردن اون اطلاعات مورد استفاده قرار مي گیره. مثل مکانیزم هاي encryption در ارتباطات wifi که ميان از مکانیزم هاي encryption استفاده مي کنن نه hashing.
حالا يه نمونه مثال ترکيبي رو با هم بررسی مي کنيم که براي افزايش امنيت از هر دو روش استفاده ميشه. از مکانیزم encryption معمولا براي رمزنگاری اطلاعات در هنگام انتقال استفاده می شه، با استفاده از مکانیزم هايي مثل IPSec Tunneling، VPN و… در اين مکانیزم اطلاعات پيش از انتقال با استفاده از کليد encryption رمزنگاری میشن و به صورت رمزنگاری شده انتقال پيدا مي کنن و پس از رسیدن به مقصد با استفاده از کلید dycrypt ميشن. توجه داشته باشید در اين روش مقدار کليد encryption، بین مبدا و مقصد با استفاده از مکانیزم هاي hashing رد و بدل ميشه.
حالا بریم سراغ اطلاعات ساکن، يعني فايل هاي ذخیره شده.مکانیزم Hashing براي فايل هاي ساکن فقط یک کاربرد داره. اين که ببینیم فایل ما دچار تغيير محتوا شده يا خیر. مثلا زماني که شما يک فايل ISO رو از اينترنت دانلود مي کنيد ميبينيد که مقدار hash رو هم در اختیارتون قرار مي ده. براي اينکه پس از دانلود مقدار hash فایلتون رو محاسبه کنيد و با مقدار hash اولیه مقایسه کنید. اگه يکي بود معنيش اين هست که فایل شما دچار تغيير نشده.
زماني که شما يک فايل یا حتي يک partition رو encrypt مي کنید، برای اين موضوع هست که فقط افرادي که کلید مربوطه رو دارن بتونن به محتواي فايل دسترسی پیدا کنن.البته ميشه مثال هاي بیشتری رو هم بررسی کرد، مثل عمليات Authentication در SSH با استفاده از مکانیزم Private/public key يا نحوه عملکرد CA در زیرساخت هاي PKI، بررسی Biometric Authentication و… ولي باعث ميشه تا از بحثمون فاصله بگیریم. هدف اصلي ما مقایسه encryption و hashing بود و مثال هايي رو براي اين اوردیم که با مدل به کار گیری هر کدوم بیشتر آشنا بشیم.