
رمزنگاری (Cryptography) چیه؟
رمزنگاری به ارتباطات امن در حضور اشخاص ثالث مخرب که بهشون مهاجم (Adversary) گفته میشه، کمک میکنه. در این فرآیند، رمزگذاری (Encryption) از یک الگوریتم و یک کلید استفاده میکنه تا ورودی (یعنی متن ساده یا Plaintext) رو به یک خروجی رمزنگاری شده (یعنی Ciphertext) تبدیل کنه. در این مقاله سعی می کنیم شما رو با این مفهوم آشنا کنیم.
یک الگوریتم مشخص همیشه اگه از همون کلید استفاده بشه، همون متن ساده رو به همون متن رمزنگاری شده تبدیل میکنه. یک الگوریتم زمانی امن در نظر گرفته میشه که مهاجم نتونه هیچ اطلاعاتی درباره متن اصلی یا کلید از روی متن رمزنگاری شده به دست بیاره. مهاجم حتی با دسترسی به تعداد زیادی از ترکیبهای متن ساده و متن رمزنگاری شده، نباید بتونه اطلاعاتی از کلید استخراج کنه.
تفاوت بین رمزنگاری متقارن و نامتقارن چیه؟
رمزنگاری متقارن (Symmetric Cryptography):
در این روش، برای رمزگذاری و رمزگشایی از یک کلید یکسان استفاده میشه. یعنی فرستنده و گیرنده باید از قبل یک کلید مشترک داشته باشن که هر دو ازش خبر داشته باشن. اما توزیع این کلید مشکله و این موضوع باعث شد که رمزنگاری نامتقارن به وجود بیاد.
رمزنگاری نامتقارن (Asymmetric Cryptography):
در این روش، از دو کلید متفاوت برای رمزگذاری و رمزگشایی استفاده میشه. هر کاربر در این سیستم یک کلید عمومی (Public Key) و یک کلید خصوصی (Private Key) داره. کلید خصوصی همیشه محرمانه نگه داشته میشه، ولی کلید عمومی میتونه آزادانه توزیع بشه.
- داده هایی که با کلید عمومی رمزنگاری بشن، فقط با کلید خصوصی متناظر قابل رمزگشایی هستن. مثلا، اگه بخواید پیامی به جان بفرستید، باید اون پیام رو با کلید عمومی جان رمزگذاری کنید. فقط خود جان میتونه با استفاده از کلید خصوصی خودش اون پیام رو رمزگشایی کنه.
- برعکسش هم ممکنه. اگه دادهای با کلید خصوصی رمزگذاری بشه، فقط با کلید عمومی متناظر قابل رمزگشاییه. مثلا، جین میتونه یک پیام رو با کلید خصوصی خودش امضا کنه و هرکسی که کلید عمومی جین رو داره میتونه امضا رو بررسی کنه و مطمئن بشه که پیام واقعا توسط جین ارسال شده.
مزایا و معایب رمزنگاری متقارن و نامتقارن
- رمزنگاری متقارن بسیار سریع تره و برای رمزگذاری حجم زیادی از دادهها مناسبه (مثل رمزگذاری یک پارتیشن کامل دیسک یا یک پایگاه داده).
- رمزنگاری نامتقارن خیلی کندتره و فقط میتونه دادههایی رو رمزگذاری کنه که اندازهشون کوچکتر از اندازه کلیده (معمولا 2048 بیت یا کمتر).
به همین دلیل، از رمزنگاری نامتقارن بیشتر برای رمزگذاری کلیدهای متقارن استفاده میشه که بعدا برای رمزگذاری حجم زیادی از دادهها به کار میرن. در زمینه امضاهای دیجیتال هم، از رمزنگاری نامتقارن برای رمزگذاری هش پیامها بهجای کل پیام استفاده میشه.
یک سیستم رمزنگاری (Cryptosystem) برای مدیریت کلیدهای رمزنگاری طراحی شده و شامل فرآیندهای مختلفی مثل تولید کلید (Generation)، تبادل کلید (Exchange)، ذخیره سازی کلید (Storage)، استفاده از کلید (Use)، ابطال کلید (Revocation) و جایگزینی کلید (Replacement) میشه.
رمزنگاری چه مشکلاتی رو حل میکنه؟
یک سیستم امن باید چند ویژگی مهم رو ارائه بده، مثل محرمانگی (Confidentiality)، یکپارچگی (Integrity)، دسترسیپذیری (Availability)، اصالت (Authenticity) و عدم انکار (Non-repudiation). اگه به درستی از رمزنگاری استفاده بشه، میتونه این ویژگیها رو تامین کنه.
رمزنگاری میتونه محرمانگی و یکپارچگی دادهها رو هم در حین انتقال (Data in Transit) و هم در حالت ذخیرهسازی (Data at Rest) تضمین کنه. همچنین میتونه فرستنده و گیرنده رو به هم معرفی کنه و جلوی انکار عملیات توسط اونها رو بگیره.
چطور از ارتباطات روی شبکههای ناامن محافظت میکنه؟
سیستمهای نرمافزاری معمولا چندین نقطه پایانی دارن، مثل چندین کلاینت و یک یا چند سرور بکاند. این ارتباطات از طریق شبکههایی انجام میشه که قابل اعتماد نیستن. ارتباط ممکنه از طریق اینترنت یا شبکههای خصوصیای انجام بشه که توسط مهاجمان خارجی یا افراد مخرب داخلی به خطر افتاده باشن.
دو نوع اصلی حمله ممکنه روی یک شبکه انجام بشه:
- حملات غیرفعال (Passive Attacks):
در این نوع حمله، مهاجم فقط ترافیک شبکه رو شنود میکنه و سعی میکنه اطلاعات حساس رو در زمان عبور از شبکه بخونه. این حملات میتونن به صورت آنلاین (خواندن ترافیک در لحظه) یا آفلاین (ضبط ترافیک و رمزگشایی بعدا) انجام بشن. - حملات فعال (Active Attacks):
در این حالت، مهاجم خودش رو به جای یک کلاینت یا سرور جا میزنه، ارتباطات رو رهگیری میکنه و قبل از ارسال دادهها به مقصد اصلی، اونها رو مشاهده یا تغییر میده، یا حتی به طور کامل حذف میکنه.
پروتکلهای رمزنگاری مثل SSL/TLS میتونن از ارتباطات در برابر شنود و دستکاری محافظت کنن. مکانیزمهای احراز هویت هم این اطمینان رو میدن که کاربر واقعا با سیستم درستی ارتباط برقرار کرده. مثلا، وقتی رمز عبور بانک خودتون رو وارد میکنید، باید مطمئن باشید که اطلاعاتتون مستقیما به بانک ارسال میشه و نه به یک فرد ناشناس.
چطور از دادههای ذخیره شده محافظت میکنه؟
رمزنگاری همچنین برای محافظت از دادههای ذخیره شده (Data at Rest) هم استفاده میشه. مثلا، دادهها روی یک دیسک قابل حمل یا پایگاه داده میتونن رمزگذاری بشن تا اگه دستگاه گم بشه یا به سرقت بره، اطلاعات حساس فاش نشن.
علاوه بر این، رمزنگاری میتونه از یکپارچگی دادهها محافظت کنه و از تغییرات مخرب جلوگیری کنه.
اصول رمزنگاری چیه؟
مهمترین اصلی که باید به خاطر بسپارید اینه که هرگز سعی نکنید خودتون یک سیستم رمزنگاری طراحی کنید. حتی بهترین متخصصهای رمزنگاری دنیا هم بارها سیستمهایی با مشکلات امنیتی جدی طراحی کردن.
برای اینکه یک سیستم رمزنگاری امن تلقی بشه، باید تحت بررسیهای شدید جامعه امنیت سایبری قرار بگیره. هرگز به امنیت از طریق پنهانسازی (Security through Obscurity) اعتماد نکنید.
تنها چیزی که باید در یک سیستم رمزنگاری امن مخفی بمونه، کلیدها هستن.
چطور از کلیدها محافظت کنیم؟
هیچ وقت کلیدهای رمزنگاری رو به صورت متن واضح (Clear Text) در کنار دادههای محافظتشده ذخیره نکنید. این مثل اینه که در خونه رو قفل کنید و کلید رو زیر پادری بذارید.
سه روش رایج برای محافظت از کلیدها (از کمامنیتترین تا پرامنیتترین):
- ذخیره کلید در فایل سیستم با کنترل دسترسی قوی (ACL):
از اصل حداقل دسترسی (Least Privilege) پیروی کنید. - رمزگذاری کلیدهای رمزنگاری دادهها (DEKs) با یک کلید رمزنگاری دیگر (KEK):
KEK باید از طریق رمزنگاری مبتنی بر رمز عبور (PBE) ساخته بشه. رمز عبور میتونه با الگوریتمهایی مثل bcrypt، scrypt یا PBKDF2 به کلید تبدیل بشه. - استفاده از یک ماژول امنیتی سختافزاری (HSM):
یک دستگاه سختافزاری مقاوم در برابر دستکاری که کلیدها رو به صورت امن ذخیره میکنه. برنامهها میتونن با HSM ارتباط برقرار کنن تا عملیات رمزگشایی رو انجام بدن.
چه الگوریتمهایی رو باید استفاده کنیم؟
فقط از الگوریتمها، قدرت کلیدها و حالتهای عملیاتی استفاده کنید که مطابق با بهترین استانداردهای صنعتی باشن:
- برای رمزنگاری متقارن از AES با کلیدهای 128، 192 یا 256 بیتی استفاده کنید.
- برای رمزنگاری نامتقارن از RSA یا Elliptic Curve Cryptography (ECC) با حداقل 2048 بیت استفاده کنید.
از حالتهای ناامن مثل AES در حالت ECB یا RSA بدون Padding دوری کنید.
در انتها اگر از این مطلب استفاده کردین خوشحال میشیم نظرات و سوالاتتون رو با ما به اشتراک بگذارین.