زنجیره درهمسازی
زنجیره درهمسازی یا زنجیره هش اعمال پیوسته تابع درهمساز رمزنگارانه بر روی تعدادی دادهاست. در امنیت رایانه از زنجیره درهمسازی برای بدست آوردن تعداد زیادی رمز یکبار مصرف[1] از روی یک رمز استفاده میشود. برای برقراری شرط غیرقابل انکار بودن یک تابع درهمسازی (هش) میتواند به بخشهای مختلف اطلاعات اعمال گردد تا تاریخچهای از دادهها و اطلاعات در دسترس باشد.
تعریف
زنجیره درهمسازی[2] اعمال تابع درهمساز رمزنگارانه بهطور پیوسته بر روی مقداری از داده و اطلاعات است. اگر تابع درهمساز را درنظر بگیریم و یک رشته باشد زنجیره درهمسازی از درجه به صورت زیر تعریف میشود:
که معمولاً زنجیرهٔ بالا را به صورت نشان میدهند.
کاربردها
برای اولین بار لیزلی لمپورت[3] (به انگلیسی: Leslie Lamport) پیشنهاد داد که از زنجیره درهمسازی برای محافظت از رمزعبور در محیطهای ناامن استفاده شود. به عنوان مثال یک سرور که مجهز به سیستم احراز هویت است میتواند از زنجیره درهمسازی به جای نوشته ساده استفاده کند تا از سرقت از سرور جلوگیری شود. با توجه به این که تابع درهمسازی مشخص نیست پس در نتیجه سرقت از سرور مشکل خواهد شد. به عنوان مثال، سرور از کاربر را دریافت میکند و را در ابتدا محاسبه میکند و برای احراز هویت مقدار از کاربر خواسته میشود و سرور با محاسبهٔ برابری آن با را چک میکند و در صورت صحیح بودن؛ برای احراز هویت بعدی همین کار را با انجام میدهد. در نتیجه برای دفعهٔ بعد سرور به جای انتظار را دارد. یعنی در هر مرتبه رمزعبور تغییر میکند و این باعث افزایش امنیت اطلاعات سرور خواهد شد. همچنین خاصیت یکطرفه بودن تابع در تابع درهمساز رمزنگارانه امکان محاسبه معکوس تابع را از سارق میگیرد. با توجه به این که رمزعبور در هر مرتبه تغییر میکند در نتیجه سارق نمیتواند به رمزعبور دسترسی پیدا کند. یک نمونه از کد این فرایند به عنوان نمونه به صورت زیر میباشد:
# Server owner knows numbers in Hash Chain and server backward checks the password.
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) است. برای مثال مسیر گذرنده از و و به صورت کد تعبیر میشود چون ابتدا باید با راس سمت راستش و سپس باید با راس سمت چپش ادغام شود تا ساخته شود.
زنجیره درهمسازی و زنجیره بلوکی[4]
زنجیره درهمسازی و زنجیره بلوکی هر دو از تابعهای درهمسازی رمزنگارانه برای ارتباط بین دو ریشه استفاده میکنند. تفاوت این دو زنجیره در این است که زنجیره بلوکی (که برای بیت کوین و … استفاده میشود) استفادهای همچون دخیره اطلاعات در یک بلوک برای رمزنگاری دارد. به همین دلیل زنجیره بلوکی در ارزهای دیجیتال استفاده فراوان دارد به این صورت که هر بلوک اطلاعات دارای کدی است که در صورت دستیابی به آن کد، بلوک رمزگشایی خواهد شد. کد ذکر شده باید به صورتی باشد که نتیجه درهمسازی آن خاصیت مشخصی داشته باشد. محاسبه کد یک بلوک زمانبر و انرژیبر است و به همین دلیل است که ارزهای دیجیتال گران محسوب میشوند. در طرف دیگر زنجیره درهمسازی استفاده گستردهای در رمزهای یکبار مصرف دارد که امنیت بیشتری نسبت به رمزهای معمولی به ارمغان میآورد.
منابع
- "OTP". Wikipedia. 2019-04-26.
- "Hash chain". Wikipedia. 2019-02-13.
- Lamport, Leslie (1981-11-01). "Password authentication with insecure communication". Communications of the ACM. 24 (11): 770–772. doi:10.1145/358790.358797. ISSN 0001-0782.
- «The great chain of being sure about things». The Economist. ۲۰۱۵-۱۰-۳۱. شاپا 0013-0613. دریافتشده در ۲۰۱۹-۰۶-۰۴.