
Un outil de chiffrement simple, moderne et sécurisé (et bibliothèque Go) avec de petites clés explicites, aucune option de configuration et une composabilité de style UNIX.
age est un outil de chiffrement de fichiers, un format et une bibliothèque Go simples, modernes et sécurisés.
Il offre de petites clés explicites, la prise en charge post-quantique, aucune option de configuration et une composabilité de style 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
📜 La spécification du format se trouve sur age-encryption.org/v1. age a été conçu par @benjojo et @FiloSottile.
🦀 Une implémentation Rust alternative et interopérable est disponible sur github.com/str4d/rage.
🌍 Typage est une implémentation TypeScript. Elle fonctionne dans le navigateur, Node.js, Deno et Bun.
🔑 Les jetons PIV matériels tels que les YubiKeys sont pris en charge via le plugin age-plugin-yubikey.
✨ Pour plus de plugins, d'implémentations, d'outils et d'intégrations, consultez la liste awesome age.
💬 L'auteur le prononce [aɡe̞] avec un g dur, comme GIF, et il s'écrit toujours en minuscules.
Sur Windows, Linux, macOS et FreeBSD, vous pouvez utiliser les binaires précompilés.
https://dl.filippo.io/age/latest?for=linux/amd64
https://dl.filippo.io/age/v1.3.1?for=darwin/arm64
...
Si vous téléchargez les binaires précompilés, vous pouvez vérifier leurs preuves Sigsum.
Si votre système dispose d'une version prise en charge de Go, vous pouvez compiler à partir des sources.
L'aide de nouveaux empaqueteurs est très bienvenue.
Pour la documentation complète, lisez la page de manuel age(1).
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.
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.
Les fichiers peuvent être chiffrés pour plusieurs destinataires en répétant -r/--recipient. Chaque destinataire pourra déchiffrer le fichier.
$ age -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \
-r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg
Plusieurs destinataires peuvent également être listés un par ligne dans un ou plusieurs fichiers passés avec l'option -R/--recipients-file.
$ cat recipients.txt
# Alice
age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
# Bob
age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg
$ age -R recipients.txt example.jpg > example.jpg.age
Si l'argument de -R (ou -i) est -, le fichier est lu depuis l'entrée standard.
Pour générer des clés hybrides post-quantiques, sécurisées contre les futures attaques des ordinateurs quantiques, utilisez l'option -pq avec age-keygen. Cela pourrait devenir le comportement par défaut à l'avenir.
Les identités post-quantiques commencent par AGE-SECRET-KEY-PQ-1... et les destinataires par age1pq1.... Les destinataires font malheureusement ~2000 caractères.
$ 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
La prise en charge des clés post-quantiques est intégrée à age v1.3.0 et ultérieur. Alternativement, le binaire age-plugin-pq peut être installé et placé dans $PATH pour ajouter la prise en charge à toute version et implémentation d'age prenant en charge les plugins. Les destinataires fonctionneront immédiatement, tandis que les identités devront être converties en identités de plugin avec age-plugin-pq -identity.
Les fichiers peuvent être chiffrés avec une phrase de passe en utilisant -p/--passphrase. Par défaut, age générera automatiquement une phrase de passe sécurisée. Les fichiers protégés par phrase de passe sont automatiquement détectés lors du déchiffrement.
$ 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:
Si un fichier d'identité passé à -i est un fichier age chiffré par phrase de passe, il sera automatiquement déchiffré.
$ 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":
Les fichiers d'identité protégés par phrase de passe ne sont pas nécessaires dans la plupart des cas d'utilisation, où l'accès au fichier d'identité chiffré implique l'accès à l'ensemble du système. Cependant, ils peuvent être utiles si le fichier d'identité est stocké à distance.
En tant que fonctionnalité pratique, age prend également en charge le chiffrement vers des clés publiques SSH ssh-rsa et ssh-ed25519, et le déchiffrement avec le fichier de clé privée correspondant. (ssh-agent n'est pas pris en charge.)
Notez que la prise en charge des clés SSH utilise une cryptographie plus complexe et intègre une étiquette de clé publique dans le fichier chiffré, ce qui permet de suivre les fichiers chiffrés pour une clé publique spécifique.
$ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age
$ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg
En combinant la prise en charge des clés SSH et -R, vous pouvez facilement chiffrer un fichier vers les clés SSH listées sur un profil GitHub.
$ curl https://github.com/benjojo.keys | age -R - example.jpg > example.jpg.age
Gardez à l'esprit que les gens ne protègent peut-être pas leurs clés SSH à long terme, car elles sont révocables lorsqu'elles ne sont utilisées que pour l'authentification, et que les clés SSH conservées sur des YubiKeys ne peuvent pas être utilisées pour déchiffrer des fichiers.
La commande age-inspect peut afficher des métadonnées sur un fichier chiffré sans le déchiffrer, notamment les types de destinataires, l'utilisation éventuelle du chiffrement post-quantique et la taille de la charge utile.
$ 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
Pour les scripts, utilisez --json pour obtenir une sortie lisible par machine.
| Homebrew (macOS ou 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
(activer les backports pour 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
|