رمزگذاری و رمزگشایی فایل ها با gpg در لینوکس – از صفر تا صد


با استفاده از دستور gpg در لینوکس میتوان از حریم خصوصی محافظت کرد. بدین ترتیب میتوان از رمزنگاری پیشرفتهای در سطح جهانی برای ایمن نگه داشتن موارد مهم و خصوصی بهره گرفت. در این مقاله به بررسی روش استفاده از gpg برای کار با کلیدها و همچنین رمزگذاری و رمزگشایی فایلها میپردازیم.
GnuPrivacy Guard که به اختصار GPG نامیده میشو،د امکان رمزگذاری فایلها را طوری در اختیار ما قرار داده است که تنها گیرنده مورد نظر ما بتواند آنها را رمزگشایی بکند. GPG با استاندارد OpenPGP کامپایل میشود. این استاندارد روی برنامهای به نام Pretty Good Privacy یا به اختصار PGP مدلسازی شده است. این برنامه در سال 1991 از سوی «فیل زیمرمان» (Phil Zimerman) ارائه شده است.
GPG از ایده دو کلید رمزنگاری برای هر فرد استفاده میکند. هر فرد یک کلید خصوصی و یک کلید عمومی دارد. کلید عمومی میتواند چیزی را که با استفاده از کلید خصوصی رمزنگاری شده، رمزگشایی کند.
برای ارسال امن فایلها باید آن را با کلید خصوصی خودتان و کلید عمومی گیرنده رمزگذاری کنید. گیرنده برای رمزگشایی فایل به کلید خصوصی خودش و کلید عمومی شما نیاز دارد.
بدین ترتیب متوجه میشویم که کلید عمومی باید به اشتراک گذارده شود. در واقع شما برای رمزگذاری فایل به کلید عمومی گیرنده فایل نیاز دارید و گیرنده نیز برای رمزگشایی به کلید عمومی شما نیاز دارد. این اشتراک کلید عمومی خطری ندارد، چون چنان که از نامش برمیآید، این کلید، عمومی است. در واقع به همین منظور برخی سرورهای کلید عمومی راهاندازی شدهاند که در این مقاله آنها را معرفی خواهیم کرد. کلیدهای خصوصی باید در جای امنی نگهداری شوند. اگر کلید عمومی شما در یک دامنه عمومی باشد، در این صورت کلید خصوصی باید در جای مخفی و امنی حفظ شود.
مراحلی که برای راهاندازی GPG مورد نیاز هستند، بسیار بیشتر از مراحل مورد نیاز جهت استفاده از آن هستند، اما خوشبختانه این مراحل راهاندازی تنها یک بار اجرا می شوند.
تولید کلیدها
دستور gpg روی همه توزیعهای لینوکسی که ما در این راهنما بررسی کردیم، شامل اوبونتو، فدورا و منجارو نصب شده است.
برای استفاده از GPG نیازی به آدرس ایمیل نیست. شما میتوانید فایلها را رمزنگاری کرده و امکان دانلود آنها را توسط سایرین فراهم آورید یا اینکه به صورت کلی فایلهای رمزنگاری شده را به شکل فیزیکی در اختیار مخاطب خود قرار دهید. البته نباید از خاطر برد به کلیدهایی که ایجاد میکنید باید یک آدرس ایمیل اختصاص دهید و به این منظور لازم است تا آدرس ایمیلی را در نظر بگیرید و در مواقع لازم از آن استفاده کنید.
در ادامه دستور مورد نیاز برای تولید کلیدها را مشاهده میکنید. گزینه full-generate-key-- کلیدهای شما را در یک «نشست تعاملی» (interactive session) با پنجره ترمینال تولید میکند. همچنین از شما یک «عبارت عبور» (passphrase) پرسیده میشود. شما باید اطمینان پیدا کنید که این عبارت عبور را که معرفی میکنید به خاطر سپردهاید. به این منظور استفاده از سه یا چهار کلمه که با استفاده از علائم نگارشی به هم اتصال یافتهاند، مناسب خواهد بود.
gpg --full-generate-key
از شما خواسته میشود که یک نوع رمزگذاری را از منو انتخاب کنید. به طور کلی بهتر است type 1 را انتخاب کرده و اینتر را بزنید. همچنین باید «طول بیت» (bit-length) را نیز برای کلیدهای رمزگذاری انتخاب کنید. با زدن کلید اینتر مقدار پیشفرض پذیرفته میشود.
در ادامه طول عمر کلید را نیز ذکر میکنید. اگر میخواهید این سیستم را تست کنید، بهتر است طول مدت کوتاهی، برای نمونه 5 روز را قید کنید. اگر قصد دارید این کلید را حفظ کنید، باید مدت طولانیتری مثلاً یک سال (1y) را برای آن وارد نمایید. بدین ترتیب این کلید به مدت 12 ماه حفظ میشود و از این رو باید پس از یک سال آن را تجدید بکنید. انتخاب خود را با زدن کاراکتر y تأیید کنید.
شما باید نام و نشانی ایمیل را وارد کنید. در صورت تمایل، میتوانید توضیحی نیز درج کنید.
در ادامه تقاضا میشود که «عبارت عبور» (Passphrase) خود را وارد کنید. شما هر زمان که با کلیدها کار میکنید به این عبارت عبور نیاز خواهید داشت، بنابراین چیزی انتخاب کنید که مطمئن باشید در ذهنتان میماند.
پس از وارد کردن عبارت عبور، دکمه OK را بزنید. هر زمان که با gpg کار میکنید، این پنجره را خواهید دید، پس مطمئن شوید که عبارت عبور را به خاطر میسپارید.
در این زمان تولید کلید انجام مییابد و شما به اعلان فرمان بازمیگردید.
تولید یک گواهی ابطال
اگر کلید خصوصیتان برای افراد دیگر افشا شده است، باید کلیدهای قدیمی را از هویت خود جدا کنید تا بتوانید کلیدهای جدیدی بسازید. به این منظور به یک گواهی ابطال نیاز دارید. ما در ادامه این کار را انجام میدهیم و آن را در جای امنی نگهداری میکنیم.
برای ساخت گواهی ابطال باید گزینه output-- به همراه نام فایل گواهی که میخواهید ایجاد کنید را وارد نمایید. گزینه gen-revoke-- موجب میشود که gpg گواهی ابطال را بسازد. در این زمان باید نشانی ایمیلی را که در زمان تولید کلیدها وارد کرده بودید نیز ارائه نمایید.
gpg --output ~/revocation.crt --gen-revoke dave-geek@protonmail.com
از شما خواسته میشود که تمایل به تولید گواهی را تأیید کنید. کاراکتر y را وارد کرده و اینتر کنید. در ادامه دلیل تولید این گواهی از شما پرسیده میشود. از آنجا که این کار را قبل از زمان انقضای کلید اجرا میکنیم و دلیل خاصی نداریم، کلید 1 را برای رد کردن این مرحله وارد کرده و در ادامه کلید اینتر را میزنیم. در صورت تمایل میتوانید یک توضیح نیز وارد کنید. دو بار دیگر اینتر را بزنید تا توضیح به پایان برسد. سپس از شما خواسته میشود که تنظیمات را تأیید کنید و باید کاراکتر y را وارد کرده و کلید اینتر را فشار دهید.
بدین ترتیب گواهی تولید میشود. پیامی را مشاهده میکنید که ضرورت امن نگاه داشتن این گواهی را به شما یادآوری میکند.
در این پیام از شخصی به نام Mallory یاد شده است. از سالیان قبل در مباحث رمزنگاری از نام دو فرد به نام «باب» و «آلیس» که با هم ارتباط دارند استفاده میشود. شخصیتهای دیگری نیز مانند Eve که شنود میکند و Mallory که مهاجم خرابکار است وجود دارند.
اینک تنها چیزی که لازم داریم این است که گواهی را در جای امن و مطمئنی نگهداری کنیم. بدین منظور دستکم باید همه مجوزهای دسترسی را به جز آنها که متعلق به خودمان است از گواهی حذف کنیم:
chmod 600 ~/revocation.crt
با دستور ls مجوزهای دسترسی را بررسی میکنیم:
ls –l
اینک هیچ کس جز مالک فایل یعنی ما نمیتواند هیچ کاری با فایل انجام دهد.
ایمپورت کردن کلید عمومی فرد دیگر
برای رمزنگاری پیام به صورتی که فرد دیگری بتواند آن را رمزگشایی کند، باید کلید عمومی او را داشته باشیم. اگر در فایلی یک کلید عمومی به شما داده شده باشد، میتوانید آن را با دستور زیر ایمپورت کنید. در این مثال فایل کلید به نام mary-geek.key است:
gpg --import mary-geek.key
بدین ترتیب کلید ایمپورت شده است و میتوانید نام و نشانی ایمیل مرتبط با کلید را مشاهده کنید. بدیهی است که ما باید این موارد را با فردی که کلید را از او گرفتهایم تطبیق دهیم.
همچنین این احتمال وجود دارد که فردی که به کلیدش نیاز دارید، آن را روی یک سرور عمومی آپلود کرده باشد. این سرورها کلیدهای عمومی افراد سراسر دنیا را نگهداری میکنند. سرورهای کلید به صورت دورهای با یکدیگر همگامسازی میشوند تا کلیدها به صورت سراسری در اختیار همه قرار داشته باشند.
سرور کلید عمومی MIT یک سرور کلید محبوب است که به صورت منظم بهروزرسانی میشود، بنابراین جستجو در آنجا میتواند مفید باشد. اگر فردی اخیراً کلید خود را آپلود کرده باشد، ممکن است چند روز طول بکشد که بتوانید آن را مشاهده کنید.
گزینه keyserver-- باید به همراه نام سرور کلیدی که میخواهید جستجو کنید استفاده شود. گزینه search-keys-- به همراه نام فردی که به دنبال کلیدش هستید یا نشانی ایمیل وی ارائه شود. ما از این نشانی ایمیل استفاده میکنیم:
gpg --keyserver pgp.mit.edu --search-keys mary-geek@protonmail.com
موارد تطبیق یافته به صورت شماره بندی شده نمایش پیدا میکنند. برای ایمپورت کردن یک کلید باید شماره مربوطه را وارد کرده و اینتر را بزنید. در این مثال، یک مورد تطبیق وجود دارد و از این رو شماره 1 را زده و اینتر را میزنیم.
بدین ترتیب کلید ایمپورت میشود و نام و نشانی ایمیل مرتبط با کلید برای ما نمایش مییابد.
تأیید و امضا کردن یک کلید
اگر یک فایل کلید عمومی از سوی فردی که میشناسید در اختیار شما قرار گرفته است، میتوانید مطمئن باشید که کلید متعلق به خود اوست. اما اگر آن را از یک سرور کلید عمومی دریافت کرده باشید، ممکن است لازم باشد آن را مورد بررسی قرار دهید تا مطمئن شوید که متعلق به فرد مورد نظر شما است.
گزینه fingerprint-- موجب میشود که gpg دنباله کوتاهی از ده مجموعه از چهار کاراکتر هگزادسیمال تولید کند. میتوانید از فرد مزبور بخواهید که «اثر انگشت» (fingerprint) کلیدش را برای شما ارسال کند. سپس میتوانید از گزینه fingerprint-- برای تولید همین دنباله اثر انگشت کاراکترهای هگزادسیمال و مقایسه آنها بهره بگیرید. اگر این دو مطابقت داشتند، میتوانید مطمئن باشید که کلید متعلق به آن فرد است.
gpg --fingerprint mary-geek@protonmail.com
چنان که میبینید اثر انگشت تولید شده است.
زمانی که مطمئن شدید کلید صحیح و متعلق به فردی است که باید باشد میتوانید آن را امضا کنید. اگر این کار را نکنید همچنان خواهید توانست پیامهای دریافتی آن فرد را رمزگشایی و پیامهای ارسالی به او را رمزگذاری کنید، اما gpg هر بار از شما در مورد اطمینانتان برای انجام کار سؤال میپرسد، چون کلید امضا نشده است. ما از گزینه sign-key-- استفاده میکنیم و نشانی ایمیل فردی که کلید متعلق به اوست را ارائه میکنیم تا gpg بداند که کلید امضا شده است.
gpg --sign-key mary-geek@protonmail.com
بدین ترتیب اطلاعاتی در مورد کلید و آن فرد مشاهده میکنید و از شما خواسته میشود که تأیید کنید واقعاً میخواهید کلید را امضا کنید. با زدن کلید y و اینتر کردن کلید را امضا کنید.
اشتراک کلید عمومی
برای به اشتراک گذاردن کلیدتان در قالب یک فایل باید آن را از key store محلی gpg اکسپورت کنیم. به این منظور از گزینه export-- استفاده میکنیم که باید به همراه نشانی ایمیل که برای تولید کلید استفاده شده ارائه شود. گزینه output-- را باید به همراه نام فایلی که میخواهید کلید به آن اکسپورت شود وارد کنید. گزینه armor-- به gpg اعلام میکند که خروجی ASCII را به جای فایل باینری تولید کند.
gpg --output ~/dave-geek.key --armor --export dave-geek@protonmail.com
ما با استفاده از less میتوانیم به درون فایل کلید نگاه کنیم.
less dave-geek.key
کلید به صورت زیر است:
شما میتوانید کلید عمومی خود را روی یک سرور کلید عمومی نیز به اشتراک بگذارید. گزینه send-keys-- کلید را به keyserver ارسال میکند. گزینه keyserver-- باید قبل از آدرس وب سرور کلید عمومی بیاید. برای شناسایی کلیدی که میخواهید ارسال کنید، باید اثر انگشت کلید در خط فرمان ارائه شود. توجه کنید که بین مجموعههای چهار کاراکتری هیچ فاصلهای وجود ندارد.
نکته: با استفاده از گزینه fingerprint-- میتوانید اثر انگشت کلید خود را ببینید.
gpg --send-keys --keyserver pgp.mit.edu 31A4E3BE6C022830A804DA0EE9E4D6D0F64EEED4
در ادامه اطلاعاتی در مورد ارسال کلید مشاهده میکنید.
رمزگذاری فایلها
در نهایت اکنون ما آماده رمزگذاری فایل و ارسال آن به Mary هستیم. این فایل Raven.txt نام دارد. گزینه encrypt-- به gpg اعلام میکند که باید فایل را رمزگذاری کند و گزینه sign-- نیز بیان میکند که فایل را با جزییات شما امضا کند. گزینه armor-- به gpg اعلام میکند که یک فایل ASCII تولید کند. گزینه r- باید به همراه نشانی ایمیل فردی که فایل به وی ارسال میشود ارائه شود:
gpg --encrypt --sign --armor -r mary-geek@protonmail.com
فایل با همان نام اصلی ایجاد شده است، اما پسوند asc. به نام فایل اضافه شده است. در ادامه نگاهی به داخل آن میاندازیم.
less Raven.txt.asc
فایل کاملاً ناخوانا است و تنها از سوی فردی که کلید عمومی شما و کلید خصوصی Mary را دارد، میتواند رمزگشایی شود. قاعدتاً تنها فردی که هر دو کلید را دارد باید Mary باشد.
اینک میتوانیم فایل را به Mary ارسال کنیم و مطمئن باشیم که هیچ کس دیگری نمیتواند آن را رمزگشایی کند.
رمزگشایی فایلها
اینک فرض کنید Mary یک پاسخ ارسال کرده است. این پاسخ یک فایل رمزگذاری شده است که پسوند asc. دارد. ما میتوانیم به سادگی با استفاده از گزینه decrypt-- آن را رمزگشایی کنیم. همچنین خروجی آن را در فایل دیگری به نام plain.txt ذخیره میکنیم. توجه داشته باشید که ما به gpg اعلام نکردهایم که فایل از چه کسی رسیده است. gpg میتواند این مسئله را از روی محتوای فایل رمزگذاری شده تشخیص دهد.
gpg --decrypt coded.asc > plain.txt
در ادامه نگاهی به فال plain.txt داریم:
less plain.txt
فایل با موفقیت رمزگشایی شده است.
رفرش کردن کلیدها
شما میتوانید به صورت دورهای از gpg بخواهید که کلیدهای خود را با کلیدهای سرور کلید عمومی مطابقت دهد و هر کدام که تغییر یافتهاند را رفرش کند. این کار بهتر است هر چند ماه یک بار و یا زمانی که کلید را از یک مخاطب جدید دریافت میکنید صورت بگیرد.
گزینه refresh-keys-- موجب میشود که gpg این بررسی را اجرا کند. گزینه keyserver-- باید به همراه سرور کلید انتخابی مورد استفاده قرار گیرد. با توجه به این که کلیدها بین سرورهای کلید عمومی مبادله میشوند، دیگر مهم نیست که از کدام سرور استفاده میکنید.
gpg --keyserver pgp.mit.edu --refresh-keys
gpg از طریق فهرست کردن کلیدهایی که بررسی کرده است پاسخ میدهد و به شما این امکان را میدهد که بدانید کدام یک از کلیدها تغییر یافته و بهروزرسانی شده است.
اهمیت امنیت حریم خصوصی
در عصر حاضر روزی نیست که شاهد انتشار خبری در خصوص حریم خصوصی نباشیم. فرقی ندارد که چه دلیلی برای امن و خصوصی نگه داشتن اطلاعات خود دارید، چون در هر حال gpg ابزار سادهای برای اعمال رمزگذاری قدرتمند روی فایلها و پیامهای ارتباطی شما محسوب میشود.
روشهای دیگری نیز برای استفاده از gpg وجود دارند. شما میتوانید یکی از افزونههای Thunderbird به نام Enigmail را نصب کنید. این افزونه روی پیکربندی gpg سوار میشود و امکان رمزگذاری پیامهای ایمیل را درون تاندربرد فراهم میسازد.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای لینوکس
- آموزش سیستمعامل لینوکس - مقدماتی
- مجموعه آموزشهای مهارتهای کاربردی کامپیوتر (ICDL)
- آموزش گام به گام رمزگذاری فایل های فشرده در WinRAR — به زبان ساده
- معرفی رمزنگاریهای رایج؛ چرا نباید شیوههای جدید رمزنگاری ابداع کرد؟
==