آموزش رمزنگاری به زبان ساده؛ بخش چهارم: پد یک‌‌بار مصرف

رمزنگاری برای تازه کاران، یک پست ادامه دار درباره معرفی رمزنگاری است. در این سری پست‌ها شما به زبانی ساده با مفاهیم پیچیده رمزنگاری و مسائل مربوط به آن آشنا خواهید شد. اگر به مسائل پایه‌ای ارزهای رمزنگاری شده و بلاکچین علاقه‌مند هستید، به شما توصیه می‌کنیم که حتما تمام قسمت‌های این پست‌ها را مطالعه کنید.

0 605

در این مجموعه تا کنون چند مفهوم کلیدی در رابطه با رمزنگاری را پوشش داده‌‌ایم:

  • رمزنگاری یعنی توانایی ارسال پیام سری.
  • رمزنگاری از عملیات‌‌ها یا الگوهای ریاضی برای ایجاد یک پیام استفاده می‌‌کند.
  • هرچه الگو تصادفی‌‌تر باشد، شکستن و باز کردن آن پیام برای رمزشکن‌‌ها سخت‌‌تر است و پیام امنیت بیشتری دارد.
  • هرچه الگو تصادفی‌‌تر باشد، اشتراک‌‌گذاری پیام‌‌ سخت‌‌تر شده و مقیاس‌‌‌‌پذیری آن پایین‌‌تر می‌‌آید.

همانطور که قبلا هم گفتیم، پیچیدگی در رمزنگاری زاییده جدال ببین مقیاس‌‌پذیری و امنیت است. هرچه بیشتر با بلاک چین آشنا می‌‌شوید، خواهید فهمید که این مشکل اساسی در اینجا هم وجود دارد که دلیل صرف این همه وقت برای شناخت آن هم همین است. ما چطور می‌‌توانیم بالاترین امنیت و مقیاس‌‌پذیری را به دست بیاوریم، در صورتی که افزایش امنیت باعث کاهش مقیاس‌‌پذیری می‌‌شود و بالعکس؟

بار دیگر تکرار می‌‌کنیم که امنیت در این زمینه یعنی آنکه شکستن کد برای فرد رمزشکن تا چه میزان دشوار است و مقیاس‌‌پذیری هم یعنی یک پیام سری به چه سهولتی می‌‌تواند با طرفین مورد نظر به اشتراک گذاشته شود. رمزگذاری بی‌‌نقص آن است که یک کلید اشتراک‌‌پذیر دارد و هیچ اطلاعاتی که رمز شکن بتواند از آن بر علیه خود او استفاده کند را بیرون نمی‌‌دهد.

وقتی به کدها فکر می‌‌کنیم، اغلب اهمیت مقیاس‌‌پذیری را نادیده می‌‌گیریم. روی کاغذ، یک کد خوب کدی است که شکسته نشود. اما اگر کسی نتواند از یک کد استفاده کند به چه دردی می‌‌خورد؟ رمزنگاری یا بلاک چین یا هر تکنولوژی دیگری در این باره، باید در نهایت آنچنان کاربردی باشد که توسط دیگران به کار گرفته شود.

می‌‌توان این دوراهی را با نگاه به پد یک‌‌بار مصرف که یک رمز طراحی‌‌شده در قرن ۱۹ است و برای پیام‌‌های سری به کار برده می‌‌شد مشاهده کرد. این پد تا امروز امن‌‌ترین کد موجود است که الگوریتم‌‌های مورد استفاده در رمزنگاری مدرن را هم شکست می‌‌دهد و البته این نوع رمزنگاری منسوخ شده است چون استفاده و اشتراک‌‌گذاری آن بیش از حد دشوار است.

پد یک‌‌بار مصرف از کدی که در قسمت قبلی توضیح دادیم استفاده می‌‌کند. اگر یادتان باشد گفتیم که کد کاملی که هیچ اطلاعاتی درباره الگوی خود به رمز شکن ها نمی‌‌دهد، از یک توالی بی‌‌پایان به عنوان کلیدهای خود استفاده می‌‌کند. پد یک‌‌بار مصرف این را توسط تولید یک کید توالی عددی تصادفی به دست می‌‌آورد که طولی به اندازه‌‌ پیام ارسال‌‌شده دارد. این تضمین می‌‌کند که تغییر حروف هیچوقت منجر به الگوی تکراری که مهندسی معکوس شود نخواهد شد و متنی هم که می‌‌سازد توزیع یکپارچه‌‌ای دارد.

این دو ویژگی امکان به دست آمدن محرمانگی کامل برای پد یک‌‌بار مصرف را به وجود می‌‌آورد. این یعنی هر متن رمزی که از پد یک‌‌بار مصرف ساخته می‌‌شود هیچ اطلاعاتی درباره‌‌ی پیام اصلی منتشر نمی‌‌کند، طوری که حتی اگر رمز شکن زمان و منابع نامحدود برای امتحان همه‌‌ی کلیدهای احتمالی را داشته باشد، نخواهند توانست پیام را رمزگشایی کند.

بیایید برای توضیح بهتر این موضوع یک مثال رجوع بزنیم. تصور کنید که می‌‌خواهید با استفاده از پد یک‌‌بار مصرف یک پیام محرمانه “سلام” به دوستتان بفرستید.

یادتان باشد که پد یک‌‌بار مصرف هم درست مثل کدی که پیشتر به آن نگاه کردیم، یک توالی عددی می‌‌سازد و هر حرف پیام را با یک عدد در توالی تغییر می‌‌دهد. پس اگر توالی عددی ۱-۲-۳-۴-۵ باشد، حرف س را با یک حرف الفبا جلوتر (یعنی شین) عوض می‌کنید، حرف ل را با دو حرف جلوتر خود جلو عوض می‌کنید و همین طور توالی کلید عددی و تعویض حروف را ادامه می‌دهید تا کلمه “شنثا” به دست بیاید.

یک مهره‌‌ی ۲۶طرفه را پنج بار به هوا می‌‌اندازید تا یک توالی کلید تصادفی تولید کنید. ما از ۲۶ استفاده می‌‌کنیم چون الفبای انگیسی ۲۶ حرف دارد؛ هر عددی که بزرگ‌‌تر از ۲۶ باشد به اول حروف الفبا برمی‌‌گردد، مثلا اگر عدد ۲۷ را بیاورید از ۲۶ حرف عبور می‌‌کنید تا به همان حرف برسید و سپس ۱ را اضافه می‌‌کنید تا حرف را ۱ موقعیت جلوتر ببرید. پس تولید یک عدد بزرگ‌‌تر از ۲۶ یعنی عبارت ۲۶+x به دست می‌‌آید که x در آن عدد واقعی تغییر موردنیاز است.

پس شما برای ایجاد توالی مقابل یک مهره ۲۶طرفه را هوا می‌‌اندازید: ۲۳-۱۲-۲-۱۰-۱۱. شما این کلید را به طور محرمانه به دوستتان در میان می‌‌گذارید و آن را برای رمزنگاری پیام‌‌تان به کار می‌‌برید:

Encryption

دوستتان می‌‌تواند کلیدی که برای رمزگشایی آسان پیام به او دادید را استفاده کند. با این حال اوضاع برای رمزشکن چندان آسان نیست. تنها چیزی که رمزشکن می‌‌داند این است که طول پیام ۵ حرف است. چون شما برای هر حرف از یک تغییر متفاوت استفاده می‌‌کنید، هیچ الگو یا نشانه‌‌ای که رمز شکن بتواند از آن برای حدس کلید صحیح استفاده کند وجود ندارد.

تنها گزینه‌‌ آنان استفاده از آزمون و خطا برای آزمایش ترکیب پنج عددی بین ۱ تا ۲۶ است که خود این کار از نظر فنی امکان‌‌پذیر نیست. هر عدد در توالی کلید ما می‌‌تواند بین ۱ تا ۲۶ قرار بگیرد. این یعنی برای عدد اول ۲۶ احتمال، برای عدد دوم ۲۶ احتمال و… وجود دارد. برای پیدا کردن تعداد احتمالات برای توالی کلید باید ۲۶ را ۱۵ بار در خود ضرب کنیم. این یعنی باید ۱۲ میلیون ترکیب عددی را امتحان کنیم.

برای اینکه بیشتر این مسئله را بفهمید فرض کنید که شما هر ترکیب احتمالی را روی یک ورق کاغذ می‌‌نویسید و آن‌‌ها را روی هم می‌‌گذارید، ارتفاع کاغذهایی که روی هم می‌‌گذارید به ۱ کیلومتر می‌‌رسد.

تصور کنید که فرد رمزشکن بتواند ۱۲ میلیون ترکیب را به به شکل زمانی آزمایش کند. چه اتفاقی می‌‌افتد؟

Encryption

فرض کنید رمزشکن در جایی به ترکیب ۲۳-۱۲-۲-۱۰-۱۱ می‌‌رسد و کد را رمزگشایی می‌‌کند و پیام “سلام” آشکار می‌‌شود. اما این یعنی او رمز ما را شکسته است، درست است؟

نه کاملا، چون قبل از اینکه رمزشکن از این موفقیت خوشحال شود، به یک ترکیب احتمالی دیگر می‌‌رسد، ۱۹-۱۶-۲۰-۱۷-۸ که آن هم یک پیام معنادار است:

Encryption

نکته این است که تنها چیزی که از پیام می‌‌دانیم، پنج حرفی بودن آن است پس متن اصلی هم احتمالا پنج حرفی است. رمز ما می‌‌تواند با ترکیب‌‌های کلید متفاوت دیگری ترکیب شود تا کلمات مختلفی را تولید کند. به عبارت دیگر، ما اطلاعات کافی درباره‌‌ی این پیام نداریم تا بتوانیم به نتیجه‌‌گیری منطقی برسیم.

منظور ما از محرمانگی کامل همین است. رمزی که محرمانگی کامل دارد نه تنها شکست آن عملا غیرممکن است، بلکه روی کاغذ هم قابل شکستن نیست. رمزشکن حتی اگر زمان و توان رایانشی نامحدود داشته باشد، در پایان به لیستی از کلمات پنج‌‌حرفی می‌‌رسد که هر کدام از آنان می‌‌توانند پیام اصلی باشند.

به دست آوردن محرمانگی کامل هدف هر رمزی است. اما همانطور که قبلا هم گفتیم، هدف رمزها ارائه‌‌ امکان اشتراک‌‌گذاری محرمانه و کارآمد پیام است و پد یک‌‌بار مصرف هرچه هم امن بود اما قابلیت استفاده بالایی نداشت. همانطور که می‌‌توانید تصور کنید، اشتراک‌‌گذاری امن یک کلید خاص با هر پیامی که به اندازه‌‌ی آن پیام طول داشته باشد، باعث محقق نشدن هدف رمز می‌‌شود؛ اگر می‌‌خواهید دردسر اشتراک‌‌گذاری امن کلیدی که طول آن به اندازه‌‌ی پیام است را قبول کنید، می‌‌توانید از آن روش برای ارسال پیامتان استفاده کنید.

یکی از روش‌‌هایی که پیاده‌‌سازی پد یک‌‌بار مصرف به این مشکل پرداخت، ایجاد دفترچه‌‌هایی بود که هر صفحه از آن یک توالی تصادفی مختلف داشت و آن را شخصا توزیع می‌‌کرد. هر توالی بسیار طولانی بود تا کوتا‌‌ه‌‌تر بودن پیام ارسالی از توالی کلید تضمین شود. طرفین هم سیستمی را از پیش برای استفاده از کلیدها تعریف می‌‌کنند، بنابراین همه زمانی که تولید کلید استفاده شده را می‌‌دانند. این می‌‌تواند شبیه سیستم تقویمی باشد که هر صفحه یک تاریخ دارد و می‌‌دانید که مثلا در ۲۷م نوامبر همه از صفحه ۵۰ استفاده می‌‌کنند. یا می‌‌تواند یک سیستم ساده‌‌تر باشد که در آن از صفحه‌‌ی اول برای پیام اول استفاده می‌‌کنید و آن را پاره و نابود می‌‌کنید و صفحه‌‌ی دوم برای پیام دوم و … .

علی‌‌رغم این زمینه‌‌ها برای کار، پد یک‌‌بار مصرف هنوز هم غیرعملی است، تا جایی که رمزنگاری مدرن محرمانگی کامل را قربانی کاربردی بودن و مقیاس‌‌پذیری کرده است. این یعنی رمزهای عمومی تنها از نظر فنی غیرقابل شکستن هستند، یعنی با توان رایانشی و زمان نامحدود می‌‌توانند شکسته شوند.

وقتی مسئله‌‌ی امنیت رمزنگاری در بلاک چین به وجود می‌‌آید این یکی از نگرانی‌‌های اصلی است. با چیزهایی مثل محاسبات کوانتومی که می‌‌تواند سرعت رایانش را تا حد بسیار زیادی افزایش دهد، عملیات‌‌هایی که زمانی غیرممکن بودند حالا می‌‌توانند به راحتی حل شوند. این تا جایی که به رمزنگاری ربط دارد، یعنی امتحان همه کلیدهای ممکن برای یک رمز، یا به عبارت دیگر اجرای یک حمله شدید دیگر نیازی به زمان نامحدود ندارد. عملیات‌‌هایی که قبلا دهه‌‌ها طول می‌‌کشیدند اکنون تنها در چند ساعت یا چند روز حل می‌شوند.

این فکر ترسناکی‌‌ برای وادار کردن ما به تجدید نظر درباره‌‌ی الگوریتم‌‌های امن از نظر تئوری است. تفاوت بین تصادفی بودن واقعی و شبه‌‌تصادفی بودن در رمزهای مدرن چیست؟ چه چیزی رمزهای شبه‌‌تصادفی را شکننده می‌‌کند؟ و مهم‌‌تر از همه، آیا امکان دارد یک رمز بدون از دست دادن مقیاس‌‌پذیری خود، محرمانگی کامل را به دست بیاورد؟ ما این پرسش‌‌ها و پرسش‌‌های دیگر را در مطلب بعدی از همین مجموعه که در آن بررسی عمیق‌‌تری از مکانیک تصادفی بودن و نقش مرکزی‌‌ آن در رمزنگاری بررسی خواهیم کرد.

شاید از این مطالب هم خوشتان بیاید.

ارسال پاسخ

آدرس ایمیل شما منتشر نخواهد شد.