Journal Gfsecret 0.5.0

Posté par  (site web personnel) . Licence CC By‑SA.
37
18
juil.
2021

Sommaire

Jour’Nal,

Il y a cinq ans, je t’entretenais de gfsecret, un couple d’outils de mon cru pour faciliter la mise en œuvre du partage de secret.

J’utilise toujours ces outils aujourd’hui, et comme je viens de publier la version 0.5.0, c’est l’occasion de te tenir au courant de ce qui a changé depuis 2016.

Rappel : notion « d’URI de fragment »

Un concept clef du projet est celui des « URI de fragment » (share URIs), qui décrivent l’emplacement d’un fragment de secret. Ces URIs sont utilisées par gfsec-split pour savoir où répartir les fragments générés après avoir partagé un secret, et par gfsec-use pour savoir où récupérer les fragments pour reconstituer le secret d’origine.

Quelques exemples d’URI de fragment :

  • file:///home/alice/fragment.045 indique un fragment sur le système de fichier local ;
  • label://ALICEKEY/fragment.163 indique un fragment à la racine d’un périphérique de stockage USB identifié par l’étiquette ALICEKEY ;
  • mtp://RF8GB1X407P/Documents/fragment?share=195 indique un fragment sur le périphérique MTP identifié par son numéro de série (RF8GB1X407P) ;
  • https://example.com/private/fragment.217 indique un fragment sur un serveur web.

Changement de syntaxe pour gfsec-split

Un premier changement mineur, inspiré par un commentaire sur mon précédent journal, concerne la syntaxe d’appel du programme gfsec-split. Les URI de fragments sont désormais considérées comme des arguments et non plus comme des options.

C’est-à-dire qu’une invocation comme la suivante :

$ gfsec-split \
  -s file:///home/alice/.local/share/gfsecret/mysecret \
  -s label://ALICEKEY/mysecret \
  -s mtp://RF8GB1X407P/Documents/mysecret \
  ~/Documents/LinuxFR-Gate/preuves.txt

où les URI de fragments sont spécifiées par l’intermédiaire des options -s, sera désormais (depuis la version 0.4.0) attendue comme suit :

$ gfsec-split \
  ~/Documents/LinuxFR-Gate/preuves.txt \
  file:///home/alice/.local/share/gfsecret/mysecret \
  label://ALICEKEY/mysecret \
  mtp://RF8GB1X407P/Documents/mysecret

où les URI de fragments sont spécifiées à la fin de la ligne de commande, après l’argument indiquant le fichier à partager. C’est plus logique puisque ces URI ne sont pas du tout optionnelles.

(En réalité, par souci de compatibilité gfsec-split accepte toujours l’option -s, mais cette option n’est plus affichée dans l’aide en ligne ni mentionnée dans la page de manuel.)

Menu interactif

Une nouveauté plus significative est l’introduction, à partir de la version 0.4.1, d’un menu interactif (option -i) permettant à l’utilisatrice de gfsec-split de choisir où envoyer les fragments sans avoir à spécifier manuellement des URI.

L’invocation de gfsec-split devient alors :

$ gfsec-split -i ~/Documents/LinuxFR-Gate/preuves.txt
Sélectionnez un périphérique pour le fragment numéro 1 :

  (1) Système de fichiers local
  (2) Volume externe étiquetté 'ALICEKEY'
  (3) Samsung Galaxy A3
  (x) Terminé

Votre choix ?

L’utilisatrice sélectionne alors le périphérique (le système de fichier local étant ici considéré, pour simplifier, comme un « périphérique »), puis entre le nom de fichier (avec son chemin éventuel) à utiliser sur le périphérique en question. Elle répète l’opération autant de fois qu’elle veut créer de fragments, puis sélectionne (x) Terminé lorsque tous les fragments voulus ont été spécifiés.

Il est possible d’utiliser simultanément le menu interactif et des URI spécifiées en argument sur la ligne de commande.

Une limitation du menu interactif pour l’instant est qu’il ne permet pas de sélectionner un dossier sur un périphérique. Pour stocker un fragment dans un dossier plutôt qu’à la racine du périphérique sélectionné, il faut saisir manuellement le chemin d’accès exact vers le dossier voulu. Le dossier en question doit par ailleurs déjà exister sur le périphérique, gfsec-split ne le créera pas (à la place une erreur sera renvoyée).

Gestion plus aisée des fichiers de configuration

Par défaut, gfsec-split créée un fichier de configuration portant le même que le fichier à partager et stocké dans le dossier $XDG_CONFIG_HOME/gfsecret.

L’option -c permet de spécifier un autre emplacement pour le fichier de configuration. Si son argument contient un séparateur de chemin d’accès (/) ou un point, alors il est utilisé tel quel ; sinon, l’argument est interprété comme un nom de fichier à enregistrer dans le dossier $XDG_CONFIG_HOME.

Ainsi :

  • gfsec-split ~/Documents/LinuxFR-Gate/preuves.txt […] : pas d’option -c, comportement par défaut, le fichier de configuration est $XDG_CONFIG_HOME/gfsecret/preuves.conf ;
  • gfsec-split -c partage.conf ~/Documents/LinuxFR-Gate/preuves.txt […] : la configuration sera enregistrée dans un fichier partage.conf, dans le dossier courant au moment de l’invocation de gfsec-split ;
  • gfsec-split -c partage ~/Documents/LinuxFR-Gate/preuves.txt […] : la configuration sera enregistrée dans $XDG_CONFIG_HOME/gfsecret/partage.conf.

L’option -c de gfsec-use obéit à la même logique :

  • gfsec-use -c partage.conf : le fichier est cherché relativement au dossier courant ;
  • gfsec-use -c partage : le fichier partage.conf est cherché dans le dossier $XDG_CONFIG_HOME/gfsecret.

Commandes de destruction et restauration du fichier partagé

Normalement, lorsque gfsec-split a fini de créer les fragments, il supprime le fichier d’origine. À l’inverse, lorsque gfsec-use a fini de rassembler les fragments, il re-créée ce fichier (puis le re-supprime lorsque l’utilisatrice a fait ce qu’elle voulait avec).

Il est maintenant possible de spécifier des commandes arbitraires à exécuter pour « détruire » et « reconstruire » le secret d’origine, si une simple suppression et re-création de fichier n’est pas appropriée.

Par exemple, si le secret à partager est une clef secrète OpenPGP stockée dans le trousseau privée de GnuPG, on pourra appeler gfsec-split avec les options suivantes :

$ gfsec-split \
  --destroy-cmd "gpg-connect-agent 'DELETE_KEY --force DE389DE3[…]7866BA8F' /bye" \
  --restore-cmd "gpg --import -" \
  []

La commande gpg-connect-agent…, appelée pour détruire le secret, demandera à l’agent GnuPG de supprimer la clef identifiée par le keygrip mentionné (DE389DE3…). À l’inverse, la commande gpg --import -, appelée une fois le secret reconstitué, et qui recevra le secret en question sur son entrée standard, ré-importera la clef dans les trousseaux de GnuPG.

En principe d’autres utilisations de ces options sont bien sûr imaginables, mais en pratique c’est le seul usage que j’ai de ces options – le projet gfsecret a dès le départ été conçu dans l’idée de partager des clefs secrètes OpenPGP, et ça reste la principale raison pour laquelle je l’utilise et le maintiens.

En fait, le partage de clefs secrètes OpenPGP est tellement le cas d’utilisation primaire que le projet est désormais fourni avec un script appelé gfsec-split-gpg qui « enveloppe » gfsec-split pour partager automatiquement une clef OpenPGP en épargnant à l’utilisatrice le soin d’obtenir le keygrip de la clef et de spécifier manuellement les options ci-dessus. Le script s’utilise comme gfsec-split, sauf qu’au lieu de prendre un nom de fichier à partager en argument, il va automatiquement chercher la clef primaire secrète dans le trousseau GnuPG de l’utilisatrice.

Support des plans http:// et https://

Dernière nouveauté majeure, et principale nouveauté de la version 0.5.0 publiée ce mois-ci, l’ajout des plans http:// et https:// permettant d’envoyer / récupérer un fragment vers / depuis un serveur web.

La prise en charge de ces plans par gfsec-split est quelque peu limitée, et surtout suppose que le serveur web cible autorise le dépôt de fichier. En pratique, il est probable qu’il sera souvent préférable, pour stocker un fragment sur un serveur distant, de créer le fragment sur le système de fichiers local (avec une URI de plan file://), puis de déposer le fragment sur le serveur distant par tout moyen approprié (par exemple avec scp) — il ne faudra alors pas oublier de mettre à jour le fichier de configuration généré par gfsec-split pour remplacer l’URI de plan file:// par une URI de plan http(s)://.

Si une authentification est requise pour déposer (gfsec-split) ou récupérer (gfsec-use) un fragment depuis une URI de plan http(s)://, les deux programmes s’attendent à obtenir le nom d’utilisateur et le mot de passe nécessaires depuis le fichier classique .netrc. C’est à l’heure actuelle le seul moyen de fournir de quoi s’authentifier. L’utilisation du Secret Service pour obtenir les identifiants depuis le gestionnaire de mots de passe du système (e.g., Gnome Keyring) est à l’étude est une idée en l’air que je viens d’avoir en écrivant ce paragraphe.

Disponible dans une Debian Testing près de chez vous

Dernière nouveauté, mais qui n’est pas de mon fait, gfsecret s’est glissé dans les dépôts de Debian. La version 0.4.6 (fournissant presque toutes les fonctionnalités décrites ci-dessus, à part la prise en charge des URI http(s)://) est ainsi disponible dans Testing et dans Sid, ainsi que dans Ubuntu.

Merci à Thomas Perret pour l’empaquetage !

(Comme quoi, les distros GNU/Linux acceptent vraiment des logiciels de n’importe qui, c’est scandaleux !)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.