Skip to content

Archives

  • سپتامبر 2020
  • آگوست 2020
  • جولای 2020
  • مارس 2020
  • ژانویه 2020

Categories

  • امنیت
  • برنامه نویسی
  • بهینه سازی کد
  • جاوااسکریپت
  • رمزنگاری
  • گنو/لینوکس

Copyright جعفر آخوندعلی 2021 | Theme by ThemeinProgress | Proudly powered by WordPress

  • English
  • فارسی
جعفر آخوندعلییه برنامه نویس دیگه

رمزنگاری چیست، که بود و چه کرد؟

امنیت . برنامه نویسی . رمزنگاریOn 2020-01-16 by Jafar
زمان مطالعه: 4 دقیقه

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

این مطالب به درد کیا میخوره؟

  • برای توسعه دهنده ها، مخصوصا Backend کارا
  • افرادی که به رمزنگاری علاقه دارن
  • افرادی که میخوان توی مسابقات CTF شرکت کنن
  • Pentester ها

تعاریف( در تعاریف برای سادگی فرض میکنیم داده ها متن هستن):

رمزنگاری | Cryptography:

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

متن آشکار | حالت خوانا |‌ PlainText:

حالت عادی و خوانای اصلی متن. یعنی متنی که هیچ گونه عملیات رمزنگاری ای روش انجام نشده

متن رمز شده | حالت ناخوانا |‌ CipherText:

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

کلید |‌ Key | Secret:

رمزی که برای تبدیل متن خوانا به متن ناخوانا و یا برعکس استفاده میشه. معمولا کلید باید تنها بخش نامعلوم الگوریتم باشه.

کدگزاری‌ |‌ Encoding:

مشابه رمزنگاری، اما بدون استفاده از کلید‌ (در ادامه بیشتر صحبت میکنیم).

کدگشایی |‌ Decoding:

مشابه رمزگشایی، اما بدون استفاده از کلید‌ (در ادامه بیشتر صحبت میکنیم).

درهم سازی |‌ Hashing:

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

پنهان نگاری |‌ Steganography:

بر خلاف رمزنگاری که هدف ناخوانا کردن متن هست، در پنهان نگاری هدف مخفی کردن متن توی یه چیزه دیگه هست،‌ به شکلی که اگر یکی اون چیز رو ببینه متوجه وجود (یا متن اصلی) متن مخفی شده نشه!

مطالعات رمز |‌Cryptoanalysis:

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

کرک |‌ شکستن رمز | Crack | Brute force:

به روش رسیدن به متن خوانا، با تلاش برای تست کردن تمام حالت های کلید کرک کردن میگن. بعضی وقت ها توی این روش سعی میشه از یک سری کلماتی که احتمال استفادشون بیشتر هست استفاده بشه.

مبهم سازی |‌ Obfuscation:

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

فرق بین رمزنگاری و کدگزاری چیه ؟! 😐

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

تاریخچه‌:

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

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

رمزنگاری سزار خیلی خیلی ساده هست. برای رمزنگاری کافیه که شماره هر حرف در زبان انگلیسی رو ۳ حرف شیفت بدین 😐 مثلا هروقت حرف A رو دیدید، بجاش حرف D بزارید. هر وقت B دیدید، E بزارید و …. اینجا کلید در توی عملیات ما ۳ هست. که میتونه عوض بشه. برای ۳ حرف آخر هم بر میگردیم از اول حرف رو انتخاب میکنیم. یعنی رمز کردن حرف X با کلید ۳ میشه حرف A.

Algorithm of Caesar Cipher

رمزگشایی هم که بدیهیه، کافیه معکوس عملیات انجام بشه. یعنی بجای D، حرف A رو قرار بدید و …

در ادامه سعی میکنیم هر مبحثی که گفته شد رو با مثال و سوال های رمزنگاری بر اساس مسابقات Ctf و مباحث مورد نیاز توی توسعه نرم افزار بررسی کنیم.

اگر علاقه دارید مبحث خاصی بحث بشه توی نظرات اعلام کنین 😊

16

مثل این مطلب:

چطوری به ریش سامانه دانشگاهی سما بخندیم؟
RSA به زبون ساده + پیاده سازی بدون کتابخانه در Python
کد ریویو - قسمت اول | بهینه سازی وبسایت

پاسخ ها

ناشناس 2020-01-16 at 22:29 - پاسخ

جالب بود

علیرضا صالحی 2020-01-17 at 19:09 - پاسخ

عالی بود

نظرت چیه؟ لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

It’s Me

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

  • twitter
  • twitter
  • linkedin
  • github
  • telegram
  • telegram
Preloaded shit
  • فارسیفارسی
  • EnglishEnglish

دسته‌ها

  • امنیت (4)
    • رمزنگاری (3)
  • برنامه نویسی (7)
    • بهینه سازی کد (2)
    • جاوااسکریپت (1)
  • گنو/لینوکس (1)