CodeShot

رمزنگاری متقارن (Symmetric) در مقابل رمزنگاری نامتقارن (Asymmetric)

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

ویژگیرمزنگاری متقارن (Symmetric)رمزنگاری نامتقارن (Asymmetric)
تعداد کلیدیک کلید مشترکجفت کلید عمومی/خصوصی
سرعتبسیار سریعکندتر
چالش اصلیتوزیع امن کلیدکارایی و مقیاس
مثال الگوریتمAES، ChaCha20RSA، ECC

کِی از رمزنگاری متقارن (Symmetric) استفاده کنیم؟

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

کِی از رمزنگاری نامتقارن (Asymmetric) استفاده کنیم؟

وقتی طرفین قبلاً کلید مشترکی ندارند، نیاز به امضای دیجیتال دارید یا می‌خواهید یک کلید متقارن را به‌صورت امن روی یک کانال ناامن مبادله کنید (مثل ابتدای Handshake در TLS).

مثال رمزنگاری متقارن (Symmetric)

// AES-256 (متقارن): همان کلید برای
// رمزگذاری و رمزگشایی به‌کار می‌رود
Encrypt(data, sharedKey) -> ciphertext
Decrypt(ciphertext, sharedKey) -> data

مثال رمزنگاری نامتقارن (Asymmetric)

// RSA (نامتقارن): با کلید عمومی رمز و
// فقط با کلید خصوصی باز می‌شود
Encrypt(data, publicKey) -> ciphertext
Decrypt(ciphertext, privateKey) -> data

اشتباه رایج

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

جمع‌بندی

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