برای کار با دادههای رمزنگاریشده با کلیدهای عمومی و خصوصی، به هیچ وجه نباید به شرکتهای ثالث اعتماد کنیم؛ بنابراین، به ابزاری برای رمزگذاری و رمزگشایی دادهها نیاز داریم. در این مقاله، قصد داریم به صورت گامبهگام نحوه استفاده از نرمافزار متنباز GNU Privacy Guard یا به اختصار GPG برای ارسال پیام را آمورش دهیم؛ نرم افزار GPG امکان رمزگذاری و رمزگشایی با استفاده از کلید عمومی و خصوصی را ممکن میسازد. در ادامه مطلب، با میهن بلاکچین همراه باشید.
نرم افزار GPG چیست؟
GPG یا GNU Privacy Guard یک سیستم رمزنگاری کلید عمومی است. این سیستم به منظور امن کردن انتقال اطلاعات بین طرفین به کار میرود و برای تایید “اصل بودن” پیامها (از طرف فرستنده) نیز کاربرد دارد.
GNUPG یک سیستم کامل و آزاد از استاندارد OpenPGP است، که توسط RFC4880 (که با سیستم PGP یا Pretty Good Privacy به معنی “حریم خصوصی بسیار خوب” نیز شناخته میشود) ایجاد شده است. GPG اجازه میدهد که دادهها و ارتباطات خود را رمزنگاری و امضا کنید. GNUPG از یک سیستم مدیریت کلید متحرک استفاده میکند و به ماژولهایی از تمام انواع دایرکتوریهای کلید عمومی دسترسی دارد. این سیستم رمزگذاری، در واقع یک ابزار دستوری است که با استفاده از امکانات خود، میتواند به راحتی با دیگر اپلیکیشنها ارتباط برقرار کند.
GPG از زمان معرفی خود در سال ۱۹۹۷، یک نرم افزار آزاد بوده است؛ بدین معنی که به آزادی شما بها میدهد. این سیستم میتواند بهراحتی استفاده و تنظیم شود.
استفاده از رمزنگاری به شما کمک میکند که از حریم خصوصی خود و افرادی که با آنها ارتباط دارید، محافظت کنید.
نرم افزار GNU PG چگونه کار میکند؟
در زمان استفاده از شبکه بیت کوین، به روشی ایمن برای برقراری ارتباط نیاز داریم تا به سازمانهای ثالث برای رمزنگاری دادهها نیازمند نباشیم؛ چراکه روشهای رمزنگاری End to End موجود که در سرویسهایی مانند تلگرام استفاده میشوند، اصلا قابل اعتماد نبوده و به هیچوجه نباید به این روشها اعتماد کرد.
دانستن این نکته جالب است که کاربرد کلیدهای عمومی و خصوصی فقط محدود به حوزه رمزنگاری نیست؛ بلکه میتوان از آن در امضاهای دیجیتال نیز استفاده کرد. همانگونه که بلاکچین بیت کوین به خوبی از آن استفاده میکند.
برای ساخت کلید عمومی و خصوصی، نرم افزار GPG یک عدد تصادفی خیلی بزرگ و غیر قابل حدس تولید کرده و از روی آن، کلید خصوصی و از روی این کلید خصوصی نیز کلید عمومی را تولید میکند (مانند نحوه تولید این کلیدها در شبکه بیتکوین).
کلید عمومی را میتوان با همه به اشتراک گذاشت (مانند آدرس کیف پول Bitcoin) که شامل آیدی (ایمیل و نام) شماست که میتوانید به صورت آنلاین به اشتراک بگذارید. هر شخصی میتواند با کلید عمومی شما پیام را رمزگذاری کند؛ اما این تنها شما هستید که میتوانید پیام را باز کنید. زیرا فقط شما کلید خصوصی متناظر را در اختیار دارید.
نکته: فقط محض اطلاع و یادآوری، در پرداختهای شبکه بیت کوین از رمزنگاری استفاده نمیشود. در عوض، این فرستنده تراکنش است که آن را با کلید خصوصی خود امضا میکند که هر کس که کلید عمومی شما را داشته باشد، میتواند آن را تایید کند.
نحوه دانلود و نصب ابزار GPG
اولین کاری که باید انجام دهید، دانلود این نرمافزار است که در ادامه توضیحات لازم برای سیستم عاملهای مختلف آورده شده است.
سیستم عامل لینوکس
اگر از لینوکس استفاده میکنید، این ابزار باید از قبل نصب شده باشد. در غیر اینصورت دستور زیر را در ترمنیال اجرا کنید.
sudo apt-get install gnupg
سپس دستور زیر را اجرا کنید تا از نصب موفقتآمیز ابزار مطمئن شوید.
gpg --version
نکته: اگر در حال اجرای نود بیت کوین در برد رزبری پای (Raspberry Pi) هستید، از SSH برای دسترسی به ترمینال پای استفاده کرده و دستورات GPG را اجرا کنید (این نکته فقط مختص کاربران خاصی بوده و ارتباطی با مطالبی که در ادامه مطرح میشود، ندارد).
سیستم عامل مک
اگر از سیستم عامل مک استفاده میکنید، باید ابزار GPG Suite را دانلود و نصب کنید. این نرمافزار رایگان است؛ مگر اینکه بخواهید از ابزار ایمیل این برنامه استفاده کنید، که البته استفاده از آن لزومی ندارد.
سیستم عامل ویندوز
برنامه GPG4Win را دانلود و نصب کنید. در صفحه دانلود میتوانید هزینه پرداختی را روی ۰ دلار قرار داده و به صورت رایگان به آن دسترسی داشته باشید. در زمان نصب میتوانید تمام گزینهها غیر از اولین گزینه را غیرفعال کنید.
ساخت کلید عمومی و خصوصی با نرم افزار GPG
در لینوکس یا مک، ترمینال و در ویندوز کامند پرامپت (کافی است در قسمت جستجو عبارت cmd را تایپ کنید) را باز کنید. سپس دستور زیر را وارد کنید.
gpg --full-generate-key
گزینه RSA Default را انتخاب کنید.
سپس اندازه کلید را مشخص کنید که البته هر چه بزرگتر باشد، ایمنتر است.
حال باید مشخص کنید که عمر کلید چقدر باید باشد. در مثال زیر ترجیح دادیم کلید تاریخ انقضا نداشته باشد.
سپس جزئیاتی به شما نمایش داده خواهد شد. این اطلاعات به صورت عمومی خواهند بود، که نشان میدهد کلید متعلق به چه کسی است. این جزئیات همگی در داخل کلید گنجانده میشود. از کیبورد حرف O را بفشارید تا عملیات تایید شود.
در این مرحله باید کلید خصوصی خود را با عبارت امنیتی (رمز) قفل کنید.
همیشه توصیه میشود در حین ایجاد کلید، برای افزایش درجه تصادفی بودن، ماوس خود را در صفحه حرکت دهید یا از کیبورد عباراتی را به صورت شانسی تایپ کنید.
ذخیره کلید عمومی در USB
کامپیوتری که از آن برای تولید کلید خصوصی استفاده کردید، کلیدها را در keychain ذخیره میکند که با عبارت امنیتی قفل شده است. این اصطلاح صرفا یک مفهوم انتزاعی است و در عمل کلیدها در جایی در حافظه داخل فایل ذخیره میشوند. به همین دلیل، پیشنهاد میشود از کلیدهای خود بکاپ داشته باشید. سعی کنید برای کاهش ریسک از دست دادن کلید، از کلیدهای خود در یک حافظه جداگانه مانند USB بکاپ بگیرید.
بدین منظور، ابتدا باید کلید را از Keychain استخراج کرده و در یک فایل ذخیره کنیم. ابتدا با دستور زیر، آیدی کلیدها را بهدست آورید.
gpg --list-keys
این دستور همه کلیدها اعم از خصوصی و عمومی را لیست میکند. آیدی کلید مورد نظر را کپی کنید.
آیدی زیر، از مثال فوق کپی شده است.
D7200D35FF3BEDFDAB6E0C996565B2E40BC9A48F
حال باید کلیدهای خصوصی را به فایل انتقال دهیم. بدین منظور، دستور زیر را وارد میکنیم که شامل چند سوئیچ (که در ادامه توضیح داده میشود) و در انتها شامل آیدی کپی شده است.
سوئیچ output– بیانگر این است که کلید باید در فایلی که آدرس آن بلافاصله وارد شده، منتقل شود. در این مثال، نام public.gpg به عنوان نام فایل انتخاب شده و به محض اجرای دستور، این فایل ایجاد خواهد شد.
سوئیچ armor– نشاندهنده این است که خروجی باید در فرمت ASCII-armored باشد و سوئچ export– بیانگر این است که کدام کلید از keychain باید استخراج شود که مقدار آن بلافاصله بعد از سوئیچ قرار میگیرد.
اگر میخواهید محتوای فایل را مشاهده کنید، از دستور less طبق مثال زیر استفاده کنید.
less public.gpg
حال باید کلید خصوصی را استخراج کنیم. دستور شبیه دستور قبلی است، اما با کمی تغییر. نام فایل را به چیز دیگری مثلا private.gpg تغییر دهید و سوئیچ export– را به export-secret-key– تغییر دهید.
حال، فایلهای private.gpg و public.gpg را در مسیر فعلی داریم. آنها را در USB کپی کرده و در جایی امن نگهداری کنید. درست است که شاید این کلیدها در برابر آدرس بیت کوین ریسک کمتری دارند، اما اگر دست شخص دیگری بیفتد، امکان دارد با جعل هویت از شما سوءاستفاده کند. اگر عبارت امنیتی قوی نیز در نظر گفته باشید، تقریبا غیرممکن است که هکرها از آن سوءاستفاده کنند.
انتقال کلیدها به keychain یک کامپیوتر دیگر با نرم افزار GPG
USB که حاوی کلیدهاست را به کامپیوتر دیگر متصل کنید. ابتدا باید مطمئن شوید که نرم افزار GPG به درستی نصب شده است. ترمینال را در مسیر فایل کلیدها باز کنید و دستور زیر را وارد کنید.
gpg --import private.gpg
به خاطر داشته باشید که private.gpg نام فایل است و باید با توجه به نامی که برای فایل خود در نظر گرفتهاید، دستور را تغییر دهید. پس از ورود صحیح عبارت امنیتی، کلیدهای خصوصی و عمومی وارد Keychain میشوند.
برای حذف کلید خصوصی دستور زیر را وارد کنید.
gpg --delete-secret-keys KEY_ID
KEY_ID را با آیدی کلید یا ایمیل آن جایگزین کنید.
آپلود کلید عمومی به keyserver یا وبسایت
چندین Keysever معروف برای استفاده در دسترس است. معروفترینها خودشان را به صورت خودکار همگامسازی میکنند (مانند کاری که نودهای بیت کوین انجام میدهند). بنابراین بهتر است سروری را برای تبادل کلیدها انتخاب کنید که کمترین فاصله را با شما دارد.
gpg --keyserver keyserver.ubuntu.com --send-key D7200D35FF3BEDFDAB6E0C996565B2E40BC9A48F
در دستور بالا، مقابل سوئیچ keyserver– باید آدرس سایت keyserver و مقابل سوئیچ send-key– باید آیدی کلید قرار داده شود.
اگر قصد دارید کلید عمومی شخص دیگری را مستقیما از سرور دریافت کنید، همان دستور بالا را وارد کنید، فقط کافی است به جای send-key– از سوئیچ recv-key– و آیدی کلید شخص مد نظر استفاده کنید.
آپلود اثرانگشت کلید عمومی در شبکههای اجتماعی یا پایگاه کلیدها (keybase)
هدف از این کار چیست؟ اگر شما ورژن کوتاهشدهای از کلید عمومی خود را در سرویسهای مختلف بارگذاری کنید، فرستنده پیام میتواند از اینکه کلید عمومی صحیح را دانلود میکند، اطمینان بیشتری داشته باشد.
اثر انگشت کلید خود را میتوانید با دستور زیر مشاهده کنید.
gpg --fingerprint KEY_email
با بیشتر این دستورات، گاهی اوقات ایمیل نیز بهدرستی کار میکند، ولی گاهی اوقات نیاز به آیدی کلید است. برای مشاهده آیدی کلید میتوانید از دستور زیر استفاده کنید.
gpg --list-keys
پس از مشاهده اثر انگشت، آن را کپی کرده و در شبکه اجتماعی خود به اشتراک بگذارید. مانند مثال زیر که کلید خلاصه شده در توئیتر آپلود شده است.
به عنوان مثال، پس از دانلود کلید عمومی من، اثرانگشت پس از وارد کردن نمایش داده خواهد شد یا میتوانید از list-keys– یا gpg fingerprint KEY_ID– استفاده کنید. سپس میتوانید صحت آنرا با اثر انگشتی که من در توئیتر آپلود کردم بررسی کنید.
ارسال و دریافت پیام رمزنگاریشده با نرم افزار GPG
برای بررسی ارسال و دریافت پیام، سناریویی را مثال میزنیم. فرض کنید میخواهید پیامی را با کلید عمومی من قفل کرده و به من ارسال کنید و من جواب پیام را با کلید عمومی شما قفل کرده و برای شما ارسال میکنم.
ابتدا، باید کلید عمومی من را داشته باشد. میتوانید به آدرس keyserver.ubuntu.com رفته و ایمیل من را در باکس جستجو وارد کنید. ترمنیال را باز کرده و دستور زیر را وارد کنید:
gpg --keyserver keyserver.ubuntu.com --recv-keys e7c061d4c5e5bc98
با این دستور، کلید عمومی من را در keychain کامپیوتر خود وارد کردید. حال فرض کنید نامهای در یک فایل بهنام letter.txt نوشتهاید و قصد دارید با کلید عمومی من آن را قفل کرده و برایم ارسال کنید (البته نامه هر چیزی میتواند باشد). به جایی که فایل نامه قرار دارد رفته و ترمینال را در آن مسیر باز کنید. دستور زیر را تایپ کنید.
gpg --output letter.gpg --encrypt --recipient armantheparman@gmail.com letter.txt
سوئیچ output– برای تولید خروجی است، که نام فایل بلافاصله بعد از سوئیچ قرار داده میشود. سوئیچ encrypt– برای رمزنگذاری فایل استفاده میشود. برای اینکه مشخص کنیم با چه کلید عمومی موجود در keychain فایل قفل شود، باید از سوئیچ recipient– و ایمیل یا آیدی کلید گیرنده پیام استفاده کنیم. در انتها نیز فایلی که باید قفل شود را وارد میکنیم.
ممکن است حین انجام عملیات، پیامهای تایید و اخطارهایی دریافت کنید. در انتهای فرآیند، فایل قفل شده خروجی تولید شده است. توجه کنید که فایل پیام اولیه (فایل letter.txt در این مثال) همچنان وجود دارد. برای حذف آن در لینوکس یا مک از دستور زیر استفاده کنید.
rm letter.txt
همچنین برای پاک کردن حافظه تاریخچه ترمینال، دستور زیر را اجرا کنید.
history -c
حال میتوانید مثلا با ایمیل یا هر رسانه دیگری، پیام قفل شده (فایل letter.gpg) را به گیرنده ارسال کنید. گیرنده برای باز کردن پیام باید پس از دانلود فایل از ایمیل، دستور زیر را اجرا کند.
gpg --output decrypted_message.txt --decrypt letter.gpg
این دستور با استفاده از فایل قفل شده letter.gpg فایل رمزگشاییشده decrypted_message.txt را به عنوان خروجی تولید میکند. کامپیوتر میتواند متوجه شود که این پیام با چه کلید عمومی قفل شده است (بنابراین نیازی نیست آیدی کلید را در دستور قرار دهیم). لذا، فقط بررسی میکند که آیا کلید خصوصی متناظر را در اختیار دارد یا خیر. در صورت وجود کلید خصوصی، پیام را رمزگشایی میکند.
سخن پایانی
در دنیای دیجیتال، امنیت دادهها حرف اول را میزند. برای قفل پیامها یا باید به سازمانهای متمرکز وابسته شویم که اصلا توصیه نمیشود و یا از ابزارهای سیستمی مانند نرم افزار GPG که مخفف GNU Privacy Guard است، استفاده کنیم. در این مقاله، به صورت کامل در مورد نحوه تولید کلید عمومی و خصوصی، قفل پیام با کلید عمومی، ارسال و دریافت و رمزگشایی پیام دریافت شده، با استفاده از نرمافزار GPG صحبت کردیم. اگر تجربه استفاده از این نرم افزار را دارید، نظرات خود را با میهن بلاکچین