diff --git a/doc/age-keygen.1 b/doc/age-keygen.1 new file mode 100644 index 0000000..4f1d66e --- /dev/null +++ b/doc/age-keygen.1 @@ -0,0 +1,88 @@ +.\" generated with Ronn/v0.7.3 +.\" http://github.com/rtomayko/ronn/tree/0.7.3 +. +.TH "AGE\-KEYGEN" "1" "October 2021" "" "" +. +.SH "NAME" +\fBage\-keygen\fR \- generate age(1) key pairs +. +.SH "SYNOPSIS" +\fBage\-keygen\fR [\fB\-o\fR \fIOUTPUT\fR] +. +.br +\fBage\-keygen\fR \fB\-y\fR [\fB\-o\fR \fIOUTPUT\fR] [\fIINPUT\fR] +. +.br +. +.SH "DESCRIPTION" +\fBage\-keygen\fR generates a new native age(1) key pair, and outputs the identity to standard output or to the \fIOUTPUT\fR file\. The output includes the public key and the current time as comments\. +. +.P +If the output is not going to a terminal, \fBage\-keygen\fR prints the public key to standard error\. +. +.SH "OPTIONS" +. +.TP +\fB\-o\fR, \fB\-\-output\fR=\fIOUTPUT\fR +Write the identity to \fIOUTPUT\fR instead of standard output\. +. +.IP +If \fIOUTPUT\fR already exists, it is not overwritten\. +. +.TP +\fB\-y\fR +Read an identity file from \fIINPUT\fR or from standard input and output the corresponding recipient(s), one per line, with no comments\. +. +.TP +\fB\-\-version\fR +Print the version and exit\. +. +.SH "EXAMPLES" +Generate a new identity: +. +.IP "" 4 +. +.nf + +$ age\-keygen +# created: 2021\-01\-02T15:30:45+01:00 +# public key: age1lvyvwawkr0mcnnnncaghunadrqkmuf9e6507x9y920xxpp866cnql7dp2z +AGE\-SECRET\-KEY\-1N9JEPW6DWJ0ZQUDX63F5A03GX8QUW7PXDE39N8UYF82VZ9PC8UFS3M7XA9 +. +.fi +. +.IP "" 0 +. +.P +Write a new identity to \fBkey\.txt\fR: +. +.IP "" 4 +. +.nf + +$ age\-keygen \-o key\.txt +Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p +. +.fi +. +.IP "" 0 +. +.P +Convert an identity to a recipient: +. +.IP "" 4 +. +.nf + +$ age\-keygen \-y key\.txt +age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p +. +.fi +. +.IP "" 0 +. +.SH "SEE ALSO" +age(1) +. +.SH "AUTHORS" +Filippo Valsorda \fIage@filippo\.io\fR diff --git a/doc/age-keygen.1.html b/doc/age-keygen.1.html new file mode 100644 index 0000000..73e77ec --- /dev/null +++ b/doc/age-keygen.1.html @@ -0,0 +1,141 @@ + + +
+ + +
+ age-keygen - generate age(1) key pairs
+
age-keygen [-o OUTPUT]
+age-keygen -y [-o OUTPUT] [INPUT]
age-keygen generates a new native age(1) key pair, and outputs the identity to
+standard output or to the OUTPUT file. The output includes the public key and
+the current time as comments.
If the output is not going to a terminal, age-keygen prints the public key to
+standard error.
-o, --output=OUTPUTWrite the identity to OUTPUT instead of standard output.
+ +If OUTPUT already exists, it is not overwritten.
-yRead an identity file from INPUT or from standard input and output the + corresponding recipient(s), one per line, with no comments.
--versionPrint the version and exit.
Generate a new identity:
+ +$ age-keygen
+# created: 2021-01-02T15:30:45+01:00
+# public key: age1lvyvwawkr0mcnnnncaghunadrqkmuf9e6507x9y920xxpp866cnql7dp2z
+AGE-SECRET-KEY-1N9JEPW6DWJ0ZQUDX63F5A03GX8QUW7PXDE39N8UYF82VZ9PC8UFS3M7XA9
+
+
+Write a new identity to key.txt:
$ age-keygen -o key.txt
+Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
+
+
+Convert an identity to a recipient:
+ +$ age-keygen -y key.txt
+age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
+
+
+Filippo Valsorda age@filippo.io
+ + +
+ age - simple, modern, and secure file encryption
+
age [--encrypt] (-r RECIPIENT | -R PATH)... [--armor] [-o OUTPUT] [INPUT]
+age [--encrypt] --passphrase [--armor] [-o OUTPUT] [INPUT]
+age --decrypt [-i PATH]... [-o OUTPUT] [INPUT]
age encrypts or decrypts INPUT to OUTPUT. The INPUT argument is
+optional and defaults to standard input. Only a single INPUT file may be
+specified. If -o is not specified, OUTPUT defaults to standard output.
If --passphrase is specified, the file is encrypted with a passphrase
+requested interactively. Otherwise, it's encrypted to one or more
+RECIPIENTS specified with -r/--recipient or
+-R/--recipients-file. Every recipient can decrypt the file.
In --decrypt mode, passphrase-encrypted files are detected automatically and
+the passphrase is requested interactively. Otherwise, one or more
+IDENTITIES specified with -i/--identity are
+used to decrypt the file.
age encrypted files are binary and not malleable, with around 200 bytes of
+overhead per recipient, plus 16 bytes every 64KiB of plaintext.
-o, --output=OUTPUTWrite encrypted or decrypted file to OUTPUT instead of standard output. + If OUTPUT already exists it will be overwritten.
+ + If encrypting without --armor, age will refuse to output binary to a
+ TTY. This can be forced by specifying - as OUTPUT.
--versionPrint the version and exit.
-e, --encryptEncrypt INPUT to OUTPUT. This is the default.
-r, --recipient=RECIPIENTEncrypt to the explicitly specified RECIPIENT. See the + RECIPIENTS AND IDENTITIES section for possible recipient formats.
+ + This option can be repeated and combined with -R/--recipients-file,
+ and the file can be decrypted by all provided recipients independently.
-R, --recipients-file=PATH Encrypt to the RECIPIENTS listed in the
+ file at PATH, one per line. Empty lines and lines starting with #
+ are ignored as comments.
If PATH is -, the recipients are read from standard input. In
+ this case, the INPUT argument must be specified.
This option can be repeated and combined with -r/--recipient,
+ and the file can be decrypted by all provided recipients independently.
-p, --passphrase Encrypt with a passphrase, requested interactively from the terminal.
+ age will offer to auto-generate a secure passphrase.
This option can't be used with -r/--recipient or
+ -R/--recipients-file.
-a, --armorEncrypt to an ASCII-only "armored" encoding.
+ + age armor is a strict version of PEM with type AGE ENCRYPTED FILE,
+ canonical "strict" Base64, no headers, and no support for leading and
+ trailing extra data.
Decryption transparently detects and decodes ASCII armoring.
-d, --decryptDecrypt INPUT to OUTPUT.
+ + If INPUT is passphrase encrypted, it will be automatically detected
+ and the passphrase will be requested interactively. Otherwise, the
+ IDENTITIES specified with -i/--identity
+ are used.
ASCII armoring is transparently detected and decoded.
-i, --identity=PATHDecrypt using the IDENTITIES at PATH.
+ +PATH may be one of the following:
+ + a. A file listing IDENTITIES one per line.
+ Empty lines and lines starting with "#" are ignored as comments.
b. An SSH private key file, in PKCS#1, PKCS#8, or OpenSSH format. + If the private key is password-protected, the password is requested + interactively only if the SSH identity matches the file. See the + SSH keys section for more information, including supported key types.
+ + c. "-", causing one of the options above to be read from standard input.
+ In this case, the INPUT argument must be specified.
This option can be repeated. Identities are tried in the order in which + are provided, and the first one matching one of the file's recipients is + used. Unused identities are ignored.
+ + If -e/--encrypt is explicitly specified (to avoid confusion),
+ -i/--identity may also be used to encrypt to the RECIPIENTS
+ corresponding to the IDENTITIES listed at PATH. This allows using an
+ identity file as a symmetric key, if desired.
RECIPIENTS are public values, like a public key, that a file can be encrypted
+to. IDENTITIES are private values, like a private key, that allow decrypting
+a file encrypted to the corresponding RECIPIENT.
Native age key pairs are generated with age-keygen(1), and provide small
+encodings and strong encryption based on X25519. They are the recommended
+recipient type for most applications.
A RECIPIENT encoding begins with age1 and looks like the following:
age1gde3ncmahlqd9gg50tanl99r960llztrhfapnmx853s4tjum03uqfssgdh
+
+
+An IDENTITY encoding begins with AGE-SECRET-KEY-1 and looks like the
+following:
AGE-SECRET-KEY-1KTYK6RVLN5TAPE7VF6FQQSKZ9HWWCDSKUGXXNUQDWZ7XXT5YK5LSF3UTKQ
+
+
+An encrypted file can't be linked to the native recipient it's encrypted to +without access to the corresponding identity.
+ +As a convenience feature, age also supports encrypting to RSA or Ed25519
+ssh(1) keys. RSA keys must be at least 2048 bits. This feature employs more
+complex cryptography, and should only be used when a native key is not available
+for the recipient. Note that SSH keys might not be protected long-term by the
+recipient, since they are revokable when used only for authentication.
A RECIPIENT encoding is an SSH public key in authorized_keys format
+(see the AUTHORIZED_KEYS FILE FORMAT section of sshd(8)), starting with
+ssh-rsa or ssh-ed25519, like the following:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDULTit0KUehbi[...]GU4BtElAbzh8=
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH9pO5pz22JZEas[...]l1uZc31FGYMXa
+
+
+The comment at the end of the line, if present, is ignored.
+ +In recipient files passed to -R/--recipients-file, unsupported but valid
+SSH public keys are ignored with a warning, to facilitate using
+authorized_keys or GitHub .keys files. (See EXAMPLES.)
An IDENTITY is an SSH private key file passed individually to
+-i/--identity. Note that keys held on hardware tokens such as YubiKeys
+or accessed via ssh-agent(1) are not supported.
An encrypted file can be linked to the SSH public key it was encrypted to.
+This is so that age can identify the correct SSH private key before
+requesting its password, if any.
age will exit 0 if and only if encryption or decryption are successful for the
+full length of the input.
If an error occurs during decryption, partial output might still be generated, +but only if it was possible to securely authenticate it. No unauthenticathed +output is ever released.
+ +Files encrypted with a stable version (not alpha, beta, or release candidate) of
+age, or with any v1.0.0 beta or release candidate, will decrypt with any later
+version of the tool.
If decrypting older files poses a security risk, doing so might cause an error +by default. In this case, a flag will be provided to force the operation.
+ +Generate a new identity, encrypt data, and decrypt:
+ +$ age-keygen -o key.txt
+Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
+
+$ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age
+
+$ age -d -o data.tar.gz -i key.txt data.tar.gz.age
+
+
+Encrypt example.jpg to multiple recipients and output to example.jpg.age:
$ age -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \
+ -r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg
+
+
+Encrypt to a list of recipients:
+ +$ cat > recipients.txt
+# Alice
+age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
+# Bob
+age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg
+
+$ age -R recipients.txt example.jpg > example.jpg.age
+
+
+Encrypt and decrypt a file using a passphrase:
+ +$ 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:
+
+
+Encrypt and decrypt with an SSH public key:
+ +$ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age
+
+$ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg
+
+
+Encrypt to the SSH keys of a GitHub user:
+ +$ curl https://github.com/benjojo.keys | age -R - example.jpg > example.jpg.age
+
+
+Filippo Valsorda age@filippo.io
+ + +