الگوریتم RSA قسمت - ۱

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


الگوریتم RSA پس از آنکه ران ریوست (Ron Rivest)، آدام شامیر (Adam Shamir) و لن ادلمن (Len Adleman) در سال 1977 آنرا بدست آوردند به این نام مشهور شد، هرچند تکنیک های اولیه آن پیشتر در سال 1973 توسط فردی بنام کلیفورد کوکس (Clifford Cocks) بدست آمده بود اما تا سال 1977 اولا" الگورتیم کاملا" محرمانه بود و ثانیا" به سادگی آنچه در زیر بیان خواهیم کرد نبود.

تهیه کلید های عمومی و خصوصی
بطور خلاصه روش کار برای تهیه کلیدها به شرح زیر است :

1- دو عدد بزرگ (هر چه بزرگتر بهتر) اول به نام های p و q را انتخاب می کنیم، بهتر است این اعداد از لحاظ سایز نزدیک به یکدیگر باشند.

2- عدد دیگری بنام n را معادل با حاصلضرب p در q تعریف می کنیم : n = p x q

3- عدد چهارم یعنی m را معادل حاصلضرب p-1 در q-1 تعریف می کنیم : (m = (p-1) x (q-1

4- عدد e را که از m کوچکتر است آنگونه پیدا می کنیم که بزرگترین مقسوم علیه مشترک این دو یک باشد به عبارتی نسبت به هم اول باشند.

5- عددی مانند d را پیدا کنید که باقیمانده حاصلضرب d در e تقسیم بر m مساوی عدد 1 باشد، یعنی : d x e) mod m = 1)

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

روش پنهان کردن و آشکار کردن
برای کد کردن اطلاعات کافی است عدد منتصب به هر کاراکتر - مثلا" ASCII - را که در اینجا M می نامیم در فرمول زیر قرار دهید و بجای ارسال آن عدد C = Me mod n را ارسال کنید. در واقع دراینجا شما توانسته اید با کمک کلید عمومی، کاراکتر M را به C تبدیل کنید.

حال گیرنده برای آشکار سازی کافی است عدد دریافتی یعنی C را با استفاده از کلید خصوصی به M تبدیل کند. برای اینکار کافی است از این فرمول استفاده کنید : M = Cd mod n ، بنابراین شما با دریافت کاراکتر کد شده C و در دست داشتن کلید خصوصی توانسته اید کاراکتر اصلی را مشخص نمایید.

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