به گزارش خبرنگار حوزه دریچه فناوری گروه فضای مجازی باشگاه خبرنگاران جوان، درهم سازی و یا تبدیل یک رشته داده به یک مقدار یا رشته با اندازه ثابت نمونهای از رمزنگاری اطلاعات محسوب میشود که آن را با عنوان Hashing میشناسیم. فرآیند Hashing یا درهم سازی در واقع به تبدیل یک رشته داده به یک مقدار یا رشته با اندازه ثابت که این رشته یا مقدار خروجی نمایانگر رشته اصلی باشد، گفته میشود. بطور مثال، تصور کنید که شما یک فایل متنی با ۱۰ هزار خط متن را به یک الگوریتم درهم سازی یا Hashing میسپارید و خروجی آن یک رشته داده ۱۲۸ بیتی خواهد بود، در همین حین اگر شما یک فایل متنی با ۱ خط متن هم به همین الگوریتم درهم سازی یا Hashing تحویل دهید در نهایت خروجی شما نیز یک رشته داده ۱۲۸ بیتی خواهد بود.
تصور کنید شما هزاران فایل داده دارید با حجمهای مختلف که میخواهید در آنها جستجو کنید، به جای اینکه به دنبال فایل اصلی بگردید کافیست که فقط به دنبال مقدار Hash مورد نظر بگردید و این فرآیند جستجوی شما را در پایگاههای داده بسیار سریع میکند.
یکی از پر کاربردترین استفادههای یک تابع درهم سازی یا Hashing Function در پایگاه دادههای وب سایتها یا حتی سیستم خود شما برای نگهداری رمزهای عبور است. تمامی رمزهای عبوری که در پایگاه داده یک وب سایت ذخیره میشوند به حالت Hash شده نگهداری میشوند، این یعنی اینکه اگر رمز عبور شما ۱ کاراکتر باشد و یا اینکه ۱۰۰ کاراکتر باشد در نهایت بصورت مثلا یک رشته داده ۱۲۸ بیتی در پایگاه داده بصورت درهم سازی شده نگهداری میشود.
هر بار که شما میخواهید به وب سایت وارد شوید، رمز عبور شما دریافت میشود و تبدیل به مقدار یا Hash Value میشود و با پایگاه داده مورد نظر مقایسه میشود، اگر مقادیر برابر بود یعنی رمز شما درست است، دیگر فرقی نمیکند رمز شما یک کاراکتر باشد یا دهها کاراکتر در نهایت سرعت جستجو در چنین حالتی بسیار بالا خواهد رفت.
نکته مهم در خصوص توابع درهم سازی یا Hashing Functionها این است که اندازه فایل داده ورودی شما هر اندازه که باشد در نهایت یک رشته داده مشخص خروجی خواهید داشت و حتی اگر یک بیت از دادههای اولیه شما تغییر کند، خروجی شما کاملا متفاوت خواهد بود و این یعنی اینکه میتوان با استفاده از الگوریتمهای درهم سازی یا Hashing صحت دادههای شما را بررسی کرد، درست همان کاری که در بررسی رمزهای عبور شما انجام میشود.
بد نیست بدانید، شما اگر میخواهید از صحت و تمامیت داده ارسالی یا دریافتی خود در مسیر یک شبکه اطمینان حاصل کنید کافیست به جای اینکه به ازای هر بیت ارسالی یک بسته تاییدیه یا Acknowledge دریافت کنید، ابتدا در مبدا از فایل خود یک مقدار Hash تهیه کنید و بعد از رسیدن به مقصد نیز مجددا از فایل خود یک Hash تهیه کنید و مقادیر را با هم مقایسه کنید، در صورتیکه مقادیر شما یکسان باشد فایل شما حتی اگر چند ترابایت داده نیز داشته باشد قطعا سالم و درست خواهد بود.
نکته بسیار مهم در خصوص الگوریتمهای درهم سازی یا Hashing این است که شما میتوانید دادههای خود را به مقادیر Hash تبدیل کنید، اما به هیچ عنوان نمیتوانید از مقادیر Hash دادههای خود را استخراج کنید، بدین معنا که شما میتوانید یک فایل یک ترابایتی داده را تبدیل به یک مقدار ۱۲۸ بیتی Hash کنید، اما قطعا نمیتوانید از این مقدار Hash داده یک ترابایتی خود را استخراج کنید، به همین دلیل است که از الگوریتمهای درهم سازی یا Hashing به عنوان الگوریتمهای رمزنگاری یک طرفه یا One Way یاد میشود یعنی داده فقط تبدیل به مقدار Hash میشود و عکس این عمل قطعا انجام نخواهد شد.
البته از الگوریتمهای درهم سازی یا Hashing در مصارف یا بهتر بگوییم در الگوریتمهای دیگر رمزنگاری بصورت ترکیبی نیز استفاده میشود که از جمله آنها میتوانیم به استفاده از Hashing در رمزنگاری و رمزگشایی امضاهای دیجیتال اشاره کنیم. خروجی الگوریتمهای درهم سازی یا Hashing به هیچ عنوان در صورت متفاوت بودن ورودیهای دادهای آن یکسان نخواهد بود مگر اینکه داده ورودی یکسان باشد.
حال این سوال پیش میآید که؛
در ابتدا باید بدانید که؛ الگوریتمهای Hashing برای انجام عمل Hash از کل دیتا اولیه استفاده نمیکنند بلکه بخشی از دیتا را برداشته و با انجام محاسبات مختلف و پیچیده این کار را انجام میدهند لذا در صورت امکان برگشت مراحل طی شده هیچگاه به دیتای اولیه نخواهیم رسید.
حال این سوال پیش میاید که ؛
روش کار بسیار ساده است این نرم افزارها یک دیتابیس از کلمات، جملات، اعداد و… را دارند و همه را جداگانه Hash کرده اند لذا زمانیکه شما یک مقدار Hash به ورودی میدهید تنها با انجام عمل مقایسه داده شما با نتایج Hash شده درون دیتابیس به مقدار اولیه دست پیدا میکنند.
انتهای پیام/