Les listes de discussion chiffrées sont gérées par Schleuder, et utilisent GPG. Les clefs privées de Schleuder (une par liste), ainsi que leurs phrases de passe, se trouvent sur bulbe, et les clefs publiques correspondantes sont disponibles sur les serveurs de clefs.

Plusieurs raisons peuvent amener à révoquer ces clefs, par exemple le départ d'un membre de l'équipe admin. sys, ou encore la perte du contrôle de bulbe.

Procédure

La procédure qui suit, qui consiste à envoyer à chaque membre de l'équipe admin. sys. un fragment de certificat de révocation pour chaque clef privée de Schleuder, est à exécuter lors de tout changement dans la composition de l'équipe admin. sys. :

sudo -u schleuder -H schleuder-gen-revoke [-n N] [-i] [LIST [LIST]]

Une partie de la commande schleuder-gen-revoke est interactive si on l'utilise avec l'option -i : pour chaque certificat de révocation à générer, gpg va poser quatre questions dont les réponses fournies par le script en mode non-interactif sont les suivantes :

  • si on veut réellement générer un certificat de révocation pour cette clef : oui ;
  • le motif de révocation à inclure dans le certificat : 0 (aucune raison) ;
  • un commentaire éventuel à inclure dans le certificat : aucun commentaire ;
  • confirmer une dernière fois avant de générer le certificat : oui.

Le reste se fait tout seul.

Au besoin, il est aussi possible de générer un certificat de révocation pour une liste particulière en fournissant son nom comme argument du script.

Détails

Le script shell /usr/local/bin/schleuder-gen-revoke opère comme suit :

1. Initialisation

Quelques variables utiles sont initialisées, notamment :

GF_SHARES
Correspond au nombre de membres de la liste chiffrée ayant pour alias root dans le fichier /etc/aliases (typiquement, dans notre cas, c'est soit adminsys, soit machines). Cette variable sera utilisée comme argument de l'option -m de la commande gfsplit.
THRESHOLD
Nombre de fragments nécessaires et suffisants à réunir pour reconstruire un certificat de révocation avec la commande gfcombine. Cette variable sera utilisée comme argument de l'option -n de la commande gfsplit. Ici, THRESHOLD vaut 3 pour une valeur de GF_SHARES comprise entre 4 et 8 ; sa valeur peut être modifiée en passant l'option -n N au script schleuder-gen-revoke.

2. Check-points

Avant de faire quoi que ce soit, le script échouera lamentablement si :

  • les valeurs de GF_SHARES et THRESHOLD sont incohérentes ;
  • l'user effectif n'est pas schleuder ;
  • l'user appelant n'est pas membre du groupe sudo ;
  • la variable HOME ne correspond pas à celle de schleuder.

Puis le répertoire de travail est modifié : tout se fera dans un répertoire temporaire (tmpfs) aux permissions restreintes (schleuder:schleuder, mode=0700).

3. Génération des certificats

Pour chaque clef privée (donc pour chaque liste de discussion chiffrée), la phrase de passe de la clef est extraite du fichier de configuration correspondant (dans /etc/schleuder/lists/nos-oignons.net/) et passée à gpg --gen-revoke à travers un pipe.

NOTE : Cette étape est par défaut entièrement automatisée. Le choix de l'interactivité reste possible, mais il convient alors de répondre correctement aux questions posées (voir plus haut).

4. Division des certificats

Au fur et à mesure de leur création, les certificats de révocation sont fragmentés avec gfsplit -n ${THRESHOLD} -m ${GF_SHARES} et immédiatement supprimés.

5. Chiffrement des fragments

Les fragments sont ensuite chiffrés à destination des membres de l'équipe admin. sys. Pour chaque certificat de révocation (donc pour chaque clef privée de schleuder), chaque fragment est chiffré pour un et un seul admin. sys., et signé avec la clef privée de la liste adminsys.

6. Envoi des fragments

Enfin un mail individualisé (lui aussi chiffré et signé) est envoyé à chaque membre de la liste adminsys ou machines. Le corps du message dit bonjour Untel, indique les valeurs de THRESHOLD et GF_SHARES utilisées pour spliter les certificats de révocation, et finit avec l'heure et l'identifiant de l'opérateur.