هَش (Hash) یا الگوریتم درهمساز چیست و چگونه استفاده میشود؟
جهت آشنایی شما با سیستمهای همتا به همتا (Peer to Peer) تصمیم گرفتیم تا مفاهیم مرتبط با این سیستم را در نوشتههایی مجزا به صورت ساده توضیح دهیم. در این نوشته نیز به مفهوم هَش (Hash) یا الگوریتم درهمساز و کاربرد آن میپردازیم.
جهت آشنایی شما با سیستمهای همتا به همتا (Peer to Peer) تصمیم گرفتیم تا مفاهیم مرتبط با این سیستم را در نوشتههایی مجزا به صورت ساده توضیح دهیم.
در اولین نوشته از مجموعهی این مقالات مفهوم Caching را توضیح دادیم. در این نوشته نیز به مفهوم هَش (Hash) یا الگوریتم درهمساز و کاربرد آن میپردازیم.
۲. هَش (Hash) یا الگوریتم درهمساز چیست؟
در علم ریاضیات و کامپیوتر، برای ناخوانا کردن اطلاعات و یا تبدیل و یکسانسازی اطلاعات با حجم و اندازههای متفاوت به یک اندازه خاص از الگوریتمی به نام هَش یا درهمساز استفاده میکنند. برای درک بهترِ مفهوم هَش یک مثال ساده میزنیم.
تصور کنید که قصدِ خرید هدیهی عید برای دوستان خود را دارید. برای این کار شما میخواهید ۹ هدیهی متفاوت بخرید و قصد دارید که هدیهها را بدون پارتی بازی بین دوستانتان تقسیم کنید. در این موقعیت میتوانید به راحتی از الگوریتم هَش استفاده کنید. به این صورت که تاریخ تولد دوستانتان را پیدا میکنید و رقمهای آن را با هم جمع میکنید و آن قدر این عمل را تکرار میکنید تا به یک عدد یک رقمی برسید. به طور مثال فرض کنید صبا روز ۲۲ مهر ۱۳۶۱ به دنیا آمده است. یعنی ۱۳۶۱/۷/۲۲. با جمع کردن رقمهای آن ۲+۲+۷+۱+۶+۳+۱ به عدد ۲۲ میرسید و دوباره با جمع کردن ۲+۲ به عدد ۴ میرسید. بنابراین هدیه شماره ۴ را به صبا میدهید. همین کار را برای بقیه هم انجام میدهید. مثلا آریا متولد ۱۱ مرداد ۱۳۶۴ است. اگر همین الگوریتم را برای آریا انجام دهید به عدد ۳ میرسید و هدیه شماره ۳ را به او میدهید. توجه کنید که با استفاده از این الگوریتم ممکن است به عدد یکسانی برای دو یا چند نفر از دوستانتان برسید.
در مثال بالا دیدید که چگونه با یک الگوریتمِ ساده تاریخ تولد را به یک عدد یک رقمی تبدیل کردید. با این کار تاریخ تولد دیگر در عدد آخر معلوم نیست. با همین روش میتوانید هر عددی را به یک عدد یک رقمی تبدیل کنید.
این الگوریتم مثال بسیار سادهای از یک الگوریتم هَش بود. در علم کامپیوتر و رمزنگاری الگوریتمهای پیچیدهتری برای این منظور استفاده میشوند که علاوه بر تبدیل اطلاعات به اندازهی خاص، خصوصیات زیر را نیز دارند:
-
خروجی الگوریتم (در مثال ما عدد یک رقمی) برای ورودیهای مختلف کاملا متفاوت باشد.
-
خروجی الگوریتم برای ورودیهای متفاوت، احتمال تکرار بسیار بسیار ناچیز دارد. به این صورت که این فرآیند را میتوان روی فایلهای مختلف کامپیوتر شما اجرا شود و خروجی هر فایل تکراری نباشد.
-
خروجی الگوریتم (در مثال ما عدد یک رقمی) برای ورودی یکسان، یکسان باشد.
-
هیچ راهی برای پیدا کردن ورودی الگوریتم از روی خروجی الگوریتم به غیر از اجرای الگوریتم روی تمام ورودیها وجود نداشته باشد.
این الگوریتم استفادههای مختلفی در کامپیوتر دارد که از میانِ آنها به چند مثال زیر اشاره میکنیم:
-
ذخیرهی رمز عبور: سایتهایی که برای استفاده از آنها نام کاربری و رمز عبور دارید، فقط هَش رمز عبور شما را ذخیره میکنند. وقتی شما به سایت وارد میشوید و رمز عبور خود را وارد میکنید، سایت در واقع هَش رمز عبور شما را محاسبه کرده و آن را با هَش ذخیره شده در سیستم مقایسه میکند. به این ترتیب سایتها رمزِ شما را در مقابله با دزدی اطلاعات محافظت میکنند.
-
تقسیم یا افراز دادهها: همان طور که در مثال نشان داده شد، دادهها را میتوان با گرفتن هَشِ آن به قسمتهای مختلف تقسیم کرد. در پایگاه دادهها از این مفهوم استفاده میشود.
-
تشخیص فایل: هَشِ محتویات یک فایل، یک شناسهی منحصر به فرد برای آن فایل است. از آن جایی که خروجی الگوریتم هَش برای ورودیهای مختلف، متفاوت است و احتمال یکسان بودن آنها بسیار بسیار ناچیز است، هَشِ یک فایل میتواند به صورت منحصر به فرد نمایندهی خود فایل باشد. از این خاصیت در سیستمهای همتا به همتا مانند آیپیافاس (IPFS) یا بیت تورنت (BitTorrent) برای پیدا کردن فایلها استفاده میشود که در نوشتههای بعدی به آنها میپردازیم.
توجه: این نوشته با نوشتههای بعدی تکمیل خواهد شد.
بخش اول این مجموعه نوشته با عنوان «تعریف Caching و فرآیند آن» را در اینجا بخوانید.
بخش سوم این مجموعه نوشته با عنوان «آیپیافاس (IPFS) چیست؟» را در اینجا بخوانید.
بخش چهارم این مجموعه نوشته با عنوان «خاصیت تغییر ناپذیری چیست؟» را در اینجا بخوانید.
پیشنهادها و انتقادات خود را از طریق شبکههای اجتماعی پسکوچه با ما در میان بگذارید.
❤️ تیم پسکوچه