Beryl::Config::EncryptionConfig
Configuration de chiffrement d'un pool/dataset ZFS.
Deux modes supportés :
-
ssh_unlock (Option C) — la clé vit sur le poste opérateur (
~/.config/beryl/<société>/<domaine>/<host>.key, chmod 0400). Au reboot, l'opérateur lanceberyl unlock <host>; la clé voyage via stdin SSH, jamais loggable. Pas de prérequis Tang. Code livré le 25 avril 2026. -
tang (Option D) — la clé est dérivée à chaque boot via le protocole Tang (échange McCallum-Relyea). Le serveur doit pouvoir joindre au moins
thresholdTangs au moment du boot. Le shardcrystal-clevis-zfsv0.2 (livré 27 avril 2026) implémente le client Tang + le binding ZFS native. Multi-Tang threshold N-of-M supporté via SSS.
Voir zpool-encryption-architecture.adoc § « Le modèle SSH unlock »
et boot-and-mount-plan.adoc § « Mode tang » pour les flows
complets.
Constructors
Class methods
Construit une EncryptionConfig à partir de la valeur YAML
encryption: d'un pool/dataset. Retourne nil si pas de
chiffrement déclaré (encryption: false ou absence).
Quatre formes acceptées :
encryption: false → nil (pas chiffré) encryption: true → mode ssh_unlock (Option C, défaut) encryption: mode: ssh_unlock → idem, forme étendue compression: lz4
encryption: mode: tang tang: urls: [http://tang.local:8888] threshold: 1 compression: zstd-3
pool_name n'est utilisé que pour les messages d'erreur.
Cette factory NE LÈVE PAS sur les incohérences d'usage
(URL manquante, threshold > N…) — c'est la responsabilité
de validate! appelé par Pool#validate!. Elle ne lève QUE
sur les modes inconnus, où la lecture YAML elle-même n'a pas
de sens.
Instance methods
Compression ZFS du dataset chiffré. Appliquée AVANT le chiffrement par ZFS native, donc gain réel sur les données compressibles (logs, BDD, JSON, code). « lz4 » par défaut (compromis perf/ratio), « zstd-3 » pour ratio max, « off » pour les binaires/médias déjà compressés.
URLs des serveurs Tang. Vide en mode ssh_unlock. En mode tang : 1 URL = single-Tang (SPOF), N URLs + threshold = multi-Tang SSS.
Threshold K dans Shamir Secret Sharing : combien de Tangs sur
tang_urls.size doivent répondre pour reconstituer la clé.
1 par défaut (single-Tang). Doit être ≤ tang_urls.size.
Validation cohérence interne. Levée à la résolution YAML pour rejeter une config absurde (mode tang sans URL, threshold > N…).