در آموزش الگوریتم رمزنگاری rsa، قصد داریم آگاهی شما را درزمینه چگونگی و لزوم محافظت از بانکهای اطلاعاتی سازمانها و مؤسسات بالا ببریم. در بیست و هشتم اردیبهشت ۱۴۰۰ خبری مبنی بر هک شدن بانک ملت و لو رفتن اطلاعات سی میلیون نفر منتشر شده بود که توسط معاونت الکترونیک سازمان فناوری اطلاعات ایران تأیید شد. ناگوارتر از آن، در سال ۲۰۲۰، با هک شدن صرافیها و کیف پولهای مختلف نظیر تراست ولت درمجموع حدود یک میلیارد دلار از سرمایه مردم و دولتها توسط افراد ناشناس به سرقت رفت.
همانطور که در دو مثال بالا مشاهده کردید؛ فناوری اطلاعات و علوم کامپیوتر، به همان اندازه که کاربردی و شگفتانگیز هستند؛ میتوانند وحشتناک هم باشند. محققان و برنامه نویسان برای حل مشکل سرقت اطلاعات در حملات سایبری، همواره روشهای بهروز رمزنگاری دادهها را ابداع کردند تا از بانکهای اطلاعاتی برخط محافظت کرده و بهاینترتیب برای زهر هکرها و دزدان اطلاعات مردم، پادزهری تولید کرده باشند. رمزنگاری به روش الگوریتم رمزنگاری rsa هم یکی از همین پادزهرها است که جهت پنهانسازی اطلاعات کاربران سیستمهای کامپیوتری مورد استفاده قرار میگیرد.
تاریخچه رمزنگاری rsa
نظریه کلید عمومی و خصوصی نامتقارن در سال ۱۹۷۶ میلادی توسط مارتین هلمن و وایتفیلد دیف دانشجویان دانشگاه استنفورد ایالاتمتحده آمریکا معرفیشده و در اختیار جهانیان قرار گرفت. در این روش که به روش رمزنگاری نامتقارن شناخته میشود، از دو کلید برای رمزنگاری اطلاعات استفاده میشود. البته در روشهای قدیمیتر از یک کلید استفاده میشد که رمزنگاری متقارن نامیده شده بود. آنها با استفاده از این روش “امضای مجازی” و نظریه اعداد (Number theory) را رمزنگاری کردند. روش رمزنگاری دیف هیلمن بارها آزمایش شد و درنهایت مورد تأیید دانشمندان علوم کامپیوتر قرار گرفت.
تحقیقات همچنان ادامه داشت؛ تا جایی که دانشجویان و برنامه نویسان دیگر هم ازجمله ادی شامیر و رونالد ریوست، لئونارد آدلمن در مؤسسه فناوری ماساچوست سعی کردند تا برای رمزنگاری یک تابع یک طرفه که معکوس کردن آن بسیار دشوار بود را بسازند. آنها رویکردهای متعددی ازجمله رویکردی بر اساس مسئله کولهپشتی و “جایگشت چندجملهای” را امتحان کردند تا اینکه در آوریل سال ۱۹۷۷ میلادی، الگوریتم rsa شناختهشده و به ثبت جهانی رسید.
سالها بعد یعنی در سال ۱۹۹۷ میلادی، rsa کودک با نام تجاری kid-rsa، یک الگوریتم رمزگشایی کلید عمومی سادهشده، بهوسیله محققان علوم کامپیوتر معرفی گردید. rsa کودک، الگوریتم rsa را قابلفهمتر میکند و مطالعه آن خالی از لطف نیست. حتی در برخی موارد هم، محققان توصیه میکنند که قبل از مطالعه الگوریتم rsa ،rsa کودک بهعنوان چراغ راه، موردبررسی قرار گیرد.
الگوریتم رمزنگاری rsa چیست؟
الگوریتم رمزنگاری rsa یک الگوریتم رمزنگاری نامتقارن است. به این معنی که بر روی دو کلید به نامهای کلید عمومی یا Public و کلید خصوصی یا Private اجرا میشود. همانطور که از نام آن مشخص است؛ کلید عمومی در اختیار همه قرار میگیرد ولی کلید خصوصی بهصورت محرمانه نگهداری میگردد. بهعبارتدیگر، از کلید عمومی برای رمزگذاری استفاده میشود و هکر با در دست داشتن آن نمیتواند پیغام را از حالت رمز خارج کند. این در حالی است که کلید خصوصی، بهعنوان رمزگشا استفادهشده و همانند کلید گاوصندوق، فقط باید در اختیار مالک یا امانتدار سیستم باشد.
جهت درک بهتر، برای یک الگوریتم کلید نامتقارن، یک عدد بزرگ و تصادفی در نظر بگیرید. از این عدد تصادفی برای تولید یک جفت قابل قبول از کلیدهای مناسب استفاده خواهیم کرد. به شکل زیر توجه کنید.
همانطور که در توضیحات قبل هم بیان گردید؛ درروش رمزگذاری کلید نامتقارن، هرکسی میتواند پیامها را با استفاده از کلید عمومی رمزگذاری کند اما فقط و فقط دارنده کلید خصوصیِ از قبل تعیینشده، بهعنوان جفتِ آن کلید عمومی، میتواند عملیات رمزگشایی را اجرا کند. در اصل محرمانه بودن کلید خصوصی، امنیت پیغامی که ردوبدل میشود را تأمین میکند.
در روش کلید عمومی – خصوصی دیف-هلمن، آلیس و باب هرکدامشان کلیدهای عمومی و خصوصی متناسب با پیغام خود را تولید کرده؛ کلید عمومی را توزیع و کلید خصوصی را محرمانه نگه میدارند. بهعبارتدیگر، در این توضیح پیام موردنظر فقط به امضای دیجیتال رسیده و عملیات رمزگذاری بر روی آن پیادهسازی نشده است.
از شکل زیر دو نتیجه مهم میتوان گرفت. اول اینکه آلیس با کلید خصوصی خود پیام را امضا میکند و دوم اینکه باب با در دست داشتن کلید عمومی پیام، میتواند تأیید کند که آلیس پیام را ارسال کرده و هیچگونه عملیات دستکاری یا هک بر روی پیغام پیادهسازی نشده است.
روال کار الگوریتم رمزنگاری rsa
ایده rsa، مبتنی بر یک اصل مهم شکلگرفته و آنهم این است که فاکتور سازی یک عدد صحیح بزرگ، دشوار میباشد. در پیادهسازی الگوریتم رمزنگاری rsa، کلید عمومی از دو عدد تشکیلشده است که یک عدد آن، حاصلضرب دو عدد اول بزرگ بوده و کلید خصوصی نیز از همان دو عدد اول مشتق شده است.
اگر کسی بتواند عدد بزرگ را فاکتور سازی کند؛ کلید خصوصی به خطر میافتد. بنابراین قدرت رمزگذاری کاملاً بهاندازه کلید خصوصی بستگی دارد و اگر اندازه کلید را دو یا سه برابر کنیم؛ قدرت رمزگذاری بهطور تصاعدی افزایش مییابد. کلیدهای rsa معمولاً میتوانند ۱۰۲۴ یا ۲۰۴۸ بیت باشند اما کارشناسان معتقدند که در آینده، احتمال شکسته شدن کلیدهای ۱۰۲۴ بیتی، بسیار بالا است. هرچند، تابهحال حتی یک مورد هم از شکسته شدن کلیدهای ۱۰۲۴ بیتی گزارش نشده و به نظر میرسد که این کار، غیرممکن باشد.
در این مقاله پاورپوینت الگوریتم رمزنگاری RSA قرار داده شده است. این پاورپوینت آماده در ۲۱ اسلاید در قالب ppt. یا pptx. با قابلیت ویرایش برای ارائه درسی آماده دانلود میباشد.
مکانیسم الگوریتم رمزنگاری rsa
بیایید بهاتفاق، آنچه که در یک الگوریتم رمزنگاری rsa اتفاق میافتد را موردبررسی قرار دهیم. اگر بخواهیم بهصورت مرحلهبهمرحله پیش برویم؛ اولین مرحله، تولید کلید عمومی خواهد بود.
Select two prime no's. Suppose P = 53 and Q = 59. Now First part of the Public key : n = P*Q = 3127. We also need a small exponent say e : But e Must be An integer. Not be a factor of n. ۱ < e < Φ(n) [Φ(n) is discussed below], Let us now consider it to be equal to 3. Our Public Key is made of n and e
We need to calculate Φ(n) : Such that Φ(n) = (P-1)(Q-1) so, Φ(n) = 3016 Now calculate Private Key, d : d = (k*Φ(n) + 1) / e for some integer k For k = 2, value of d is 2011.
Convert letters to numbers : H = 8 and I = 9 Thus Encrypted Data c = 89e mod n. Thus our Encrypted Data comes out to be 1394 Now we will decrypt 1394 : Decrypted Data = cd mod n. Thus our Encrypted Data comes out to be 89 ۸ = H and I = 9 i.e. "HI".
در تکه کد زیر، که به زبان C نوشتهشده است؛ میتوانید الگوریتم rsa را با مقادیر کوچک مشاهده کنید. اجزای تشکیل دهنده این تکه کد، در چهار بخش مهم گروهبندی میشوند که عبارتاند از:
- کلید رمزنگاری
- الگوریتم رمزنگاری
- کلید رمزگشایی
- الگوریتم رمزگشایی
// C program for RSA asymmetric cryptographic // algorithm. For demonstration values are // relatively small compared to practical // application #include<stdio.h> #include<math.h> // Returns gcd of a and b int gcd(int a, int h) { int temp; while (1) { temp = a%h; if (temp == 0) return h; a = h; h = temp; } } // Code to demonstrate RSA algorithm int main() { // Two random prime numbers double p = 3; double q = 7; // First part of public key: double n = p*q; // Finding other part of public key. // e stands for encrypt double e = 2; double phi = (p-1)*(q-1); while (e < phi) { // e must be co-prime to phi and // smaller than phi. if (gcd(e, phi)==1) break; else e++; } // Private key (d stands for decrypt) // choosing d such that it satisfies // d*e = 1 + k * totient int k = 2; // A constant value double d = (1 + (k*phi))/e; // Message to be encrypted double msg = 20; printf("Message data = %lf", msg); // Encryption c = (msg ^ e) % n double c = pow(msg, e); c = fmod(c, n); printf("\nEncrypted data = %lf", c); // Decryption m = (c ^ d) % n double m = pow(c, d); m = fmod(m, n); printf("\nOriginal Message Sent = %lf", m); return 0; }
Message data = 12.000000 Encrypted data = 3.000000 Original Message Sent = 12.000000
کاربرد الگوریتم
در حالت کلی، میتوان گفت که الگوریتم رمزنگاری rsa زمانبر بوده و بهتنهایی هزینه زیادی برای اجرای آن باید صرف شود. بنابراین، نتیجه مطلوب کاربر را به دنبال نخواهد داشت و حتی ممکن است که درموارد نادری در مقابل حملات وسیع سایبری، ایمن نباشد. به همین علت است که کمتر برای رمزگذاری مستقیم بانکهای اطلاعاتی سازمانها و مؤسسات، استفاده میشود.
الگوریتم RSA در متلب عنوان موضوعی است که در این پست به آن پرداخته شده است. الگوریتم RSA در مسائل رمزنگاری و پنهان سازی اطلاعات کاربرد دارد و برای جلوگیری از نفوذ در مراکز انفورماتیک و شبکه های ارتباطی کاربرد دارد. در این پست سورس کد الگوریتم رمزنگاری RSA در متلب قرار گرفته است که مناسب برای علاقه مندان و محققان در زمینه رمزنگاری اطلاعات است. در ادامه به تشریح و توضیح این الگوریتم پرداخته می شود.
در اغلب موارد rsa کلید رمزگشاییشده را برای الگوریتم کلید متقارن انتقال داده و بهواسطه این کار، سرعت عملیات رمزگذاری و رمزگشایی سیستم با سرعتی بسیار بالاتر از قبل انجام میگیرد. درنتیجه از اتلاف زمان و هزینه جلوگیری شده و رضایت کاربر را به خود جلب میکند.
اثبات درستی الگوریتم رمزنگاری rsa
تمامی نظریهها و علوم ارائهشده در حوزه علم و تکنولوژی، باید توجیه و اثبات علمی داشته باشند؛ در غیر این صورت مورد تأیید محققان و دانشمندان آن حوزه واقع نشده؛ کارنامه سلامت به آنها تعلق نمیگیرد و نمیتوان آن نظریهها را برای استفاده در حوزه منحصربهفرد خود، به اشتراک گذاشت. الگوریتم رمزنگاری rsa هم از این قاعده مستثنا نیست. بنابراین در اثبات درستی آن، از قواعد ریاضی استفاده میکنیم تا درستی این الگوریتم را به اثبات برسانیم.
اثبات درستی با استفاده از قضیه کوچک فرما
در اثبات درستی الگوریتم رمزنگاری rsa، فرضیات و اثبات مسئله به شرح زیر بیان میگردد.
فرض مسئله: بر اساس قضیه کوچک فرما اگر یک عدد p اول و a یک عدد صحیح باشد که پس خواهد بود.
اثبات مسئله: برای هر عدد صحیح m در صورتی که p و q اعداد اول جدا باشند و e و d اعداد صحیح مثبتی که مقدار آنها در معادله صدق خواهد کرد و خواهیم داشت:
پس می توان گفت: از آن جایی که به علت ساختارش، هم بر p-1 و هم بر q-1 بخش پذیر است؛ به ازای یک مقدار غیرمنفی h و k خواهیم داشت:
برای بررسی اینکه آیا دو عدد مانند و m، معادل pq هستند یا نه بررسی میکنیم که آیا آنها به به صورت جداگانه، معادل پیمانه p و q معادل هستند یا نه.
برای نشان دادن ، دو حالت وجود دارد:
- اگر ، آن گاه m، ضریبی از p است؛ بنابراین ، ضریبی از p بوده و بنابراین
- اگر
اینجا قضیه کوچک فرما به کمک ما میآید تا را با ۱ جایگزین کنیم.
برای این که تأیید کنیم است؛ کاملاً مشابه مرحله قبل، فرآیند اثبات را پیش خواهیم برد.
- اگر ، آن گاه m، ضریبی از q است؛ بنابراین ، ضریبی از q بوده و بنابراین
در این بخش سورس کد الگوریتم رمزنگاری RSA در متلب قرار گرفته است که مناسب برای علاقه مندان و محققان در زمینه رمزنگاری اطلاعات است. جهت دسترسی روی لینک زیر کلیک کنید.
سخن آخر در رابطه با الگوریتم رمزنگاری rsa
همراهان همیشگی مجموعه پی استور، خسته نباشید. هدف از ارائه این مقاله، آموزش جامع الگوریتم rsa به زبان ساده بود و بههمین منظور، برای پیادهسازیها از محیط برنامهنویسی C استفاده کردیم. تأکید میگردد که همواره برای تأمین امنیت اطلاعات سیستمهای کامپیوتری، باید یک قدم از هکرها جلوتر باشیم. چنانچه علاقمند باشید؛ میتوانید مطلب امنیت اطلاعات در شبکه های کامپیوتری، انواع حملات آن را برای تکمیل دانستههایتان مطالعه نمایید.
به دلیل ضرورت و اهمیت امنیت اطلاعات کاربران در فضای مجازی همواره علوم مربوط به رمزنگاری داده، در حال بهروزرسانی و پیشرفت میباشند. برای اینکه ما هم از این پیشرفتها عقب نمانیم؛ سری آموزشهای رمزنگاری را ادامه خواهیم داد و در آینده با آموزش الگوریتمهای رمزنگاری دیگر هم در خدمت شما عزیزان خواهیم بود. دوستان عزیز، بارها گفتهایم؛ بازهم میگوییم؛ برای اینکه نظرات و تجربیات خود را با ما به اشتراک میگذارید؛ قدردانتان هستیم و امیدواریم در آموزشهای بعدی نیز با ما همراه باشید. چراکه ما با کمک یکدیگر پیشرفت خواهیم کرد. موفق و پیروز باشید.
2 پاسخ
نامفهوم بود.
من چیز زیادی درباره قضیه اثبات کوچک فرما نفهمیدم ای کاش این مورد رو با مثال ساده توضیح می دادین