PGP – 5e partie : Mettre vos sous-clés sur un matériel dédié

Dans cet article de la série sur PGP, nous poursuivons notre analyse de la sécurisation de vos clés et verrons quelques conseils pour déplacer vos sous-clés sur un dispositif matériel spécialisé.

Article écrit et posté par Konstantin Ryabitsev le 14 mars 2018 sur Linux.com

Traduit par Gilles Gouget pour Librethic le 21 mai 2018.

https://creativecommons.org/licenses/by-sa/4.0/

Protéger l’intégrité de votre code avec PGP – 5e partie : Mettre vos sous-clés sur un matériel dédié
Image : Creative commons zéro

Dans cette suite de tutoriels, Konstantin Ryabitsev vous offre les meilleures pratiques pour utiliser PGP et sécuriser vos clés privées.

Dans cette série de tutoriels, nous fournissons un guide pratique pour l’utilisation de PGP. Si vous avez manqué les articles précédents, vous pouvez rattraper avec les liens ci-dessous. Mais dans cet article, nous poursuivons notre analyse de la sécurisation de vos clés et verrons quelques conseils pour déplacer vos sous-clés sur un dispositif matériel spécialisé.

- 1ère partie : Concepts et outils de base
- 2e partie : Générer et protéger votre clé PGP maître
- 3e partie : Générer des sous-clés PGP
- 4e partie : Mettre votre clé maître sur un stockage hors ligne
- 5ème partie : Mettre vos sous-clés sur un matériel dédié
- 6ème partie : Utiliser PGP avec Git

Check-list

  • Procurez-vous un dispositif matériel compatible avec GnuPG (BON) ;
  • Configurez le dispositif pour qu’il fonctionne avec GnuPG (BON) ;
  • Créez les codes PIN utilisateur et administrateur (BON) ;
  • Déplacez vos sous-clés sur le dispositif (BON) ;

Considérations

Même si notre clé maître est à présent à l’abri d’une fuite ou d’un vol, les sous-clés sont toujours dans votre répertoire /home. Toute personne qui pourrait mettre la main dessus serait capable de déchiffrer vos communications ou de contrefaire votre signature (si elle connaît votre phrase secrète). De plus, chaque fois qu’une opération GnuPG est faite, les clés sont chargées dans la mémoire du système et peuvent y être volées avec des maliciels suffisamment avancés (pensez à Meltdown et à Spectre).

La meilleure façon de protéger complètement vos clés est de les déplacer sur un dispositif matériel spécialisé qui soit capable d’opérations de carte à puce.

Les avantages des cartes à puce

Une carte à puce contient une puce de chiffrement qui est capable de stocker des clés privées et d’effectuer des opérations de chiffrement directement sur la carte elle-même. Parce que le contenu des clés ne quitte jamais la carte à puce, le système d’exploitation de l’ordinateur auquel on connecte le dispositif n’est pas en mesure de récupérer les clés privées elles-mêmes. Ceci est très différent de la clé USB chiffrée que nous avons utilisé plus tôt à des fins de sauvegarde – alors que cette clé USB est branchée et déchiffrée, le système d’exploitation est encore capable d’accéder au contenu de la clé privée. Utiliser un média USB externe chiffré n’est pas une alternative à avoir un dispositif ayant les capacités d’une carte à puce.

Quelques autres avantages des cartes à puce ;

  • Elles sont relativement bon marché et facile à obtenir ;
  • Elles sont petites et faciles à avoir sur soi ;
  • Elles peuvent être utilisées avec de multiples dispositifs ;
  • Beaucoup d’entre elles sont inviolables (ça dépend des fabricants).

Dispositifs de carte à puces disponibles

Les cartes à puces sont arrivées au format carte de crédit, qui leur a valu leur nom. Vous pouvez acheter et utiliser des cartes à puces compatibles GnuPG, et elles demeurent les dispositifs les moins chers que vous pouvez vous procurer. Toutefois, les cartes à puce actuelles ont un défaut majeur : elles nécessitent un lecteur de carte à puce, et très peu d’ordinateurs portables en possèdent.

Pour cette raison, les fabricants ont commencé à proposer de petits dispositifs USB, de la taille d’une clé USB ou plus petits, qui soit contiennent une puce au format microsim, soit implémentent simplement les protocoles de la carte à puce dans leur circuit. Quelques recommandations :

Nitrokey Start : Open hardware et Logiciel Libre, une des options les moins chères pour utiliser GnuPG, mais avec peu de fonctionnalités de sécurité supplémentaires ;

Nitrokey Pro : Similaire à la Nitrokey Start, mais inviolable et qui propose plus de fonctionnalités de sécurité (mais pas le U2F, voir la section Fido U2F du guide) ;

Yubikey 4 : Matériel et logiciel propriétaire, mais moins chère que la Nitrokey Pro et disponible en USB-C, plus pratique avec des laptops récents. Elle propose aussi des fonctionnalités de sécurité additionnelles comme l’U2F.

Notre recommandation est de choisir un dispositif qui soit à la fois capable de fonctionnalités de carte à puce et d’U2F, ce qui signifie, au moment de la rédaction de cet article, une Yubikey 4.

Configurer votre dispositif de carte à puce

Votre dispositif devrait Juste Marcher (TM) du moment que vous le branchez sur une station moderne Linux ou Mac. Vous pouvez le vérifier en exécutant :

$ gpg --card-status

Si vous n’obtenez aucune erreur, mais un listing complet des détails de la carte, vous êtes bon. Malheureusement, résoudre toutes les raisons possibles pour lesquelles ça pourrait ne pas marcher n’est pas l’objectif de ce guide. Si vous avez des soucis pour faire marcher la carte avec GnuPG, cherchez de l’aide sur les canaux habituels d’assistance de votre système d’exploitation.

Les codes PIN n’ont pas à être des chiffres

Notez qu’en dépit qu’on les appelle ’PIN’ (ce qui implique que ce devraient être des chiffres), ni le PIN utilisateur ni le PIN administrateur n’ont à être des chiffres.

Votre dispositif aura probablement des PIN utilisateur et administrateur par défaut à la réception. Pour les Yubikeys, ce sont respectivement 123456 et 12345678. Si ceux-ci ne marchent pas pour vous, référez-vous à la documentation qui accompagne votre dispositif.

Installation rapide

Pour configurer votre dispositif, vous devrez utiliser le menu système GnuPG, car il n’y a pas de commutateur pratique en ligne de commande :

$ gpg --card-edit
[...omitted...]
gpg/card> admin
Admin commands are allowed
gpg/card> passwd

Vous devez régler le PIN utilisateur (1), le PIN administrateur (3) et le code de RESET (4). Prenez soin de les enregistrer et de les conserver dans un endroit sûr – particulièrement le PIN admin et le code de RESET (qui permet d’effacer tout le contenu de la carte à puce). Vous utiliserez si rarement le PIN admin que vous l’oublierez inévitablement si vous ne l’enregistrez pas.

En retournant au menu principal de la carte vous pourrez aussi régler certaines valeurs (comme le nom, le sexe, les données de connexion, etc.), mais ce n’est pas nécessaire et pourrait fuiter certaines informations sur votre dispositif si vous le perdiez.

Déplacer les sous-clés vers votre dispositif

Sortez du menu de la carte (avec ’q’) et enregistrez tous les changements. Ensuite, déplaçons vos sous-clés sur votre dispositif. Vous aurez besoin à la fois de votre phrase secrète PGP et du PIN admin pour la plupart des opérations. Souvenez vous que [fpr] représente l’empreinte complète des 40 caractères de votre clé.

$ gpg --edit-key [fpr]
Secret subkeys are available.
pub rsa4096/AAAABBBBCCCCDDDD
created: 2017-12-07 expires: 2019-12-07 usage: C
trust: ultimate validity: ultimate
ssb rsa2048/1111222233334444
created: 2017-12-07 expires: never usage: E
ssb rsa2048/5555666677778888
created: 2017-12-07 expires: never usage: S
[ultimate] (1). Alice Engineer <alice@example.org>
[ultimate] (2) Alice Engineer <alice@example.net>
gpg>

Utiliser —edit-key nous ramène en mode menu, et vous remarquerez que le listing des clés est un petit peu différent. À partir d’ici, toutes les commandes sont faites à l’intérieur de ce mode menu, comme indiqué par gpg>.

Premièrement, sélectionnons la clé que nous mettrons sur la carte – on fait ça en tapant key 1 (c’est la première de notre listing, notre sous-clé [E]) :

gpg> key 1

Le résultat devrait être subtilement différent :

pub rsa4096/AAAABBBBCCCCDDDD
created: 2017-12-07 expires: 2019-12-07 usage: C
trust: ultimate validity: ultimate
ssb* rsa2048/1111222233334444
created: 2017-12-07 expires: never usage: E
ssb rsa2048/5555666677778888
created: 2017-12-07 expires: never usage: S
[ultimate] (1). Alice Engineer <alice@example.org>
[ultimate] (2) Alice Engineer <alice@example.net>

Notez l’astérisque à côté de la ligne ssb qui correspond à la clé – elle nous indique que cette clé est actuellement ’sélectionnée’. Ça fonctionne comme une bascule, ce qui veut dire que si vous tapez à nouveau key 1, l’astérisque disparaîtra et la clé ne sera plus sélectionnée.

Maintenant, déplaçons cette clé sur la carte à puce :

gpg> keytocard
Please select where to store the key:
(2) Encryption key
Your selection? 2

Puisque c’est notre clé [E], il est logique de la mettre dans l’emplacement ’Encryption’. Quand vous soumettez votre sélection, on vous demandera d’abord votre phrase secrète, puis votre PIN administrateur. Si la commande répond sans erreur, votre clé a été déplacée.

Important : Retapez maintenant key 1 pour désélectionner la première clé, et key 2 pour sélectionner la clé [S] :

gpg> key 1
gpg> key 2
gpg> keytocard
Please select where to store the key:
(1) Signature key
(3) Authentication key
Your selection? 1

Vous pouvez utiliser la clé [S] tant pour la signature que pour l’authentification, mais nous voulons être sûrs qu’elle se trouve dans l’emplacement de signature, alors choisissez (1). Là encore, si votre commande ne renvoie aucune erreur, l’opération a été exécutée avec succès.

Enfin si vous avez créé une clé [A], vous pouvez aussi la déplacer sur la carte, en vous assurant d’abord de désélectionner key 2. Une fois que vous avez fini, tapez ’q’ :

gpg> q
Save changes? (y/N) y

Sauvegarder les changements supprimera les clés que vous avez déplacées sur la carte de votre répertoire /home (mais c’est ok, car nous les avons dans nos sauvegardes si nous devions refaire cette opération pour une carte à puce de remplacement).

Vérifier que les clés ont été déplacées

Si vous faites —list-secret-keys, vous verrez une différence subtile dans le retour :

$ gpg --list-secret-keys
sec# rsa4096 2017-12-06 [C] [expires: 2019-12-06]
111122223333444455556666AAAABBBBCCCCDDDD
uid [ultimate] Alice Engineer <alice@example.org>
uid [ultimate] Alice Engineer <alice@example.net>
ssb> rsa2048 2017-12-06 [E]
ssb> rsa2048 2017-12-06 [S]

Le > dans ssb> indique que la sous-clé n’est disponible que sur la carte à puce. Si vous retournez dans votre répertoire de clés secrètes et regardez son contenu, vous remarquerez que les fichiers .keys ont été remplacés par des talons :

$ cd ~/.gnupg/private-keys-v1.d
$ strings *.key

Le résultat devrait contenir shadowed-private-key pour indiquer que ces fichiers ne sont que des talons et que le véritable contenu est sur la carte à puce.

Vérifier que la carte à puce fonctionne

Pour vérifier que la carte fonctionne bien, vous pouvez créer une signature :

$ echo 'Hello world' | gpg --clearsign > /tmp/test.asc
$ gpg --verify /tmp/test.asc

Ceci devrait vous demander votre PIN à votre première commande, puis afficher ’Good signature’ après que vous ayez lancé la commande gpg –verify.

Félicitations, vous avez rendu extrêmement difficile de voler votre identité numérique de développeur avec succès !

Autres opérations GnuPG communes

Voici une référence rapide à quelques-unes des opérations communes que vous serez amené à faire avec votre clé PGP.

Dans toutes les commandes ci-dessous, [fpr] est l’empreinte de votre clé.

Monter le volume hors ligne de votre clé maître

Vous aurez besoin de votre clé maître pour les opérations suivantes, vous aurez donc d’abord besoin de monter le volume hors ligne de votre clé maître et de dire à GnuPG de l’utiliser. Tout d’abord, identifiez où le média a été monté, par exemple en regardant la sortie de la commande mount. Puis localisez le répertoire où se trouve la sauvegarde de votre répertoire GnuPG et dites à GnuPG de l’utiliser comme son /home.

$ export GNUPGHOME=/media/disk/name/gnupg-backup
$ gpg --list-secret-keys

Vous voulez vous assurer que vous voyez sec et non #sec dans le résultat (le # signifiant que la clé n’est pas disponible et que vous utilisez toujours votre /home habituel).

Mettre à jour votre répertoire de travail GnuPG habituel

Après avoir fait un changement à votre clé en utilisant le stockage hors ligne, vous voudrez importer ces changements das votre répertoire de travail habituel :

$ gpg --export | gpg --homedir ~/.gnupg --import
$ unset GNUPGHOME

Étendre la date d’expiration de la clé

La clé maître que nous avons créée a une date d’expiration par défaut de deux ans à compter de sa date de création. Ceci est fait à la fois pour des raisons de sécurité et pour faire disparaître les clés obsolètes des serveurs de clés.

Pour étendre l’expiration de votre clé d’une année de la date courante, exécutez simplement :

$ gpg --quick-set-expire [fpr] 1y

Vous pouvez aussi utiliser une date précise si c’est plus facile à se souvenir (par exemple votre anniversaire, le 1er janvier, ou la fête nationale).

$ gpg --quick-set-expire [fpr] 2020-07-01

N’oubliez pas de renvoyer les clés ainsi modifiées sur les serveurs de clé.

$ gpg --send-key [fpr]

Révoquer des identités

Si vous avez besoin de révoquer une identité (par exemple si vous changez d’employeur et que votre adresse de courriel n’est plus valide), vous pouvez utiliser cette ligne de commande :

$ gpg --quick-revoke-uid [fpr] 'Alice Engineer <aengineer@example.net>'

Vous pouvez aussi faire la même chose en utilisant le mode menu avec gpg —edit-key [fpr].

Une fois fait, souvenez-vous de renvoyer les clés ainsi modifiées sur les serveurs de clé :

$ gpg --send-key [fpr]

La prochaine fois, nous verrons comment Git supporte de niveaux multiples d’intégration avec PGP.

Article écrit et posté par Konstantin Ryabitsev le 14 mars 2018 sur Linux.com

Traduit par Gilles Gouget pour Librethic le 21 mai 2018

https://creativecommons.org/licenses/by-sa/4.0/