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 soitadminsys
, soitmachines
). Cette variable sera utilisée comme argument de l'option-m
de la commandegfsplit
. 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 commandegfsplit
. Ici,THRESHOLD
vaut3
pour une valeur deGF_SHARES
comprise entre4
et8
; sa valeur peut être modifiée en passant l'option-n N
au scriptschleuder-gen-revoke
.
2. Check-points
Avant de faire quoi que ce soit, le script échouera lamentablement si :
- les valeurs de
GF_SHARES
etTHRESHOLD
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 deschleuder
.
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.