سیستم رمزنگاری کلید عمومی RSA¹ یکی از قدیمیترین و جذابترینهاست، و در این مطلب میخوایم تاریخچه، کاربرد، و اهمیتش در امنیت اطلاعات رو با هم مرور کنیم. با معرفی RSA در ۱۹۷۷، دنیای رمزنگاری وارد عصر جدیدی شد. خیلی از ما، ازجمله من، چهار دهه بعد از خلقش باهاش آشنا میشیم.
بهطورکلی، دو نوع رمزنگاری داریم: متقارن² و نامتقارن³. در رمزنگاری متقارن، از یک کلید هم برای رمزنگاری و هم برای رمزگشایی استفاده میشه، به این معنا که فرستنده و گیرنده هر دو به یک کلید مشترک دسترسی دارن، و این، در بعضی موارد استفاده، میتونه ضعف محسوب بشه.
رمزنگاری نامتقارن فرآیند پیچیدهتری داره: دو کلید دارید، یکی عمومی و دیگری خصوصی.
در این روش، شما با استفاده از کلید عمومی خودتون چیزی رو رمزنگاری میکنید، و اون پیام یا داده تنها با کلید خصوصی مرتبط قابلرمزگشاییه. درحالیکه این دو کلید یکی نیستن و با هم فرق دارن، از طریق ریاضی به هم مرتبطن.
رمزنگاری نامتقارن (یا رمزنگاری کلید عمومی) امنیت بسیار خوبی رو ارائه میده، ازاینجهت که رسیدن به رابطهٔ بین دو کلید و پیداکردن کلید خصوصی دشواره—به لطف تابع یکطرفهای که جلوتر بهش خواهیم پرداخت. از طرفی، رمزنگاری نامتقارن روش کندتری در مقایسه با رمزنگاری متقارن بهحساب میاد.
وقتی راجع به رمزنگاری متقارن صحبت میکنیم، طول کلید در ارائهٔ امنیت بیشتر مهم و تأثیرگذاره، اما تنها فاکتور نیست. کلیدها در این نوع رمزنگاری—متشکل از رشتهای از حروف و اعداد—بهطورمعمول ۱۲۸، ۱۹۲، و ۲۵۶ بیتیان. ویدئوهای بالا رو برای آشنایی بیشتر با تفاوت امنیت کلیدها ببینید.
طول کلیدها در رمزنگاری کلید عمومی بسیار بلندتره (۲۰۴۸ بیت به بالا)، اما روش سنجش امنیتش از رمزنگاری متقارن متفاوته. برای مثال، یک کلید عمومی ۳۰۷۲ بیتی از نظر امنیت کموبیش با یک کلید ۱۲۸ بیتی AES برابره. درموردش بخونید. (کلیدواژهها: طول کلید⁵، سطح امنیت⁶)
دو نمونه از سیستمهای رمزنگاری نامتقارن RSA و ECC⁷ هستن. اولی موضوع صحبت ماست، و دومی سیستمیه که در بیتکوین بهکار رفته و کلیدهای عمومی و خصوصی افراد بر پایهش ساخته میشن.
سیستم RSA اسم خودش رو از نام خانوادگی سه شخصی گرفته که در اختراعش نقش داشتهن: ریوست، شامیر، و آدلمن.
سال ۱۹۷۶، ویتفیلد دیفی و مارتین هلمن ایدهٔ رمزنگاری نامتقارن رو مطرح کردن—ایدهای نو و انقلابی—اما راهحل عملیای براش ارائه ندادن.
ریوست، شامیر، و آدلمن هر سه در دانشگاه امآیتی تدریس میکردن، و ارتباط نزدیکی با هم داشتن. روزی یکی از شاگردهای ریوست مقالهٔ دیفی–هلمن رو به او نشون میده و میگه، «ممکنه برات جالب باشه»، و واقعاً هم بود. ریوست و شامیر، که در حوزهٔ کامپیوتر فعالیت داشتن، تصمیم میگیرن روی این مسئله کار کنن.
این دو ماهها تلاش میکنن تابع یکطرفهای رو پیدا کنن که محاسبهش از یک سمت سریع اما از سمت دیگه بسیار سخت باشه، و درعینحال ضعف امنیتیای نداشته باشه که برگشتپذیریاش رو ساده کنه. آدلمن، که ریاضیدان بود، مسئولیت این رو داشت که توابع پیشنهادی رو بشکنه و نقاط ضعفشون رو پیدا کنه.
شبی در آوریل ۱۹۷۷، این سه توسط یکی از دانشجوها به مهمونی پِسَح دعوت میشن. بعد از برگشتن به خونههاشون، ریوست، که خوابش نمیبرد، شروع میکنه به کار روی مسئله و بالاخره تابع یکطرفه رو پیدا میکنه. به آدلمن زنگ میزنه، یافتهش رو مطرحش میکنه، و آدلمن همونجا بهش تبریک میگه. ریوست تمام شب رو بیدار میمونه و تا صبح مقالهش رو مینویسه.
داستان انتخاب اسم RSA هم یکی از اون چیزهاییه که شانسی اما فوقالعاده اتفاق میافته. ریوست ابتدا قصد داشت نویسندههای مقاله رو بهترتیب معمول «آدلمن، ریوست، شامیر» بنویسه، اما آدلمن، که حس میکرد بیشتر کار رو اونها انجام دادهن، موافق نبود اسمش لحاظ بشه. درنهایت، بعد از کلی صحبت و فکر، قبول میکنه اما میگه اسم من رو آخر بذارید، و اینطوری RSA خلق میشه.
ریوست، شامیر، و آدلمن سال ۲۰۰۲ جایزهٔ تورینگ—بالاترین جایزه در حوزهٔ کامپیوتر و بهنوعی نوبل علوم کامپیوتر—رو بهخاطر عملیساختن رمزنگاری کلید عمومی بردن.
در این عکس معروف یک شوخی بامزه روی تخته هست، که ریوست میگه احتمالاً من نوشتهم. (درمورد مسئلهٔ برابری پی و انپی بخونید.) اگه علاقهمندید با ریوست و کارهاش آشنا بشید، تاریخ شفاهی رونالد ریوست رو ببینید. بهطبع، مصاحبهٔ کامل آدلمن با ACM⁸ رو هم پیشنهاد میکنم.
اما RSA دقیقاً چطوری کار میکنه؟
با RSA، شما یه کلید عمومی و یه کلید خصوصی دارید. کلید عمومی رو میتونید دراختیار همه قرار بدید. میتونید اون رو در سایت شخصی خودتون بذارید، در امضای ایمیل، در بایوی توئیتر، یا روی کارت ویزیت. هرچیزی که با کلید عمومی شما رمزنگاری بشه، تنها با کلید خصوصی شما قابلرمزگشاییه.
افراد میتونن از کلید عمومی شما برای ارسال پیامی محرمانه استفاده کنن، و اون شخص و شما میتونید مطمئن باشید کسی جز شما—دارندهٔ کلید خصوصی مرتبط با اون کلید عمومی—قادر به خوندن پیام نیست.
به مثال بالا توجه کنید. باب میخواد پیامی رو برای آلیس ارسال کنه اما نمیخواد کسی جز آلیس از محتوای پیام باخبر بشه. پیام خودش رو با کلید عمومی آلیس رمزنگاری میکنه. باب پیام رمزنگاریشده رو برای آلیس ارسال و آلیس با داشتن کلید خصوصی خودش میتونه اون رمزگشایی کنه و بخونه.
رمزنگاری کلید عمومی همچنین امکان اصالتسنجی/احراز هویت⁹ رو به ما میده، و این در بعضی شرایط میتونه حیاتی باشه، مثل زمانی که میخواید هویت شخصی ناشناس رو احراز کنید.
شخص پیامی رو با کلید خصوصیاش امضا میکنه، و شما با داشتن کلید عمومیاش قادر به احرازش هستید. در اینجا کمی وارد موضوع PGP میشیم—که در مقالهای مجزا اینجا بهش پرداخته شده—اما قبل از اینکه من و ناداو ایوگی، از توسعهدهندههای قدیمی حوزهٔ بیتکوین، شروع به همکاری کنیم، نیاز بود هویت هم رو احراز کنیم. بهترین اقدام این بود که پیامی رو با مشخصات من و موضوع صحبتمون در اون لحظه امضا و ارسال کنه و من احراز کنم.
در اینجا، ناداو پیام رو امضا و برای من ارسال کرد، و من با واردکردن¹⁰ کلید عمومیاش و صحتسنجی این پیام موفق به احراز هویتش برای خودم شدم.
بهتر میبود اگه زمان رو هم لحاظ میکرد، به ساعت هماهنگ جهانی (UTC).
اصالتسنجی فایلها، بهویژه در دنیای نرمافزار آزاد، بسیار مهمه. شما میخواید که مطمئن باشید نرمافزاری رو که دریافت میکنید صحیحه. اگه نرمافزار بیتکوین یا کیف پولی رو دانلود میکنید، مهمه که اصالتش رو قبل از استفاده احراز کنید، و این با مفهوم کلید عمومی و امضای دیجیتال ممکنه.
نکته: کلیدهای عمومی بهطورمعمول بسیار بلندن، و این، کار رو برای انتقال و واردکردنشون سخت میکنه. ازاینرو، از اثرانگشت کلید عمومی استفاده میکنیم. ما میتونیم کلید عمومی خودمون رو با تابع رمزنگارانه خاصی هش کنیم و به اثرانگشت برسیم، که بسیار کوتاهتره. توجه کنید که همهٔ اینها، از تولید کلید عمومی و خصوصی گرفته تا ساختن اثرانگشت، در محیط نرمافزار اتفاق میافته. جلوتر به این نرمافزارها اشاره میکنم.
ممکنه اثرانگشت PGP بعضی رو در وبسایت یا پروفایل توئیترشون باشید. شما با داشتن این اثرانگشت میتونید به کلید عمومیشون برسید.
یکی از رایجترین نرمافزارها GNU Privacy Guard یا GPG است. اگه کاربر ویندوز هستید، از Gpg4win استفاده کنید. لینکهای دانلود برحسب سیستم عامل در سایت رسمی GnuPG قرار داده شدن.
جهت آشنایی بیشتر با PGP مقالهٔ «تاریخچه و راهنمای جامع نرمافزار رمزنگاری PGP» رو مطالعه کنید.
ریاضی پشت کلید عمومی RSA بسیار جذابه اگه علاقهمند و کنجکاو به دونستنش هستید. توضیحش در قالب این مطلب کمی سخته، اما ویدئویی رو پیشنهاد میکنم که قدمبهقدم توضیح میده، و حتی اگه فکر میکنید در ریاضی قوی نیستید، میتونید نحوهٔ کارش رو درک کنید.
از دید من، RSA، در کنار نوآوریهای دیگهای مثل پروتکل تبادل کلید دیفی–هلمن، چهرهٔ رمزنگاری و ارتباطات رو برای همیشه تغییر داد. به لطف این افراد و تلاشهاشون، ما امروز فضای اینترنت و ارتباطات امنتری داریم. شما اینطور فکر نمیکنید؟
نسخهٔ پیدیاف این مطلب موجوده. از اینجا دانلود کنید.
۱. آراسای؛ مخفف Rivest–Shamir–Adleman
۲. Symmetric
۳. Asymmetric
۴. استاندارد رمزنگاری پیشرفته
۵. Key size
۶. Security level
۷. رمزنگاری منحنی بیضوی
۸. مخفف Association for Computing Machinery؛ انجمن اعطاکنندهٔ جایزهٔ تورینگ
۹. Authentication
۱۰. Import