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

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

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

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

رمزنگاری کلید عمومی جهت رمز کردن یک پیام

١- گیرنده پیام رمزی (باب)، با اجرای الگوریتم تولید کلید، اقدام به تولید یک جفت کلید عمومی و خصوصی می کند. کلیدهای عمومی و خصوصی به نام زوج کلیدهای عمومی و خصوصی نیز نامیده شده و با ریاضیات مرتبط اند. هر پروتکل کلید عمومی، الگوریتم تولید کلید مخصوص خود را دار است.

۲- گیرنده (باب) کلید عمومی خود را به فرستنده (آلیس) ارسال می کند. اما کلید خصوصی را نزد خود بطور خصوصی نگه می دارد. پس از دریافت کلید عمومی باب توسط آليس، آلیس شروع به رمز کردن پیام با استفاده از کلید عمومی باب می کند.

٣- نتیجه، یک پیام رمز شده (متن رمزی) است. این پیام رمزگذاری شده پس از آن در یک کانال ناامن به باب فرستاده می شود.

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

۵- باب در نهایت، پیام اصلی را به دست می آورد.

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

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

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

شکل 2. حمله مرد در میان

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

  • باب و آلیس می توانند کلیدهای عمومی خود را با استفاده از کانالی متفاوت و امن مبادله کنند. مشکل آن است که این روش، مشابه مسئله قبلی؛ یعنی مشکل توزیع کلید است که رمزنگاری کلید عمومی سعی دارد آن را حل کند. با این حال مشکل توزیع کلید عمومی تا حدودی راحت تر از مشکل توزیع کلید متقارن است؛ چرا که برای توزیع یک کلید عمومی تنها احراز هویت مورد نیاز است. در حالی که برای توزیع امن یک کلید متقارن، هر دوی تصدیق هویت و حفظ حریم خصوصی مورد نیاز است.
  • وبی از اعتماد (web of trust)
    در وبی از اعتماد، کاربران با استفاده از رمز گذاری، کلیدهای عمومی کاربران دیگر را که به آنها اعتماد دارند، شناخته و سپس امضا می کنند. برای مثال، این کار می تواند در قرار ملاقاتی رو در رو اتفاق بیفتد. هر کاربر یک جاکلیدی را که مجموعه ای از کلیدهای عمومی کاربران مورد اعتماد دیگر است، نگه می دارد. کاربر با استفاده از رمزگذاری کلیدهای عمومی، کاربران دیگر را که او آنها را می شناسد (یعنی کلیدهای عمومی که در جاکلیدی او هستند) امضا می کند. اگر کاربر بخواهد اقدام به برقراری ارتباط با کسی بکند که کلید عمومی او را نمی شناسد، می تواند از هر یک از دوستان مورد اعتماد خود بخواهد به او یک کلید عمومی امضا شده از کاربری که او مایل به برقراری ارتباط با اوست، ارسال کنند.
  • زیرساخت کلید عمومی
    زیرساخت کلید عمومی فرض می کند مرجعی مرکزی به نام مرجع ارایه گواهی وجود دارد. همه شرکت کنندگان یک کپی از کلید عمومی مرجع ارایه گواهی را داشته و به مرجع ارایه گواهی اعتماد دارند. هر کاربر یک جفت کلید عمومی و خصوصی را ایجاد کرده و کلید عمومی را به مرجع ارایه گواهی ارائه می کند. مرجع ارایه گواهی هویت کاربر را تأیید نموده و سپس کلید عمومی وی را امضا می کند. هنگامی که آليس قصد برقراری ارتباط با باب را دارد، او گواهی خود را که شامل کلید عمومی او و امضای مرجع ارایه گواهی برای آن کلید عمومی است، به او می فرستد. باب سپس کلید عمومی آلیس را به منظور حصول اطمینان از درستی و اعتبار امضا مرجع ارایه گواهی، بررسی می کند.

لایه سوکت های امن و امنیت لایه نقل و انتقال

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

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

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

منبع: کتاب راهنمای بیت کوین نوشته پدرو فرانکو