age/README.md

148 lines
5.4 KiB
Markdown
Raw Permalink Normal View History

2019-12-27 22:48:29 +00:00
# age
2020-07-20 23:34:08 +00:00
[![pkg.go.dev](https://pkg.go.dev/badge/filippo.io/age)](https://pkg.go.dev/filippo.io/age)
age is a simple, modern and secure file encryption tool, format, and library.
2019-12-27 23:28:49 +00:00
It features small explicit keys, no config options, and UNIX-style composability.
2019-12-27 22:48:29 +00:00
```
$ age-keygen -o key.txt
Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
$ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age
2021-01-15 13:26:33 +00:00
$ age --decrypt -i key.txt data.tar.gz.age > data.tar.gz
2019-12-27 22:48:29 +00:00
```
2019-12-30 01:24:38 +00:00
The format specification is at [age-encryption.org/v1](https://age-encryption.org/v1). To discuss the spec or other age related topics, please email [the mailing list](https://groups.google.com/d/forum/age-dev) at age-dev@googlegroups.com. age was designed by [@Benjojo12](https://twitter.com/Benjojo12) and [@FiloSottile](https://twitter.com/FiloSottile).
An alternative interoperable Rust implementation is available at [github.com/str4d/rage](https://github.com/str4d/rage).
2019-12-27 22:48:29 +00:00
## Usage
```
Usage:
2021-01-15 13:26:33 +00:00
age (-r RECIPIENT | -R PATH)... [--armor] [-o OUTPUT] [INPUT]
age --passphrase [--armor] [-o OUTPUT] [INPUT]
age --decrypt [-i PATH]... [-o OUTPUT] [INPUT]
2019-12-27 22:48:29 +00:00
Options:
-o, --output OUTPUT Write the result to the file at path OUTPUT.
2019-12-27 22:48:29 +00:00
-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.
2019-12-27 22:48:29 +00:00
-d, --decrypt Decrypt the input to the output.
2021-01-15 13:26:33 +00:00
-i, --identity PATH Use the identity file at PATH. Can be repeated.
2019-12-27 22:48:29 +00:00
INPUT defaults to standard input, and OUTPUT defaults to standard output.
2021-01-15 13:26:33 +00:00
RECIPIENT can be an age public key generated by age-keygen ("age1...")
2019-12-27 22:48:29 +00:00
or an SSH public key ("ssh-ed25519 AAAA...", "ssh-rsa AAAA...").
Recipient files contain one or more recipients, one per line. Empty lines
2021-01-04 19:05:33 +00:00
and lines starting with "#" are ignored as comments. "-" may be used to
read recipients from standard input.
2021-01-15 13:26:33 +00:00
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. Multiple key files can be provided, and any unused ones
will be ignored. "-" may be used to read identities from standard input.
2019-12-27 22:48:29 +00:00
```
2019-12-30 01:24:38 +00:00
### Multiple recipients
Files can be encrypted to multiple recipients by repeating `-r/--recipient`. Every recipient will be able to decrypt the file.
```
$ age -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \
-r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg
```
#### Recipient files
Multiple recipients can also be listed one per line in one or more files passed with the `-R/--recipients-file` flag.
```
$ cat recipients.txt
# Alice
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
# Bob
age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg
$ age -R recipients.txt example.jpg > example.jpg.age
```
If the argument to `-R` (or `-i`) is `-`, the file is read from standard input.
2019-12-30 01:24:38 +00:00
### Passphrases
Files can be encrypted with a passphrase by using `-p/--passphrase`. By default age will automatically generate a secure passphrase. Passphrase protected files are automatically detected at decrypt time.
```
$ 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:
```
### SSH keys
As a convenience feature, age also supports encrypting to `ssh-rsa` and `ssh-ed25519` SSH public keys, and decrypting with the respective private key file. (`ssh-agent` is not supported.)
```
$ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age
$ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg
2019-12-30 01:24:38 +00:00
```
Note that SSH key support employs more complex cryptography, and embeds a public key tag in the encrypted file, making it possible to track files that are encrypted to a specific public key.
#### Encrypting to a GitHub user
Combining SSH key support and `-R`, you can easily encrypt a file to the SSH keys listed on a GitHub profile.
```
$ curl https://github.com/benjojo.keys | age -R - example.jpg > example.jpg.age
```
Keep in mind that people might not protect SSH keys long-term, since they are revokable when used only for authentication, and that SSH keys held on YubiKeys can't be used to decrypt files.
2019-12-27 22:48:29 +00:00
## Installation
On macOS or Linux, you can use Homebrew:
2019-12-27 22:48:29 +00:00
```
brew tap filippo.io/age https://filippo.io/age
brew install age
```
On Windows, Linux, and macOS, you can use [the pre-built binaries](https://github.com/FiloSottile/age/releases).
If your system has [Go 1.13+](https://golang.org/dl/), you can build from source:
2019-12-27 22:48:29 +00:00
```
git clone https://filippo.io/age && cd age
go build -o . filippo.io/age/cmd/...
2019-12-27 22:48:29 +00:00
```
On Arch Linux, age is available from AUR as [`age`](https://aur.archlinux.org/packages/age/) or [`age-git`](https://aur.archlinux.org/packages/age-git/):
```bash
git clone https://aur.archlinux.org/age.git
cd age
makepkg -si
```
2019-12-30 01:24:38 +00:00
On OpenBSD -current and 6.7+, you can use the port:
```
pkg_add age
```
On all supported versions of FreeBSD, you can build the security/age port or use pkg:
```
pkg install age
```
2019-12-27 22:48:29 +00:00
Help from new packagers is very welcome.