چگونه رمزنگاری با کلید عمومی واقعاً کار میکند
راهنمای عملی برای رمزنگاری نامتقارن، جفت کلیدها، و امضای دیجیتالی، بدون استعارههای ریاضی و توضیحات مبهم.
هر بار که وارد یک سرور SSH میشوید یا یک سایت HTTPS را بارگذاری میکنید، دو کلید مرتبط ریاضیاتی کار سنگین را انجام میدهند. یکی عمومی است، یکی خصوصی، و رابطه بین آنها همان چیزی است که ارتباط ایمن را بر روی شبکه غیر قابل اعتماد امکانپذیر میسازد.
ایده اساسی
در رمزنگاری متقارن، یک کلید داده را قفل و باز میکند. اگر هر دو طرف قبلاً یک راز مشترک داشته باشند خوب کار میکند، اما توزیع ایمن آن راز مشکل است. رمزنگاری کلید عمومی (نامتقارن) این مشکل را با تولید یک جفت ریاضیاتی حل میکند: کلید عمومی که به هر کسی میدهید، و کلید خصوصی که هرگز به اشتراک نمیگذارید.
دادههای رمزگذاری شده با کلید عمومی تنها با کلید خصوصی متناظر میتواند رمزگشایی شود. دادههای امضا شده با کلید خصوصی هر کسی با داشتن کلید عمومی میتواند تأیید کند. این دو خصوصیت تقریباً تمام کاربردهایی را که برای آنها استفاده میکنیم پوشش میدهند: محرمانگی و احراز هویت.
RSA، نمونه کلاسیک
RSA بر این واقعیت تکیه دارد که ضرب دو عدد اول بزرگ سریع است، اما تجزیه حاصلضرب به آن اعداد اول در مقیاس بزرگ محاسباتی بسیار سخت است. کلید 2048 بیتی RSA از دو عدد اول تقریباً 1024 بیتی ساخته میشود. کلید عمومی (n, e) است — n حاصلضرب اعداد اول، e یک توان ثابت مثل 65537. کلید خصوصی با استفاده از totient n و دانستن اعداد اول اصلی استخراج میشود.
رمزگذاری توانرسانی مدولار است: c = m^e mod n. رمزگشایی آن را با توان خصوصی d معکوس میکند: m = c^d mod n. در عمل، کسی بارهای کاری بزرگ را مستقیماً با RSA رمزگذاری نمیکند — کند است و محدودیتهای اندازهای مرتبط با طول کلید دارد. در عوض، RSA معمولاً یک کلید جلسه متقارن (مثلاً AES-256) را پوشش میدهد، و رمز متقارن دادههای حجیم را مدیریت میکند. این روش ترکیبی است که TLS استفاده میکند.
رمزنگاری منحنی بیضوی و چرا در حال تسلط است
ECC با کلیدهای بسیار کوچکتر امنیت معادل RSA فراهم میکند. کلید 256 بیتی ECC (مثل curve secp256r1 یا Curve25519) تقریباً با قدرت کلید 3072 بیتی RSA مقایسهپذیر است. کلیدهای کوچکتر دستدهیهای سریعتر و پهنای باند کمتر را معنی میدهد، و برای این دلیل است که تنظیمات TLS مدرن، پیادهسازیهای SSH، و پروتکل Signal روی ECC تکیه دارند.
ریاضیات متفاوت است — بر مبنای مسئله logarithm گسسته بر روی نقاط روی منحنی بیضوی نیست که فاکتورگیری اعداد صحیح — اما رابطه کلید عمومی/خصوصی و تضمینها از نظر مفهومی یکسان است.
امضای دیجیتالی: نیمی دیگر معادله
رمزنگاری دادهها را محرمانه نگه میدارد. امضاها صحت و یکپارچگی را اثبات میکنند. برای امضای پیام، آن را hash میکنید (معمولاً SHA-256) و آن hash را با کلید خصوصی خود رمزگذاری میکنید. هر کسی با کلید عمومی شما میتواند پیام را خود hash کند، امضای شما را رمزگشایی کند، و دو hash را بررسی کند که مطابقت دارند.
این دقیقاً زمانی اتفاق میافتد که git commit -S را با کلید GPG اجرا میکنید، یا زمانی که یک Certificate Authority یک گواهی TLS را امضا میکند. کلید خصوصی CA گواهی شما را امضا میکند؛ مرورگرها با کلید عمومی CA از قبل تأیید شده عرضه میشوند، بنابراین میتوانند صحت گواهی شما را تأیید کنند بدون اینکه مستقیماً با CA صحبت کنند.
جایی که این روزانه نمایان میشود
احراز هویت کلید SSH کاربرد مستقیم است: ssh-keygen -t ed25519 یک جفت کلید تولید میکند، نیمی عمومی را در ~/.ssh/authorized_keys بر روی سرور قرار میدهید، و احراز هویت از طریق challenge-response با استفاده از کلید خصوصی انجام میشود، رمز هرگز منتقل نمیشود.
دستدهیهای TLS رمزنگاری نامتقارن را به صورت کوتاه مدت استفاده میکنند، فقط برای ایجاد کلید متقارن مشترک (از طریق تبادل کلید ECDHE در تنظیمات مدرن)، سپس به رمزنگاری متقارن سریع برای جلسه واقعی میروند. رمزنگاری ایمیل PGP/GPG نیز الگوی ترکیبی را دنبال میکند — پیام را با کلید AES تصادفی رمزگذاری کنید، سپس آن کلید AES را با کلید عمومی RSA یا ECC گیرنده رمزگذاری کنید.
آنچه در عمل واقعاً شکست میخورد
ریاضیات پشت RSA و ECC از طریق computing کلاسیک شکسته نشده است. آنچه اشتباه میشود تقریباً همیشه پیادهسازی است: تولید اعداد تصادفی ضعیف هنگام ایجاد کلیدها (باگ OpenSSL Debian از 2008 نمونه متنی است)، nonce های تکراری در امضای ECDSA که کلیدهای خصوصی را نشت میدهند، یا حملات padding oracle علیه RSA ضعیفپیادهسازی شده (حمله Bleichenbacher علیه PKCS#1 v1.5 padding). Computing کوانتومی تهدید نظری بلندمدت است — الگوریتم Shor هم RSA و هم ECC را شکست میدهد اگر کامپیوتر کوانتومی به اندازه کافی بزرگ وجود داشت — که به همین دلیل است که NIST قبلاً الگوریتمهای post-quantum مانند ML-KEM (پیشتر Kyber) را برای مهاجرت آینده استاندارد کرده است.
اگر میخواهید در این مورد بیشتر بروید، track رمزنگاری Korra Studio پروتکلهای تبادل کلید و عمقهای داخلی تابع hash را با جزئیات بیشتری پوشش میدهد، و بخشهای شبکه نحوهای که تمام این موارد در دستدهی TLS واقعی قرار میگیرند را بایت به بایت نشان میدهند.
با کمک هوش مصنوعی نوشتهشده، بازبینی و منتشرشده توسط Michal Pilch (CISSP)، Korra Studio.
این یکی از یادداشتهای پایگاه دانش Korra Studio است — پلتفرم هر موضوع را با مربی یکبهیک جفت میکند.
شروع رایگانarrow_forward