rage(1) General Commands Manual rage(1)

rage - ابزاری ساده، امن و مدرن برای رمزنگاری

rage [-h|--help] [-V|--version] [-e|--encrypt] [-d|--decrypt] [-p|--passphrase] [--max-work-factor] [-a|--armor] [-r|--recipient] [-R|--recipients-file] [-i|--identity] [-j ] [-o|--output] [INPUT]

دستور rage ورودی INPUT را رمزنگاری یا رمزگشایی کرده و به خروجی OUTPUT می‌فرستد. آرگومان INPUT اختیاری است و به‌طور پیش‌فرض ورودی استاندارد (standard input) در نظر گرفته می‌شود. تنها یک فایل INPUT می‌تواند مشخص شود. اگر -o/--output مشخص نشده باشد، OUTPUT به‌طور پیش‌فرض خروجی استاندارد (standard output) خواهد بود.

اگر -p/--passphrase تعیین شود، فایل با یک عبارت عبور (passphrase) که به‌صورت تعاملی درخواست می‌شود رمزنگاری خواهد شد. در غیر این صورت، برای یک یا چند گیرنده (RECIPIENT) که با -r/--recipient یا -R/--recipients-file مشخص شده‌اند رمزنگاری می‌شود. هر گیرنده قادر خواهد بود فایل را به‌تنهایی رمزگشایی کند.

در حالت رمزگشایی -d/--decrypt، فایل‌های رمزنگاری‌شده با عبارت عبور به‌طور خودکار تشخیص داده می‌شوند و عبارت عبور به‌صورت تعاملی درخواست می‌گردد. در غیر این صورت، یک یا چند هویت (IDENTITY) مشخص‌شده با -i/--identity برای رمزگشایی فایل استفاده خواهند شد.

فایل‌های رمزنگاری‌شده با age باینری و غیرقابل‌دستکاری (non-malleable) هستند؛ همراه با حدود ۲۰۰ بایت سربار به ازای هر گیرنده، به‌علاوه ۱۶ بایت به ازای هر ۶۴ کیلوبایت (64KiB) از متن آشکار (plaintext).

[INPUT]
مسیر فایلی که باید خوانده شود.

نمایش این پیام راهنما و خروج.
نمایش اطلاعات نسخه و خروج.
رمزنگاری INPUT به OUTPUT. این گزینه پیش‌فرض است.
رمزگشایی INPUT به OUTPUT.

اگر INPUT با عبارت عبور رمزنگاری شده باشد، به‌طور خودکار تشخیص داده شده و عبارت عبور به‌صورت تعاملی درخواست می‌شود. در غیر این صورت، از هویت‌های (IDENTITIES) مشخص‌شده با -i/--identity استفاده خواهد شد.

قالب زره‌پوش اسکی (ASCII armor) به‌صورت خودکار و شفاف تشخیص داده شده و رمزگشایی می‌شود.

رمزنگاری با یک عبارت عبور، که به‌صورت تعاملی از ترمینال درخواست می‌شود. ابزار rage پیشنهاد ساخت خودکار یک عبارت عبور امن را ارائه خواهد داد.

این گزینه نمی‌تواند همراه با سایر پرچم‌های مربوط به گیرنده استفاده شود.

حداکثر ضریب کار (work factor) مجاز برای رمزگشایی با عبارت عبور.
رمزنگاری به یک کدگذاری «زره‌پوش» صرفاً اسکی (ASCII-only).

زره age یک نسخه سخت‌گیرانه از PEM با نوع "AGE ENCRYPTED FILE"، ساختار کانونیکال و دقیق Base64، بدون هدر و بدون پشتیبانی از داده‌های اضافی در ابتدا یا انتها است.

رمزگشایی به‌طور خودکار و شفاف کدگذاری ASCII armor را تشخیص داده و رمزگشایی می‌کند.

رمزنگاری برای گیرنده (RECIPIENT) به‌صورت صریح. برای قالب‌های مجاز گیرنده، بخش گیرندگان و هویت‌ها (RECIPIENTS AND IDENTITIES) را ببینید.

این گزینه می‌تواند تکرار شود و با سایر پرچم‌های گیرنده ترکیب گردد؛ در این صورت، فایل می‌تواند توسط هر یک از گیرنده‌های ارائه‌شده به‌صورت مستقل رمزگشایی شود.

رمزنگاری برای گیرندگانی (RECIPIENTS) که در فایل مسیر PATH، هر کدام در یک خط درج شده‌اند. خطوط خالی و خطوطی که با «#» آغاز می‌شوند به عنوان توضیح نادیده گرفته می‌شوند.

اگر PATH مقدار «-» باشد، گیرندگان از ورودی استاندارد خوانده می‌شوند. در این حالت، آرگومان INPUT باید حتماً مشخص شده باشد.

این گزینه می‌تواند تکرار شود و با سایر پرچم‌های گیرنده ترکیب گردد؛ در این صورت، فایل می‌تواند توسط تمامی گیرنده‌های ارائه‌شده به‌صورت مستقل رمزگشایی شود.

رمزگشایی با استفاده از هویت‌های موجود در IDENTITY.

مقدار IDENTITY می‌تواند یکی از موارد زیر باشد:

a. فایلی شامل فهرستی از هویت‌ها (IDENTITIES) در هر سطر یک مورد. سطرهای خالی و سطرهایی که با «#» شروع می‌شوند به عنوان توضیح نادیده گرفته می‌شوند.

b. یک فایل رمزنگاری‌شده age با عبارت عبور، شامل هویت‌ها به صورت خط‌به‌خط مشابه بالا. عبارت عبور به‌صورت تعاملی درخواست می‌شود. توجه داشته باشید که فایل‌های هویت محافظت‌شده با عبارت عبور برای اکثر موارد استفاده ضروری نیستند، چرا که دسترسی به فایل هویت رمزنگاری‌شده معمولاً به معنای دسترسی به کل سیستم است.

c. یک فایل کلید خصوصی SSH در قالب‌های PKCS#1، PKCS#8 یا OpenSSH. اگر کلید خصوصی دارای رمز عبور باشد، رمز عبور تنها در صورتی به‌صورت تعاملی درخواست می‌شود که هویت SSH با فایل مطابقت داشته باشد. برای اطلاعات بیشتر، از جمله انواع کلیدهای پشتیبانی‌شده، بخش کلیدهای SSH را ببینید.

d. مقدار «-»، که باعث می‌شود یکی از موارد بالا از ورودی استاندارد خوانده شود. در این حالت، آرگومان INPUT باید مشخص شده باشد.

این گزینه می‌تواند تکرار شود. هویت‌ها به ترتیبی که ارائه شده‌اند ارزیابی می‌شوند و اولین موردی که با یکی از گیرندگان فایل مطابقت داشته باشد استفاده خواهد شد. هویت‌های استفاده‌نشده نادیده گرفته می‌شوند، اما اگر فایل INPUT با عبارت عبور رمزنگاری شده باشد و -i/--identity مشخص گردد، خطا رخ خواهد داد.

رمزگشایی با استفاده از پلاگین بدون‌داده PLUGIN-NAME.

این عمل معادل استفاده از -i/--identity همراه با فایلی است که تنها شامل یک هویت پلاگین منفرد است و هیچ داده خاص پلاگین در آن کدگذاری نشده است.

نوشتن فایل رمزنگاری یا رمزگشایی‌شده در OUTPUT به‌جای خروجی استاندارد. اگر OUTPUT از قبل وجود داشته باشد، رونویسی خواهد شد.

در صورت رمزنگاری بدون -a/--armor، ابزار rage از ارسال خروجی باینری به TTY خودداری خواهد کرد. این رفتار را می‌توان با مشخص کردن «-» به عنوان OUTPUT اجبار کرد. گیرندگان (RECIPIENTS) مقادیر عمومی، مانند یک کلید عمومی هستند که می‌توان فایلی را برای آن‌ها رمزگذاری کرد. هویت‌ها (IDENTITIES) مقادیر خصوصی، مانند یک کلید خصوصی هستند که امکان رمزگشایی فایلی را که برای RECIPIENT متناظر رمزگذاری شده است، فراهم می‌کنند.

جفت‌کلیدهای بومی age با rage-keygen(1) تولید می‌شوند و کدگذاری‌های کوتاه و رمزگذاری قوی مبتنی بر X25519 ارائه می‌دهند. آن‌ها نوع گیرندهٔ توصیه‌شده برای بیشتر کاربردها هستند.

کدگذاری یک RECIPIENT با «age1» آغاز می‌شود و شبیه به نمونهٔ زیر است:


age1gde3ncmahlqd9gg50tanl99r960llztrhfapnmx853s4tjum03uqfssgdh

کدگذاری یک IDENTITY با «AGE-SECRET-KEY-1» آغاز می‌شود و شبیه به نمونهٔ زیر است:


AGE-SECRET-KEY-1KTYK6RVLN5TAPE7VF6FQQSKZ9HWWCDSKUGXXNUQDWZ7XXT5YK5LSF3UTKQ

یک فایل رمزگذاری‌شده را نمی‌توان بدون دسترسی به هویت متناظر، به گیرندهٔ بومی‌ای که برای آن رمزگذاری شده است پیوند داد.

به‌عنوان یک قابلیت جهت سهولت کار، rage از رمزگذاری برای کلیدهای RSA یا Ed25519 برنامهٔ ssh(1) نیز پشتیبانی می‌کند. کلیدهای RSA باید حداقل ۲۰۴۸ بیتی باشند. این ویژگی از رمزنگاری پیچیده‌تری استفاده می‌کند و فقط زمانی باید استفاده شود که کلید بومی برای گیرنده در دسترس نباشد. توجه داشته باشید که ممکن است کلیدهای SSH در درازمدت توسط گیرنده محافظت نشوند، چرا که هنگام استفاده صرفاً برای احراز هویت، قابل ابطال هستند.

کدگذاری یک RECIPIENT، یک کلید عمومی SSH در قالب «authorized_keys» است (بخش «AUTHORIZED_KEYS FILE FORMAT» در sshd(8) را ببینید)، که با «ssh-rsa» یا «ssh-ed25519» آغاز می‌شود، مانند موارد زیر:


ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDULTit0KUehbi[...]GU4BtElAbzh8=
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH9pO5pz22JZEas[...]l1uZc31FGYMXa

توضیحات (کامنت) در انتهای خط، در صورت وجود، نادیده گرفته می‌شود.

در فایل‌های گیرنده که به -R/--recipients-file داده می‌شوند، کلیدهای عمومی SSH معتبر اما پشتیبانی‌نشده همراه با یک هشدار نادیده گرفته می‌شوند تا استفاده از فایل‌های «authorized_keys» یا «.keys» در GitHub تسهیل شود. (بخش مثال‌ها (EXAMPLES) را ببینید.)

یک IDENTITY یک فایل کلید خصوصی SSH است که به‌صورت جداگانه به -i/--identity داده می‌شود. توجه داشته باشید که کلیدهای نگه‌داری‌شده روی توکن‌های سخت‌افزاری مانند YubiKeyها یا کلیدهایی که از طریق ssh-agent(1) در دسترس هستند، پشتیبانی نمی‌شوند.

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

rage می‌تواند از طریق افزونه‌ها گسترش یابد. یک افزونه تنها در صورتی بارگذاری می‌شود که یک RECIPIENT یا IDENTITY متناظر مشخص شده باشد. (صرفاً رمزگشایی فایلی که با یک افزونه رمزگذاری شده است، به دلایل مختلف از جمله دلایل امنیتی، باعث بارگذاری آن نخواهد شد.)

یک RECIPIENT برای افزونه‌ای به نام «example» با «age1example1» آغاز می‌شود، در حالی که یک IDENTITY با «AGE-PLUGIN-EXAMPLE-1» شروع می‌شود. هر دوی آن‌ها داده‌های دلخواه مختص افزونه را کدگذاری می‌کنند و توسط افزونه تولید می‌شوند.

هنگامی که هر یک از آن‌ها مشخص شود، rage به دنبال age-plugin-example در PATH می‌گردد و آن را برای انجام رمزگذاری یا رمزگشایی سرآیند فایل اجرا می‌کند. افزونه ممکن است برای تکمیل عملیات، از طریق rage از کاربر درخواست ورودی کند.

افزونه‌ها را می‌توان آزادانه با سایر افزونه‌ها یا کلیدهای پشتیبانی‌شدهٔ بومی ترکیب کرد.

یک افزونه محدود به این نیست که فقط فایل‌های در نظر گرفته‌شده برای افزونه یا تولیدشده توسط آن را رمزگذاری یا رمزگشایی کند. برای مثال، می‌توان از یک افزونه برای رمزگشایی فایل‌هایی استفاده کرد که برای یک RECIPIENT بومی X25519 یا حتی با یک عبارت عبور رمزگذاری شده‌اند. به طور مشابه، یک افزونه می‌تواند فایلی را به گونه‌ای رمزگذاری کند که بدون استفاده از هیچ افزونه‌ای قابل رمزگشایی باشد.

افزونه‌هایی که تمایز IDENTITY/RECIPIENT برای آن‌ها مفهومی ندارد (مانند افزونهٔ رمزگذاری متقارن) ممکن است فقط یک IDENTITY تولید کنند و به کاربر راهنمایی دهند که رمزگذاری را با پرچم‌های -e/--encrypt و -i/--identity انجام دهد. افزونه‌هایی که مفهوم هویت‌های مجزا برای آن‌ها معنایی ندارد (مانند یک افزونهٔ رمزگذاری با گذرواژه) ممکن است از کاربر بخواهند که از پرچم -j استفاده کند.

تولید یک هویت جدید، رمزگذاری داده‌ها و رمزگشایی:

$ rage-keygen -o key.txt
Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p

$ tar cvz ~/data | rage -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age

$ rage -d -o data.tar.gz -i key.txt data.tar.gz.age

رمزگذاری example.jpg برای چندین گیرنده و ذخیرهٔ خروجی در example.jpg.age:

$ rage -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \
-r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg
رمزگذاری برای فهرستی از گیرندگان:

$ cat > recipients.txt
# Alice
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
# Bob
age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg

$ rage -R recipients.txt example.jpg > example.jpg.age

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

$ rage -p secrets.txt > secrets.txt.age
Using an autogenerated passphrase:
release-response-step-brand-wrap-ankle-pair-unusual-sword-train

$ rage -d secrets.txt.age > secrets.txt
Type passphrase:

رمزگذاری و رمزگشایی با یک فایل هویت محافظت‌شده با عبارت عبور:

$ rage -p <(rage-keygen) > key.age
Public key: age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5
Using an autogenerated passphrase:
hip-roast-boring-snake-mention-east-wasp-honey-input-actress

$ rage -r age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5 secrets.txt > secrets.txt.age

$ rage -d -i key.age secrets.txt.age > secrets.txt
Type passphrase:

رمزگذاری و رمزگشایی با یک کلید عمومی SSH:

$ rage -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age

$ rage -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg

رمزگذاری و رمزگشایی با age-plugin-yubikey:

$ age-plugin-yubikey
# Run interactive setup, generate identity file and obtain recipient.

$ rage -r age1yubikey1qwt50d05nh5vutpdzmlg5wn80xq5negm4uj9ghv0snvdd3yysf5yw3rhl3t secrets.txt > secrets.txt.age

$ rage -d -i age-yubikey-identity-388178f3.txt secrets.txt.age

رمزگذاری برای کلیدهای SSH یک کاربر GitHub:

$ curl https://github.com/benjojo.keys | rage -R - example.jpg > example.jpg.age

rage-keygen(1), rage-mount(1)

v0.12.1

Jack Grigg <thestr4d@gmail.com>

rage 0.12.1