Génération d'une clé PGP simple à retenir

Ma clé expirant dans 5 jours, j'en ai profité afin de mettre à jour l'article : Ma nouvelle clé PGP.

En complément, je souhaitais une clé avec un short key-id simple à retenir, Stéphane Bortzmeyer m'avait tapé dans l'œil avec son joli CCC66677 qu'il avait obtenu par coup de chance.

Attention tout de même avec l'utilisation des short key-id, s'il est possible de générer une fin d'empreinte courte (8 derniers caractères) personnalisée, il est aussi possible de faire de l'usurpation simple comme abordé ici, préférez pour une utilisation courante des 0xlong key-id (0x + 16 derniers caractères).

Je souhaitais obtenir quelque chose avec au moins 4 caractères identiques d'affilée, ou alors une forme simple à retenir, par exemple :

  • AAABBBCC
  • 12AAAA21
  • A1BBBBA1
  • BACFBBBB

Si vous utilisez gpg-agent, killez-le :

[user@local ~]$ gpgconf --kill gpg-agent

Afin de ne pas pourrir votre ~/.gnupg, renommez-le :

[user@local ~]$ mv ~/.gnupg/ ~/.gnupg.old/

Lancez la commande gpg afin de recréer le répertoire et le trousseau local, puis faites CTRL+D :

[user@local ~] gpg
gpg: répertoire « /home/user/.gnupg » créé
gpg: le trousseau local « /home/user/.gnupg/pubring.kbx » a été créé
gpg: WARNING: no command supplied.  Trying to guess what you mean ...
gpg: Vous pouvez taper votre message…
gpg: processing message failed: Erreur système inconnue

Pour la génération, veillez à avoir un fichier de configuration ~/.gnupg/gpg.conf fort, vous devez le créer, par exemple :

cert-digest-algo SHA512
cipher-algo AES256
compress-algo ZLIB
default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed
digest-algo SHA512
disable-cipher-algo 3DES
personal-cipher-preferences AES256 AES192 AES
personal-digest-preferences SHA512 SHA384 SHA256 SHA224

keyid-format 0xlong
with-fingerprint

list-options show-uid-validity
verify-options show-uid-validity

no-comments
no-emit-version
export-options export-minimal

s2k-cipher-algo AES256
s2k-count 65011712
s2k-digest-algo SHA512
s2k-mode 3
weak-digest SHA1

Afin de générer de l'entropie et accélérer la génération des clés, vous pouvez utiliser haveged :

[user@local ~]$ su -
[root@local ~]$ haveged -w 1024
[root@local ~]$ exit

Il ne reste plus qu'à générer tout un tas de clés sans aucune interaction avec l'utilisateur, vous devez adapter les arguments puis faire un copier/coller dans un terminal :

while true; do
    gpg --batch --full-gen-key <<EOF
    Key-Type: RSA
    Key-Length: 4096
    Key-Usage: Cert
    Name-Real: changeme
    Name-Email: email@domail.tld
    Expire-Date: 2y
    Passphrase: changeme
    %commit
EOF
done

Cela prend généralement quelques minutes à quelques heures afin d'avoir de jolis résultats.

Dans un autre terminal, utilisez la commande suivante afin de n'afficher que les clés avec 4 caractères identiques d'affilée :

[user@local ~]$ gpg --list-secret-key | grep -E '^sec' | cut -c 25-32 | grep -E '(.)\1{3}'

Lorsque vous avez trouvé votre bonheur, vous pouvez killer la génération avec CTRL+C puis killer haveged :

[root@local ~]$ pkill haveged
[root@local ~]$ exit

Exporter la paire de clé souhaitée, par exemple pour BACFBBBB :

[user@local ~]$ gpg --export --armor BACFBBBB > BACFBBBB.pub.asc
[user@local ~]$ gpg --export-secret-keys --armor BACFBBBB > BACFBBBB.priv.asc

Supprimer le répertoire ~/.gnupg et renommer l'ancien :

[user@local ~]$ rm ~/.gnupg/ -rf
[user@local ~]$ mv ~/.gnupg.old/ ~/.gnupg/

Si vous utilisez gpg-agent, relancez-le :

[user@local ~]$ gpg-connect-agent reloadagent /bye

Importer la paire de clé :

[user@local ~]$ gpg --import BACFBBBB.pub.asc
[user@local ~]$ gpg --import BACFBBBB.priv.asc

Redéfinir la confiance à 5 :

[user@local ~]$ gpg --expert --edit-key BACFBBBB
gpg> trust
Quelle est votre décision ? 5
gpg> save

Supprimer les exports :

[user@local ~]$ rm BACFBBBB.*

Vous pouvez maintenant jouer avec votre clé, ajouter des sous-clés, etc.