در قسمتهای قبلی تاریخچه مختصری از رمزنگاری، مفاهیم اولیه آن، كلیدهای رمزنگاری و الگوریتمهای رمزنگاری با استفاده از كلید متقارن را توضیح دادیم. در این قسمت الگوریتمهای رمزنگاری با استفاده از كلید نامتقارن را شرح و بسط خواهیم داد.
در قسمت قبلی در مورد الگوریتمهای رمزنگاری متقارن DES ، 3DES و AES توضیح دادیم كه از یك كلید برای رمزنگاری و رمزگشایی استفاده می كنند. در الگوریتمهای مذكور در صورتی كه كلید رمزنگاری به سرقت رود محرمانگی اطلاعات نیز از بین خواهد رفت.الگوریتمهای رمزنگاری با كلید نامتقارن از كلیدهای مختلفی برای رمزنگاری و رمزگشایی استفاده میكنند. بسیاری از سیستمها اجازه میدهند كه یكی از كلیدها كلید عمومی یا (public key) منتشر شود در حالی كه دیگری كلید خصوصی یا (private key) توسط صاحبش حفظ میشود. فرستنده پیام، متن را با كلید عمومی گیرنده، كد میكند و گیرنده آن را با كلید اختصاصی خود رمزگشایی میکند. بعبارتی تنها با كلید خصوصی گیرنده میتوان متن كد شده را به متن اولیه صحیح تبدیل كرد. یعنی حتی فرستنده نیز اگرچه از محتوای اصلی پیام مطلع است اما نمی تواند از متن كدشده به متن اصلی دست یابد، بنابراین پیام كدشده برای هر گیرندهای، به جز گیرنده مورد نظر فرستنده، بی معنی خواهد بود.
معمول ترین سیستم نامتقارن به عنوان RSA شناخته میشود. (این حروف اول نام پدید آورندگان آن یعنی Rivest ،Shamir و Adlemen است) این الگوریتم در سال 1978 در دانشگاه MIT ایجاد شده است و تأیید هویت (روشی برای مطمئن شدن از هویت ارسال كننده پیغام) را به خوبی رمزنگاری انجام میدهد. الگوریتم RSA از دو كلید برای رمزنگاری استفاده میکند: كلید خصوصی و كلید عمومی. در الگوریتم مذكور تفاوتی بین توانایی عملیاتی كلید عمومی و خصوصی وجود ندارد و یك كلید میتواند هم به عنوان كلید خصوصی به كار رود و هم به عنوان كلید عمومی.كلیدهای RSA با استفاده از روش های ریاضی و با تركیب اعداد اول تولید میشوند. بزرگترین عددها با ضرب اعداد كوچك به دست می آیند و این اعداد كوچك از لحاظ ریاضی به هم وابسته هستند و دانستن یكی از آنها منجر به شناسایی دیگر اعداد اول به كار رفته در كلید میشود. این وضعیتی است كه در استفاده از كلید های عمومی و خصوصی مورد نظر است. البته در صورتی كه عدد خیلی بزرگ باشد، این كار به راحتی قابل انجام نیست و وضعیت های گمراه كننده بسیاری وجود دارند.
تنها تركیب درست از اعداد اول موجود در كلید رمزنگاری، قادر به رمزگشایی پیغام است. امنیت الگوریتم RSA و الگوریتمهای مشابه آن وابسته به استفاده از اعداد خیلی بزرگ است و بیشتر نسخه های RSA از اعداد 154 رقمی یا 512 بیتی به عنوان كلید استفاده می كنند. دسترسی به فاكتورهای اعداد اول اعداد خیلی بزرگ كه بیش از 100 رقم دارند كار بسیار مشكلی است. البته برخی از محققان توانسته اند با تلاش بسیار اعداد بزرگ را بشكنند ولی این كار برای هكرها جهت ورود به یك سیستم یا سر در آوردن از یك پیغام مقرون به صرفه نمی باشد.برای پرهیز از پیچیدگی بحث فرض کنید فرستنده پیام جفت عدد صحیح و بزرگ (e,n) را به عنوان کلید عمومی برای رمزنگاری اطلاعات خود در اختیار دارد. در طرف مقابل، گیرنده نیز جفت عدد (d,n) را برای رمزگشایی پیام به کار می برد. بدیهی است که دو جفت عدد (e,n) و (d,n) با یکدیگر ارتباط زیرکانه ای دارند ولی این ارتباط یه گونه ای نیست که بتوان با در اختیار داشتن e و n براحتی d را استنتاج کرد. با فرض وجود چنین کلیدهایی، الگوریتم RSA در نهایت سادگی به صورت زیر بیان میشود:
C=(P)^e mod n
روش رمزگشایی داده ها نیز مثل روش رمزنگاری است، یعنی با در اختیار داشتن جفت عدد (d,n) بلوکهای رمز شده بصورت زیر از رمز خارج خواهند شد:
P=(C)^d mod n
فرض کنید بخواهیم رشته ی M=”catsanddogs” را رمز کنیم. برای سادگی این رشته ی کاراکتری را به بلوکهای دوتایی تقسیم کرده و سپس هر بلوک را به یک عدد صحیح تبدیل میکنیم. قاعده تبدیل در این مثال عبارت است از: برای کاراکتر a عدد 00، برای b عدد 01 ، و به همین ترتیب تا z که عدد 25 در نظر گرفته و جایگذاری میشود؛ سپس در هر بلوک دوتایی عدد متناظر با هر کاراکتر پشت سر هم قرار میگیرد تا کد بلوک را بسازد: (این الگو کاملا دلخواه و قراردادی است). فرض کنید فرستنده جفت عدد صحیح (3763 و 27) معادل (e,n) را برای رمزنگاری بلوکها اختیار کرده باشد. برای رمزنگاری هر بلوک عدد معادل آن به توان e و سپس باقیمانده تقسیم آن بر n محاسبه میشود تا بلوک رمز شده بدست آید. این اعداد به عنوان کدهای رمز بجای کدهای متن اصلی ارسال میشوند:
در RSA به جفت عدد (e,n) که متن به کمک آن رمز میشود اصطلاحاً کلید عمومی (public Key) و به جفت عدد (d,n) که با آن متن از رمز خارج میشود کلید خصوصی (private Key) گفته میشود. نکته اساسی در RSA آن است که جهت تضمین وارون پذیری روش رمز، اعداد e و d بایستی در رابطه زیر صدق کنند لذا باید در انتخاب اعداد دقت کرد:
x)^(e.d) mod n=x)
روش انتخاب d و e که توسط ابداع کنندگان RSA پیشنهاد شده است عبارتند از:
n=p×q
(z=(p-1)(q-1
(e×d) mod z=1
(به عبارتی معکوس ضربی d را در پیمانه z محاسبه می کنید و آن را e می نامید.) اصل اساسی دیگری که در رمزنگاری RSA حتماً باید رعایت شود آن است که کدهای P_i که به هر بلوک نسبت می دهیم باید در شرط n>p>0 صدق کند. بنابراین اگر بلوکها را بصورت رسته های k بیتی مدل می کنید باید شرط 2^k<n برقرار باشد. برای مثال فرض کنید بخواهیم رشته “CATSANDDOGS” را رمز نماییم. برای راحتی کار مجبوریم کلیدها را بسیار کوچک در نظر بگیریم ولی بخاطر داشته باشید در رمزنگاری واقعی این اعداد وحشتناک بزرگند:
7e mod 20=1
برای آشنایی با مراحل رمزنگاری به جدول زیر دقت کنید. از آنجا که n معادل 33 و عدد کوچکی است و کدهای P باید در شرط P<33 صدق کنند لذا بلوکهای متن را به اجبار تک کاراکتری فرض کرده و به A عدد 0 ، به B عدد 1 و به همین ترتیب به z عدد 25 را نسبت داده ایم تا این رشته کاراکتری ضمن برآورده کردن این شرایط به اعدادی صحیح تبدیل شوند.
آنچه که مشخص است در کاربردهای عملی اعداد p و q حداقل صد رقمی (صد رقم در مبنای 10) انتخاب میشوند یعنی این دو عدد حداقل از مرتبه 100^10 هستند. در این حالت عدد صحیح متناظر با بلوکهای P باید از n کوچکتر باشند و نبایستی از 83 کاراکتر بیشتر باشند. پس هر بلوک متن بایستی حداکثر 664 بیت یا 83 کاراکتر هشت بیتی باشد. در زیر یک پیمانه واقعی (یعنی عدد n ) به طول حدوداً 2000 بیت را مشاهده می کنید!
13506641086599522734960321677980596993892147560563668295518479215569200575924144654654564832321641316464132165484
631641316498798432165498794165791149877696486248924795612418951566321589411479632105460214582156326063695146554146931504
میتوان از یك سیستم نامتقارن برای نشان دادن اینكه فرستنده پیام همان شخصی است كه ادعا میكند استفاده كرد كه این عمل در اصطلاح امضاء نام دارد.
به بیان ساده تر چنانچه متنی از شخصی برای دیگران منتشر شود، این متن شامل متن اصلی و همان متن اما رمز شده توسط كلید خصوصی همان شخص است. حال اگر متن رمزشده توسط كلید عمومی آن شخص كه شما از آن مطلعید رمز گشایی شود، مطابقت متن حاصل و متن اصلی نشان دهنده صحت فرد فرستنده آن است، به این ترتیب امضای فرد تصدیق میشود. سایر افراد كه از كلید خصوصی این فرد اطلاع ندارند قادر به ایجاد متن رمزشده ای نیستند كه با رمزگشایی توسط كلید عمومی این فرد به متن اولیه تبدیل شود.سایر سیستمهای كلید نامتقارن شامل سیستمهای لگاریتم گسسته میشوند مانند Diffie-Hellman،ElGamal و سایر طرحهای چندجمله ای و منحنی های بیضوی. بسیاری از این طرحها عملكردهای یك طرفهای دارند كه اجازه تایید هویت را میدهند اما رمزنگاری ندارند.
یك رقیب جدیدتر الگوریتم RPK است. الگوریتم رمزنگاری RPK یك سیستم رمزنگاری نسبتاً جدید بر پایه كلید عمومی است كه مبتنی بر ریاضیاتی است كه امروزه به صورت گسترده در رمزنگاری استفاده میشود. این الگوریتم برای كاربردهای تجاری طراحی شده است و نیاز به مطالعات و تحقیقات گسترده در زمینه های جدید ریاضی ندارد. مطالعه بر روی این زمینه ها مانند سیستم رمزنگاری منحنی های بیضوی (ECC)، گاهی اوقات چندین سال به طول می انجامد. رمزنگاری RPK تمهیداتی را برای رمزنگاری در انتقال اطلاعات در شبكه های با سرعت بالا، كارت های هوشمند و برنامههای مبتنی بر ارتباطات بی سیم اندیشیده است. این الگوریتم برای استفاده در پروسه های نرم افزاری حجیم مانند تراكنش های كارت های اعتباری نیز مناسب است.
در هسته RPK یك ابداع به نام Mixture Generator وجود دارد و در پیاده سازی آن سه شیفت رجیستر خطی وجود دارند. این ماشین وضعیت دو حالت عملیاتی دارد. یك حالت از شیفت رجیسترها برای به توان رسانی استفاده كرده و دیگری به عنوان یك تولید كننده جریان تصادفی از بیت ها برای كاربرد در فاز تركیب رمزنگاری به كار می رود. سیستم RPK دو مرحله پرهزینه به توان رسانی كل پیغام را به طور مؤثر كاهش داده است زیرا موتور هسته آن برای قراردادن سیستم در وضعیت اولیه امن به كار رفته و سپس بین دو حالتی كه در بالا توضیح داده شد برای اجرای رمزنگاری سریع سوئیچ میکند.طول كلیدها برای این طرحهای جایگزین بسیار كوتاهتر از كلیدهای مورد استفاده در RSA است كه آنها برای استفاده در چیپ كارتها مناسب تر است. اما RSA محكی برای ارزیابی سایر الگوریتمها باقیمانده است؛ حضور و بقای نزدیك به سه دهه این الگوریتم، تضمینی در برابر ضعفهای عمده به شمار میرود.
در روش فوق از ترکيب يک کليد خصوصی و يک کليد عمومی استفاده میشود. کليد خصوصی صرفاً متعلق به کامپيوتر فرستنده بوده و کليد عمومی توسط کامپيوتر فرستنده در اختيار هر يک از کامپيوترهائی که قصد برقراری ارتباط با يکديگر را دارند، گذاشته میشود. برای رمزگشائی يک پيام رمز شده ، کامپيوتر می بايست از کليد عمومی که توسط فرستنده ارائه شده، بهمراه کليد خصوص ی خود استفاده نمايد. يکی از متداولترين برنامههای رمزنگاری در اين رابطه PGP)Pretty Good Privacy) است. با استفاده از PGP می توان هر چيز دلخواه را رمز نمود.بمنظور پياده سازی رمزنگاری کليد عمومی در مقياس بالا نظير يک سرويس دهنده وب، لازم است از رويکردهای ديگری در اين خصوص استفاده گردد. “امضای ديجيتال” يکی از رويکردهای موجود در اين زمينه است. يک امضای ديجيتالی صرفاً شامل اطلاعات محدودی بوده که اعلام می نمايد، سرويس دهنده وب با استفاده و بکارگيری يک سرويس مستقل با نام “امضای مجاز”، امين اطلاعات است. امضای مجاز به عنوان يک ميانجی بين دو کامپيوتر ايفای وظيفه می نمايد. هويت و مجاز بودن هر يک از کامپيوترها برای برقراری ارتباط توسط سرويس دهنده انجام و برای هر يک کليد عمومی مربوطه را فراهم خواهد کرد.
رمزهای كلید خصوصی بر مبنای نوع عملكرد، چگونگی طراحی و پیاده سازی و كاربردهایشان به دو گونه رمزهای قطعه ای و رمزهای دنباله ای تقسیم میشوند. كه در هر یك از آ نها عملكرد رمز نگاری به صورت یك عملكرد دوجانبه بین دو طرف فرستنده و گیرنده میباشد كه با ایجاد یك ارتباط اولیه با یكدیگر روی كلید خصوصی توافق می كنند به گونه ای كه دشمن آن كلید را نداند. فرستندهS میخواهد پیامm1,….mi را به گونه ای به طرف گیرنده R بفرستد كه او بتواند به محتوای پیام دست یابد و در عین حال حریف مخالف A نتواند محتوای پیام را درك كند حتی اگر A تمامی آنچه بین R و S انتقال می یابد را دریافت نماید.به همین منظور فرستنده S هر متن روشنmi را به وسیله الگوریتم رمزگذاری E وكلید خصوصی به متن رمز شده تبدیل میکند ودریافت كننده نیز كه متن رمز شده را دریافت كرده میتواند با الگوریتم رمز گشائیD و كلید خصوصی متن اصلی را بدست آورد.
بحثهای زیادی شده که کدام یک از این الگوریتمها بهترند اما جواب مشخصی ندارد. البته بررسی هایی روی این سوال شده به طور مثال Needham و Schroeder بعد از تحقیق به این نتیجه رسیدند که طول پیغامی که با الگوریتمهای متقارن میتواند رمزنگاری شود از الگوریتمهای کلید عمومی کمتر است و با تحقیق به این نتیجه رسیدند که الگوریتمهای متقارن الگوریتمهای بهینه تری هستند. اما وقتی که بحث امنیت پیش می آید الگوریتمهای کلید عمومی کارایی بیشتری دارند. به طور خلاصه میتوان گفت که الگوریتمهای متقارن دارای سرعت بالاتر و الگوریتمهای کلید عمومی دارای امنیت بهتری هستند. در ضمن گاهی از سیستم ترکیبی از هر دو الگوریتم استفاده میکنند که به این الگوریتمها الگوریتم های ترکیبی (hybrid) گفته میشود. اما اگر به طور دقیق تر به این دو نگاه کنیم آنگاه متوجه خواهیم شد که الگوریتمهای کلید عمومی و الگوریتمهای کلید متقارن دارای دو ماهیت کاملاً متفاوت هستند و کاربردهای متفاوتی دارند به طور مثال در رمزنگاریهای ساده که حجم دادهها بسیار زیاد است از الگوریتم متقارن استفاده میشود زیرا دادهها با سرعت بالاتری رمزنگاری و رمزگشایی میشوند. اما در پروتکل هایی که در اینترنت استفاده میشود، برای رمز نگری کلید هایی که نیاز به مدیریت دارند از الگوریتمهای کلید عمومی استفاده میشود.
Copyright © 2010 Dlbook Team