رمزگذاری RSA سیستمی است که آنچه را که زمانی یکی از بزرگترین مشکلات رمزنگاری بود حل می کند: چگونه می توانید برای کسی پیام رمزگذاری شده ارسال کنید بدون اینکه فرصتی برای قبلاً کد با آنها به اشتراک بگذارید?
در این مقاله همه چیزهایی را که باید درباره آن بدانید به شما یاد می دهد چگونه رمزگذاری RSA توسعه داده شد, چگونه کار می کند, ریاضی پشت آن, آنچه برای آن استفاده می شود و همچنین برخی از موارد بزرگترین مسائل امنیتی که با آن روبرو است. کسب اطلاعات در مورد RSA دانش بنیادی به شما می دهد که به شما کمک می کند تا بفهمید که چه بخش هایی از زندگی آنلاین ما امن است.
رمزگذاری RSA چیست؟?
بیایید بگوییم که می خواهید رازی را به دوست خود بگویید. اگر درست کنار آنها هستید ، فقط می توانید آن را زمزمه کنید. اگر در جبهه های مخالف کشور هستید ، این کار بدیهی نیست. می توانید آن را بنویسید و برای آنها نامه ارسال کنید یا از تلفن استفاده کنید ، اما هر یک از این کانالهای ارتباطی ناامن است و هر کس با یک انگیزه به اندازه کافی قوی می تواند به راحتی پیام را رهگیری کند.
اگر راز به اندازه کافی مهم بود ، شما خطر نمی کنید که آن را به طور عادی بنویسید – جاسوسان یا یک کارمند پستی سرکش می تواند از طریق نامه شما جستجو کند. به همین ترتیب ، کسی می تواند بدون اطلاع شما از تلفن شما بهره برداری کند و هر تماس تلفنی را که برقرار می کند وارد کند.
یك راه حل برای جلوگیری از دسترسی به استراق سمع ها به محتویات پیام ، این است آن را رمزگذاری کنید. این در اصل به معنای اضافه کردن کد به پیامی است که آن را به یک آشفتگی ناخوشایند تبدیل می کند. اگر کد شما به اندازه کافی پیچیده باشد ، تنها افرادی که می توانند به پیام اصلی دسترسی پیدا کنند ، افرادی هستند که به کد دسترسی دارند.
اگر فرصتی برای به اشتراک گذاشتن کد از قبل با دوست خود داشتید ، پس هر یک از شما می توانید در هر زمان پیغام رمزگذاری شده ارسال کنید, دانستن اینکه شما دو نفر تنها کسانی هستید که توانایی خواندن مطالب پیام را دارید. اما اگر فرصتی برای به اشتراک گذاشتن کد از قبل ندارید ، چه می کنید?
این یکی از مشکلات اساسی رمزنگاری است که به آن پرداخته شده است طرح های رمزگذاری کلید عمومی (همچنین به عنوان رمزگذاری نامتقارن شناخته می شوند) مانند RSA.
تحت رمزگذاری RSA ، پیام ها با کدی به نام a رمزگذاری می شوند کلید عمومی, که می تواند به صورت علنی به اشتراک گذاشته شود. با توجه به برخی خصوصیات ریاضی الگوریتم RSA, هنگامی که یک پیام با کلید عمومی رمزگذاری شد ، می توان آن را رمزگشایی کرد فقط با یک کلید دیگر ، معروف به کلید خصوصی. هر کاربر RSA دارای یک جفت کلیدی است که از کلیدهای عمومی و خصوصی آنها تشکیل شده است. همانطور که از نام آن پیداست ، کلید خصوصی باید مخفی نگه داشته شود.
طرح های رمزگذاری کلید عمومی با یکدیگر تفاوت دارند رمزگذاری کلید متقارن ، که در آن فرآیند رمزگذاری و رمزگشایی از همان کلید خصوصی استفاده می کنند. این تفاوت ها باعث می شود رمزگذاری کلید عمومی مانند RSA برای برقراری ارتباط در موقعیت هایی که هیچ فرصتی برای توزیع ایمن کلیدها از قبل وجود ندارد ، مفید باشد..
الگوریتم های کلید متقارن برنامه های خاص خود را دارند ، مانند رمزگذاری داده ها برای استفاده شخصی ، یا برای زمانی که کانالهای ایمن وجود دارد که می توان کلیدهای خصوصی را در آنها به اشتراک گذاشت..
همچنین مشاهده کنید: رمزنگاری کلید عمومی
رمزگذاری RSA از کجا استفاده می شود?
رمزگذاری RSA اغلب در استفاده می شود ترکیب با سایر برنامه های رمزگذاری, یا برای امضاهای دیجیتال که می تواند صحت و یکپارچگی یک پیام را اثبات کند. به طور کلی برای رمزگذاری پیام ها یا پرونده ها به کار نمی رود ، زیرا از رمزگذاری کلید متقارن ، کارآمدتر و کم هزینه تر است..
برای کارآمدتر کردن کارها, یک پرونده به طور کلی با یک الگوریتم کلید متقارن رمزگذاری می شود ، و سپس کلید متقارن با رمزگذاری RSA رمزگذاری می شود. تحت این فرآیند ، تنها موجودی که به کلید خصوصی RSA دسترسی داشته باشد قادر به رمزگشایی کلید متقارن خواهد بود.
بدون اینکه بتوانید به کلید متقارن دسترسی پیدا کنید ، پرونده اصلی قابل رمزگشایی نیست. از این روش می توان برای ایمن سازی پیام ها و پرونده ها استفاده کرد ، بدون اینکه بیش از حد طولانی شود و یا از منابع محاسباتی زیادی استفاده نکنید.
رمزگذاری RSA در تعدادی از سیستمهای مختلف قابل استفاده است. قابل اجرا در OpenSSL ، wolfCrypt ، cryptlib و تعدادی کتابخانه رمزنگاری دیگر.
به عنوان یکی از اولین برنامه های رمزگذاری کلیدی عمومی ، RSA پایه و اساس بسیاری از ارتباطات ایمن ما را پایه گذاری کرد. بود به طور سنتی در TLS و همچنین الگوریتم اصلی مورد استفاده در رمزگذاری PGP بود. RSA هنوز در طیف وسیعی از مرورگرهای وب ، ایمیل ، VPN ، گپ و سایر کانالهای ارتباطی مشاهده می شود.
RSA همچنین اغلب برای برقراری ارتباط ایمن بین مشتریهای VPN و سرورهای VPN استفاده می شود. تحت پروتکل هایی مانند OpenVPN ، دستی TLS می تواند از الگوریتم RSA برای تبادل کلیدها و ایجاد کانال امن استفاده کند.
پیش زمینه رمزگذاری RSA
همانطور که در ابتدای این مقاله ذکر کردیم ، قبل از رمزگذاری کلید عمومی ، برقراری ارتباط ایمن در صورتی که فرصتی برای تبادل ایمن کلیدها از قبل وجود نداشته باشد ، چالشی بود. اگر فرصتی برای به اشتراک گذاشتن کد پیش از موعد وجود نداشت ، یا کانال ایمن از طریق توزیع کلیدها وجود داشت ، امکان برقراری ارتباط بدون خطر دشمنان قادر به رهگیری و دسترسی به محتوای پیام وجود نداشت..
تا دهه 1970 واقعاً چیزها تغییر نکردند. نخستین پیشرفت بزرگ به سمت آنچه که اکنون رمزنگاری کلیدهای عمومی می نامیم ، در آغاز دهه توسط جیمز الیس منتشر شد. الیس نمی تواند راهی برای اجرای کار خود بیابد ، اما این کار توسط همکارش کلیفورد کاکس گسترش یافت تا به آنچه اکنون می شناسیم تبدیل شود رمزگذاری RSA.
قطعه آخر معمایی همان چیزی است که اکنون ما آنرا صدا می کنیم تبادل کلید Diffie-Hellman. مالکوم جی ویلیامسون ، همکار دیگر ، طرحی را فهمید که به دو طرف اجازه می دهد یک کلید رمزنگاری را به اشتراک بگذارند ، حتی اگر کانال توسط مخالفان کنترل شود.
همه این کارها در آژانس اطلاعاتی انگلیس ، دفتر مرکزی ارتباطات دولت (GCHQ) انجام شد این کشف را طبقه بندی کرد. تا حدودی به دلیل محدودیت های فناوری ، GCHQ نمی تواند در آن زمان شاهد استفاده از رمزنگاری کلید عمومی باشد ، بنابراین توسعه به طور بی روی روی گرد و غبار جمع آوری قفسه نشست.. تا سال 1997 ، این کار به صورت طبقه بندی نشده انجام شد و مخترعین اصلی RSA شناخته شدند.
چند سال بعد ، مفاهیم مشابه در حوزه عمومی شروع به توسعه کردند. رالف مرکل شکل اولیه ای را ایجاد کرد رمزنگاری کلید عمومی, که در طراحی مبادله کلید Diffie-Hellman ، ویتفیلد دیفی و مارتین هلمن را تحت تأثیر قرار داد.
ایده های دیفی و هلمن از جنبه های مهمی که باعث می شود کارشان به پایه رمزنگاری کلید عمومی تبدیل شود ، وجود نداشت. این یک عملکرد یک طرفه که معکوس کردن آن دشوار خواهد بود. در سال 1977, ران ریوست ، ادی شمیر و لئونارد آدلمن, نام خانوادگی آنها که اختصار RSA را تشکیل می دهد ، پس از یک سال تلاش برای حل این مشکل ، راه حلی ارائه داد.
دانشگاهیان مستقر در MIT پیشرفت خود را بعد از یک مهمانی Passover در سال 1977 انجام دادند. پس از یک شب نوشیدن ، ریوست به خانه رفت ، اما به جای خواب ، وی عصر را با تب و تاب نوشتن یک مقاله گذراند که ایده او را برای عملکرد یک طرفه لازم رسمیت می داد..
این ایده در سال 1983 توسط MIT ثبت اختراع شد ، اما تا اوایل اینترنت چنین نبود که الگوریتم RSA شروع به پذیرش گسترده به عنوان یک ابزار مهم امنیتی کرد.
رمزگذاری RSA چگونه کار می کند?
موارد زیر کمی ساده خواهد بود ، زیرا احتمالاً خوانندگان بسیار زیادی توسط معلم ریاضی دبیرستان خود دچار کمبود شده اند. برای اینکه از ریاضی خیلی دور نمانیم ، خواهیم بود ساده کردن برخی از مفاهیم و استفاده از اعداد بسیار کوچکتر. در واقعیت ، رمزگذاری RSA از اعداد اصلی استفاده می کند که از نظر بزرگی بسیار بزرگتر هستند و چند پیچیدگی دیگر نیز وجود دارد.
چندین مفهوم مختلف وجود دارد که شما باید قبل از اینکه بتوانیم توضیح دهیم چگونه همه اینها به هم می پیوندند ، سرتان را جمع می کنند. این شامل توابع trapdoor ، تولید اعداد اولیه ، عملکرد ذاتی کارمایکل و فرآیندهای جداگانه درگیر در محاسبه کلیدهای عمومی و خصوصی مورد استفاده در فرآیندهای رمزگذاری و رمزگشایی.
توابع درب دام
رمزگذاری RSA تحت این فرضیه که الگوریتم باشد کار می کند آسان برای محاسبه در یک جهت ، اما برعکس تقریبا غیرممکن است. به عنوان نمونه ، اگر به شما گفته شد كه 701،111 محصول دو شماره اصلی است ، آیا می توانید بفهمید كه آن دو عدد چیست؟?
حتی با یک ماشین حساب یا رایانه ، اکثر ما تصور نمی کنیم از کجا شروع کنیم ، چه رسد به اینکه بتوانیم جواب را دریابیم. اما اگر مسائل را به هم بچسبانیم ، خیلی راحت تر می شود. نتیجه:
907 x 773
اگر به اندازه کافی حوصله داشتید ، می توانستید تلفن خود را شلاق بزنید یا شاید آن را در سر خود محاسبه کنید تا دریابید که جواب همان 701،111 قبلاً ذکر شده است. این 907 و 773 شماره اصلی هستند که به اولین سؤال ما پاسخ می دهند ، که به ما نشان می دهد که معادلات خاص می توانند به آسانی با یک روش فهمیده شوند ، اما به ظاهر معکوس نیست.
یکی دیگر از جنبه های جالب این معادله این است که ساده اگر یکی از شماره های اصلی را بدست آورید اگر در حال حاضر شماره دیگری را داشته باشید و همچنین محصول را پیدا کنید. اگر به شما گفته شود که 701،111 نتیجه 907 ضرب شده توسط شماره اصلی دیگر است ، می توانید آن را با عنوان زیر بدست آورید:
701،111 ÷ 907 = 773
از آنجا که رابطه بین این اعداد برای محاسبه در یک جهت ساده است ، اما در عکس برعکس بسیار سخت است ، معادله به عنوان یک عملکرد درب تله. توجه داشته باشید که اگرچه مثال فوق برای افراد دشوار است ، کامپیوترها می توانند این عمل را در مدت زمان بی اهمیت انجام دهند.
به همین دلیل ، RSA از تعداد بسیار بیشتری استفاده می کند. اندازه ابتکارات در اجرای RSA واقعی متفاوت است ، اما در RSA با 2048 بیتی ، آنها جمع می شوند تا کلیدهایی با طول 617 رقم تهیه کنند. برای کمک به شما در تجسم آن ، یک شماره از این اندازه می باشد:
99999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
تولید اعدام اولیه
توابع درب تله ذکر شده در بالا پایه و اساس عملکرد طرح های رمزگذاری عمومی و خصوصی را تشکیل می دهد. خصوصیات آنها به شما امکان می دهد کلیدهای عمومی بدون به خطر انداختن پیام یا آشکار کردن کلید خصوصی به اشتراک گذاشته شوند. آنها همچنین اجازه می دهند تا داده ها با یک کلید رمزگذاری شوند به شکلی که فقط توسط کلید دیگر از این جفت رمزگشایی شود.
اولین قدم برای رمزگذاری پیام با RSA است کلیدها را تولید کنید. برای انجام این کار ، ما نیاز داریم دو شماره اصلی (پ و ق) که با یک آزمون ابتدایی انتخاب می شوند. تست اولیه یک الگوریتمی است که به طور مؤثر اعداد اصلی را پیدا می کند ، مانند آزمایش پیروزی Rabin-Miller.
تعداد اصلی در RSA باید بسیار بزرگ باشد ، و همچنین نسبتاً از هم فاصله دارند. اعدادی که کوچک یا نزدیک به هم هستند ، راحت تر می شوند. با وجود این ، به عنوان مثال ما از اعداد کمتری استفاده می کند تا کارها را راحت تر دنبال کرده و محاسبه کنیم.
بیایید بگوییم که آزمایش برتر بودن شماره های اصلی را که در بالا استفاده کردیم ، 907 و 773 به ما می دهد. قدم بعدی کشف مدول است (ن) با استفاده از فرمول زیر:
ن = پ ایکس ق
جایی که پ = 907 و ق = 773
از این رو:
ن = 907 x 773
ن = 701،111
عملکرد کمتری Carmichael
هنگامی که ما ن, ما استفاده می کنیم عملکرد مطلق Carmichael:
ل(ن) = سی سی (پ – 1, ق – 1)
اگر مدتی نگذشته است که به کتابهای درسی ریاضی رسیده اید ، موارد فوق العاده وحشتناک به نظر می رسند. می توانید از این قسمت پرش کنید و فقط اعتماد کنید که ریاضی کار می کند ، در غیر این صورت برای چند محاسبه دیگر با ما بچسبانید. همه چیز را با حداکثر جزئیات ممکن توضیح خواهیم داد تا به شما کمک کند سرتان را در اطراف اصول راهنمایی کنید.
برای کسانی که آگاه نیستند, ل (ن) نمایانگر ذوق کارمیچل برای ن, در حالی که سی سی به معنی پایین ترین ضرب مشترک است, که کمترین عددی است که هر دو پ و ق می تواند به تقسیم شود چند روش مختلف برای درک این مسئله وجود دارد ، اما ساده ترین کار این است که به یک ماشین حساب آنلاین اعتماد کنید تا معادله را برای شما انجام دهد. بیایید شماره های ما را در معادله قرار دهیم:
ل(701،111) = سی سی (907 – 1, 773 – 1)
ل(701،111) = سی سی (906, 772)
با استفاده از ماشین حساب در بالا مرتبط ، این به ما می دهد:
ل(701،111) = 349،716
ایجاد کلید عمومی
اکنون که تعداد کارمندان شماره کارمایکل را کم داریم ، این است زمان برای فهمیدن کلید عمومی ما. تحت RSA, کلیدهای عمومی از یک شماره اصلی تشکیل شده اند ه, همچنین ن. شماره ه می تواند چیزی بین 1 و مقدار برای باشد ل(ن) ، که در مثال ما 349،716 است.
از آنجا که کلید عمومی به صورت عمومی به اشتراک گذاشته می شود ، برای آن چندان مهم نیست ه یک عدد تصادفی در عمل, ه به طور کلی در تنظیم شده است 65،537, زیرا وقتی اعداد بسیار بزرگتر به صورت تصادفی انتخاب می شوند ، باعث می شود رمزگذاری بسیار کارآمدتر شود. برای مثال امروز ، ما این اعداد را کوچک نگه می داریم تا محاسبات کارآمد شود. بیایید بگوییم:
ه = 11
داده های رمزگذاری شده نهایی ما متن رمزگذاری شده نامیده می شود (ج) ما آن را از پیام ساده خود استخراج می کنیم (م) ، با استفاده از کلید عمومی با فرمول زیر:
ج = مه mod n
ما قبلاً با این مسئله روبرو شده ایم ه و ما می دانیم ن همچنین. تنها چیزی که باید توضیح دهیم این است مود. کمی از عمق این مقاله خارج است ، اما به یک اشاره دارد عملیات ماژولو, که در اصل به معنای باقی مانده در هنگام تقسیم یک طرف از طرف دیگر است. مثلا:
10 مود 3 = 1
این امر به این دلیل است که 3 به 10 سه بار می رسد ، و 1 باقی مانده است.
برگشت به معادله ما برای ساده نگه داشتن امور ، بگذارید این را بگوییم پیام (م) که ما می خواهیم رمزگذاری و مخفی نگه داریم ، فقط یک شماره واحد است, 4. بگذارید همه چیز را به آن وصل کنیم:
ج = مه مود ن
ج = 411 مود 701،111
ج = 4،194،304 مود 701،111
دوباره ، برای ساخت عملیات ماژولو آسان ، ما با استفاده از یک ماشین حساب آنلاین ، اما شما استقبال می کنید آن را برای خودتان رقم بزنید. با وارد کردن 4،194،304 به حساب آنلاین ، به ما می دهد:
c = 688،749
بنابراین وقتی از RSA برای رمزگذاری پیام خود استفاده می کنیم, 4, با کلید عمومی ما این را به ما می دهد متن متن 688،749. مراحل قبلی ممکن است کمی سنگین به نظر برسند ، اما تکرار آنچه در واقع اتفاق افتاده است مهم است.
ما یک … داشتیم پیام 4, که می خواستیم مخفی نگه داریم ما یک کلید عمومی را برای آن اعمال کردیم که آن را به ما داد نتیجه رمزگذاری شده 688،749. اکنون که رمزگذاری شده است, با اطمینان می توانیم شماره 688،749 را به صاحب جفت کلید ارسال کنیم. آنها تنها شخصی هستند که می توانند آن را با کلید خصوصی خود رمزگشایی کنند. وقتی آنها آن را رمزگشایی کردند ، پیامی را که ما واقعاً ارسال می کردیم خواهند دید, 4.
ایجاد کلید خصوصی
در رمزگذاری RSA ، هنگامی که داده یا پیام با کلید عمومی تبدیل به رمزگذاری شد ، فقط توسط کلید خصوصی از همان جفت کلید رمزگذاری می شود. کلیدهای خصوصی از آنها تشکیل شده است د و ن. ما قبلاً می دانیم ن, و از معادله زیر برای یافتن استفاده می شود د:
د = 1 /ه mod λ(ن)
در ایجاد کلید عمومی در بخش بالا ، ما قبلاً در مثال خود تصمیم گرفتیم که, ه برابر 11 است. به همین ترتیب ، ما می دانیم که ل(ن) برابر با کار قبلی ما در زیر 349،716 است عملکرد کمتری Carmichael. وقتی با این بخش از فرمول مواجه می شویم ، مسائل کمی پیچیده تر می شوند:
1 /ه مود
این معادله ممکن است به نظر برسد که از شما می خواهد 1 تا 11 را تقسیم کنید ، اما این طور نیست. در عوض ، این فقط نمادی است که ما باید آنرا محاسبه کنیم معکوس مدولار از ه (که در این حالت 11 است) و ل(ن) (که در این حالت 349،716 است).
این در واقع به این معنی است به جای انجام یک عمل ماژول استاندارد ، به جای آن از معکوس استفاده خواهیم کرد. این به طور معمول با الگوریتم Extended Euclidean یافت می شود ، اما کمی خارج از محدوده این مقاله است ، بنابراین ما به جای آن یک ماشین حساب آنلاین را تقلب خواهیم کرد و استفاده خواهیم کرد. اکنون که همه اتفاقات را درک می کنیم ، اجازه دهید اطلاعات خود را به فرمول وصل کنیم:
د = 1 /11 مود 349،716
برای انجام این عمل ، کافیست 11 (یا هر مقداری را که برای آن دارید) وارد کنید ه اگر می خواهید با مثال خود این کار را انجام دهید) جایی که می گوید علاقه و 349،716 (یا هر ارزشی که ممکن است برای آن داشته باشید) ل(ن) اگر می خواهید با مثال خود این کار را انجام دهید) جایی که می گوید مدولو در ماشین حساب آنلاین که در بالا مرتبط است. اگر آن را به درستی انجام داده اید ، باید نتیجه بگیرید که در آن:
د = 254 ، 339
اکنون که ارزش آن را داریم د, ما می توانیم با استفاده از فرمول زیر پیام هایی را که با کلید عمومی رمزگذاری شده اند رمزگشایی کنیم:
م = جد mod n
اکنون می توانیم به متن رمزگذاری شده ای که در زیر رمزگذاری شده ایم برگردیم ایجاد کلید خصوصی بخش. وقتی پیام را با کلید عمومی رمزگذاری کردیم ، ارزش آن را برای ما رقم زد ج از 688،749. از بالا ، ما این را می دانیم د برابر با 254333. ما هم این را می دانیم ن برابر با 701،111. این به ما می دهد:
م = 688،749254،339 مود 701،111.
همانطور که شاید متوجه شده باشید ، تلاش برای گرفتن عدد به قدرت 254339th ممکن است کمی بیشتر برای ماشین حسابهای معمولی باشد. در عوض ، ما از یک ماشین حساب آنلاین رمزگشایی RSA استفاده خواهیم کرد. اگر می خواستید از یک روش دیگر استفاده کنید ، همانطور که به طور معمول انجام می دهید ، قدرت ها را اعمال می کنید و عملیات ماژول را به همان روشی که انجام دادیم انجام می دهید ایجاد کلید عمومی بخش.
در ماشین حساب مربوط به بالا ، 701،111 را که می گوید وارد کنید منبع تغذیه: N, 254،399 جایی که می گوید کلید رمزگشایی: D, و 688،749 جایی که می گوید پیام متن رمزگذاری شده به صورت عددی, مطابق شکل زیر:
پس از وارد کردن داده ها ، ضربه بزنید رمزگشایی, که اعداد را از طریق فرمول رمزگشایی که در بالا ذکر شد قرار می دهد. این پیام اصلی را در کادر زیر به شما می دهد. اگر همه کارها را به درستی انجام داده اید ، باید جواب آن را بگیرید 4, این پیام اصلی بود که ما با کلید عمومی خود رمزگذاری کردیم.
چگونه رمزگذاری RSA در عمل کار می کند
بخش های فوق باید درک دقیقی از نحوه عملکرد ریاضی رمزگذاری کلید عمومی داشته باشد. این می تواند کمی گیج کننده باشد ، اما حتی کسانی که پیچیدگی معادلات را درک نکرده اند می توانند امیدوارند برخی از اطلاعات مهم درباره روند.
در مراحل ذکر شده در بالا ، ما نشان داده ایم که چگونه دو نهاد می توانند بدون اینکه یک کد را قبلاً به اشتراک بگذارند ، با امنیت ارتباط برقرار کنند. اول ، آنها نیاز دارند جفت های کلیدی خود را تنظیم کنید و کلید عمومی را با یکدیگر به اشتراک بگذارید. برای حفظ امنیت ارتباطات ، این دو نهاد باید کلیدهای خصوصی خود را مخفی نگه دارند.
هنگامی که فرستنده کلید عمومی گیرنده خود را دارد ، می تواند از آن برای رمزگذاری داده هایی که می خواهند امنیت داشته باشند استفاده کند.. هنگامی که با یک کلید عمومی رمزگذاری شد ، فقط توسط همان کلید خصوصی می توان رمز خصوصی رمزگشایی کرد. حتی نمی توان از همان کلید عمومی برای رمزگشایی داده ها استفاده کرد. این به دلیل خواص توابع درب دام که در بالا به آن اشاره کردیم.
هنگامی که گیرنده پیام رمزگذاری شده را دریافت می کند ، آنها از کلید خصوصی خود برای دسترسی به داده ها استفاده می کنند. اگر گیرنده بخواهد ارتباطات را به روشی مطمئن برگرداند, آنها سپس می توانند پیام خود را با کلید عمومی مهمانی که با آنها ارتباط برقرار می کنند رمزگذاری کنند. مجدداً ، پس از رمزگذاری با کلید عمومی ، تنها راهی که می توانید به اطلاعات دسترسی داشته باشید ، از طریق کلید خصوصی مطابق با آن است..
در این روش ، رمزگذاری RSA توسط طرفین ناشناخته می تواند برای ارسال ایمن داده ها بین خود استفاده شود. بخش های قابل توجهی از کانال های ارتباطی که ما در زندگی آنلاین خود از آنها استفاده می کنیم از این بنیاد ساخته شده است.
چگونه پیامهای پیچیده تری با RSA رمزگذاری می شوند?
در مثال ما چیزهای زیادی را ساده کردیم تا درک آن آسان تر شود ، به همین دلیل فقط پیغام “4” را رمزگذاری کردیم. به نظر می رسد که قادر به رمزگذاری شماره 4 به خصوص مفید نیستید ، بنابراین ممکن است تعجب کنید چگونه می توانید مجموعه ای از داده های پیچیده تر را رمزگذاری کنید, مانند کلید متقارن (که متداول ترین کاربرد RSA است) یا حتی یک پیام.
برخی افراد ممکن است از اینکه چگونه یک کلید مانند “n38cb29fkbjh138g7fqijnf3kaj84f8b9f …” یا پیامی مانند “خرید ساندویچ بخرید” توسط الگوریتمی مانند RSA رمزگذاری شود ، رمزگذاری می شود. واقعیت این است که تمام اطلاعاتی که رایانه های ما پردازش می شوند به صورت دودویی (1 و 0) ذخیره می شوند و از استانداردهای رمزگذاری مانند ASCII یا یونیکد به نمایندگی از آنها به روشهایی که انسانها می توانند درک کنند (حروف).
این بدان معنی است که کلیدهایی مانند “n38cb29fkbjh138g7fqijnf3kaj84f8b9f …” و پیامهایی مانند “خرید من ساندویچ” قبلاً به عنوان شماره وجود دارند, که به راحتی در الگوریتم RSA قابل محاسبه است. اعدادی که توسط آنها نشان داده می شود برای ما بسیار بزرگتر و دشوارتر است ، به همین دلیل ترجیح می دهیم که با شخصیت های الفبایی مقابله کنیم نه یک جفت باینری..
اگر می خواستید رمز جلسه طولانی تر یا پیام پیچیده تر را با RSA رمزگذاری کنید ، به سادگی تعداد بسیار بیشتری را شامل می شود.
لایه گذاری
وقتی RSA پیاده سازی می شود ، از چیزی به نام استفاده می کند برای جلوگیری از تعدادی از حملات. برای توضیح اینکه چگونه این کار می کند ، ما با یک مثال شروع خواهیم کرد. بگذارید بگوییم که شما یک پیام رمزگذاری شده را به یک دوست ارسال می کنید:
کارن عزیز,
امیدوارم حال شما خوب باشد. آیا ما هنوز فردا شام می خوریم?
ارادتمند شما,
جیمز
بیایید بگوییم که شما پیام را به روشی ساده کدگذاری کرده اید تغییر هر حرف به حرفی که از آن در الفبای دنبال شده است. با این کار پیام به:
Efbs Lbsfo,
J ipqf zpv bsf xfmm. Bsf xf tujmm ibwjoh ejoofs upnpsspx?
Zpvst tjodfsfmz,
Kbnft
اگر دشمنان شما این نامه را رهگیری کردند ، ترفندی وجود دارد که می توانند از آنها برای امتحان و کرک کردن کد استفاده کنند. آنها می توانند به قالب نامه خود بنگرید و سعی کنید حدس بزنید چه پیام ممکن است بگوید. آنها می دانند که مردم معمولاً نامه های خود را با “سلام” ، “سلام” ، “عزیز” یا تعدادی از کنوانسیون های دیگر شروع می کنند.
اگر آنها سعی کردند از “سلام” یا “سلام” به عنوان اولین کلمه استفاده کنند ، می دیدند که این تعداد شخصیت ها متناسب نیست. آنها سپس می توانند “عزیز” را امتحان کنند. متناسب است ، اما این لزوماً به معنای هیچ چیز نیست. مهاجمان فقط آن را امتحان می کردند و می دیدند که کجا آنها را هدایت کرده است. بنابراین آنها به ترتیب حروف “e” ، “f” ، “b” و “s” را با “d” ، “e” ، “a” و “r” تغییر می دهند. این به آنها می دهد:
عزیزم لاسئو,
J ipqe zpv متاسفم. آیا xe tujmm iawjoh djooes upnpsspx هستند?
Zpvrt tjoderemz,
کانت
هنوز هم بسیار گیج کننده به نظر می رسد ، بنابراین ممکن است مهاجمان سعی کنند برخی از کنوانسیون های دیگر را جستجو کنند, مانند اینکه نامه هایمان را نتیجه می گیریم. اغلب غالباً “از” یا “با احترام” در آخر اضافه می شود ، اما هیچ یک از این قالب ها متناسب نیستند. درعوض ، ممکن است مهاجمان “صادقانه” را امتحان کنند و حروف دیگر را جایگزین کنند تا ببینند که در کجا به دست آنها می رسد. با تغییر “z” ، “p” ، “v” ، “t” ، “j” “o” ، “d” و “m” با “y” ، “o” ، “u” ، “s” ، ” من “،” ن “،” ج “و” ل “به ترتیب ، آنها دریافت می کنند:
عزیز لازن,
من ioqe شما xell هستید. آیا xe tuill iawinh dinnes uonossox؟?
ارادتمند شما,
کانت
بعد از این تغییر ، به نظر می رسد که مهاجمان شروع به دستیابی به جایی می کنند. آنها علاوه بر کلماتی که حدس های اولیه آنها را تشکیل می دهد ، کلمات “من” ، “شما” و “نیز” را پیدا کرده اند.
با مشاهده اینکه کلمات به صورت دستوری صحیح هستند ، مهاجمان می توانند کاملاً مطمئن باشند که در جهت درست حرکت می کنند. در حال حاضر ، آنها احتمالاً همچنین متوجه شده اند که کد مربوط به تغییر هر حرف به حرفی است که از آن در الفبای پیروی می شود. هنگامی که آنها متوجه این موضوع شدند ، ترجمه بقیه و خواندن پیام اصلی را آسان می کند.
مثال بالا فقط یک کد ساده بود ، اما همانطور که مشاهده می کنید, ساختار یک پیام می تواند سرنخ هایی در مورد محتوای آن به مهاجمان بدهد. مطمئناً ، فهمیدن پیام فقط از ساختار آن کار دشواری بود و برخی از حدس های تحصیل کرده را نیز به خود اختصاص داد ، اما باید در نظر داشته باشید که کامپیوترها نسبت به ما بسیار بهتر از این عمل می کنند.. این بدان معنی است که می توان از آنها برای فهمیدن کدهای بسیار پیچیده تر در زمان بسیار کوتاه تر استفاده کرد, بر اساس سرنخ هایی که از ساختار و عناصر دیگر حاصل می شود.
اگر ساختار می تواند منجر به شکسته شدن یک کد شود و محتوای یک پیام را فاش کند ، ما به راه دیگری برای پنهان کردن ساختار به منظور ایمن نگه داشتن پیام نیاز داریم. این ما را به ارمغان می آورد لایه گذاری.
هنگامی که یک پیام خالی است, برای مخفی کردن سرنخ های قالب بندی اصلی که می تواند منجر به شکسته شدن پیام رمزگذاری شده شود ، داده های تصادفی اضافه شده است. با RSA ، اوضاع کمی پیچیده تر است ، زیرا یک کلید رمزگذاری شده دارای فرمت آشکار نامه ای نیست که به ما کمک کند تا سرنخ هایی در مثال بالا.
با وجود این ، دشمنان می توانند از تعدادی از حملات استفاده کنند تا از خصوصیات ریاضی یک کد استفاده کنند و داده های رمزگذاری شده را بشکنند. به دلیل این تهدید, پیاده سازی های RSA از طرح های بالشتکی مانند OAEP برای جاسازی داده های اضافی در پیام استفاده می کنند. اضافه کردن این بالشتک قبل از رمزگذاری پیام ، RSA را بسیار ایمن تر می کند.
ارسال پیام
RSA را می توان بیش از رمزگذاری داده ها استفاده کرد. خواص آن نیز آن را به یک سیستم مفید برای تبدیل می کند تأیید اینکه پیغامی از طرف مؤسسه ای که ادعا می کند آنرا ارسال کرده است ، ارسال شده است ، و همچنین اثبات این که هیچ پیام تغییر یافته یا دستکاری نشده است.
وقتی شخصی می خواهد صحت پیام خود را اثبات کند ، می تواند a را محاسبه کند هش (تابعی که داده های مربوط به اندازه دلخواه را می گیرد و آن را به یک مقدار طول ثابت تبدیل می کند) از متن ساده ، سپس آن را با کلید خصوصی آنها امضا کنید. آنها هش را با استفاده از همان فرمول مورد استفاده در رمزگشایی امضا کنید (m = cد mod n) پس از امضای پیام ، آنها این امضای دیجیتالی را در کنار پیام برای گیرنده ارسال می کنند.
اگر گیرنده پیامی را با امضای دیجیتال دریافت کند ، می تواند از آن استفاده کند امضا برای بررسی اینکه آیا این پیام توسط کلید خصوصی شخصی که ادعا کرده است آنرا ارسال کرده است به امضا رسیده است یا خیر. آنها همچنین می توانند ببینند که آیا این پیام توسط مهاجمان پس از ارسال تغییر کرده است یا خیر.
برای بررسی امضای دیجیتالی ، گیرنده ابتدا از همان عملکرد هش برای یافتن مقدار هش پیام دریافتی استفاده می کند. گیرنده سپس اعمال می کند کلید عمومی فرستنده به امضای دیجیتال, با استفاده از فرمول رمزگذاری (c = mه حالت n), به آنها هشدار امضای دیجیتال بدهد.
توسط مقایسه هش پیامی که در کنار هش از امضای دیجیتالی رمزگذاری شده دریافت شده است, گیرنده می تواند بگوید آیا پیام معتبر است یا خیر. اگر دو مقدار یکسان باشند ، پیام از زمان امضا تغییر نکرده است توسط فرستنده اصلی اگر پیام حتی با یک شخصیت واحد تغییر یافته باشد ، مقدار هش کاملاً متفاوت خواهد بود.
امنیت RSA & حملات
امنیت RSA مانند اکثر سیستمهای رمزنگاری به نحوه اجرای و استفاده از آن بستگی دارد. یک عامل مهم اندازه کلید است. تعداد بیت های یک کلید بزرگتر است (در واقع کلید چقدر طولانی است) ، شکستن حملات سخت تر است مانند بی رحمی و فاکتور سازی.
از آنجا که الگوریتم های نامتقارن با کلید مانند RSA می توانند با فاکتورسازی عدد صحیح شکسته شوند ، در حالی که الگوریتم های کلید متقارن مانند AES نمی توانند ، کلیدهای RSA برای دستیابی به همان سطح امنیتی بسیار طولانی تر نیاز دارند..
در حال حاضر ، بزرگترین اندازه کلیدی که فاکتور شده است 768 بیت طول است. این کار توسط تیمی از دانشگاهیان طی یک دوره دو ساله و با استفاده از صدها دستگاه انجام شد.
از آنجایی که کارخانه سازی تا پایان سال 2009 به پایان رسید و قدرت محاسبات از آن زمان به میزان قابل توجهی رشد کرده است ، می توان فرض کرد که تلاشی با شدت مشابه اکنون می تواند یک کلید RSA بسیار بزرگتر باشد.
با وجود این ، زمان و منابع لازم برای این نوع حمله ، آن را از دسترس بیشتر هکرها و به عرصه ایالت های کشور خارج می کند. بهترین طول استفاده از کلید به مدل تهدید فردی شما بستگی دارد. انستیتوی ملی استاندارد و فناوری حداقل اندازه کلید را توصیه می کند 2048 بیتی, اما از کلیدهای 4096 بیتی نیز استفاده شده است در برخی شرایط که سطح تهدید بالاتر است.
فاکتورسازی تنها راهی است که می توان RSA را خراب کرد. تعدادی از حملات دیگر امکان شکستن رمزگذاری را با منابع کمتری دارند ، اما اینها به اجرا و عوامل دیگر بستگی دارد ، نه لزوماً خود RSA. برخی از این موارد عبارتند از:
آیا ابتکارات واقعاً تصادفی هستند?
برخی از پیاده سازی های RSA از ژنراتورهای شماره تصادفی ضعیف استفاده می کنند تا اعدام اولیه را بدست آورند. اگر این اعداد به اندازه کافی تصادفی نباشند ، عاملان حمله و شکستن رمزگذاری را برای مهاجمان بسیار آسان تر می کند. این مشکل می توان با استفاده از یک مولد عدد شبه تصادفی به صورت رمزنگاری ایمن از آن جلوگیری کرد.
تولید کلید فقیر
برای ایمن بودن آنها ، کلیدهای RSA باید در پارامترهای خاصی قرار گیرند. اگر ابتدای کار پ و ق خیلی نزدیک به هم هستند ، کلید به راحتی قابل کشف است. به همین ترتیب ، شماره د که بخشی از کلید خصوصی را تشکیل می دهد نمی تواند خیلی کوچک باشد. مقدار کم حل آن را آسان می کند. مهم است که این اعداد از طول کافی برای حفظ امنیت کلید شما برخوردار باشند.
حملات کانال جانبی
اینها نوعی حمله است که RSA را به طور مستقیم خراب نمی کند ، اما درعوض از اطلاعات مربوط به اجرای آن استفاده می کند تا به مهاجمان نکات مربوط به روند رمزگذاری را نشان دهد. این حملات می تواند مواردی از جمله را شامل شود مقدار قدرت مورد استفاده را تجزیه و تحلیل می کند, یا تجزیه و تحلیل پیش بینی شعبه, که برای اندازه گیری کلید خصوصی از اندازه گیری های زمان اجرا استفاده می کند.
نوع دیگری از حمله کانال جانبی به عنوان حمله زمان بندی شناخته می شود. اگر یک مهاجم توانایی اندازه گیری زمان رمزگشایی در رایانه هدف خود را برای تعدادی پیام مختلف رمزگذاری شده داشته باشد, این اطلاعات باعث می شود که مهاجم بتواند کلید خصوصی هدف را مشخص کند.
اکثر پیاده سازی های RSA با اضافه کردن مقدار یک طرفه در طی فرآیند رمزگذاری ، از این حمله جلوگیری می کنند و این همبستگی را از بین می برد. این فرآیند نامیده می شود پرده رمزنگاری.
آیا رمزگذاری RSA برای آینده بی خطر است?
خبر خوب این است که علیرغم این حملات احتمالی ، RSA برای استفاده بی خطر تلقی می شود. احتیاط آن است لازم است به درستی پیاده سازی شود و از کلید استفاده شده در پارامترهای صحیح استفاده شود. همانطور که اخیراً بحث کردیم ، پیاده سازی هایی که از بالشتک استفاده نمی کنند ، از اعدام اولیه و به اندازه کافی استفاده نمی کنند و آسیب پذیری های دیگری نیز ندارند ، نمی توانند امن تلقی شوند.
اگر می خواهید از رمزگذاری RSA استفاده کنید, اطمینان حاصل کنید که از کلید حداقل 1024 بیت استفاده می کنید. در صورت تمایل به استفاده از RSA با اطمینان ، کسانی که مدلهای تهدید بیشتری دارند باید به کلیدهای 2048 یا 4096 بیت بچسبند. تا زمانی که از نقاط ضعف RSA آگاه باشید و از آن به درستی استفاده کنید ، باید از RSA برای به اشتراک گذاشتن کلید و سایر کارهای مشابه که نیاز به رمزگذاری کلید عمومی دارند ، احساس امنیت کنید..
همچنین مشاهده کنید: انواع رمزگذاری رایج توضیح داده شده است
خواهد بود پرونده را باز کند. همچنین، رمزگذاری RSA در امنیت ارتباطات اینترنتی نیز استفاده می شود، به عنوان مثال در ارتباطات بین مرورگر و سرور در پروتکل HTTPS. با استفاده از رمزگذاری RSA، اطلاعات ارسال شده بین مرورگر و سرور رمزگذاری شده و تنها با استفاده از کلید خصوصی سرور می توان آنها را رمزگشایی کرد. در کل، رمزگذاری RSA یکی از مهمترین الگوریتم های رمزنگاری است که در امنیت اطلاعات و ارتباطات اینترنتی بسیار مفید است.