age برای چه کاری ساخته شده است؟
age ابزار رمزگذاری فایل، قالب فایل و کتابخانهای برای زبان Go است. کاربرد آن از یک مسئله روشن شروع میشود: میخواهیم فایل را به شکلی ذخیره یا منتقل کنیم که فقط دریافتکننده دارای کلید مناسب بتواند محتوایش را بخواند. طراحی خط فرمان با جریانهای ورودی و خروجی سازگار است و میتوان آن را کنار ابزارهای معمول آرشیو به کار برد. این سادگی به معنای حذف مسئولیت حفاظت از کلید خصوصی، انتخاب دریافتکننده درست یا آزمودن بازیابی نیست.
سناریوی مناسب برای شروع، فرستادن یک بسته گزارش داخلی به همکار مشخص یا نگهداری پشتیبان رمزگذاریشده است. فرستنده فقط به کلید عمومی همکار نیاز دارد و نباید کلید خصوصی او را بگیرد. همکار با کلید خصوصی خودش فایل را باز میکند. این جدایی کمک میکند دستگاه تولیدکننده پشتیبان فقط توان رمزگذاری داشته باشد؛ البته اگر همان دستگاه به داده اصلی دسترسی دارد، نفوذ به آن همچنان میتواند متن اصلی را در زمان تولید افشا کند.
دریافتکننده و هویت را اشتباه نگیرید
در واژگان ابزار، recipient داده عمومی مورد استفاده برای رمزگذاری و identity داده خصوصی مورد استفاده برای رمزگشایی است. رشته عمومی عادی با age1 آغاز میشود و کلید خصوصی قالب مشخص دیگری دارد. دریافتکننده عمومی را میتوان از مسیر تأییدشده به فرستنده داد؛ فایل هویت خصوصی باید تحت کنترل صاحب آن بماند. نام فایل مانند key.txt چیزی درباره عمومی یا خصوصی بودن محتوایش ثابت نمیکند؛ تشخیص باید براساس محتوای واقعی و نقش آن انجام شود.
انتقال نخستین کلید عمومی یک مرحله اعتماد است. اگر مهاجم کلید خودش را به جای کلید همکار ارائه کند، رمزگذاری درست انجام میشود اما برای شخص نادرست. بنابراین برای فایل حساس، دریافتکننده را از کانال مورد اعتماد بگیرید و تغییر آن را با مالک تأیید کنید. کپی کردن یک رشته از پیام ناشناس یا صفحهای که مالکیتش روشن نیست کافی نیست. پرونده دریافتکنندگان میتواند نام مسئول، تاریخ تأیید و هدف استفاده را در کنار رشته عمومی ثبت کند.
نصب و ساخت محیط تمرین
README رسمی روشهای نصب بستهای و باینریهای آماده را معرفی میکند. نسخه را از منبع رسمی یا مخزن معتبر سیستمعامل دریافت کنید و برای محیط عملیاتی آن را قابل ردگیری نگه دارید. پروژه برای باینریهای منتشرشده مسیر بررسی شواهد Sigsum را نیز معرفی کرده است. اگر سازمان فرایند تأیید نرمافزار دارد، age باید از همان مسیر وارد شود؛ داشتن ابزار رمزنگاری از منشأ نامعلوم نقطه شروع قابل اتکایی برای حفاظت از فایل نیست.
تمرین را با فایل بیخطر و یک هویت موقت انجام دهید. پوشه آزمایش باید از پوشه همگامشونده عمومی و مخزن کد جدا باشد. محدود کردن مجوز فایلهای تازه با umask در محیطهای سازگار اقدام مفیدی است، ولی جای بررسی مالکیت و دسترسی واقعی را نمیگیرد. در Windows یا سامانه اشتراک فایل، مدل مجوز متفاوت است و باید مطابق همان محیط بررسی شود. پس از آزمایش نیز مشخص کنید کلید تمرینی نگهداری میشود یا دیگر کاربردی ندارد.
umask 077
age-keygen -o lab-key.txt
age-keygen -y lab-key.txt > recipient.txt
age -R recipient.txt -o report.txt.age report.txt
age --decrypt -i lab-key.txt -o restored.txt report.txt.age
در این نمونه، report.txt داده آزمایشی و restored.txt نتیجه بازیابی است. پیش از اجرای رمزگشایی مطمئن شوید فایل مقصد مهمی با همین نام وجود ندارد؛ طبق راهنمای ابزار خروجی موجود میتواند بازنویسی شود. بعد از اجرا، محتوای بازیابیشده را با اصل مقایسه کنید. صرف تولید فایلی با پسوند age نشانه موفقیت کامل نیست؛ نتیجه فرمان، اندازه خروجی و آزمون باز کردن با هویت صحیح باید با هم بررسی شوند.
چند دریافتکننده و معنای دسترسی
با تکرار گزینه دریافتکننده یا استفاده از فایل recipient میتوان یک خروجی را برای چند نفر رمزگذاری کرد. هر یک از دریافتکنندگان مجاز میتواند مستقل فایل را باز کند. این الگو برای گروه کاری مفید است، ولی به معنای تقسیم کلید یا نیاز به تأیید جمعی نیست. اگر هدف سازمان این است که دو نفر همزمان در بازیابی مشارکت کنند، صرف افزودن دو دریافتکننده چنین خاصیتی ایجاد نمیکند و باید راهکار متفاوتی طراحی شود.
فایل دریافتکنندگان میتواند هر رشته عمومی را در یک خط داشته باشد و طبق راهنما خطوط خالی یا توضیحی نادیده گرفته میشوند. نگهداری چنین فایلی در مخزن کنترلشده امکان بازبینی تغییرات را فراهم میکند. با این حال، هر تغییر فهرست بر دسترسی فایلهای تازه اثر میگذارد؛ فایلهایی که قبلاً رمز شدهاند خودکار تغییر نمیکنند. ورود عضو جدید یا خروج عضو قدیمی باید با سیاست روشن درباره بازتولید بستهها و دسترسی به آرشیوهای قبلی همراه باشد.
گذرواژه یا کلید عمومی؟
age حالت رمزگذاری با گذرواژه نیز دارد. این روش برای تبادل محدود که دریافتکننده هنوز کلید عمومی ندارد ممکن است کاربردی باشد، اما انتقال امن گذرواژه مسئله جداگانهای است. فرستادن فایل و گذرواژه در همان پیام یا همان پوشه مشترک میتواند مزیت حفاظت را از بین ببرد. استفاده از گذرواژه کوتاه و قابل حدس نیز کیفیت طراحی ابزار را جبران نمیکند. برای همکاری تکرارشونده، مدیریت کلید عمومی معمولاً مسیر قابل کنترلتری ایجاد میکند.
age --passphrase -o sample.txt.age sample.txt
age --decrypt -o recovered.txt sample.txt.age
ابزار میتواند در فرایند تعاملی گذرواژه امن تولید کند. نگهداری آن باید با حساسیت فایل و نیاز بازیابی متناسب باشد. قراردادن گذرواژه در متن اسکریپت، history پوسته یا گزارش اجرا روش مناسبی برای خودکارسازی نیست. اگر یک job بدون حضور انسان اجرا میشود، ابتدا مدل مدیریت هویت آن را طراحی کنید؛ تلاش برای دور زدن پرسش تعاملی با ذخیره راز در کنار فرمان معمولاً مشکل حفاظت را فقط جابهجا میکند.
حفاظت از خود کلید خصوصی
گم شدن تنها نسخه کلید خصوصی ممکن است بازیابی داده را ناممکن کند. در مقابل، تکثیر بیحساب آن روی چند لپتاپ و پوشه اشتراکی سطح افشا را افزایش میدهد. یک برنامه عملی باید تعداد نسخهها، محل نگهداری، مسئول بازیابی و آزمون دورهای را مشخص کند. بهتر است حداقل یک تمرین بازیابی با فایل آزمایشی انجام شود تا معلوم شود پشتیبان کلید واقعاً قابل استفاده است و صرفاً فایلی ناقص یا متعلق به هویت دیگری نیست.
README امکان استفاده از فایل هویت رمزگذاریشده با گذرواژه را توضیح میدهد. این روش در برخی سناریوهای نگهداری راه دور مفید است، ولی اگر مهاجم به کل دستگاه و فرایند فعال دسترسی داشته باشد، وجود یک لایه گذرواژه به تنهایی مسئله را حل نمیکند. خطر را براساس زمان استفاده تحلیل کنید: کلید در حال سکون، کلید هنگام باز شدن و داده رمزگشاییشده سه وضعیت متفاوت دارند. کنترل هر وضعیت باید با مدل تهدید واقعی هماهنگ شود.
ترکیب با آرشیو و پشتیبان
age فایل را رمز میکند و خودش سیاست پشتیبانگیری، نسخهبندی یا انتخاب فایلهای ورودی را مدیریت نمیکند. برای یک پوشه معمولاً ابتدا بسته آرشیو ساخته میشود یا خروجی ابزار آرشیو به age فرستاده میشود. در این حالت باید خطای مرحله آرشیو نیز تشخیص داده شود. ممکن است خروجی رمزگذاریشده از نظر قالب سالم باشد ولی فقط بخشی از داده مورد انتظار را داشته باشد؛ رمزنگاری صحت محتوای انتخابشده برای پشتیبان را تضمین نمیکند.
در اسکریپت پشتیبان، ذخیره روی نام موقت و نهایی کردن فایل پس از موفقیت همه مراحل میتواند از انتشار خروجی ناقص جلوگیری کند. همچنین فهرست مورد انتظار فایلها، زمان تهیه و نتیجه آزمون بازیابی را نگه دارید. فشردهسازی قبل از رمزگذاری معمولاً در همین مرحله آرشیو انجام میشود. اگر انتقال شبکه قطع شود، مقصد باید بتواند فایل ناقص را تشخیص دهد و آن را به عنوان آخرین پشتیبان سالم معرفی نکند. اینها پیشنهادهای عملیاتی پیرامون ابزار هستند، نه قابلیت زمانبندی داخلی age.
خروجی متنی و محدودیت کانال انتقال
گزینه armor خروجی را به قالب متنی قابل انتقال تبدیل میکند. این گزینه برای کانالهایی که باینری را خوب منتقل نمیکنند مفید است، اما حفاظت قویتری نسبت به خروجی عادی ایجاد نمیکند. حجم خروجی و رفتار سامانه پیامرسان با خطوط بلند یا قالببندی را بررسی کنید. کپی دستی بخشی از فایل یا تبدیل ناخواسته نویسهها ممکن است خروجی را خراب کند. برای فایل مهم، مسیر انتقال فایل معمولاً از کپی کردن متن طولانی قابل اتکاتر است.
نام فایل و اندازه تقریبی آن معمولاً بیرون از محتوای رمزگذاریشده باقی میمانند. اگر نامی مانند گزارشحقوق یا نام مشتری حساس است، نام بیرونی بسته را هم با سیاست مناسب انتخاب کنید. age نباید به عنوان ابزاری برای پنهان کردن همه فرادادههای ارتباط معرفی شود. حفاظت از محتوای فایل یک هدف روشن است؛ پنهان کردن اینکه چه کسی با چه کسی و چه زمانی تبادل داشته، مسئله دیگری با ابزارها و محدودیتهای متفاوت است.
کلید SSH و قابلیتهای تازه
پروژه برای راحتی از برخی کلیدهای عمومی SSH مانند ssh-ed25519 و ssh-rsa پشتیبانی میکند. راهنمای رسمی تأکید میکند این مسیر رمزنگاری پیچیدهتری دارد و یک برچسب مرتبط با کلید عمومی در فایل میگذارد که میتواند ردیابی فایلهای رمزشده برای همان کلید را ممکن کند. همچنین پشتیبانی از ssh-agent را در این مسیر نباید فرض کرد. برای طراحی تازه، انتخاب کلید اختصاصی age میتواند نقشها را روشنتر نگه دارد.
README جاری قابلیت کلیدهای ترکیبی پساکوانتومی را نیز توضیح میدهد و پشتیبانی داخلی آن را از نسخه مشخصی به بعد بیان میکند. پیش از استفاده، سازگاری نسخه همه دریافتکنندگان و طول بیشتر دریافتکننده را بررسی کنید. صرف دیدن یک گزینه تازه دلیلی برای تغییر عجولانه تمام آرشیو نیست. ابتدا یک فایل آزمایشی را در تمام سیستمهای مقصد باز کنید و برنامه بازیابی را بهروز سازید. قابلیتهای نسخه جدید باید همراه با سازگاری ابزارهای جانبی ارزیابی شوند.
عیبیابی مرحلهبهمرحله
وقتی رمزگشایی شکست میخورد، ابتدا بررسی کنید فایل کامل رسیده و هویت درست انتخاب شده است. چند کلید مشابه با نامهای مبهم یکی از دلایل رایج سردرگمی عملیاتی است. دریافتکننده عمومی هر هویت را استخراج و با فهرست مورد استفاده در زمان رمزگذاری مقایسه کنید. کلید خصوصی را برای رفع اشکال به فرستنده ندهید؛ او برای ساخت خروجی تازه فقط دریافتکننده عمومی را نیاز دارد. اگر کلید اشتباه بوده، با دریافتکننده تأییدشده دوباره رمزگذاری کنید.
اگر خروجی بازیابی ناقص است یا برنامه مصرفکننده آن را نمیپذیرد، تفاوت میان خرابی انتقال و خطای ساخت داده را بررسی کنید. آرشیو را در محیط مجزا باز کنید و از overwrite کردن مستقیم نسخه سالم خودداری کنید. در خودکارسازی نیز کد خروج همه فرمانها را ثبت کنید و متن خطا را بدون داده خصوصی نگه دارید. آزمون منفی با هویت نامرتبط باید شکست بخورد؛ موفقیت چنین آزمایشی نشانه انتخاب اشتباه فایل یا محیط است و باید بررسی شود.
جمعبندی کاربردی
برای استفاده مطمئن از age، چهار چیز باید روشن باشد: دریافتکننده درست، حفاظت و بازیابی هویت خصوصی، کامل بودن فایل ورودی و مسیر امن مصرف متن آشکار. این ابزار برای رمزگذاری فایل مستقل و ترکیب با جریانهای ساده خط فرمان انتخاب قابل بررسی است. سرویس مدیریت کاربران، ابطال دسترسی آرشیوهای قبلی یا امضای هویت فرستنده را نباید از آن انتظار داشت. تصمیم درباره این نیازها باید در طراحی سامانه پیرامون آن گرفته شود.