مهارت‌ها4 دقیقه مطالعه

رمزنگاری چیست؟ از رمز عبور تا HTTPS به زبان ساده

هر چیزی که در امنیت سایبری «امن» نامیده می‌شود، ته‌اش به رمزنگاری می‌رسد: قفلِ کنارِ آدرسِ سایت، رمزی که در پایگاه‌داده ذخیره می‌شود، پیامی که در واتساپ می‌فرستی. و تقریباً هر اشتباهِ بزرگی که در این حوزه دیده‌ام، از یک سوءتفاهمِ ساده درباره‌ی همین مفاهیم شروع شده است — مثلاً اینکه هش و رمزنگاری یکی فرض شوند.

نوشته‌ی مدرس امنیت سایبری و هک اخلاقی

کارشناسی امنیت سایبری از دانشگاه Manchester Metropolitan (درجه‌ی ممتاز) — تست نفوذ، امنیت شبکه، OSINT و گجت‌های سخت‌افزاری.

این مطلب چطور نوشته و بازبینی می‌شود؟

این مقاله بخشی از راهنمای کامل امنیت شبکه چیست؟ آموزش کامل امنیت شبکه از صفر تا حرفه‌ای است

رمزنگاری چیست؟ از رمز عبور تا HTTPS به زبان ساده

رمزنگاری در یک جمله

رمزنگاری یعنی تبدیلِ داده به شکلی که فقط دارنده‌ی کلید بتواند آن را برگرداند. نکته‌ی کلیدی در «برگرداند» است: رمزنگاری یک عملیاتِ دوطرفه است و اصلاً برای همین ساخته شده. الگوریتم عمومی و شناخته‌شده است؛ چیزی که محرمانه می‌ماند فقط کلید است. این اصل — که به اصلِ کرکهوف معروف است — یعنی هرگز نباید امنیتِ یک سیستم به مخفی‌بودنِ روشِ کارش وابسته باشد.

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

در رمزنگاریِ متقارن، همان کلیدی که داده را رمز می‌کند آن را باز هم می‌کند. استانداردِ امروزی AES است و آن‌قدر سریع است که کلِ دیسکِ لپ‌تاپت می‌تواند بدونِ اینکه متوجه شوی با آن رمز شود. مشکلش یک چیز است و آن چیز بزرگ است: کلید باید به دستِ طرفِ مقابل برسد، و اگر کانالی امن برای فرستادنِ کلید داشتی، اصلاً چرا به رمزنگاری نیاز داشتی؟

رمزنگاری نامتقارن: دو کلید که مکملِ هم‌اند

رمزنگاریِ نامتقارن (کلیدِ عمومی) دقیقاً همان مشکل را حل می‌کند. هر کس یک جفت کلید دارد: کلیدِ عمومی که آزادانه پخش می‌شود، و کلیدِ خصوصی که هرگز از دستگاه بیرون نمی‌رود. آنچه با یکی رمز شود فقط با دیگری باز می‌شود. پس هر کسی می‌تواند با کلیدِ عمومیِ تو پیامی بفرستد که فقط تو بتوانی بخوانی — بدونِ اینکه از قبل رازِ مشترکی داشته باشید. RSA و رمزنگاریِ خمِ بیضوی (ECC) دو خانواده‌ی اصلی‌اند؛ ECC با کلیدهای بسیار کوتاه‌تر همان امنیت را می‌دهد و به همین دلیل روی گوشی‌ها غالب شده است.

چرا هر دو لازم‌اند

رمزنگاریِ نامتقارن کُند است و برای حجمِ زیاد به‌صرفه نیست. پس در عمل هر دو با هم کار می‌کنند: از نامتقارن فقط برای توافق روی یک کلیدِ متقارنِ یک‌بارمصرف استفاده می‌شود، و بعد تمامِ ترافیکِ واقعی با همان کلیدِ سریع رمز می‌شود. این دقیقاً همان کاری‌ست که مرورگرت هنگامِ باز کردنِ یک سایتِ HTTPS انجام می‌دهد.

هش: شبیهِ رمزنگاری است، اما نیست

تابعِ هش (مثل SHA-256) ورودی را به یک رشته‌ی با طولِ ثابت تبدیل می‌کند و — برخلافِ رمزنگاری — راهِ برگشتی ندارد. هیچ کلیدی وجود ندارد که هش را به ورودیِ اصلی برگرداند. برای همین است که رمزهای عبور «هش» می‌شوند، نه «رمزنگاری»: سایتی که بتواند رمزِ تو را برگرداند، سایتی‌ست که نشتِ پایگاه‌داده‌اش رمزِ همه را لو می‌دهد.

اما یک هشِ خالی کافی نیست. اگر دو نفر رمزِ یکسان داشته باشند، هشِ یکسان می‌گیرند، و مهاجم می‌تواند جدول‌های آماده‌ی هشِ رمزهای رایج را جست‌وجو کند. راه‌حل «نمک» (salt) است: یک مقدارِ تصادفیِ یکتا برای هر کاربر که پیش از هش به رمز اضافه می‌شود. و چون SHA-256 عمداً سریع است، برای رمزِ عبور باید از توابعِ عمداً کُند مثل bcrypt، scrypt یا Argon2 استفاده کرد — کُندی اینجا یک ویژگی‌ست، نه یک نقص.

# یک هش ساده: هر بار همان خروجی
echo -n "password123" | sha256sum

# همان ورودی با نمکِ متفاوت → خروجیِ کاملاً متفاوت
echo -n "x7Kq2password123" | sha256sum

# آنچه یک سایت باید واقعاً استفاده کند (عمداً کُند)
htpasswd -bnBC 12 "" "password123" | tr -d ':'

هش، نمک و هزینه — با ابزارهای خطِ فرمان

‏HTTPS: همه‌ی این‌ها با هم

  1. مرورگر به سرور وصل می‌شود و سرور «گواهی» خود را می‌فرستد — سندی که کلیدِ عمومیِ سرور را به نامِ دامنه گره می‌زند.
  2. مرورگر امضای گواهی را بررسی می‌کند: آیا یک مرجعِ صدورِ گواهی (CA) که مرورگر به آن اعتماد دارد آن را امضا کرده؟ آیا برای همین دامنه است؟ آیا منقضی نشده؟
  3. دو طرف با رمزنگاریِ نامتقارن روی یک کلیدِ متقارنِ موقت توافق می‌کنند.
  4. از این لحظه، کلِ گفتگو با آن کلیدِ سریع رمز می‌شود. هر بسته هم یک کدِ صحت دارد، پس دستکاری در مسیر قابلِ تشخیص است.

به همین دلیل است که هشدارِ گواهیِ مرورگر را نباید رد کرد. آن هشدار یعنی مرحله‌ی دوم شکست خورده — یعنی یا سایت اشتباه پیکربندی شده، یا کسی بینِ تو و سایت ایستاده است. قفلِ سبز هم تنها می‌گوید «این اتصال رمز است»، نه «این سایت درست‌کار است»؛ صفحه‌های فیشینگ هم HTTPS دارند.

چه چیزهایی رمزنگاری را می‌شکنند

  • استفاده از الگوریتم‌های از کار افتاده: MD5 و SHA-1 برای امضا و صحت دیگر امن نیستند؛ برخورد (collision) روی آن‌ها عملی شده است.
  • کلیدِ کوتاه یا تولیدشده با تصادفِ ضعیف — کلیدی که قابلِ حدس باشد، بهترین الگوریتم را هم بی‌اثر می‌کند.
  • پیاده‌سازیِ دست‌ساز: تقریباً هر نشتِ رمزنگاریِ مشهور، از نوشتنِ رمزنگاریِ اختصاصی به‌جای استفاده از کتابخانه‌ی آزموده‌شده آمده است.
  • نگه‌داشتنِ کلید کنارِ داده: کلیدی که در همان سرور و همان مخزنِ کد نشسته، در لحظه‌ی نشت همراهِ داده می‌رود.
قانونی که هرگز نشکن

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

سؤال‌های پرتکرار

تفاوتِ هش و رمزنگاری در یک جمله چیست؟

رمزنگاری برگشت‌پذیر است و کلید دارد؛ هش برگشت‌ناپذیر است و کلید ندارد. رمزِ عبور را هش می‌کنند تا هیچ‌کس — حتی خودِ سایت — نتواند آن را بخواند.

آیا رمزنگاری جلوی هک شدن را می‌گیرد؟

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

برای شروع چه چیزی باید یاد بگیرم؟

اول مفاهیم: متقارن در برابر نامتقارن، هش، امضای دیجیتال و گواهی. بعد تمرینِ عملی با OpenSSL روی سیستمِ خودت. ریاضیاتِ پشتِ الگوریتم‌ها برای استفاده‌ی درست لازم نیست.

کامپیوتر کوانتومی رمزنگاری را بی‌فایده می‌کند؟

بخشی از آن را تهدید می‌کند: الگوریتم‌های کلیدِ عمومی مثل RSA و ECC در برابر کامپیوترِ کوانتومیِ به‌اندازه‌کافی بزرگ آسیب‌پذیرند. AES با کلیدِ بلند و هش‌های مدرن به‌مراتب مقاوم‌ترند. استانداردهای «پساکوانتومی» از ۲۰۲۴ منتشر شده‌اند و کم‌کم در مرورگرها و پروتکل‌ها جا می‌افتند.

آماده‌ای عملی یاد بگیری؟ دوره‌ها و کارگاه‌های هک و امنیت سایبری را ببین و مسیرت را جدی شروع کن.

دیدن دوره‌ها