آشنایی با کلیدهای GPG در لینوکس

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


Cryptosystem  مدلی شامل مجموعه‌ای از الگوریتم‌های رمزنگاری است که توانایی انجام تبدیل دو طرفه را به منظور حفظ محرمانه بودن، یکپارچگی و در دسترس بودن داده‌ها دارد. بیایید یکی از استانداردهای سیستم رمزنگاری OpenPGP را در نظر بگیریم!


PGP برای چیست؟

PGP یا Pretty Good Privacy یک پیاده سازی نرم افزاری از سیستم رمزنگاری OpenPGP که شامل مجموعه‌ای از الگوریتم‌های رمزنگاری است. تحت یک مجوز تجاری توزیع شده و برای خرید در دسترس است، جایگزین رایگان GPG  یا GNU Privacy Guard است! بر اساس همان سیستم رمزنگاری ، برای نصب بسته‌ها دستورات را می‌نویسیم:


apt update && apt upgrade -y 
apt install gnupg -y

برای آشنایی با سینتکس دستور را می‌نویسیم:


gpg -h

همانطور که می‌بینید، لیست گزینه‌ها بسیار گسترده است. بنابراین، بیایید بر روی گزینه‌ها و عملکردهای اصلی دستور تمرکز کنیم که ممکن است در طول انجام اقدامات اساسی مورد نیاز باشد.

ایجاد کلیدهای gpg

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

در GPG (GNU Privacy Guard)، هر کلید می‌تواند چندین مولفه داشته باشد که عملکرد آن را مشخص می‌کند. این مولفه‌ها در داخل پرانتز در خروجی دستور gpg --list-keys یا gpg --list-secret-keys نمایش داده می‌شوند.

اما از ابتدا هیچ کلیدی نخواهیم دید، چون پایگاه داده خالی است، بیایید کلید ایجاد کنیم! دو راه برای رمزگذاری اطلاعات وجود دارد: استفاده از الگوریتم‌های متقارن و نامتقارن که جفت کلیدهای مختلفی ایجاد می‌کنند! برای ایجاد کلیدها با استفاده از الگوریتم نامتقارن، باید این دستور را بنویسید:


gpg --full-generate-key --expert

ایجاد کلیدهای gpg

این ترکیب از گزینه‌های --full-generate-key --expert لیست کامل تنظیمات را هنگام ایجاد یک کلید باز می‌کند. تصویر، الگوریتم‌های رمزگذاری و امضای الکترونیکی را نشان می‌دهد، یکی را انتخاب کنید که متناسب با نیاز شما باشد.

لطفا توجه داشته باشید که گزینه های 3،4 و 10 فقط برای امضای دیجیتال هستند! توجه داشته باشید که شما یک جفت الگوریتم را انتخاب می‌کنید که الگوریتم اول برای رمزگذاری و دومی برای امضا است.

بیایید یک مجموعه پیش فرض از کلیدهای RSA را انتخاب کنیم و به پیکربندی آنها ادامه دهیم:

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


برای شناسایی کلید، باید پارامترهای لیست شده را برای کاربر مشخص کنید. اگر برای کاربر کلیدی ایجاد می‌کنید تا بتواند پیام های رمزگذاری شده را برای او بخواند، جزئیات او را مشخص کنید. سپس باید پیکربندی کلیدی را که ایجاد می‌کنید تایید یا تغییراتی در آن ایجاد کنید. برای ادامه O را انتخاب کنید.


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

برای ایجاد گواهی ابطال خود، از دستور زیر استفاده کنید:

gpg --gen-revoke (key_id) revcert.asc

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

  • pub - به معنای کلید عمومی است و برای امضا استفاده می‌شود.
  • sub - به معنای زیر کلید عمومی است و برای رمزگذاری استفاده می‌شود.
  • sec - به معنای یک کلید مخفی است و برای امضا استفاده می‌شود.
  • ssb - به معنای زیر کلید مخفی است و برای رمزگذاری استفاده می‌شود.

و همچنین در کنار آنها می‌توانیم الگوریتم رمزگذاری rsa2048، hash key A8، EDB9، creation date 2024-03-01 01 و همچنین پارامترهایی برای استفاده از آنها را مشاهده کنیم:

  • S (Signing): این جزء کلید اجازه می‌دهد تا از آن برای ایجاد امضای الکترونیکی استفاده شود. امضای الکترونیکی را می‌توان به پیامی پیوست کرد تا نویسندگی و صحت آن را تایید کند.
  • C (Certification - Key Signature): این جزء نشان می‌دهد که می‌توان از یک کلید برای امضای کلیدهای دیگر استفاده کرد. هنگامی که کاربر به کلید کاربر دیگر اعتماد می‌کند، از این در فرآیند ساخت شبکه اعتماد استفاده می‌شود.
  • E (Encryption): این مولفه اجازه می‌دهد تا از کلید برای رمزگذاری پیام‌ها برای گیرنده استفاده شود. برای اطمینان از محرمانه بودن پیام‌ها استفاده می‌شود.
  • A (Authentication): از این کامپوننت می‌توان برای احراز هویت کاربر استفاده کرد. معمولا در پروتکل‌های دیگر مانند SSH (Secure Shell) برای احراز هویت کاربر استفاده می‌شود.

هنگامی که ما در مورد metadata کلیدی و هدف آن تصمیم گرفتیم، اجازه دهید به رمزگذاری و انتقال یا ذخیره ایمن داده ها بپردازیم!

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

رمزگذاری GPG

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

gpg -k

برای مشاهده شناسه مالک کلید، در مورد ما Koldek خواهد بود که در ادامه مشخص خواهیم کرد:


gpg -r (key_id) -a -e target.txt > target.txt.asc

در این حالت، کلیدی را که برای رمزگذاری پیام استفاده خواهیم کرد، مشخص می کنیم، پارامتر -a به جای GPG باینری، متن رمز را در ASCII رمزگذاری می کند و امکان انتقال از طریق بسیاری از وسایل ارتباطی را فراهم می‌کند! پارامتر -e رمزگذاری با الگوریتم نامتقارن را نشان می دهد و خروجی STDOUT استاندارد توسط توصیفگر فایل به target.txt.asc هدایت می شود. بر این اساس، پیام رمزگذاری شده به همراه ابرداده آن در این فایل ذخیره می شود.

چگونه کلید gpg را مشاهده کنیم؟ دستور cat محتویات فایل target.txt.asc را نمایش می‌دهد و به ما امکان می‌دهد پیام رمزگذاری شده را مشاهده کنیم! اکنون باید متن رمز و کلید عمومی را به گیرنده ارسال کنیم. اگر پیام رمزگذاری شده می تواند به هر روشی مناسب منتقل شود، کلید باید به صورت عمومی ارسال شود و باید مورد اعتماد کاربران یا گیرنده باشد. یا از طریق شخص ثالث - یک مرکز صدور گواهینامه، یا از خود شرکت، کلید موجود در سایت و امید به اتصال TLS... صادرات کلید و رمزگشایی gpg


اکسپورت کلید و رمزگشایی gpg

اکسپورت کلید:

gpg -r  (key-id) -a --export > key.asc

کلید را وارد کنید و با استفاده از دستورات، متن رمز را در دستگاه کاربر رمزگشایی کنید:


gpg --import key.asc
gpg -r Kolded -d target.txt.asc

در نهایت باید متن رمزگشایی شده را ببینیم:

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

پیکربندی gpg

برای اینکه گیرنده ما هنگام رهگیری متادیتای پیام آسیب نبیند، در تنظیمات ممنوعیت اضافه کردن نظرات از UID و حذف کلید هش را مشخص می کنیم:


echo "keyid-format 0xlong
throw-keyids
no-emit-version
no-comments" > ~/.gnupg/gpg.conf

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

PGP (Pretty Good Privacy) برنامه و کتابخانه‌ای از توابع است که رمزگذاری و امضای دیجیتال ایمیل، فایل‌ها، دیسک‌ها و سایر داده‌ها را فراهم می‌کند. PGP از الگوریتم‌های رمزگذاری متقارن و نامتقارن استفاده می‌کند که از محرمانه بودن و یکپارچگی اطلاعات اطمینان می‌دهد. برای محافظت از اطلاعات حساس، احراز هویت کاربران و اطمینان از شکست ناپذیری استفاده می‌شود. PGP یک ابزار ضروری امنیت اطلاعات است که در دسترس همه سطوح کاربران است.