
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 propose 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.
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.
go install filippo.io/age/cmd/...@latest
L'aide de nouveaux empaqueteurs est la 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 Chiffre l'entrée vers la sortie. Par défaut si omis.
-d, --decrypt Déchiffre l'entrée vers la sortie.
-o, --output OUTPUT Écrit le résultat dans le fichier au chemin OUTPUT.
-a, --armor Chiffre dans un format encodé PEM.
-p, --passphrase Chiffre avec une phrase de passe.
-r, --recipient RECIPIENT Chiffre vers le RECIPIENT spécifié. Peut être répété.
-R, --recipients-file PATH Chiffre vers les destinataires listés dans PATH. Peut être répété.
-i, --identity PATH Utilise le fichier d'identité au chemin PATH. Peut être répété.
--version Affiche la version.
INPUT est par défaut l'entrée standard, et OUTPUT est par défaut la sortie standard.
Si OUTPUT existe, il sera écrasé.
RECIPIENT peut être une clé publique age générée par age-keygen ("age1...")
ou une clé publique SSH ("ssh-ed25519 AAAA...", "ssh-rsa AAAA...").
Les fichiers de destinataires contiennent un ou plusieurs destinataires, un par ligne. Les lignes vides
et les lignes commençant par "#" sont ignorées comme commentaires. "-" peut être utilisé pour
lire les destinataires depuis l'entrée standard.
Les fichiers d'identité contiennent une ou plusieurs clés secrètes ("AGE-SECRET-KEY-1..."),
une par ligne, ou une clé SSH. Les lignes vides et les lignes commençant par "#" sont
ignorées comme commentaires. Les fichiers age chiffrés par phrase de passe peuvent être utilisés comme
fichiers d'identité. Plusieurs fichiers de clés peuvent être fournis, et ceux non utilisés
seront ignorés. "-" peut être utilisé pour lire les identités depuis l'entrée standard.
Lorsque --encrypt est spécifié explicitement, -i peut également être utilisé pour chiffrer vers un
fichier d'identité de manière symétrique, à la place ou en plus des destinataires normaux.
Les fichiers peuvent être chiffrés vers 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, qui sont sécurisées contre les futures
attaques des ordinateurs quantiques, utilisez l'option -pq avec age-keygen. Cela pourrait devenir
la valeur 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 environ 2000 caractères de long.
$ 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 versions ultérieures. 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 qui prend 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 pour 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é de commodité, age prend également en charge le chiffrement vers les 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.)
$ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age
$ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg
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 vers une clé publique spécifique.
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 personnes peuvent ne pas protéger leurs clés SSH à long terme, car elles sont révocables lorsqu'elles sont utilisées uniquement pour l'authentification, et que les clés SSH stockées sur les 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 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
Tip: for machine-readable output, use --json.
| 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
|