در اینجا یک خلاصه کامل از الگوریتم های هش کردن وجود دارد و چگونه کار می کنند
اگر رمزنگاری یک بدن بود الگوریتم هش کردن قلب او بود. اگر رمزنگاری یک ماشین بود الگوریتم هش کردن موتورش بود. اگر رمزنگاری یک فیلم بود, الگوریتم هش کردن خود خواهد بود شخصیت. اگر رمزنگاری منظومه شمسی بود الگوریتم هش کردن خورشید بود. باشه, که بیش از حد دور اما شما نقطه کردم, متعجب? قبل از اینکه به الگوریتم هش کردن برسیم چرا وجود دارد و چگونه کار می کند مهم است که بفهمیم پیچ و مهره هایش کجاست. بیایید با هش کردن شروع کنیم .
هش کردن چیست?
بیایید سعی کنیم یک وضعیت فرضی را در اینجا تصور کنیم. فرض کنید شما می خواهید یک پیام/پرونده برای شخصی ارسال کنید و کاملا ضروری است که دقیقا در همان قالب به گیرنده مورد نظر خود برسد. چگونه این کار را انجام? یک گزینه این است که چندین بار ارسال کنید و بررسی کنید که دستکاری نشده است. اما اگر پیام بیش از حد طولانی است? اگر اقدامات فایل در گیگابایت? این امر می تواند کاملا پوچ, غیر عملی و کاملا رک و پوست کنده خسته کننده به منظور بررسی هر حرف, درست? خوب اینجاست که هش کردن وارد بازی می شود.
با استفاده از یک الگوریتم هش انتخاب, داده ها به یک اندازه ثابت فشرده. بیایید این را با یک مثال درک کنیم. اگر جمله "خرها مدت زیادی زندگی می کنند" را در نظر بگیریم و الگوریتم هش را به کار ببریم به 604ف289 خواهیم رسید . این مقدار به عنوان هش شناخته می شود .
هش ها وقتی می خواهید پرونده ها یا پایگاه های داده را شناسایی یا مقایسه کنید بسیار راحت هستند. به جای مقایسه داده ها در شکل اصلی خود, مقایسه مقادیر هش برای رایانه ها بسیار راحت تر است. هش کردن همه این کارها را انجام می دهد.
اساسا هش کردن با دو ویژگی متمایز تعریف می شود-برگشت ناپذیری و منحصر به فرد بودن . برگشت ناپذیری اشاره به این واقعیت است که هنگامی که شما هش چیزی, هیچ راهی برای بازگشت وجود دارد. بر خلاف رمزگذاری و رمزگذاری, شما به راحتی نمی توانید د هش یک پیام/داده. منحصر به فرد, چرا که هیچ دو مقدار هش همیشه همان برای دو قطعه مختلف از داده ها. اگر دو رشته هش برای دو داده متفاوت یکسان باشد, این یک برخورد هش نامیده می شود و الگوریتم بی فایده می شود.
(توجه: ما در اینجا از الگوریتم هش کردن خواات استفاده کرده ایم زیرا کوتاه و قابل درک است. الگوریتم های مدرن بسیار پیچیده تر و طولانی تر هستند.)
تابع هش کردن: هسته الگوریتم هش کردن
"پشت هر مرد موفقی یک زن بزرگ وجود دارد."- گروچو مارکس
"پشت هر الگوریتم هش موفق, یک تابع هش بزرگ وجود دارد."- ما فقط این کار را کردیم.
بیایید لحظه ای شوخی ها را کنار بگذاریم و روی اصل موضوع تمرکز کنیم. تابع هش یک تابع ریاضی است که یک مقدار ورودی را به یک مقدار عددی فشرده تبدیل می کند – یک مقدار هش یا هش. اساسا این یک واحد پردازش است که داده هایی با طول دلخواه را دریافت می کند و خروجی یک طول ثابت – مقدار هش را به شما می دهد.
طول خروجی یا هش بستگی به الگوریتم هش کردن دارد. به طور کلی محبوب ترین الگوریتم ها یا توابع هش دارای طول هش از 160 تا 512 بیت هستند.
حالا بیایید به بخشی که منتظرش بودید برویم.
الگوریتم هش کردن است? چگونه کار می کند?
همانطور که بحث کردیم یک تابع هش در قلب یک الگوریتم هش کردن قرار دارد. اما برای دریافت مقدار هش طول از پیش تعیین شده ابتدا باید داده های ورودی را به بلوک های اندازه ثابت تقسیم کنید. این به این دلیل است که یک تابع هش داده ها را با طول ثابت دریافت می کند. این بلوک ها نامیده می شوند ' بلوک های داده.'این در تصویر زیر نشان داده شده است.
اندازه بلوک (های) داده از یک الگوریتم به الگوریتم دیگر متفاوت است. اما برای یک الگوریتم خاص یکسان باقی می ماند. مثلا, شا-1 طول می کشد در پیام/داده ها در بلوک های 512 بیتی تنها. بنابراین, اگر پیام دقیقا از طول 512 بیتی, تابع هش اجرا می شود تنها یک بار (80 دور در مورد شا-1). به طور مشابه, اگر پیام 1024 بیتی باشد, به دو بلوک 512 بیتی تقسیم می شود و عملکرد هش دو بار اجرا می شود. با این حال, 99% از زمان, پیام نمی خواهد در تقسیم عددی بر مضرب از 512 بیتی باشد. برای چنین مواردی (تقریبا همه موارد) از تکنیکی به نام بالشتک استفاده می شود. کل پیام با استفاده از تکنیک بالشتک به بلوک های داده با اندازه ثابت تقسیم می شود. عملکرد هش به تعداد بلوک های داده تکرار می شود. این چگونه انجام می شود:
همانطور که در بالا نشان داده شده, بلوک در یک زمان پردازش. خروجی بلوک داده اول به عنوان ورودی همراه با بلوک داده دوم تغذیه می شود. در نتیجه خروجی دوم به همراه بلوک سوم و غیره تغذیه می شود. بدین ترتیب, ساخت خروجی نهایی مقدار ترکیبی از تمام بلوک. اگر یک بیت را در هر نقطه از پیام تغییر دهید کل مقدار هش تغییر می کند. این اثر بهمن نامیده می شود.