کلید عمومی چیه؟

public key یا کلید عمومی در رمزنگاری نامتقارن کلیدی هست که باهاش میشه یه پیامی رو رمزنگاری کرد به طوری که فقط صاحب اون کلید بتونه رمزش رو باز کنه. کلید عمومی مثل یک صندوقه که می‌تونید خیلی راحت به هر کسی (حتا یه هکر) بدید تا توش براتون یه چیزی بزاره و وقتی درش رو بست هیچ‌کسی بجز شما نتونه اونو باز کنه. کلید عمومی همیشه در کنار یک کلید خصوصی هست که حکم کلید اون صندوق رو داره. طبیعتاً کلید عمومی رو میشه با خیال راحت به همه داد مادامی که کلید خصوصی متناظر باهاش مخفی و امن باقی بمونه.

کلید عمومی چه کاربردهایی داره؟

در اکثر مواقع کاربرد زوج کلید به این صورته که شما کلید عمومی رو به دوستتون میدید، اون هم پیام مخفیش رو با اون کلید رمز می‌کنه و به شما بر می‌گردونه و شما هم با کلید خصوصیتون رمزگشایی رو انجام می‌دید و پیام دوستتون رو می‌خونید. اما این زوج کلید به شکل دیگه‌ای هم میتونن استفاده شن. فرض کنید شما یک پیام رو می‌خواید به دوستاتون بفرستید (لزومی نداره این پیام حتما یک پیام سری باشه) و قراره یک مکانیزمی تعبیه کنید که بقیه بتونن متوجه شن که این پیام رو ۱. قطعا خودتون نوشتید و ۲. متن پیام هم در مسیر تغییر نکرده. اینجا میشه پیامتون رو با کلید خصوصی رمز کنید و متن پیام رو به همراه کلید عمومی و متن رمز شده به مخاطب‌ها بفرستید. اون‌ها هم میتونن متن رمز شده رو با کلید عمومیتون رمزگشایی کنن و با متن عادی (plain text) پیامتون مقایسه کنن. اینطوری به هر دو تا هدف رسیدین. به این کار «امضا‌ی دیجیتال» پیام میگن.

 با این وصف احتمالا حدس زدید که این زوج کلید کاندیدای خوبی برای احراز هویت هستند. این امکان وجود داره که برای ssh کردن به یک سرور بجای وارد کردن username و password، کلید عمومیتون رو به سرور بدید و هر وقت که می‌خواید به سرور وصل شید از کلید عمومی برای احراز هویتتون استفاده شه. روند کار به طور ساده شده به این شکله که:

  1. سرور یک عبارت رندوم تولید می‌کنه و با کلید عمومی شما رمزش می‌کنه و براتون میفرسته
  2. شما اون عبارت رو با کلید خصوصیتون رمز گشایی می‌کنید و برای سرور می‌فرستید
  3. سرور عبارتی که شما براش فرستادید رو با عبارتی که تولید کرده بود مقایسه می‌کنه. اگر با هم یکسان بودن به شما دسترسی میده

و تمام این مراحل به طور خودکار بدون اینکه لازم باشه پسوردی تایپ کنید انجام میشه :-) خیلی خوبه نه؟

من‌هم کلید عمومی دارم؟ چطوری بسازم؟

زوج کلید شما معمولا توی آدرس زیر ذخیره شدن:

فایل id_rsa کلید خصوصی و فایل id_rsa.pub حاوی کلید عمومی‌تون هست. اگر این فایل‌ها یا این فولدر وجود ندارند می‌تونید برای خودتون یک جفت کلید با دستور زیر بسازید:

این دستور ازتون می‌پرسه که کلید‌ها رو توی چه فولدری ذخیره کنه و اینکه آیا می‌خواید روی کلیدها رمز هم قرار بدید یا نه. می‌تونید بدون جواب دادن به سوالاتش enter بزنید تا از مقادیر دیفالت استفاده شه. بعد از ساخت کلید باید کلید خصوصیتون رو به ssh معرفی کنید:

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

Github

وارد حسابتون بشید، روی عکس پروفایلتون کلیک کنید و وارد settings بشید و بعد وارد بخش ssh keys بشید. دکمه‌ی Add SSH Key رو بزنید. در کادر Title یک اسم برای کلیدتون وارد کنید. مثلا «کلید عمومی مک بوک ایر» این اسم بعدا به این درد می‌خوره که اگر مثلا لپ تاپتون رو دزدیدن بدونید کدوم کلید عمومی مربوط به اون لپ تاپه که بتونید حذفش کنید. در کادر key هم محتویات فایل کلید عمومی رو کپی و پیست کنید.

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

Bitbucket

خیلی شبیه به github هست؛ بعد از اینکه وارد حسابتون شدید، روی عکس پروفایلتون کلیک کنید و وارد settings بشید و بعد وارد بخش ssh keys بشید. دکمه‌ی Add Key رو بزنید. توضیحات Label و Key مشابه توضیحات Title و Key در گیتهاب است.

Gitlab

بعد از وارد شدن به حساب کاربریتون وارد بخش Profile Settings و بعد از اون SSH Keys بشید. ادامه‌ی توضیحات کاملا مشابه Github است.

امیدوارم این مطلب به دردتون خورده باشه. :-)