رمز‌گذاری با استفاده از GnuPGP مبتنی بر PGP

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

الگوریتم‌های متقارن و نامتقارن
الگوریتم‌های رمز‌گذاری به دو قسمت تقسیم می‌شوند؛ یکی به صورت متقارن (Symmetric) و دیگری به صورت نامتقارن (Asymmetric). الگوریتم متقارن با استفاده از یک کلید رمز‌گذاری می‌شود و با استفاده از همان کلید رمزگشایی (Decryption) می‌شود. درصورتی که شخصی بخواهد فایلی یا متنی را رمز‌گذاری کند این عمل با استفاده از آن کلید انجام‌پذیر است و در صورتی که شخص دیگری بخواهد آن را رمزگشایی کند باید آن کلیدی که با آن رمز‌گذاری شده را داشته باشد. پس ما در الگوریتم متقارن تنها یک کلید اصلی داریم که این کلید باید به هر نحوی که شده به صورت امن منتقل شود. انتقال این کلید کار آسانی نیست چون ممکن است دست کسی دیگر بیفتد. پس نگهداری و انتقال آن کار دشواری است.
در الگوریتم دوم یعنی الگوریتم نامتقارن کلید‌ها فرق می‌کنند. در این نوع الگوریتم ما یک جفت کلید داریم که به آن‌ها کلید خصوصی (Private Key) و کلید عمومی (Public Key) می‌گویند. به این صورت که با کلید عمومی فایل را رمز‌گذاری و با کلید خصوصی فایل رمز شده را رمزگشایی می‌کنیم. همچنین می‌توان با کلید خصوصی یک پیام یا یک فایل را به اصطلاح امضا یا Sign کرد که با کلید عمومی می‌توان صحت ارسال‌‌کننده پیام یا فایل را بررسی کرد. با این روش، به‌راحتی می‌توان پی‌برد که شخص ارسال‌‌کننده، خود شخصی است که به آن اطمینان داریم یا خیر. ما به‌راحتی کلید عمومی خودمان را می‌توانیم برای همه به اشتراک بگذاریم. پس نگران امنیت فایل‌های رمزشده‌مان نیستیم چون با کلید عمومی تنها می‌توان فایل‌ها و پیام‌ها را رمز‌گذاری کرد. اما در مورد کلید خصوصی چنین نیست چون همه فایل‌های رمز شده ما تنها و تنها با کلید خصوصی رمزگشایی می‌شود. الگوریتم نامتقارن سرعت کمتری نسبت به الگوریتم متقارن دارد و راه‌اندازی آن به‌مراتب سخت‌تر از الگوریتم متقارن است اما دیگر مشکل انتقال کلید نداریم چون کلید اصلی همیشه در دست ماست.
این الگوریتم‌ها در پروتکل‌ها و سرویس‌های مختلفی در حال استفاده هستند. برای مثال الگوریتم‌های AES, DES, Twofish, Blowfish از نوع الگوریتم متقارن و همچنین الگوریتم‌های RSA, Diffie-Hellman, DSA از نوع الگوریتم نامتقارن‌اند. ادغام این دو الگوریتم را می‌توان در پروتکل HTTPS دید که با کلید عمومی سرور مقابل کلید متقارن را منتقل می‌کنیم که امنیت بالایی دارد. نمونه‌ای از یک کلید عمومی را در عکس مشاهده کنید.


GPG با استفاده از PGP
PGP که مخفف Pretty Good Privacy است، روشی است که می‌توان به کمک آن با استفاده از الگوریتم نامتقارن رمز‌گذاری و رمزگشایی کرد. به دلیل قدرتمند بودن PGP افراد مختلف خواهان این بودند که بر اساس این تکنیک برنامه‌های امنیتی خودشان را بنویسند که یکی از این برنامه‌ها که به صورت متن‌باز است و تقریبا در تمامی توزیع‌های گنو/لینوکس وجود دارد
GNU Privacy Guard یا GnuPGP یا به اختصار GPG است. GPG به خودی خود دارای محیط کاری متنی یا دستوری است ولی رابط‌های کاربری مختلفی برای آن نوشته شده است. برای مثال درگنو/لینوکس Seahorse برای محیط کاربری گنوم و KGPG برای محیط کاربری KDE تعبیه شده است. با یک جستجوی ساده نیز می‌توان تعداد زیادی از چنین برنامه‌ها و افرونه‌هایی را برای سیستم‌عامل‌های مختلف حتی اندروید هم پیدا کرد.

GPG در محیط متنی گنو/لینوکس
برای استفاده از GPG نیازی به نصب بسته نرم‌افزاری ندارید، چون این بسته به صورت پیش‌فرض در اکثر توزیع‌ها نصب شده است ولی در صورت فقدان آن، می‌توانید با دستورات زیر بسته مربوطه را نصب کنید.
برای توزیع‌های مبتنی بر دبیان:
$ sudo apt-get install gpgv
و در توزیع‌های مبتنی بر RPM:
$ sudo yum install gpgv
توجه داشته باشید که در اوبونتو با استفاده از برنامه Passwords and Keys که به صورت پیش‌فرض نصب است، می‌توانید به صورت گرافیکی جفت کلید ایجاد نمایید.

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

$ gpg --gen-key

بعد از وارد کردن این دستور به شما چهار گزینه برای انتخاب الگوریتم کلید نمایش داده خواهد شد. گزینه اول به‌صورت پیش فرض RSA است. در قسمت بعد از شما پرسیده خواهد شد که اندازه کلید شما چند بیتی باشد. معمولا ۲۰۴۸ استفاده می‌شود ولی برای بالابردن امنیت برای کارهای فوق سری از کلید‌های بالاتر یعنی ۴۰۹۶ بیتی استفاده می‌شود. در قسمت بعدی از شما برای مدت زمان اعتبار کلیدتان سوال خواهد شد. یعنی کلیدی که می‌سازید بعد از مدت زمان مشخصی اعتبارش را از دست می‌دهد. اگر صفر را انتخاب کنید یعنی اعتبار آن برای همیشه باقی بماند و تاریخ انقضا نداشته باشد. در مرحله بعد از شما اطلاعاتتان را می‌خواهد؛ اسم واقعی شما، ایمیل و توضیحی کوتاه برای کلیدتان. و در مرحله آخر از شما گذرواژه‌ای را جهت امن نگاه داشتن کلید خصوصی‌تان سوال می‌کند که در صورت فراموش کردن آن باید با تمام فایل‌های رمز شده‌تان خداحافظی کنید.
بعد از انجام تمام مراحل بالا کلیدهای شما ساخته خواهند شد و با دستور زیر می‌توانید کلید عمومی را استخراج کنید و آزادانه به اشتراک بگذارید.

$ gpg --armor --output publickey.asc --export ‘NAME’

به جای NAME نامی را وارد کنید که در مرحله قبل برای نامتان انتخاب کردید.
برای ساختن کلید جدید می‌توانید از ابتدا مراحل را دوباره انجام ‌دهید.
برای فهرست کردن تمام کلیدهای عمومی موجود در سیستم از دستور زیر استفاده کنید:

$ gpg --list-keys

برای فهرست کردن تمام کلیدهای خصوصی موجود در سیستم از دستور زیر استفاده کنید:

$ gpg --list-secret-keys

اگر کلید دیگری در اختیار دارید و می‌خواهید آن را وارد سیستم کنید از دستور زیر استفاده کنید:

$ gpg --import [PUBLIC KEY]

و اگر دیگر نیاز به کلیدی ندارید می‌توانید آن را پاک کنید:

$ gpg --delete-key ‘NAME’

اکنون اگر بخواهید با کلید عمومی‌ای که در اختیار دارید فایلی را رمز‌گذاری کنید می‌توانید از دستور زیر استفاده کنید:

$ gpg --encrypt --recipient ‘NAME’ [FILE]

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

$ gpg --output [OUTPUT NAME] --decrypt [FILE]

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

$ gpg --export-secret-key -a

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

$ gpg -h

GPG با استفاده از محیط کاربری Seahorse
همان طور که قبلا اشاره شد تمام سیستم‌عامل‌ها و محیط‌های کاربری، برنامه‌های متعددی برای PGP دارند. ظاهر و محیط آن‌ها با هم فرق می‌کند ولی همه یک کار را انجام می‌دهند.
اگر محیط کاربری توزیع گنو/لینوکس شما گنوم باشد پس قطعا بسته Seahorse نیز از قبل نصب شده است. پس در ترمینال با وارد کردن دستور seahorse برنامه را می‌توانید باز کنید یا از منو برنامه‌ها دنبال Password and Keys بگردید.
اگر کلیدی از قبل در سیستم شما وجود داشته باشد در این‌جا قابل مشاهده است. در سربرگ Other Keys می‌توانید کلیدهای عمومی وارد شده در سیستم را ببینید. برای ساختن کلید می‌توانید از منوی File و سپس New وارد مرحله ساخت کلید شوید.
می توانید تمامی مراحلی که در قسمت متنی انجام دادید را در محیط گرافیکی به همان صورت انجام دهید. برای وارد کردن کلید عمومی به صورت گرافیکی می‌توانید از منوی File و سپس Import استفاده کنید.

نتیجه گیری:
PGP چندین سال است که توسط افراد مختلف، چه کاربران عادی و چه افرادی که اطلاعات بسیار حساس را ارسال و دریافت می‌کنند، مورد استفاده قرار می‌گیرد. تاکنون مشکل اساسی و خطرناکی در این الگوریتم دیده نشده و خیلی از افراد فعال در اینترنت استفاده از آن را توصیه می‌کنند. شاید برای اولین بار برایتان ارسال ایمیل رمز شده با این الگوریتم سخت باشد، ولی امنیتی که برای شما فراهم می‌کند بسیار ارزشمند است. دلیل اصلی محبوبیت این ابزار، استفاده از الگوریتم نامتقارن است که به اشتراک ‌گذاری کلید عمومی، زیبایی این سازوکار را نشان می‌دهد. می‌توانید در سرورهای کلید (Key Server) معروف دنیا دنبال کلیدهای افراد باشید که یکی از آن‌ها keyserver.pgp.com است.