رمزنگاری کلید عمومی

[بندانگشتی|250px|چپ|یک عدد غیرقابل پیش‌بینی (معمولاً بزرگ و [تصادفی) برای شروع تولید یک جفت قابل قبول از کلیدهای مناسب برای استفاده توسط یک الگوریتم کلید نامتقارن استفاده می‌شود.]]
بندانگشتی|250px|چپ|در یک طرح رمزگذاری کلید نامتقارن، هرکسی می‌تواند پیام‌ها را با استفاده از کلید عمومی رمزگذاری کند، اما تنها دارنده کلید خصوصیِ جفتِ آن کلید عمومی می‌تواند رمزگشایی کند. امنیت به محرمانگی کلید خصوصی بستگی دارد.
[بندانگشتی|250px|چپ|در طرح [پروتکل تبادل کلید دیفی-هلمن|تبادل کلید دیفی-هلمن، هر یک از طرفین یک جفت کلید عمومی و خصوصی تولید می‌کنند و کلید عمومی را توزیع می‌کنند. آلیس و باب پس از به دست آوردن یک کپی معتبر از کلیدهای عمومی یکدیگر می‌توانند یک راز آفلاین مشترک را محاسبه کنند؛ مثلاً راز مشترک می‌تواند به عنوان کلید رمزنگاری متقارن استفاده شود.]]
بندانگشتی|250px|چپ|در این مثال، پیام فقط به صورت دیجیتالی امضا شده و رمزگذاری نشده‌است. ۱) آلیس با کلید خصوصی خود پیامی را امضا می‌کند. ۲) باب می‌تواند تأیید کند که آلیس پیام را ارسال کرده و پیام تغییر نکرده‌است.

**رمزنگاری کلید عمومی**  یا **رمزنگاری نامتقارن** یک سیستم رمزنگاری است که از یک جفت کلید استفاده می‌کند: کلید عمومی که ممکن است به‌طور گسترده منتشر شود، و کلید خصوصی که فقط برای مالک شناخته شده‌است. تولید چنین کلیدهایی به الگوریتمهای رمزنگاری که بر اساس مسائل ریاضی و برای تولید توابع یک طرفه هستند، وابسته است. امنیت کارآمد فقط نیاز به حفظ کلید خصوصی دارد. کلید عمومی را می‌توان آشکارا و بدون اینکه امنیت را به خطر اندازد، منتشر کرد.

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

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

الگوریتم‌های کلید عمومی، عناصر اصلی امنیتی در سیستم‌های رمزنگاری مدرن، برنامه‌ها و پروتکل‌ها هستند که در مورد محرمانگی، صحت و عدم انکارپذیری ارتباطات الکترونیکی و ذخیره‌سازی داده اطمینان می‌دهند. آن‌ها مطابق استانداردهای مختلف اینترنت از جمله امنیت لایه انتقال
(TLS), S/MIME, PGP و GPG هستند. برخی از الگوریتم‌های کلید عمومی، توزیع کلید و رازداری را ارائه می‌دهند (مثل تبادل کلید دیفی-هلمن)، برخی از آن‌ها امضاهای دیجیتال را فراهم می‌کنند (مثل الگوریتم امضای دیجیتال) و برخی از آن‌ها هر دو را ارائه می‌دهند (مثل RSA).

## شرح
پیش از اواسط دهه ۱۹۷۰ تمام سیستم‌های رمزگذاری از الگوریتم‌های کلید متقارن استفاده می‌کردند که در آن کلید رمزنگاری یکسانی با الگوریتم اساسی توسط فرستنده و گیرنده استفاده می‌شود که هردو باید آن را مخفی نگه دارند. کلید در چنین سیستمی پیش از هرگونه استفاده از سیستم لزوماً باید از طریق یک کانال امن بین طرفین ارتباط تبادل شود. این نیاز اصلاً بی‌اهمیت نیست و وقتی تعداد شرکت‌کنندگان افزایش یابد یا وقتی کانال‌های امن برای تبادل کلید در دسترس نباشند یا وقتی کلیدها مکرراً تغییر کنند (که کار معقولی در رمزنگاری است)، خیلی سریع غیرقابل مدیریت می‌شود. به‌طور خاص، اگر پیام‌ها از سایر کاربران مخفی بماند، یک کلید جداگانه برای هر جفت ممکن از کاربران لازم است.

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

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

یک مسئله مهم؛ اثبات این است که یک کلید عمومی خاص معتبر است؛ یعنی صحیح است و متعلق به شخص یا موجودیتی است که ادعا شده‌است و شخص ثالث مخربی آن را دستکاری یا جایگزین نکرده‌است. چند روش ممکن وجود دارد، از جمله:
* یک زیرساخت کلید عمومی (PKI)؛ که در آن یک یا چند شخص ثالث که به عنوان مراجع صدور گواهی‌نامه (certificate authority) شناخته می‌شوند، مالکیت جفت‌های کلید را تأیید می‌کنند. TLS به این امر متکی است.
* یک وب اعتماد (web of trust)؛ که با استفاده از تأییدیه‌های فردیِ پیوند بین کاربر و کلید عمومی؛ احراز هویت را انجام می‌دهد. PGP و همچنین جستجو در سیستم نام دامنه (DNS) از این روش استفاده می‌کنند. سیستم DKIM نیز برای امضای دیجیتال ایمیلها از این روش استفاده می‌کند.

## مفاهیم زیرساخت کلید عمومی
زیرساخت کلید عمومی یا PKI؛ زیرساختی است که بر اساس اعتماد و نه امنیت؛ طراحی و پیاده‌سازی شده‌است و هدف آن؛ برقراری امنیت و آرامش خاطر کاربران شبکه‌های کامپیوتری است.

PKI را می‌توان به صورت مجموعه سخت‌افزار، نرم‌افزار، کاربران، سیاست‌ها و رویه‌هایی که برای ایجاد، مدیریت، ذخیره، توزیع و ابطال گواهی مبتنی بر رمزنگاری با کلید عمومی مورد نیاز می‌باشند؛ تعریف نمود. رمزنگاری به عنوان یکی از روش‌های قابل اعتماد جهت فراهم آوردن سرویس‌های امنیتی قابل استفاده می‌باشد، ولی امروزه به صورت کلی‌تری جهت فراهم آوردن ابزارهایی که می‌توانند سرویس‌هایی را برای امنیت اطلاعات و داده‌ها ارائه نمایند، استفاده می‌شود. برای هر دو عمل رمزنگاری و تصدیق هویت کلید عمومی از زوج کلید (یک کلید عمومی و یک کلید خصوصی) استفاده می‌شود. در رمزنگاری، فرستنده با کلید عمومی فایل را رمزگذاری می‌کند و گیرنده پس از دریافت، آن را با کلید خصوصی خود از رمز خارج می‌کند؛ و در بحث تصدیق هویت، فرستنده با کلید خصوصی خود پیام را امضا می‌کند و گیرنده، پیام فرستنده را با کلید عمومی تصدیق می‌نماید.

### ساختار موجودیت‌های PKI
ارتباط بین موجودیت‌های PKI طی یک ساختار کلی ارائه می‌شود.

## زوج کلیدهای چندتایی
هر موجودیت PKI می‌تواند چند زوج کلید داشته باشد. بین یک زوج کلید و یک «نقش» یک تناظر قوی وجود دارد؛ مثلاً ممکن است یک موجودیت از یک کلید برای امضای یک خرید برای بخش کاری خودش و از کلید دیگر برای امضای یک فرم کرایه فیلم و از یکی دیگر برای امضای یک ایمیل شخصی استفاده کند.

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

پرونده:Kpair.JPG

زوج کلیدهای مختلف می‌توانند کاربردهای متفاوت داشته باشند. خصوصاً اینکه یک زوج کلید در الگوریتم امضای دیجیتال (DSA) زمانی‌که بر طبق خصوصیاتی پیاده‌سازی شده‌است، نمی‌تواند برای رمزگذاری یا رمزگشایی بکار رود. به‌طور مشابه زوج کلید DH نمی‌تواند برای امضا نمودن داده‌ها و راست‌آزمایی امضا بکار رود. به‌علاوه حتی یک زوج کلید بر اساس الگوریتم RSA _ که به صورت ریاضی برای تصدیق، یکپارچگی، محرمانگی یا معاوضه کلید بکار می‌رود_ ممکن است به وسیله سیاست‌ها، احکام، یا انتخاب پیاده‌سازی برای استفاده تک منظوره محدود شود.

## کشف رمز کلید
موضوع کشف رمز کلید در دو حوزه مورد بحث قرار می‌گیرد:
* کشف رمز کلید خصوصی موجودیت نهایی
* کشف رمز کلید خصوصی یک CA
در حالت اول، به محض اینکه شخصی متوجه می‌شود که کلید خصوصی اش کشف رمز شده‌است، باید اقدامات زیر را انجام دهد:
* یک پیام درخواست ابطال برای مرجع قدرت امنیتی مربوط جهت صدور اعلان به تمام طرف‌های مرتبط مبنی بر عدم استفاده از کلید عمومی
* در صورت لزوم، پیمودن مراحل برای تولید و صدور گواهی برای یک زوج کلید جدید

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

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

یک راه اطلاع‌رسانی از طریق پیام‌های CRL است که آن را با ارائه یک مکانیزم بیان می‌کنیم. در این مکانیزم، CRL شامل کلید کشف رمز شده می‌باشد که توسط کلید خصوصی جدید CA صادر و امضا شده‌است. اعضای اعتمادکننده این امضا را با بازیابی کلید عمومی CA و محاسبه عدد HASH این کلید معتبر می‌شمارند و آن را با عدد HASH قبلی در گواهی قدیمی CA مقایسه می‌کنند. این مکانیزم نیاز بدان دارد که CA در زمان گواهی کردن زوج کلید فعلی، زوج کلید بعدی را نیز تولید کند.

### آماده‌سازی
در شرایط کشف رمز CA باید اقدامات زیر را در جهت کاهش آسیب‌ها انجام دهد:
* تلاش به هر شکل ممکن برای شناخت طرف‌های اعتمادکننده تا پیام اخطار فقط به این افراد فرستاده شود. این کار در مدل وب شدنی نیست، اما از طریق دیگر مدل‌های اعتماد PKI حاصل می‌شود.
* ذخیره نمودن کلید عمومی مورد اعتماد به عنوان یک گواهی در حوزة محلی طرف‌های اعتمادکننده، پشتیبانی از انتشار پیام CRL و تقویت نرم‌افزاری طرف‌های اعتمادکننده برای چک کردن پیام CRL. این کار تا حد زیادی زیان را کمینه می‌کند چون بدون مداخله موجودیت‌های نهایی و به‌طور خودکار، اعتماد نسبت به کلید کشف رمز شده از بین می‌رود. این روش برای محیط‌هایی که وضعیت گواهی خود را از طریق لیست ابطال چک می‌کنند، مناسب‌ترین است.
* داشتن یک دورة زمانی معتبر برای زوج کلیدها. کشف رمز یک کلید پس از ده سال استفاده نسبت به کشف رمز کلید پس از یک سال استفاده، عواقب وخیم تری دارد؛ بنابراین هرچه این دورة زمانی کوتاهتر باشد، میزان خسارت کمتر خواهد بود.
* اجرای مکانیزم خودکار و کنترل شده جابجایی کلید CA.

### بازیابی
تنها راه بازیابی این است که به PKI دوباره ارزش دهی شود؛ بنابراین یک کلید از سمت CA تولید می‌شود و یک کپی از کلید عمومی در محل هر موجودیت PKI قرار داده می‌شود. به عبارتی PKI باید برای موجودیت‌ها به شکلی ساخته شود که انگار هیچ وقت وجود نداشته‌است.

## مدیریت گواهی مستقل
اگر یک کلید عمومی در چند گواهی قرار داده شده و کلید خصوصی در معرض خطر باشد، باید به یاد داشت که کدام گواهی‌ها دارای این کلید بودند تا بتوان آن‌ها را باطل نمود. عدم ابطال هرکدام از این گواهی‌ها می‌تواند منجر به یک ریسک امنیتی جدی شود. در مقابل، چنین ریسکی کاهش می‌یابد اگر کلید عمومی فقط در یک گواهی ظاهر شود؛ چون بار اجرایی یافتن و ابطال یک گواهی به مراتب کمتر است.
بعلاوه، گواهی‌های جداگانه در ارتباط با زوج کلیدهای جداگانه، از نظر ساخت مستقل اند: آن‌ها از نظر دورة اعتبار، سیاست‌ها، کاربرد و رویه‌های مدیریتی مستقلند؛ بنابراین ابطال یکی از آن‌ها بر بقیه اثرگذار نیست. داشتن یک کلید عمومی در چند گواهی، مدیریت آن را پیچیده می‌کند.

## پشتیبانی از عدم انکار
برای پشتیبانی از عدم انکار، شرط لازم آن است که کلید خصوصی همراه با فعالیت عدم انکار مورد نظر (مانند امضای یک رسید برای اثبات انتقال آن) نباید برای بخش‌های دیگر شناخته شده باشد. در غیر اینصورت، موجودیت مزبور به سادگی می‌تواند اعلام کند که بخش دیگری عدم انکار نموده‌است؛ بنابراین سرویس عدم انکار به مانع برخورد می‌کند.

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

## کاربردها
بارزترین کاربرد سیستم رمزنگاری کلید عمومی در رمزگذاری ارتباطات برای ارائه محرمانگی است. (یک پیام که یک فرستنده با استفاده از کلید عمومی گیرنده آن را رمزگذاری می‌کند، فقط با کلید خصوصی گیرنده که جفت آن است می‌تواند رمزگشایی شود).

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

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

کاربردهای دیگری که بر این اساس بنا شده‌اند، عبارتند از: پول نقد دیجیتال، توافق‌نامه کلید تصدیق‌شده با گذرواژه، خدمات مهرزنی، پروتکل‌های عدم بازپرداخت و…

از آنجا که الگورکاربردهایتم‌های کلید نامتقارن تقریباً همیشه دارای محاسبات بسیار بیشتری از الگوریتم‌های کلید متقارن هستند، در بسیاری از موارد رایج است که با استفاده از یک الگوریتم تبادل کلید، یک کلید را مبادله می‌کنند و سپس داده‌ها را با استفاده از آن کلید و یک الگوریتم کلید متقارن انتقال می‌دهند. PGP و SSH و خانواده طرح‌های SSL/TLS از این روش استفاده می‌کنند و به همین دلیل به آن‌ها رمزنگاری ترکیبی گفته می‌شود.

## نقاط ضعف
مانند همه سیستم‌های امنیتی، در این سیستم هم شناسایی نقاط ضعف بالقوه مهم است.

### الگوریتم‌ها
همه طرح‌های کلید عمومی در تئوری مستعد «حمله جستجوی کلید نیروی بی‌رحم» هستند. اگرچه چنین حملاتی در صورتی که میزان محاسبات لازم برای موفقیت (که توسط کلود شانون «عامل کار» نامیده شده‌است) از دسترس همه مهاجمان بالقوه خارج باشد، عملی نیستند. در بسیاری از موارد، عامل کار به راحتی با انتخاب یک کلید طولانی‌تر می‌تواند افزایش یابد؛ اما الگوریتم‌های دیگر ممکن است عامل کار بسیار کمتری داشته باشند که مقاومت در برابر حمله نیروی بی‌رحم را بیهوده می‌کند. برخی الگوریتم‌های خاص و مخصوص برای کمک به حمله به برخی الگوریتم‌های رمزگذاری کلید عمومی ایجاد شده‌اند (هر دو رمزگذاری RSA و ElGamal حملات شناخته‌شده‌ای دارند که بسیار سریع‌تر از روش نیروی بی‌رحم است).

نقاط ضعف عمده‌ای برای چندین الگوریتم کلید نامتقارن قبلی یافت شده‌است. الگوریتم «بسته‌بندی کوله‌پشتی» پس از توسعه یک حمله جدید ناامن شد. مانند همه کارکردهای رمزنگاری، پیاده‌سازی‌های کلید عمومی ممکن است در برابر حملات کانال جانبی که از نشت اطلاعات برای ساده‌سازی جستجو برای یک کلید مخفی بهره‌برداری می‌کنند، آسیب‌پذیر باشند. تحقیقات برای کشف حملات جدید و محافظت در برابر آن‌ها در حال انجام است.

### تغییر کلیدهای عمومی
یکی دیگر از آسیب‌پذیری‌های امنیتی احتمالی در استفاده از کلیدهای نامتقارن، احتمال حمله «شخص ثالث» (man-in-the-middle attack) است که در آن، ارتباط کلیدهای عمومی توسط شخص ثالثی رهگیری می‌شود و سپس برای ایجاد کلیدهای عمومی دیگری به جای آن تغییر می‌کند. همچنین مهاجم باید پیام‌ها و پاسخ‌های رمزگذاری شده را با استفاده از کلیدهای عمومی صحیح برای بخش‌های مختلف ارتباطی، در همه موارد، رهگیری، رمزگشایی و رمزگذاری مجدد کند تا از ظن دیگران جلوگیری کند.

به نظر می‌رسد که این حمله در عمل ممکن است دشوار باشد؛ اما هنگام استفاده از رسانههای ناامن (مثل شبکه‌های عمومی مانند اینترنت یا ارتباطات بی‌سیم) غیرممکن نیست؛ مثلاً انجام این کار برای یک کارمند مخرب در یک سازمان ارائه‌دهنده خدمات اینترنت (ISP) ممکن است آسان باشد.

### زیرساخت کلید عمومی
یک رویکرد برای جلوگیری از چنین حملاتی؛ استفاده از یک زیرساخت کلید عمومی (PKI) است. مجموعه‌ای از نقش‌ها، سیاستها و رویه‌هایی که باید ایجاد شوند، مدیریت، توزیع، استفاده، ذخیره‌سازی و ابطال گواهینامه‌های دیجیتال و مدیریت رمزگذاری کلید عمومی. اگرچه این نیز به نوبه خود نقاط ضعف بالقوه‌ای دارد؛ مثلاً به صادرکننده گواهینامه باید اعتماد کرد که هویت دارنده کلید را به درستی بررسی کرده‌است. صادرکننده گواهی‌نامه باید هنگام صدور گواهی‌نامه از صحت کلید عمومی اطمینان حاصل کند، باید از دزدی رایانه‌ای ایمن باشد و باید تمهیدات لازم را با همه شرکت‌کنندگان اندیشیده باشد تا قبل از شروع ارتباطات محافظت شده، تمام گواهینامه‌های آنان را بررسی کند؛ مثلاً در مرورگرهای وب یک لیست طولانی از «گواهی‌نامه‌های هویت امضا شده توسط خود» (self-signed identity certificates) از ارائه‌دهندگان PKI ذخیره شده‌است که از این گواهی‌نامه‌ها برای بررسی صلاحیت مراجع گواهی‌نامه و سپس، در مرحله دوم، گواهی‌نامه‌های ارتباطات بالقوه استفاده می‌شود. مهاجمی که بتواند هر یک از این مراجع گواهی‌نامه را وادار کند که یک گواهی‌نامه برای یک کلید عمومی جعلی صادر کند، می‌تواند حمله «شخص ثالث» (man-in-the-middle) را به آسانی به نتیجه برساند، انگار اصلاً از این طرح گواهی‌نامه استفاده نشده‌است. در یک سناریوی دیگر که به ندرت مورد بحث قرار می‌گیرد، مهاجمی که به سرورهای یک مرجع نفوذ کرده و منبع گواهی‌نامه‌ها و کلیدها (عمومی و خصوصی) را به دست آورده، بدون محدودیت قادر به انجام کلاهبرداری، جعل هویت، رمزگشایی و جعل معاملات است.

با وجود مشکلات تئوری و بالقوه، از این رویکرد به‌طور گسترده استفاده می‌شود. مثال‌هایی از آن شامل TLS و SSL قبلی آن می‌شود که معمولاً از آن برای تأمین امنیت برای معاملات مرورگر وب (مثلاً ارسال ایمن جزئیات اطلاعات کارت اعتباری به یک فروشگاه آنلاین) استفاده می‌شود.

گذشته از مقاومت در برابر حمله به یک جفت کلید خاص، باید امنیت سلسله مراتب صدور گواهی‌نامه هنگام استقرار سیستم‌های کلید عمومی در نظر گرفته شود. برخی از مراجع صدور گواهی‌نامه (معمولاً یک برنامه که با هدف ساخته شده و روی یک رایانه سرور اجرا می‌شود) با تولید یک گواهی‌نامه دیجیتال، تهیه هویت‌های اختصاص‌یافته به کلیدهای خصوصی خاص را تضمین می‌کنند. گواهی‌نامه‌های دیجیتال کلید عمومی معمولاً هربار چندین سال معتبر هستند؛ بنابراین کلیدهای خصوصی مربوط به آن‌ها باید در این مدت مخفی نگه داشته شوند. وقتی یک کلید خصوصی که برای ایجاد گواهی‌نامه‌ای استفاده می‌شود که در سلسله مراتب سرور PKI بالاتر است به خطر می‌افتد یا به‌طور تصادفی فاش می‌شود، پس از آن حمله «شخص ثالث» (man-in-the-middle) امکان‌پذیر می‌شود و هر گواهی‌نامه وابسته به آن را کاملاً ناامن می‌کند.

## نمونه‌ها
**نمونه‌هایی از تکنیک‌های کلید نامتقارن که برای اهداف متنوعی مورد توجه قرار گرفته‌اند، عبارتند از:**
* پروتکل تبادل کلید دیفی-هلمن (Diffie-Hellman)
* استاندارد امضای دیجیتال (DSS) که شامل الگوریتم امضای دیجیتال است
* ElGamal
* تکنیک‌های مختلف منحنی بیضوی
* تکنیک‌های مختلف توافق‌نامه کلید تصدیق‌شده با گذرواژه
* سیستم رمزنگاری Paillier
* الگوریتم رمزگذاری RSA (PKCS#1)
* سیستم رمزنگاری Cramer-Shoup
* پروتکل توافق‌نامه کلید تصدیق‌شده توسط YAK

**نمونه‌هایی از الگوریتم‌های کلید نامتقارن که به‌طور گسترده پذیرفته نشده‌اند، عبارتند از:**
* سیستم رمزنگاری NTRUEncrypt
* سیستم رمزنگاری McEliece

**نمونه‌هایی از الگوریتم‌های کلید نامتقارن که قابل توجه ولی در حال حاضر ناامن هستند، عبارتند از:**
* سیستم رمزنگاری کوله‌پشتی Merkle-Hellman

**نمونه‌هایی از پروتکل‌هایی که از الگوریتم‌های کلید نامتقارن استفاده می‌کنند، عبارتند از:**
* S/MIME
* GPG، یک پیاده‌سازی از OpenPGP
* EMV، مرجع گواهی‌نامه EMV
* تبادل کلید اینترنتی
* PGP
* ZRTP، یک پروتکل VoIP ایمن
* امنیت لایه انتقال که توسط IETF و لایه سوکت ایمن قبلی آن استاندارد شده‌است
* SILC
* SSH
* بیت کوین
* پیام‌رسانی محرمانه

## تاریخچه
در طول تاریخچه اولیه رمزنگاری، دو طرف با کلیدی کار می‌کردند که آن را با یک روش ایمن اما غیر رمزنگاری، مانند ملاقات چهره به چهره یا پیک مورد اعتماد، مبادله می‌کردند. این کلید که هر دو طرف آن را کاملاً مخفی نگه داشته بودند، می‌توانست برای تبادل پیام‌های رمزگذاری‌شده استفاده شود. تعدادی از مشکلاتی که به‌طور قابل توجهی عملی بودند، با این رویکرد در توزیع کلیدها به وجود می‌آمدند.

### پیش‌بینی
ویلیام استنلی جوونز در کتاب خود، اصول علم، در سال ۱۸۷۴ نوشت:

آیا خواننده می‌تواند بگوید که کدام دو عددی اگر در هم ضرب شوند، عدد ۸۶۱۶۴۶۰۷۹۹ تولید خواهد شد؟ فکر می‌کنم بعید است کسی به جز من هیچ‌گاه این را بداند.

در اینجا او رابطه توابع یک‌طرفه را با رمزنگاری شرح داد و در ادامه، به‌طور خاص دربارهٔ مسئله فاکتورگیری (factorization) که برای ایجاد یک تابع دریچه (trapdoor function) استفاده شده، بحث کرد. در ژوئیه ۱۹۹۶، سلیمان گلومب ریاضیدان گفت: «جوونز یک ویژگی کلیدی الگوریتم RSA را برای رمزنگاری کلید عمومی پیش‌بینی کرد، اگرچه او قطعاً مفهوم رمزنگاری کلید عمومی را اختراع نکرد.»

### کشف محرمانه
در سال ۱۹۷۰، جیمز الیس، رمزنگار انگلیسی در دفتر مرکزی ارتباطات دولت (GCHQ) انگلستان، احتمال «رمزگذاری غیر مخفی» (که اکنون رمزنگاری کلید عمومی نامیده می‌شود) را متصور شد؛ اما هیچ راهی برای اجرای آن نمی‌دید. در سال ۱۹۷۳، همکارش کلیفورد کاکس، آنچه را که به الگوریتم رمزگذاری RSA معروف شده‌است، پیاده‌سازی کرد که یک روش عملی «رمزگذاری غیر مخفی» را ارائه می‌داد و در سال ۱۹۷۴، ریاضیدان و رمزنگار دیگری در GCHQ، مالکولم ویلیامسون، آنچه را که امروزه به عنوان تبادل کلید دیفی-هلمن شناخته شده‌است، توسعه داد. این طرح همچنین به آژانس امنیت ملی ایالات متحده آمریکا فرستاده شد. با تمرکز نظامی و قدرت محاسباتی کم، قدرت رمزنگاری کلید عمومی در هر دو سازمان غیرقابل تحقق بود:

من این را برای استفاده نظامی بسیار مهم دانستم … اگر شما می‌توانید کلید خود را به سرعت و به صورت الکترونیکی به اشتراک بگذارید، شما مزیت بزرگی نسبت به حریف خود دارید. تنها در پایان تحولات از برنرز-لی که یک معماری اینترنت باز را برای سِرن (CERN) طراحی می‌کرد، توافق و پذیرش آن برای آرپانت … رمزنگاری کلید عمومی متوجه پتانسیل کامل آن بود.

—رالف بنجامین

کشف آن‌ها به مدت ۲۷ سال به‌طور عمومی اعلام نشده بود، تا اینکه در سال ۱۹۹۷ این تحقیق توسط دولت انگلیس به‌طور قطعی فاش شد.

### کشف عمومی
در سال ۱۹۷۶، یک سیستم رمزنگاری کلید نامتقارن توسط ویتفیلد دیفی و مارتین هلمن منتشر شد که تحت تأثیر کار رالف مرکل روی توزیع کلید عمومی، روشی از توافق کلید عمومی را افشا کردند. این روش تبادل کلید که از به توان رساندن (exponentiation) در یک میدان محدود استفاده می‌کند، به عنوان تبادل کلید دیفی-هلمن شناخته شد. این اولین روش عملی منتشرشده برای ایجاد کلید مخفی مشترک بر روی یک کانال ارتباطی معتبر (اما نه محرمانه) بدون استفاده از یک راز مشترک قبلی بود. «تکنیک توافق‌نامه کلید عمومی» مرکل با عنوان معماهای مرکل شناخته شد و در سال ۱۹۷۴ اختراع و در سال ۱۹۷۸ منتشر شد.

در سال ۱۹۷۷ کلیاتی از طرح کاکس به‌طور مستقل توسط ران ریوست، ادی شمیر و لئونارد آدلمن در MIT اختراع شد. نویسندگانِ آخر کار خود را در سال ۱۹۷۸ منتشر کردند و این الگوریتم از ابتدای کارشان به RSA معروف شد. RSA برای رمزگذاری و رمزگشایی از مدول به توان رساندن حاصل‌ضرب دو عدد اول بسیار بزرگ استفاده می‌کند که هم رمزگذاری کلید عمومی و هم امضای دیجیتال کلید عمومی را انجام می‌دهد. امنیت آن دشواری شدیدی در زمینه فاکتورسازی اعداد صحیح بزرگ دارد؛ مشکلی که هیچ تکنیک عمومی کارآمد شناخته‌شده‌ای برای حل آن وجود ندارد. توضیحی از این الگوریتم در ستون بازی‌های ریاضی در انتشار اوت ۱۹۷۷ نشریه Scientific American منتشر شد.

از دهه ۱۹۷۰ تعداد و تنوع زیادی از رمزگذاری، امضای دیجیتال، توافق‌نامه کلید و سایر تکنیک‌ها در زمینه رمزنگاری کلید عمومی توسعه یافته‌اند؛ از جمله سیستم رمزنگاری Rabin، رمزگذاری ElGamal, DSA و رمزنگاری منحنی بیضوی.

## جستارهای وابسته
* آراس‌ای
* زیرساخت کلید عمومی

## منابع

رده:پروتکل‌های رمزنگاری
رده:رمزنگاری با کلید نامتقارن
رمزنگاری کلید عمومی
رده:رمزنگاری
رده:زیرساخت کلید عمومی
رده:شبکه‌های ناشناس ماندن
رده:فناوری بانکداری
رده:معماری شبکه
رده:نرم‌افزارهای رمزنگاری
رده:ویکی‌سازی رباتیک