web-dev-qa-db-fra.com

Nettoyer mon trousseau de clés Gnupg?

Mon trousseau gnupg contient des centaines d'entrées inutiles. Comment pourrais-je supprimer les clés expirées, révoquées et non signées?

Je souhaite conserver les clés qui ont signé ma clé et importer de nouvelles clés uniquement si nécessaire. J'avais précédemment importé l'intégralité du site Web de confiance pour les signataires de ma clé. Il semblerait que l'un de mes principaux signataires ait recueilli un très grand nombre de signatures au cours de ses voyages, et celles-ci encrassent maintenant mon trousseau de clés.

42
scruss

Feuille de triche GPG de Charles Lockhart :

J'ai utilisé User Name comme étant le nom associé à la clé. Désolé, ce n'est pas très imaginatif. Je pense que gpg est assez large dans ses attributions d’utilisateur, par exemple, le nom de ma clé privée est "Charles Lockhart", mais je peux faire référence à cela en mettant simplement "Lockhart". Cela n'a aucun sens, désolé.

pour supprimer une clé publique (de votre jeu de clés):

$ gpg --delete-key "User Name"

Cela supprime la clé publique de votre jeu de clés.
REMARQUE: S'il y a une clé privée sur votre jeu de clés associé à cette clé publique, vous obtiendrez une erreur! Vous devez d'abord supprimer votre clé privée pour cette paire de clés de votre jeu de clés privé.

pour supprimer une clé privée (une clé de votre jeu de clés privé):

$ gpg --delete-secret-key "User Name"

Cela supprime la clé secrète de votre jeu de clés.

32
MelBurslan

J'ai un script bash programmé pour s'exécuter chaque semaine depuis cron pour gérer ceci:

#!/bin/bash
# Clean up the GPG Keyring.  Keep it tidy.
# blog.lavall.ee

echo -n "Expired Keys: "
for expiredKey in $(gpg2 --list-keys | awk '/^pub.* \[expired\: / {id=$2; sub(/^.*\//, "", id); print id}' | fmt -w 999 ); do
    echo -n "$expiredKey"
    gpg2 --batch --quiet --delete-keys $expiredKey >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -n "(OK), "
    else
        echo -n "(FAIL), "
    fi
done
echo done.

echo -n "Update Keys: "
for keyid in $(gpg -k | grep ^pub | grep -v expired: | grep -v revoked: | cut -d/ -f2 | cut -d' ' -f1); do
    echo -n "$keyid"
    gpg2 --batch --quiet --edit-key "$keyid" check clean cross-certify save quit > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -n "(OK), "
    else
        echo -n "(FAIL), "
    fi
done
echo done.

gpg2 --batch --quiet --refresh-keys > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "Refresh OK"
else
     echo "Refresh FAIL."
fi
8
Warren Lavallee
% gpg --edit-key KEYID
gpg> clean
User ID [...]: 139 signatures removed
gpg> save
% gpg --version
gpg (GnuPG) 1.4.18
[...]
4
fche
echo -n "Expired Keys: "
list_expired_keys="$(gpg2 --list-keys | grep -1 pub | sed 'N;s/\n/ /' | awk '/^pub.* \[expired\: / {id=$7; sub(/^.*\//, "", id); print id}' | fmt -w 999)";
list_revoked_keys="$(gpg2 --list-keys | grep -1 pub | sed 'N;s/\n/ /' | awk '/^pub.* \[revoked\: / {id=$7; sub(/^.*\//, "", id); print id}' | fmt -w 999)";
for key in $list_expired_keys $list_revoked_keys; do
    echo -n "$key"
    gpg2 --batch --quiet --delete-keys $key >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo -n "(OK), "
    else
        echo -n "(FAIL), "
    fi
done
echo done.

voici un script bash faisant le travail. C’est une adaptation de https://superuser.com/a/859739 pour gpg2 où l’identifiant de clé est dans la deuxième ligne.

0
Brian