RSA encryption

RSAالگوریتم رمزنگاری

رمزنگاری (RSA (Rivest–Shamir–Adlemanرمزنگاری با کلید عمومی یا نامتقارن می باشد. نام این رمزنگاری از  نام سه  دانشمند که این الگوریتم رمزنگاری را پیدا کرده اند، گرفته شده است.  این الگوریتم اولین بار در دانشگاه MIT مطرح شد. نقطه مقابل این نوع رمزنگاری ها رمزنگاری با کلید خصوصی یا متقارن است. در رمزنگاری با کلید خصوصی بین هرنود فرستنده و گیرنده فقط یک کلید خصوصی وجود دارد، افشای این کلید خصوصی امنیت همه کاربران را  به خطر خواهد انداخت، لذا برای استفاده از رمزنگاری متقارن به صورت امن تر، فرستنده باید برای همه گیرنده های خود یک کلید خصوصی منحصربه فرد تعریف کند. هنگامی که تعداد گیرندها زیاد نباشد، مشکل خاصی ایجاد نخواهد شد، اما وقتی تعداد گیرنده ها به چندصد هزارنفر برسد، ذخیره و بازیابی آنها خود مشکلی بزرگ است. در نتیجه در رمزنگاری با کلید نامتقارن از یک کلید عمومی و کلید خصوصی استفاده می شود. کلید عمومی در دسترس همگان می باشد، اما کلید خصوصی کلیدی است که با آن می توان دیتا کد شده خود را انکد کرد. الگوریتم رمزنگاری RSA به گونه ای است، که با در دست داشتن کلید عمومی نمی توان به کلید خصوصی دست پیدا کرد.

در این پست در مورد الگوریتم های رمزنگاری نامتقارن و به ویژه RSA بحث می کنیم. در کل در رمزنگاری  کلیدها به عنوان ثابت ها در نظرگرفته شده اند. داخل قسمت قبل هم بیان شد که ما در RSA دو کلید عمومی و خصوصی داریم.

تولید کلید ها در RSA:

  1. دو عدد اول تصادفی p و q را به گونه ای بیابید که:

*امروزه الگوریتم های برای تولید اعداد تصادفی اول ارایه شده اند.

p\ne q

  1. عدد n را به صورت روبه رو محاسبه کنید.

n=p\times q

  1. تابع فی را به صورت روبه رو محاسبه کنید.

\phi(n)=(p-1)\times(q-1)

  1. عدد e  را به گونه ای انتخاب کنید که در شرط زیر صدق کند و نسبت به \phi(n)  اول باشد.

1< e < \phi(n)

که در بالا عدد e به عنوان توان کلید عمومی منتشر می شود.  معمولا عدد e را برای امنیت بیشتر بزرگ  در حدود 2^{16}انتخاب می کنند.حال باید از هم نهشتی استفاده کنیم تا عدد d را بدست آوریم.

de\equiv1(mod  \phi(n))

  • عددd به عنوان توان کلید خصوصی محافظت می‌شود.

کلید عمومی عددn(عدد مشترک) و عددe(عدد عمومی) تشکیل می شود. کلید خصوصی نیز از عدد n(عدد مشترک) و عدد d(عدد خصوصی) تشکیل می شود. در تمام مراحل باید اجزای کلید خصوصی سری نگه داشته شود. دو عدد اول p وq  بعد از ساختن کلیدها برای امنیت حتما باید نابود شوند.

رمز کردن پیام:

حال با کلید عمومی خود پیام خود را رمزنگاری می کنیم،فرض کنیم پیام خود را در قالب یک عدد مثلاm که از nکوچکتر است، حال عدد c  را به صورت زیر محاسبه می کنیم. c را از سمت فرستنده به سمت گیرنده فرستاده خواهد شد.

c=m^{e}  \rightarrow mod(n)

باز کردن پیام:

حال فرض کنید شما پیام رمز شده c در یافت کرده اید، حال با کلید خصوصی باید بتوانید عددm را پیدا کنید.

m=c^{d}  \rightarrow mod(n)

در روزهای  آینده کد جاوا RSA که این الگوریتم را انجام می دهد، به اشتراک خواهم گذاشت.

 

  1. /******************************************************************************
  2.  * Compilation: javac HelloWorld.java
  3.  * Execution: java HelloWorld
  4.  *
  5.  * Prints "Hello, World". By tradition, this is everyone's first program.
  6.  *
  7.  * % java HelloWorld
  8.  * Hello, World
  9.  *
  10.  * These 17 lines of text are comments. They are not part of the program;
  11.  * they serve to remind us about its properties. The first two lines tell
  12.  * us what to type to compile and test the program. The next line describes
  13.  * the purpose of the program. The next few lines give a sample execution
  14.  * of the program and the resulting output. We will always include such
  15.  * lines in our programs and encourage you to do the same.
  16.  *
  17.  ******************************************************************************/
  18.  
  19. public class HelloWorld {
  20.  
  21. public static void main(String[] args) {
  22. // Prints "Hello, World" to the terminal window.
  23. System.out.println("Hello, World");
  24. }
  25.  
  26. }

Sharing is caring!

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *