حمید جهانگیری
حمید جهانگیری
خواندن ۴ دقیقه·۴ سال پیش

کاربرد اعداد اول در رمزنگاری


برای اینکه با ایده استفاده از اعداد اول در رمزنگاری آشنا شوید بیایید با هم به چند صد سال قبل برگردیم!

فرض کنید شما میخواهید قطعه ای طلا از شهر A برای دوستتان به شهر B ارسال کنید. برای اینکه طلاها از راهزنان احتمالی در امان باشند گاوصندوقی بسیار محکم در اختیار دارید که باز شدن آن با هیچ روشی به جز داشتن کلید امکان پذیر نیست. شما چطور میخواهید قطعه طلا را به آن شهر بفرستید؟ پاسخ های احتمالیتان را با هم مرور میکنیم:

-اگر طلا را در گاوصندوق قرار دهید و بخواهید گاوصندوق را به شهر B بفرستید مجبورید کلید را هم به همراه آن بفرستید. همراه بودن کلید با صندوق همان و به تاراج رفتن طلاهایتان نیز همان!
 -اگر بخواهید کلید را در بار مخفی کنید و امید داشته باشید که راهزن کلید را پیدا نمی‌کند هم کار اشتباهی مرتکب شده اید. راهزنان مو به مو بار شما را خواهند گشت.
-اگر بخواهید صندوق را از مسیر ۱ و کلید را از مسیر ۲ به مقصد B بفرستید  در کمال شرمندگی باید بگوییم باز هم اشتباه کرده اید. در همه مسیرها یکی از همکاران راهزنان منتظر شما هستند تا کلید را از شما بگیرند!

راه حل این مساله چندان هم سخت نیست. کافی است دوست شما از شهر B یک صندوق با قفل باز برای شما بفرستد (و کلیدِ قفل دست دوست شما باقی بماند) شما طلاها را در صندوق قرار دهید و قفل را ببندید و به مقصد بفرستید. همانطور که میبینید دیگر نیازی نیست که کلید را با صندوق ارسال کنید و کلید در اختیار گیرنده قرار دارد.

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

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

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

نکته‌ی جالبی که می‌توان در مورد اعداد اول به آن اشاره کرد که در رمزنگاری به کار می‌آید، امکان تقسیم تمام اعداد، به اعداد اول است. یعنی می‌توان اعداد اول را به گونه‌ای در هم ضرب کرد، تا حاصلضرب، عددی باشد که در نظر داریم. برای مثال عدد ۱۳۸ را می‌توان از ضرب سه عدد ۲ در ۳ در ۲۳ که همگی عدد اول هستند به دست آورد. این موضوع در مورد اعداد بزرگ‌تر نیز صادق است، برای مثال می‌توان عدد ۳۴۷۴۲۳۹۳۰ را با ضرب کردن اعداد ۲ در ۵ در ۷ در ۱۹ در ۹۷ در ۲۶۹۳ به دست آورد. به این عمل قانون فاکتورگیری عدد اول گفته می‌شود. علاوه بر این هر عدد طبیعی را فقط می‌توان به یک مجموعه عدد اول تجزیه کرد. نکته اساسی اینجاست که اگر از بهترین الگوریتم موجود به منظور تقسیم یک عدد ۲۰۰ رقمی یا ۵۰۰ رقمی به فاکتورهای اول آن استفاده کنیم، بهترین سوپرکامپیوتر موجود نیز به زمان بسیار بسیار زیادی برای اتمام کار خود نیاز خواهد داشت، شاید معادل عمر کره زمین!  پس به زبان ساده، محدودیتی برای پیدا کردن فاکتورهای اول یک عدد وجود دارد و این موضوع برای امنیت در رایانه‌های مدرن بسیار حیاتی و ضروری است. در الگوریتمهای رمزنگاری با استفاده از دو عدد اول بزرگ حاصلضرب آنها را که یک عدد خیلی بزرگ است پیدا می‌کنند و با استفاده از این عدد خیلی بزرگ عملیات رمزگذاری پیام شروع می‌شود. حال اگر بخواهیم پیام رمزشده را رمزگشایی کنیم به آن دو عدد اولی که با آن عدد خیلی بزرگ تولید شده است نیاز داریم.

پس بیایید با هم یک بار دیگر مرور کنیم:

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

اساس و پایه رمزنگاری اعداد اول است و نبود راهی بهینه برای یافتن فاکتورهای اول یک عدد بزرگ، بنیان رمزنگاری در کامپیوترها است.

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


رمزنگاریاعداد اولعدد اول
تجربیاتم در برنامه نویسی را با زبانی ساده با شما به اشتراک خواهم گذاشت
شاید از این پست‌ها خوشتان بیاید