age について
age はコマンドラインの暗号化ツールで、わかりやすいキー形式と最新の暗号化標準を採用しています。キーペアの生成、ファイルの暗号化と復号化ができ、CLI に親切なインターフェースを提供するため、自動化スクリプトと継続的インテグレーション ワークフローに適しています。
主な機能
- 01age-keygen を使用して暗号化キーペアを生成しファイルに保存する
- 02-r フラグで受取人の公開鍵を指定してファイルを暗号化する
- 03-o オプションを使用して暗号化された出力を指定したファイルに書き込む
活用シーン
- 01CI/CD パイプラインで機密設定ファイルと展開シークレットを自動的に暗号化する
- 02コーディングエージェント ワークフロー中に生成される一時ファイルと中間データを保護する
- 03複雑なキー管理インフラなしで暗号化されたファイルを開発者間で安全に交換する
インストール
OS またはパッケージマネージャーを選び、コマンドをターミナルで実行します。
インストール後にage --versionを実行して確認します。
コマンド例
よく使うコマンドを使う順に並べています。
詳細
age は、シンプルでモダンかつ安全なファイル暗号化ツール、フォーマット、Go ライブラリです。
小さく明示的な鍵、耐量子対応、設定オプションのない設計、UNIX 形式の組み合わせやすさが特長です。
$ age-keygen -o key.txt
Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
$ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age
$ age --decrypt -i key.txt data.tar.gz.age > data.tar.gz
📜 フォーマット仕様は age-encryption.org/v1 にあります。age は @benjojo と @FiloSottile が設計しました。
🦀 相互運用可能な代替の Rust 実装は github.com/str4d/rage で入手できます。
🌍 Typage は TypeScript 実装です。ブラウザー、Node.js、Deno、Bun で動作します。
🔑 YubiKey などのハードウェア PIV トークンは、age-plugin-yubikey プラグインを通じてサポートされています。
✨ その他のプラグイン、実装、ツール、統合については、awesome age の一覧をご覧ください。
💬 作者は [aɡe̞] と発音します。硬い g の音で、GIF と同じです。また、常に小文字で表記します。
インストール
| Homebrew(macOS または Linux) |
brew install age
|
| MacPorts |
port install age
|
| Windows |
winget install --id FiloSottile.age
|
| Alpine Linux v3.15+ |
apk add age
|
| Arch Linux |
pacman -S age
|
| Debian 12+ (Bookworm) |
apt install age
|
| Debian 11 (Bullseye) |
apt install age/bullseye-backports
(age v1.0.0+ を利用するにはバックポートを有効にしてください)
|
| Fedora 33+ |
dnf install age
|
| Gentoo Linux |
emerge app-crypt/age
|
| Guix System |
guix package -i age
|
| NixOS / Nix |
nix-env -i age
|
| openSUSE Tumbleweed |
zypper install age
|
| Ubuntu 22.04+ |
apt install age
|
| Void Linux |
xbps-install age
|
| FreeBSD |
pkg install age(security/age)
|
| OpenBSD 6.7+ |
pkg_add age(security/age)
|
| Chocolatey(Windows) |
choco install age.portable
|
| Scoop(Windows) |
scoop bucket add extras && scoop install age
|
Windows、Linux、macOS、FreeBSD では、ビルド済みバイナリを使用できます。
- https://dl.filippo.io/age/latest?for=linux/amd64
- https://dl.filippo.io/age/v1.3.2?for=darwin/arm64
- ...
ビルド済みバイナリをダウンロードした場合は、Sigsum の証明を確認できます。
お使いのシステムにサポート対象のバージョンの Goがある場合は、ソースからビルドできます。
go install filippo.io/age/cmd/...@latest
新しいパッケージメンテナーの皆さまのご協力を歓迎します。
使い方
詳しいドキュメントについては、age(1) の man ページをお読みください。
Usage:
age [--encrypt] (-r RECIPIENT | -R PATH)... [--armor] [-o OUTPUT] [INPUT]
age [--encrypt] --passphrase [--armor] [-o OUTPUT] [INPUT]
age --decrypt [-i PATH]... [-o OUTPUT] [INPUT]
Options:
-e, --encrypt Encrypt the input to the output. Default if omitted.
-d, --decrypt Decrypt the input to the output.
-o, --output OUTPUT Write the result to the file at path OUTPUT.
-a, --armor Encrypt to a PEM encoded format.
-p, --passphrase Encrypt with a passphrase.
-r, --recipient RECIPIENT Encrypt to the specified RECIPIENT. Can be repeated.
-R, --recipients-file PATH Encrypt to recipients listed at PATH. Can be repeated.
-i, --identity PATH Use the identity file at PATH. Can be repeated.
--version Print the version.
INPUT defaults to standard input, and OUTPUT defaults to standard output.
If OUTPUT exists, it will be overwritten.
RECIPIENT can be an age public key generated by age-keygen ("age1...")
or an SSH public key ("ssh-ed25519 AAAA...", "ssh-rsa AAAA...").
Recipient files contain one or more recipients, one per line. Empty lines
and lines starting with "#" are ignored as comments. "-" may be used to
read recipients from standard input.
Identity files contain one or more secret keys ("AGE-SECRET-KEY-1..."),
one per line, or an SSH key. Empty lines and lines starting with "#" are
ignored as comments. Passphrase encrypted age files can be used as
identity files. Multiple key files can be provided, and any unused ones
will be ignored. "-" may be used to read identities from standard input.
When --encrypt is specified explicitly, -i can also be used to encrypt to an
identity file symmetrically, instead or in addition to normal recipients.
複数の宛先
-r/--recipient を繰り返し指定すると、複数の宛先にファイルを暗号化できます。各宛先はファイルを復号できます。
$ age -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \
-r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg
宛先ファイル
-R/--recipients-file フラグで指定した 1 つ以上のファイルに、宛先を 1 行につき 1 つずつ列挙することもできます。
$ cat recipients.txt
# Alice
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
# Bob
age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg
$ age -R recipients.txt example.jpg > example.jpg.age
-R(または -i)の引数が - の場合、ファイルは標準入力から読み込まれます。
ポスト量子鍵
将来の量子コンピューターによる攻撃にも安全なハイブリッド型のポスト量子鍵を生成するには、age-keygen に -pq フラグを指定します。将来的には、これがデフォルトになる可能性があります。
ポスト量子 ID は AGE-SECRET-KEY-PQ-1... で始まり、受信者は age1pq1... で始まります。ただし、受信者は約 2000 文字と非常に長くなります。
$ age-keygen -pq -o key.txt
$ age-keygen -y key.txt > recipient.txt
$ age -R recipient.txt example.jpg > example.jpg.age
$ age -d -i key.txt example.jpg.age > example.jpg
ポスト量子鍵のサポートは、age v1.3.0 以降に組み込まれています。または、age-plugin-pq バイナリをインストールして $PATH に配置すれば、プラグインをサポートするあらゆるバージョンおよび実装の age にサポートを追加できます。受信者はそのまま使用できますが、ID は age-plugin-pq -identity でプラグイン ID に変換する必要があります。
パスフレーズ
-p/--passphrase を使用すると、パスフレーズでファイルを暗号化できます。デフォルトでは、age が安全なパスフレーズを自動的に生成します。パスフレーズで保護されたファイルは、復号時に自動的に検出されます。
$ age -p secrets.txt > secrets.txt.age
Enter passphrase (leave empty to autogenerate a secure one):
Using the autogenerated passphrase "release-response-step-brand-wrap-ankle-pair-unusual-sword-train".
$ age -d secrets.txt.age > secrets.txt
Enter passphrase:
パスフレーズで保護された鍵ファイル
-i に渡された ID ファイルがパスフレーズで暗号化された age ファイルの場合、自動的に復号されます。
$ age-keygen | age -p > key.age
Public key: age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5
Enter passphrase (leave empty to autogenerate a secure one):
Using the autogenerated passphrase "hip-roast-boring-snake-mention-east-wasp-honey-input-actress".
$ age -r age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5 secrets.txt > secrets.txt.age
$ age -d -i key.age secrets.txt.age > secrets.txt
Enter passphrase for identity file "key.age":
暗号化された ID ファイルにアクセスできる場合、システム全体にもアクセスできるため、ほとんどの用途ではパスフレーズで保護された ID ファイルは必要ありません。ただし、ID ファイルをリモートに保存する場合には便利です。
SSH 鍵
便利な機能として、age は ssh-rsa および ssh-ed25519 SSH 公開鍵を使った暗号化と、対応する秘密鍵ファイルを使った復号にも対応しています。(ssh-agent には対応していません。)
$ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age
$ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg
SSH 鍵のサポートでは、より複雑な暗号方式が使われ、暗号化ファイルに公開鍵タグが埋め込まれます。そのため、特定の公開鍵で暗号化されたファイルを追跡できます。
GitHub ユーザー宛ての暗号化
SSH 鍵のサポートと -R を組み合わせると、GitHub プロフィールに登録された SSH 鍵宛てに、簡単にファイルを暗号化できます。
$ curl https://github.com/benjojo.keys | age -R - example.jpg > example.jpg.age
SSH 鍵は、認証のみに使う場合は失効させられるため、長期間保護されない可能性があることに注意してください。また、YubiKey に保存された SSH 鍵は、ファイルの復号には使用できません。
暗号化ファイルの検査
age-inspect コマンドを使うと、復号せずに暗号化ファイルのメタデータを表示できます。これには、受信者の種類、ポスト量子暗号化が使われているかどうか、ペイロードのサイズが含まれます。
$ age-inspect secrets.age
secrets.age is an age file, version "age-encryption.org/v1".
This file is encrypted to the following recipient types:
- "mlkem768x25519"
This file uses post-quantum encryption.
Size breakdown (assuming it decrypts successfully):
Header 1627 bytes
Encryption overhead 32 bytes
Payload 42 bytes
-------------------
Total 1701 bytes
Tip: for machine-readable output, use --json.