روش های مختلف رمزنگاری داده در طراحی و پیاده سازی نرم افزار

توسط: محسن درم بخت | منتشر شده در 1394/07/25 | بازدید : 13512 بار | زمان مطالعه : 12 دقیقه

در نوشته امنیت در نرم افزارهای تحت وب - شماره دو - احرازهویت با مفهوم احرازهویت در نرم افزارها و اینکه چگونه رمز عبور را نگهداری نماییم آشنا شدیم.در این نوشته می خواهیم با روش های مختلف رمزنگاری (Encryption) آشنا شویم.به طور کلی با دو روش رمزنگاری داده سروکار داریم:

  1. روش رمزنگاری یکطرفه و غیرقابل برگشت
  2. روش رمزنگاری دوطرفه و قابل برگشت

- روش رمزنگاری یکطرفه و غیرقابل برگشت

در روش اول اطلاعات به صورت یکطرفه و غیرقابل برگشت (Hash) رمز می شود.قبل تر دیدیم که از این روش برای نگهداری رمز عبور استفاده می شود.زمانی که کاربر جدید در سیستم تعریف می شود برای وی یک نام کاربری و رمز عبور در نظر گرفته می شود.رمز عبور وارد شده قبل از ذخیره سازی در دیتابیس به صورت یکطرفه رمز می شود و در دیتابیس نگهداری می شود.


سوال  : رمزعبور به صورت یکطرفه و غیرقابل برگشت رمز شده و در دیتابیس نگهداری شده، پس چگونه به آن دسترسی خواهیم داشت؟

هر عبارتی که به صورت یکطرفه رمز شود دیگر قابل برگشت به حالت اولیه نمی باشد.زمانیکه که کاربر قصد ورود به برنامه را داشت باید نام کاربری و رمز عبور وارد نماید.در آن لحظه رمز عبور وارد شده کاربر را با همان روشی که رمز عبور قبلی در زمان ثبت نام رمز شده بود، رمز می نماییم و این دو را با یکدیگر مقایسه  می کنیم.اگر با یکدیگر برابر بودند که کاربر رمز عبور درست وارد نموده وگرنه رمز عبور وارد شده صحیح نمی باشد و کاربر اجازه ورود ندارد.

در طراحی و پیاده سازی نرم افزار و همچین طراحی سایت باید دقت کنیم که از یک الگوریتم برای بحث Hash استفاده نماییم.یعنی با الگوریتم مشخص رمز عبور اولیه را رمز کنیم و در دیتابیس ذخیره کنیم و سپس با همان الگوریتم رمز عبور وارد شده در زمان ورود به نرم افزار را رمز کرده و با رمز اولیه مقایسه نماییم.


ما دو الگوریتم اصلی در روش رمزنگاری یکطرفه داریم.MD5  و SHA-1 که هر کدام الگوریتم و درجه درهم سازی خاص خود را دارند.به طور مثال رمز عبور   123456 با الگوریتم MD5 رمز شده و خروجی زیر را تولید کرده است.

 123456 => 0xE10ADC3949BA59ABBE56E057F20F883E

- روش رمزنگاری دو طرفه و قابل برگشت

در این روش که بیشتر در انتقال داده بین سیستم های مختلف استفاده می شود رمزنگاری مانند عملکرد قفل و کلید است.یکی داده ها را قفل کرده و طرف دیگر داده ها را با کلیدی که دارد باز می کند.در این روش رمزنگاری الگوریتم ها و روش های متنوعی وجود دارد که باید نسبت به صورت مسئله ای که داریم، از روش مناسب استفاده نماییم.

روش رمزنگاری دو طرفه در طراحی و پیاده سازی نرم افزارها بسیار پرکاربرد است.نمونه آشنا و بسیار پراستفاده آن HTTPS است که سایت های بزرگی مثل گوگل نیز از آن استفاده می نمایند.


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

یک مثال پراستفاده از رمزنگاری دو طرفه: اکثر ما از پرداخت اینترنتی بابت خرید خدمات یا کالا، خرید شارژ و یا پرداخت قبض استفاده نموده ایم.در پرداخت اینترنتی ما در مرحله آخر اطلاعات کارت بانکی خود را شامل شماره کارت، رمز دوم و ... را وارد می نماییم و دکمه پرداخت را کلیک می نماییم.اطلاعات کارت ما از صفحه مرورگر به سرور بانکی که درگاه برای آنها می باشد ارسال می شود.اگر اطلاعات رمز نشوند براحتی می توانند در میانه راه توسط افراد مختلف دیده شوند و چون رمز نشده اند توسط آنها از اطلاعات ما سوء استفاده گردد، ولی اگر اطلاعات رمز شده باشد مشاهده این اطلاعات رمز شده هیج سودی برای آنها نخواهد داشت چون کلید بازکردن آن را ندارند و امنیت اطلاعات ما حفظ خواهد شد.به همین دلیل در سایت های پرداخت اینترنتی یا به اصطلاح درگاه های پرداخت اینترنتی از HTTPS برای افزایش امنیت استفاده می شود و این یک استاندارد و الزام در این نوع سرویس ها شده است. 

الگوریتم های رمز نگاری ۲ دسته هستند :

۱- Symmetric – متقارن

۲- Asymmetric – نا متقارن

Symmetric ها الگوریتم هایی هستند که با یک کلید Encrypt و Decrypt می شوند. ضعف اصلی یکسان بودن کلید در دو طرف است ، چون کلید ها در دو طرف یکسان است کلیدی که در مبدا برای رمز نگاری استفاده می شود در مقصد هم برای رمز گشایی استفاده می شود به همین دلیل باید طوری کلید را تعریف کنیم که براحتی قابل شکسته شدن نباشد.


Asymmetric ها برای رمز نگاری دو کلید دارند : Public Key و Private Key.مثالی بالا(HTTPS) در رابطه با پرداخت اینترنتی نیز با همین ساختار بود.ما می توانیم براحتی و با استفاده از RSA این دو کلید را تولید و استفاده نماییم.البته کلیدهایی که خود تولید می کنیم برای استفاده در سیستم های داخلی خودمان مناسب است و اگر زمانی بخواهیم از HTTPS استفاده نماییم باید این کلیدها را از شرکت  هایی خارجی فروشنده تهیه نماییم.


نکته : تهیه این گواهینامه یا همان کلیدها برای کشور ایران ممنوع است و به دامنه هایی ir تعلق نمی گیرد.

پس ما برای رمزنگاری دوطرفه می توانیم از یک کلید مشترک در فرستنده و گیرنده استفاده نماییم و یا اینکه با public key رمز کنیم و با private key رمزگشایی کنیم.private key کلید اصلی می باشد چون در داخل خود public key را نیز دارد و برای رمزگشایی که مهم تر می باشد استفاده می شود.

با توجه به مطالب بالا ما باید در طراحی نرم افزار بسنجیم که در چه قسمت هایی امنیت برای ما اهمیت دارد و از چه روشی برای اعمال آن استفاده نماییم.

در نوشته های بعدی با نکاتی در رابطه با چالش های امنیتی در وب سایت ها و  بالابردن امنیت در طراحی و پیاده سازی وب سایت ها آشنا خواهیم شد.

 

 

 

دوره‌های آنلاین برنامه‌نویسی لیست دوره‌ها