رمزنگاری کلید عمومی
رمزنگاری کلید عمومی یا رمزنگاری نامتقارن، یک سیستم رمزنگاری است که از یک جفت کلید استفاده می‌کند: کلید عمومی که ممکن است به طور گسترده منتشر شود، و کلید خصوصی که فقط برای مالک شناخته شده است. تولید چنین کلیدهایی به الگوریتمهای رمزنگاری که بر اساس مسائل ریاضی و برای تولید توابع یک طرفه هستند، وابسته است. امنیت کارآمد فقط نیاز به حفظ کلید خصوصی دارد. کلید عمومی را می‌توان آشکارا و بدون اینکه امنیت را به خطر اندازد، منتشر کرد.
در چنین سیستمی، هر شخص می‌تواند با استفاده از کلید عمومی گیرنده، پیام را رمزگذاری کند اما آن پیام رمزگذاری شده فقط با کلید خصوصی گیرنده قابل رمزگشایی است.
احراز هویت قوی نیز ممکن است. یک فرستنده می‌تواند یک پیام را با یک کلید خصوصی ترکیب کند تا یک امضای دیجیتال کوتاه روی پیام ایجاد کند. هر کسی که کلید عمومی مربوطه فرستنده را داشته باشد، می‌تواند همان پیام و امضای دیجیتال فرضی مربوطه را ترکیب کند که بررسی کند که آیا آن امضا معتبر است یا نه، یعنی توسط صاحب کلید خصوصی مربوطه ساخته شده است یا نه.
الگوریتم‌های کلید عمومی، عناصر اصلی امنیتی در سیستم‌های رمزنگاری مدرن، برنامه‌ها و پروتکل‌ها هستند که درمورد محرمانگی، صحت و عدم انکارپذیری ارتباطات الکترونیکی و ذخیره‌سازی داده اطمینان می‌دهند. آن‌ها مطابق استانداردهای مختلف اینترنت از جمله امنیت لایه انتقال (TLS), S/MIME, PGP و GPG هستند. برخی از الگوریتم‌های کلید عمومی، توزیع کلید و رازداری را ارائه می‌دهند (مثل تبادل کلید دیفی-هلمن)، برخی از آن‌ها امضاهای دیجیتال را فراهم می‌کنند (مثل الگوریتم امضای دیجیتال) و برخی از آن‌ها هردو را ارائه می‌دهند (مثل RSA).
پیش از اواسط دهه ۱۹۷۰ تمام سیستم‌های رمزگذاری از الگوریتم‌های کلید متقارن استفاده می‌کردند که در آن کلید رمزنگاری یکسانی با الگوریتم اساسی توسط فرستنده و گیرنده استفاده می‌شود که هردو باید آن را مخفی نگه دارند. کلید در چنین سیستمی پیش از هرگونه استفاده از سیستم لزوماً باید از طریق یک کانال امن بین طرفین ارتباط تبادل شود. این نیاز اصلاً بی‌اهمیت نیست و وقتی تعداد شرکت‌کنندگان افزایش یابد یا وقتی کانال‌های امن برای تبادل کلید در دسترس نباشند یا وقتی کلیدها مکرراً تغییر کنند (که کار معقولی در رمزنگاری است)، خیلی سریع غیر قابل مدیریت می‌شود. به طور خاص، اگر پیام‌ها از سایر کاربران مخفی بماند، یک کلید جداگانه برای هر جفت ممکن از کاربران لازم است.
در مقابل، در یک سیستم کلید عمومی، کلیدهای عمومی می‌توانند به طور گسترده و آشکارا پخش شوند و فقط کلید خصوصی باید توسط صاحبش ایمن نگه داشته شود.
دو مورد از شناخته شده ترین کاربردهای رمزنگاری کلید عمومی عبارتند از:
یک مسئله مهم؛ اثبات این است که یک کلید عمومی خاص معتبر است. یعنی صحیح است و متعلق به شخص یا موجودیتی است که ادعا شده است و شخص ثالث مخربی آن را دستکاری یا جایگزین نکرده است. چند روش ممکن وجود دارد، از جمله:
زیرساخت کلید عمومی یا PKI؛ زیرساختی است که بر اساس اعتماد و نه امنیت؛ طراحی و پیاده‌سازی شده است و هدف آن؛ برقراری امنیت و آرامش خاطر کاربران شبکه‌های کامپیوتری است.
PKI را می‌توان به صورت مجموعه سخت‌افزار، نرم‌افزار، کاربران، سیاست‌ها و رویه‌هایی که برای ایجاد، مدیریت، ذخیره، توزیع و ابطال گواهی مبتنی بر رمزنگاری با کلید عمومی مورد نیاز می‌باشند؛ تعریف نمود. رمزنگاری به عنوان یکی از روش‌های قابل اعتماد جهت فراهم آوردن سرویس‌های امنیتی قابل استفاده می‌باشد، ولی امروزه به صورت کلی‌تری جهت فراهم آوردن ابزارهایی که می‌توانند سرویس‌هایی را برای امنیت اطلاعات و داده‌ها ارائه نمایند، استفاده می‌شود. برای هر دو عمل رمزنگاری و تصدیق هویت کلید عمومی از زوج کلید (یک کلید عمومی و یک کلید خصوصی) استفاده می‌شود. در رمزنگاری، فرستنده با کلید عمومی فایل را رمزگذاری می‌کند و گیرنده پس از دریافت، آن را با کلید خصوصی خود از رمز خارج می‌کند؛ و در بحث تصدیق هویت، فرستنده با کلید خصوصی خود پیام را امضا می‌کند و گیرنده، پیام فرستنده را با کلید عمومی تصدیق می‌نماید.ارتباط بین موجودیت‌های PKI طی یک ساختار کلی ارائه می‌شود.
هر موجودیت PKI می‌تواند چند زوج کلید داشته باشد. بین یک زوج کلید و یک «نقش» یک تناظر قوی وجود دارد. مثلاً ممکن است یک موجودیت از یک کلید برای امضای یک خرید برای بخش کاری خودش و از کلید دیگر برای امضای یک فرم کرایه فیلم و از یکی دیگر برای امضای یک ایمیل شخصی استفاده کند.
مفهوم زوج کلیدهای چندتایی برای هر موجودیت برای بعضی از محیطها به دلیل نقش‌های مختلفی که موجودیت ایفا می‌کند منطقی است، چون هر زوج کلید در حوزة کوچکی از کاربرد محدود شده‌است. برای صورت گرفتن تمام وظایفی که با یک نقش مشخص در ارتباط است، یک موجودیت PKI نیاز است که چند زوج کلید داشته باشد.
زوج کلیدهای مختلف می‌توانند کاربردهای متفاوت داشته باشند. خصوصاً اینکه یک زوج کلید در الگوریتم امضای دیجیتال (DSA) زمانی‌که بر طبق خصوصیاتی پیاده‌سازی شده‌است، نمی‌تواند برای رمزگذاری یا رمزگشایی بکار رود. به‌طور مشابه زوج کلید DH نمی‌تواند برای امضا نمودن داده‌ها و راست‌آزمایی امضا بکار رود. به‌علاوه حتی یک زوج کلید بر اساس الگوریتم RSA _ که به صورت ریاضی برای تصدیق، یکپارچگی، محرمانگی یا معاوضه کلید بکار می‌رود_ ممکن است به وسیلة سیاست‌ها، احکام، یا انتخاب پیاده‌سازی برای استفادة تک منظوره محدود شود.
موضوع کشف رمز کلید در دو حوزه مورد بحث قرار می‌گیرد: در حالت اول، به محض اینکه شخصی متوجه می‌شود که کلید خصوصی اش کشف رمز شده‌است، باید اقدامات زیر را انجام دهد:
پیامد کشف رمز کلید یک موجودیت نهایی، بستگی به نوع کلید دارد. اگر کلید امضاکننده کشف رمز شده باشد، دارندة این کلید باید گواهی مورد نظر را باطل کند و همین کار از دسترسی بیشتر افراد غیرمجاز جلوگیری خواهد کرد. اما اگر کلید کشف رمز شده، کلید خصوصی و برای از رمز درآوردن اسناد باشد، بعلاوة نکتة بالا، باید تمام اسنادی که با این کلید از رمز خارج می‌شدند و کلیدهایی که این اسناد را به رمز درآورده‌اند، شناسایی شوند.در صورتی که کلید CA کشف رمز شود، به دلیل تعدد افراد، وی نمی‌تواند به طرف‌های اعتمادکننده اطلاع دهد که این مسئله اتفاق افتاده‌است و هیچ راه قابل اعتمادی برای این شکل از اطلاع‌رسانی وجود ندارد.
یک راه اطلاع‌رسانی از طریق پیام‌های CRL است که آن را با ارائة یک مکانیزم بیان می‌کنیم. در این مکانیزم، CRL شامل کلید کشف رمز شده می‌باشد که توسط کلید خصوصی جدید CA صادر و امضا شده‌است. اعضای اعتمادکننده این امضا را با بازیابی کلید عمومی CA و محاسبة عدد HASH این کلید معتبر می‌شمارند و آن را با عدد HASH قبلی در گواهی قدیمی CA مقایسه می‌کنند. این مکانیزم نیاز بدان دارد که CA در زمان گواهی کردن زوج کلید فعلی، زوج کلید بعدی را نیز تولید کند.در شرایط کشف رمز 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) امکان‌پذیر می‌شود و هر گواهی‌نامه وابسته به آن را کاملاً ناامن می‌کند.
نمونه‌هایی از تکنیک‌های کلید نامتقارن که برای اهداف متنوعی مورد توجه قرار گرفته‌اند، عبارتند از:
نمونه‌هایی از الگوریتم‌های کلید نامتقارن که به طور گسترده پذیرفته نشده‌اند، عبارتند از:
نمونه‌هایی از الگوریتم‌های کلید نامتقارن که قابل توجه ولی در حال حاضر ناامن هستند، عبارتند از:
نمونه‌هایی از پروتکل‌هایی که از الگوریتم‌های کلید نامتقارن استفاده می‌کنند، عبارتند از:
در طول تاریخچه اولیه رمزنگاری، دو طرف با کلیدی کار می‌کردند که آن را با یک روش ایمن اما غیر رمزنگاری، مانند ملاقات چهره به چهره یا پیک مورد اعتماد، مبادله می‌کردند. این کلید که هر دو طرف آن را کاملاً مخفی نگه داشته بودند، می‌توانست برای تبادل پیام‌های رمزگذاری‌شده استفاده شود. تعدادی از مشکلاتی که به طور قابل توجهی عملی بودند، با این رویکرد در توزیع کلیدها به وجود می‌آمدند.ویلیام استنلی جوونز در کتاب خود، اصول علم، در سال ۱۸۷۴ نوشت:
آیا خواننده می‌تواند بگوید که کدام دو عددی اگر در هم ضرب شوند، عدد ۸۶۱۶۴۶۰۷۹۹ تولید خواهد شد؟ فکر می‌کنم بعید است کسی به جز من هیچ‌گاه این را بداند.
در اینجا او رابطه توابع یک‌طرفه را با رمزنگاری شرح داد و در ادامه، به طور خاص درباره مسئله فاکتور گیری (factorization) که برای ایجاد یک تابع دریچه (trapdoor function) استفاده شده، بحث کرد. در جولای ۱۹۹۶، سلیمان گلومب ریاضیدان گفت: «جوونز یک ویژگی کلیدی الگوریتم RSA را برای رمزنگاری کلید عمومی پیش‌بینی کرد، اگرچه او قطعاً مفهوم رمزنگاری کلید عمومی را اختراع نکرد.»در سال ۱۹۷۰، جیمز الیس، رمزنگار انگلیسی در دفتر مرکزی ارتباطات دولت (GCHQ) انگلستان، احتمال «رمزگذاری غیر مخفی» (که اکنون رمزنگاری کلید عمومی نامیده می‌شود) را متصور شد؛ اما هیچ راهی برای اجرای آن نمی‌دید. در سال ۱۹۷۳، همکارش کلیفورد کاکس، آن‌چه را که به الگوریتم رمزگذاری RSA معروف شده است، پیاده‌سازی کرد که یک روش عملی «رمزگذاری غیر مخفی» را ارائه می‌داد و در سال ۱۹۷۴، ریاضیدان و رمزنگار دیگری در GCHQ، مالکولم ویلیامسون، آن‌چه را که امروزه به عنوان تبادل کلید دیفی-هلمن شناخته شده است، توسعه داد. این طرح همچنین به آژانس امنیت ملی ایالات متحده آمریکا فرستاده شد. با تمرکز نظامی و قدرت محاسباتی کم، قدرت رمزنگاری کلید عمومی در هر دو سازمان غیر قابل تحقق بود:
من این را برای استفاده نظامی بسیار مهم دانستم … اگر شما می‌توانید کلید خود را به سرعت و به صورت الکترونیکی به اشتراک بگذارید، شما مزیت بزرگی نسبت به حریف خود دارید. تنها در پایان تحولات از برنرز-لی که یک معماری اینترنت باز را برای سِرن (CERN) طراحی می‌کرد، توافق و پذیرش آن برای آرپانت … رمزنگاری کلید عمومی متوجه پتانسیل کامل آن بود.
—رالف بنجامین
کشف آن‌ها به مدت ۲۷ سال به طور عمومی اعلام نشده بود، تا اینکه در سال ۱۹۹۷ این تحقیق توسط دولت انگلیس به طور قطعی فاش شد.در سال ۱۹۷۶، یک سیستم رمزنگاری کلید نامتقارن توسط ویتفیلد دیفی و مارتین هلمن منتشر شد که تحت تأثیر کار رالف مرکل روی توزیع کلید عمومی، روشی از توافق کلید عمومی را افشا کردند. این روش تبادل کلید که از به توان رساندن (exponentiation) در یک میدان محدود استفاده می‌کند، به عنوان تبادل کلید دیفی-هلمن شناخته شد. این اولین روش عملی منتشرشده برای ایجاد کلید مخفی مشترک بر روی یک کانال ارتباطی معتبر (اما نه محرمانه) بدون استفاده از یک راز مشترک قبلی بود. «تکنیک توافق‌نامه کلید عمومی» مرکل با عنوان معماهای مرکل شناخته شد و در سال ۱۹۷۴ اختراع و در سال ۱۹۷۸ منتشر شد.
در سال ۱۹۷۷ کلیاتی از طرح کاکس به طور مستقل توسط ران ریوست، ادی شمیر و لئونارد آدلمن در MIT اختراع شد. نویسندگانِ آخر کار خود را در سال ۱۹۷۸ منتشر کردند و این الگوریتم از ابتدای کارشان به RSA معروف شد. RSA برای رمزگذاری و رمزگشایی از مدول به توان رساندن حاصل‌ضرب دو عدد اول بسیار بزرگ استفاده می‌کند که هم رمزگذاری کلید عمومی و هم امضای دیجیتال کلید عمومی را انجام می‌دهد. امنیت آن دشواری شدیدی در زمینه فاکتورسازی اعداد صحیح بزرگ دارد؛ مشکلی که هیچ تکنیک عمومی کارآمد شناخته‌شده‌ای برای حل آن وجود ندارد. توضیحی از این الگوریتم در ستون بازی‌های ریاضی در انتشار آگوست ۱۹۷۷ نشریه Scientific American منتشر شد.
از دهه ۱۹۷۰ تعداد و تنوع زیادی از رمزگذاری، امضای دیجیتال، توافق‌نامه کلید و سایر تکنیک‌ها در زمینه رمزنگاری کلید عمومی توسعه یافته‌اند؛ از جمله سیستم رمزنگاری Rabin، رمزگذاری ElGamal, DSA و رمزنگاری منحنی بیضوی.
صفحه رمزنگاری کلید عمومی در ویکی‌پدیای انگلیسی