کتابخانه می‌خواهد گزارش روزانه را برای حسابدار بفرستد. پنهان کردن گزارش یک مسئله است؛ مطمئن شدن از اینکه گزارش را واقعاً مدیر فرستاده، مسئله‌ای دیگر. با GPG هر دو را جدا آزمایش می‌کنیم.

این جلسه بخشی از دورهٔ لینوکس ۳۰۳ در ۴۰ شب است.

محیط تمرین: Ubuntu 24.04؛ بستهٔ gnupg؛ دو ترمینال کاربر عادی در یک VM، با keyringهای جدا.

جایگاه در دوره: جلسهٔ تکمیلی؛ خارج از هدف مستقل آزمون.

دو دفتر کلید، نه دو هویت در یک کشو#

GPG پیاده‌سازی GNU از ابزارهای OpenPGP است. اعتماد آن با مدل گواهی X.509 یکسان نیست؛ اثر انگشت کلید را باید از مسیری مستقل بررسی کنی. پیام «امضای درست» می‌گوید کلید موردنظر امضا را ساخته؛ به‌تنهایی هویت انسانی صاحب کلید را ثابت نمی‌کند.

umask 077
mkdir -p ~/lpic303/gpg/alice ~/lpic303/gpg/bob
chmod 700 ~/lpic303/gpg/alice ~/lpic303/gpg/bob
gpg --homedir ~/lpic303/gpg/alice --full-generate-key
gpg --homedir ~/lpic303/gpg/bob --full-generate-key

برای هر طرف یک کلید RSA با قابلیت امضا و رمزنگاری و تاریخ انقضای آزمایشگاهی بساز. هویت‌ها را Alice Lab <alice@example.test> و Bob Lab <bob@example.test> بگذار و گذرواژهٔ متفاوت انتخاب کن. wizard و گزینه‌هایش میان نسخه‌ها فرق می‌کنند؛ نتیجه را با --list-secret-keys ببین.

تبادل و بررسی اثر انگشت#

cd ~/lpic303/gpg
gpg --homedir alice --armor --export alice@example.test > alice-public.asc
gpg --homedir bob --armor --export bob@example.test > bob-public.asc
gpg --homedir alice --import bob-public.asc
gpg --homedir bob --import alice-public.asc
gpg --homedir alice --fingerprint bob@example.test
gpg --homedir bob --fingerprint alice@example.test

اثر انگشت هر کلید واردشده را با keyring اصلی طرف مقابل مقایسه کن. --armor خروجی متنی قابل انتقال می‌سازد؛ فایل کلید عمومی را با کلید خصوصی اشتباه نگیر. برای اعتماد محلی، پس از این مقایسه می‌توانی کلید واردشده را با --quick-lsign-key و اثر انگشت کامل آن گواهی کنی؛ به تمام کلیدهای واردشده اعتماد کور نده.

ارسال گزارش#

printf 'daily report: 12 returned books\n' > report.txt
gpg --homedir alice --output report.txt.gpg --sign --encrypt \
  --recipient bob@example.test report.txt
gpg --homedir bob --output received.txt --decrypt report.txt.gpg
cmp report.txt received.txt
gpg --homedir alice --armor --detach-sign report.txt
gpg --homedir bob --verify report.txt.asc report.txt

باب باید فایل را باز کند و امضای آلیس را ببیند؛ cmp در صورت برابری چیزی چاپ نمی‌کند. سپس فایل اصلی را تغییر بده و فقط بررسی امضای جدا را تکرار کن: انتظار شکست داریم. آلیس بدون گزینهٔ --encrypt-to برای خودش، الزاماً نمی‌تواند نسخهٔ رمز‌شده برای باب را باز کند.

گم شدن کلید پایان قصه نیست#

گواهی ابطال تولیدشده را جدا از کلید نگه دار. انقضای کلید، حذف keyring و ابطال کلید سه کار متفاوت‌اند. از انتشار گواهی ابطال آزمایشی بدون قصد ابطال جلوگیری کن. این درس بازنویسی مستقل تمرین‌های GPG در PDFهاست و هدف مستقل نسخهٔ فعلی ۳۰۳ نیست.

تمرین: نسخه‌ای فقط امضاشده و نسخه‌ای فقط رمز‌شده بساز و بگو هرکدام کدام خواستهٔ کتابخانه را برآورده می‌کند. مرجع گزینه‌ها: راهنمای GnuPG .