زنجیره درهمسازی کیست؟ توضیح بده.
زنجیره درهمسازی یا زنجیره هش اعمال پیوسته تابع درهمساز رمزنگارانه بر روی تعدادی داده‌است. در امنیت رایانه از زنجیره درهمسازی برای بدست آوردن تعداد زیادی رمز یکبار مصرف از روی یک رمز استفاده می‌شود. برای برقراری شرط غیرقابل انکار بودن یک تابع درهمسازی (هش) می‌تواند به بخش‌های مختلف اطلاعات اعمال گردد تا تاریخچه‌ای از داده‌ها و اطلاعات در دسترس باشد.تعریف.زنجیره درهمسازی اعمال تابع درهمساز رمزنگارانه به‌طور پیوسته بر روی مقداری از داده و اطلاعات است. اگر تابع درهمساز را formula_1درنظر بگیریم و formula_2یک رشته باشد زنجیره درهمسازی از درجه formula_3به صورت زیر تعریف می‌شود:formula_4که معمولاً زنجیرهٔ بالا را به صورت formula_5نشان می‌دهند.کاربردها.برای اولین بار لیزلی لمپورت (به انگلیسی: Leslie Lamport) پیشنهاد داد که از زنجیره درهمسازی برای محافظت از رمزعبور در محیط‌های ناامن استفاده شود. به عنوان مثال یک سرور که مجهز به سیستم احراز هویت است می‌تواند از زنجیره درهمسازی به جای نوشته ساده استفاده کند تا از سرقت از سرور جلوگیری شود. با توجه به این که تابع درهمسازی مشخص نیست پس در نتیجه سرقت از سرور مشکل خواهد شد. به عنوان مثال، سرور از کاربر formula_6را دریافت می‌کند و formula_7را در ابتدا محاسبه می‌کند و برای احراز هویت مقدار formula_8از کاربر خواسته می‌شود و سرور با محاسبهٔ formula_9برابری آن با formula_7را چک می‌کند و در صورت صحیح بودن؛ برای احراز هویت بعدی همین کار را با formula_8انجام می‌دهد. در نتیجه برای دفعهٔ بعد سرور به جای formula_8انتظار formula_13را دارد. یعنی در هر مرتبه رمزعبور تغییر می‌کند و این باعث افزایش امنیت اطلاعات سرور خواهد شد. همچنین خاصیت یکطرفه بودن تابع در تابع درهمساز رمزنگارانه امکان محاسبه معکوس تابع را از سارق می‌گیرد. با توجه به این که رمزعبور در هر مرتبه تغییر می‌کند در نتیجه سارق نمی‌تواند به رمزعبور دسترسی پیدا کند. یک نمونه از کد این فرایند به عنوان نمونه به صورت زیر می‌باشد:class Server: __init__(self, server_pasword, server_owner_name): self.server_pasword = server_pasword self.server_owner_name = server_owner_name login(self, password): if (H(password) == self.server_pasword): self.server_pasword = password login_accepted() else: print("Uncorrect password")درخت دودویی درهمسازی.درخت دودویی در همسازی که به آن درخت درهمسازی نیز گفته می‌شود برای محاسبه درهمسازی تعدادی ورودی استفاده می‌شود که مقدار هر راس حاصل درهمسازی ترکیب دو فرزند راس است. به همین ترتیب از برگ‌های درخت شروع به محاسبه درهمسازی می‌کنیم تا درنهایت مقدار ریشه محسابه شود؛ که در شکل زیر یک نمونه از درخت درهمسازی با چهار برگ به عنوان ورودی به نمایش گذاشته شده‌است.یک مسیر در درخت بالا به رشته‌ای از ۰ و ۱ مشخص می‌شود که ۱ به معنای راست (Right) و ۰ به معنای چپ (Left) است. برای مثال مسیر گذرنده از formula_14و formula_15و formula_16به صورت کد formula_17تعبیر می‌شود چون formula_14ابتدا باید با راس سمت راستش و سپس باید با راس سمت چپش ادغام شود تا formula_16ساخته شود.زنجیره درهمسازی و زنجیره بلوکی.زنجیره درهمسازی و زنجیره بلوکی هر دو از تابع‌های درهمسازی رمزنگارانه برای ارتباط بین دو ریشه استفاده می‌کنند. تفاوت این دو زنجیره در این است که زنجیره بلوکی (که برای بیت کوین و … استفاده می‌شود) استفاده‌ای همچون دخیره اطلاعات در یک بلوک برای رمزنگاری دارد. به همین دلیل زنجیره بلوکی در ارزهای دیجیتال استفاده فراوان دارد به این صورت که هر بلوک اطلاعات دارای کدی است که در صورت دستیابی به آن کد، بلوک رمزگشایی خواهد شد. کد ذکر شده باید به صورتی باشد که نتیجه درهمسازی آن خاصیت مشخصی داشته باشد. محاسبه کد یک بلوک زمان‌بر و انرژی‌بر است و به همین دلیل است که ارزهای دیجیتال گران محسوب می‌شوند. در طرف دیگر زنجیره درهمسازی استفاده گسترده‌ای در رمزهای یکبار مصرف دارد که امنیت بیشتری نسبت به رمزهای معمولی به ارمغان می‌آورد.جستارهای وابسته.تابع درهمساز رمزنگارانهاستاندارد اکس۵۰۹تابع درهمسازیزنجیره بلوکی