Un guide d'installation détaillé et controversé pour la clé YubiKey
|
Important
|
Traduction d’un article du site Pro Custodibus Le contenu de cette page est la traduction Française de l’article An Opinionated YubiKey Set-Up Guide de Justin Ludwig |
Un guide d’installation opinionné de la clé YubiKey
Cet article vous montrera comment configurer une nouvelle clé YubiKey 5 avec les applications suivantes :
- OpenPGP: utilisé pour chiffrer et signer des messages PGP (aussi appelés GPG), ainsi que pour s’authentifier avec SSH ou WireGuard.
- PIV: utilisé pour des clés de chiffrement et de signature supplémentaires (et l’authentification basée sur les signatures) via l’interface de la carte à puce PKCS #11.
- FIDO (les variantes U2F et FIDO2): utilisé pour une authentification intégrée dans le navigateur « sans mot de passe » (aussi appelée Passkeys) et 2FA (authentification à deux facteurs) avec WebAuthn; ou pour un login local via terminal ou bureau et l’authentification sudo via PAM (Modules d’authentification plug-n-play); ou pour d’autres types d’authentification basée sur les signatures comme SSH.
- OATH: utilisé avec l’application Yubico Authenticator pour 2FA avec TOTP (Mot de passe unique basé sur le temps) ou HOTP (Mot de passe unique basé sur HMAC).
- OTP: utilisé pour l’authentification à deux facteurs avec YubiCloud; ou pour un ou deux mots de passe statiques (static passwords).
(On ne couvrira pas l’application YubiHSM Auth de YubiKey, qui est utilisée pour stocker les identifiants de gestion d’un YubiHSM, car elle est pertinente uniquement si vous gérez des appareils YubiHSM.)
Prérequis
Modèle de menace
Ce guide suppose que la raison principale pour laquelle vous souhaitez utiliser une YubiKey est que vous craignez qu’un adversaire distant, ciblant spécifiquement votre ordinateur, puisse obtenir un accès root sur celui-ci. Avec un accès root à votre ordinateur, l’adversaire sera en mesure de capturer vos frappes de clavier et d’examiner la mémoire de votre ordinateur pour identifier et exfiltrer tous les mots de passe et les clés privées que vous utilisez régulièrement, ainsi que les identifiants stockés sur les disques durs de votre ordinateur (ou accessibles à distance depuis celui-ci).
La volée de vos mots de passe, de vos clés privées et d’autres identifiants permettrait à l’adversaire d’utiliser ces identifiants pour se connecter à n’importe quelle application web publique ou serveur auquel vous avez accès à partir d’un autre ordinateur dans le monde. Elle serait également en mesure de déchiffrer les fichiers qu’elle aurait volés précédemment (ou qui seraient volés plus tard) qui avaient été chiffrés pour vos clés privées. Et elle serait en mesure de signer n’importe quel message, certificat ou autre fichier à tout moment sur n’importe quel ordinateur avec les clés qu’elle aurait volées.
En utilisant une YubiKey pour stocker vos clés privées et en utilisant votre YubiKey pour l’authentification sans mot de passe ou le 2FA sur divers sites Web, vous pouvez limiter l’utilisation d’une partenaire adverse de vos clés privées et autres identifiants. Seulement pendant que la partenaire adverse maintient son accès à votre ordinateur sera-t-elle en mesure d’utiliser vos clés privées ou de se connecter aux sites Web ou autres serveurs à l’aide de vos identifiants.
De plus, tant que vous gardez toujours vos YubiKeys sur vous lorsque vous êtes loin de votre ordinateur (ou les stockez dans un emplacement sécurisé auquel seul vous avez accès, comme une boîte personnelle), vous pouvez empêcher la partenaire adverse d’utiliser vos clés privées et vos identifiants de site Web lorsqu’elle est loin de votre ordinateur – même pour une partenaire adverse qui a un accès physique à votre ordinateur. (Bien sûr, une partenaire adverse avec un accès physique peut toujours faire des choses malveillantes à votre ordinateur, comme configurer un accès distant permanent pour elle.)
Ce guide suppose que même si vous stockez vos identifiants sur une YubiKey, une partenaire adverse distante ayant accès à votre ordinateur sera en mesure de vous faire toucher votre YubiKey chaque fois qu’elle a besoin d’utiliser ces dernières. Par conséquent, les exigences de touche de la YubiKey fournissent uniquement un avantage de “défense en profondeur”, obligeant la partenaire adverse à s’assurer que vous êtes sur votre ordinateur et que vous êtes prêt à toucher votre YubiKey chaque fois qu’elle a besoin d’utiliser une clé privée ou un autre identifiant stocké sur votre YubiKey.
Autres Hypothèses
Certaines autres opinions qui régnent dans ce guide :
- ECC (Cryptographie à courbe elliptique) est préférable que RSA (factorisation de grands nombres). Les clés ECC sont plus petites, et les opérations ECC s’exécutent plus rapidement et consomment moins d’énergie sur la plupart des appareils. De plus, toutes les courbes disponibles sur la YubiKey sont au moins aussi fortes ou plus fortes que RSA-2048 contre les attaques de calcul classique. (À l’inverse, les ordinateurs quantiques pourraient être plus susceptibles de briser même les clés ECC les plus fortes de la YubiKey avant qu’ils ne puissent briser les clés RSA-2048.)
- Toutes les clés privées devraient être générées sur la YubiKey, plutôt que de générer les clés ailleurs et d’importer ensuite dans la YubiKey. Cela garantit que seul le propriétaire de la YubiKey peut utiliser les clés privées de la YubiKey. (Consultez la section Sauvegarde pour des alternatives à la sauvegarde de vos clés.)
- Toutes les applications sur la YubiKey qui peuvent être protégées par un code PIN ou une phrase de passe devraient l’être. Cela empêche un voleur courant qui s’empare de votre YubiKey d’utiliser tout le contenu des identifiants stockés sur elle — elle doit non seulement voler votre YubiKey, mais elle doit également passer beaucoup d’effort à observer l’utilisation de celle-ci pour vous afin de voler vos codes PIN.
Gestionnaire de la YubiKey
Ce guide vous montrera comment utiliser le YubiKey Manager CLI (aka ykman) pour configurer chaque application YubiKey — consultez la page de l’installation du YubiKey Manager pour les options d’installation. Si vous ne utilisez pas un gestionnaire de paquets pour installer le CLI ykman, vous devrez probablement installer le démon pcsc-lite (aka pcscd) séparément.
Sur une distribution Linux basée sur Debian (comme Ubuntu et ses amis), si vous ne utilisez pas un gestionnaire de paquets pour installer le CLI ykman, vous devrez installer ces dépendances afin de construire et d’exécuter le package Python yubikey-manager manuellement :
$ sudo apt install libpcsclite-dev pcscd swig
...
$ pipx install yubikey-manager
Et sur une distribution Fedora (comme RHEL et ses amis), si vous ne utilisez pas un gestionnaire de paquets pour installer le CLI ykman, vous devrez installer ces dépendances pour le package Python yubikey-manager :
$ sudo dnf install pcsc-lite pcsc-lite-devel swig
...
$ pipx install yubikey-manager
Sinon, sur la plupart des distributions Linux, si vous utilisez le gestionnaire de paquets de votre distribution pour installer le CLI ykman, le gestionnaire de paquets installe automatiquement les dépendances nécessaires ; comme sur Debian :
$ sudo apt install yubikey-manager
Ou sur Fedora :
$ sudo dnf install yubikey-manager
Une fois que vous avez installé l’interface en ligne de commande ykman, connectez votre YubiKey à votre ordinateur et exécutez la commande suivante pour afficher ses détails :
$ ykman info
Type de périphérique : YubiKey 5 NFC
Numéro de série : 12345678
Version du firmware : 5.4.3
Format : Clé chaîne (USB-A)
Interfaces USB activées : OTP, FIDO, CCID
La transmission NFC est activée.
Applications USB NFC
OTP Activé Activé
FIDO U2F Activé Activé
FIDO2 Activé Activé
OATH Activé Activé
PIV Activé Activé
OpenPGP Activé Activé
YubiHSM Auth Activé Activé
Chaque application listée a son propre mot de passe PIN ou phrase secrète qui est défini indépendamment des autres applications (sauf pour les applications FIDO U2F et FIDO2, qui partagent une seule interface de gestion FIDO). Le mot de passe PIN ou la passphrase d’une application contrôlent l’accès aux configurations et secrets stockés par cette application. Les configurations et secrets de chaque application peuvent être effacés indépendamment des autres applications.
Code de verrouillage YubiKey
Il existe un seul PIN qui les contrôle tous. Cependant, la YubiKey a une application maître de configuration config qui vous permet d’activer ou de désactiver chaque application individuelle sur la YubiKey. Lorsqu’une application est désactivée, sa configuration et ses secrets ne peuvent pas être accédés ou modifiés — ni effacés. C’est particulièrement important de noter cela, car sinon l’éffacement de la configuration et des secrets d’une application (c’est-à-dire un “réinitialisation à zéro”) ne nécessite pas le PIN ou le mot de passe propre à cette application.
La YubiKey vous permet de définir un code de verrouillage de 128 bits pour protéger les modifications de cette application maître de configuration. Par défaut, votre YubiKey ne dispose d’aucun code de verrouillage défini. Cependant, afin de prévenir un adversaire qui accède à votre ordinateur tandis que la YubiKey est branchée de vous empêchant d’accéder à tous vos secrets YubiKey, vous devriez définir ce code de verrouillage.
Malheureusement, vous devez toujours entrer ce code de verrouillage sous forme d’une chaîne de 32 chiffres hexadécimaux, ce qui rend son utilisation fastidieuse. Heureusement, la plupart des personnes n’auront besoin de l’utiliser qu’occasionnellement.
Exécutez la commande suivante pour définir le code de verrouillage de votre YubiKey sur un nouveau nombre aléatoire :
$ ykman config set-lock-code --generate
Cela générera un nouveau nombre aléatoire (en 32 chiffres hexadécimaux) et l’affichera :
Utilisation d'un code de verrouillage généré aléatoirement : 10a43eacde8630603fc15016bc508605
Confirmer la configuration avec ce code de verrouillage ? [y/N] : y
Entrez y à l’invite pour définir ce code comme le nouveau code de verrouillage. Écrivez ce code sur une feuille de papier (ainsi que tous les autres PINs et mots de passe que vous avez définis pour d’autres applications sur votre YubiKey ; consultez la section Sauvegarde des PINs à la fin de cet article).
Vous devrez entrer ce code de verrouillage à l’avenir pour activer ou désactiver les applications sur votre YubiKey. Par exemple, pour désactiver l’interface NFC de l’application YubiHSM Auth, exécutez la commande suivante :
NFC configuration changes:
Désactiver YubiHSM Auth
Entrez y pour confirmer, puis entrez votre code de verrouillage à 32 chiffres hexadécimaux (10a43eacde8630603fc15016bc508605 dans cet exemple) :
Procéder ? [y/N] : y
Entrez votre code de verrouillage :
Si vous faites la même chose pour l’interface USB (ykman config usb --disable HSMAUTH) et que vous exécutez ensuite la commande ykman info, vous verrez que l’application YubiHSM Auth a été désactivée complètement sur votre YubiKey :
$ ykman info
Type de dispositif : YubiKey 5 NFC
Numéro de série : 12345678
Version du firmware : 5.4.3
Facteur de forme : Cléchain (USB-A)
Interfaces USB activées : OTP, FIDO, CCID
La transmission NFC est activée.
Les capacités configurées sont protégées par un code de verrouillage.
Applications USB NFC
OTP Activé Activé
FIDO U2F Activé Activé
FIDO2 Activé Activé
OATH Activé Activé
PIV Activé Activé
OpenPGP Activé Activé
YubiHSM Auth Désactivé Désactivé
Vous pouvez réactiver une application en exécutant les mêmes commandes avec l’option --enable au lieu de l’option --disable :
$ ykman config usb --enable HSMAUTH
Modification de la configuration USB :
Activer YubiHSM Auth
Voulez-vous continuer ? [y/N]: y
Entrez votre code de verrouillage :
OpenPGP
Nous allons configurer votre application OpenPGP avec une clé de signature Ed25519 pour signer des messages, une clé de déchiffrement X25519 pour déchiffrer des messages et une clé d’authentification Ed25519 pour l’authentification basée sur les signatures (comme pour SSH). Nous la configurerons avec un PIN fort et demanderons le contact pour chaque utilisation de vos clés privées. Si vous n’avez pas déjà installé GnuPG (aka gpg) avec son démon de carte à puce (aka scdaemon) sur votre ordinateur, vous devrez l’installer maintenant.
Sur certaines distributions Linux comme Fedora et ses amis, scdaemon est installé avec le paquet principal GnuPG (gnupg2). Sur d’autres, comme Debian et ses amis, vous devez installer un paquet séparé (scdaemon) en plus du paquet principal GnuPG.
|
Tip
|
Si votre gestionnaire de paquets a installé une version de GnuPG à partir de la branche 2.2.x, et que vous utilisez l’application OpenPGP avec d’autres applications de votre YubiKey régulièrement, vous pourriez vouloir construire et installer manuellement la dernière version de GnuPG, qui fonctionnera mieux avec les autres applications de votre YubiKey. Consultez l’article Installer GnuPG 2.4 sur Ubuntu 22.04 pour un guide étape par étape.
Vous pourriez également avoir besoin d’ajouter les indicateurs |
Une fois que vous avez GnuPG et son démon de carte à puce installés et prêts, mettez à jour votre fichier ~/.gnupg/gpg.conf pour inclure les paramètres suivants :
# ~/.gnupg/gpg.conf
display-charset utf-8
keyid-format 0xlong
keyserver hkp://keys.openpgp.org
personal-cipher-preferences AES AES256
personal-digest-preferences SHA256 SHA512
personal-compress-preferences BZIP2 ZLIB Uncompressed
default-preference-list AES AES256 SHA256 SHA512 BZIP2 ZLIB Uncompressed
cert-digest-algo SHA256
s2k-digest-algo SHA512
s2k-count 65011712
Ce script configure les préférences GnuPG pour utiliser UTF-8 et le format d’ID de clé “long” (par exemple 0x1234567890ABCDEF) lors de l’affichage des clés, ce qui aide à atténuer les tours de passe fausses que l’adversaire pourrait essayer avec des identités de clés similaires. Il indique également à GnuPG d’utiliser AES et SHA-2 quand c’est possible (au lieu de certains des algorithmes crypto plus anciens ou inhabituels qu’il prend en charge également). L’option default-preference-list configure les préférences qui seront insérées dans les nouvelles clés que vous générez, tandis que les options personal-*-preferences permettent de filtrer et d’ordrer les préférences des autres personnes’s clés chaque fois que vous chiffriez ou signez un nouveau message. Et keys.openpgp.org est l’un des rares serveurs de clés publiques encore en opération et acceptant de nouvelles clés.
Exécutez la commande card-status pour vérifier l’état de l’application OpenPGP sur votre YubiKey :
$ gpg --card-status
Lecteur ...........: Yubico YubiKey OTP FIDO CCID 00 00
Identifiant de l'application ...: D2760001240100000006123456780000
Type d'application .: OpenPGP
Version ..........: 3.4
Fabricant .....: Yubico
Numéro de série ....: 12345678
Nom du titulaire de la carte : [non défini]
Préférences linguistiques ...: [non défini]
Salutation .......:
URL de la clé publique : [non défini]
Données d'authentification .......: [non défini]
PIN de signature ....: non forcé
Attributs de la clé ...: rsa2048 rsa2048 rsa2048
Longueurs maximales du PIN .: 127 127 127
Compteur de tentatives de PIN : 3 0 3
Compteur de signatures : 0
Paramétrage KDF ......: désactivé
Clé de signature ....: [aucune]
Clé d'encryption....: [aucune]
Clé d'authentification: [aucune]
Informations générales sur la clé..: [aucune]
Pour configurer un nouveau jeu de clés OpenPGP, exécutez la commande suivante :
$ gpg --edit-card
...
gpg/card>
À l’invite, exécutez la commande admin pour passer en mode administrateur :
gpg/card> admin
Les commandes administrateur sont autorisées
gpg/card>
Exécutez la commande help pour lister les commandes disponibles :
gpg/card> help
quit quit this menu
admin show admin commands
help show this help
list list all available data
name change card holder's name
url change URL to retrieve key
fetch fetch the key specified in the card URL
login change the login name
lang change the language preferences
salutation change card holder's salutation
cafpr change a CA fingerprint
forcesig toggle the signature force PIN flag
generate generate new keys
passwd menu to change or unblock the PIN
verify verify the PIN and list all data
unblock unblock the PIN using a Reset Code
factory-reset destroy all keys and data
kdf-setup setup KDF for PIN authentication (on/single/off)
key-attr change the key attribute
uif change the User Interaction Flag
gpg/card>
Avertissement
Trois commandes listées sont irréversibles : generate, factory-reset et kdf-setup. La commande generate écraserait n’importe quelles clés OpenPGP existantes sur la YubiKey, et la commande factory-reset les effacera. La commande kdf-setup réinitialisera vos PINs existants aux valeurs par défaut.
En particulier, ne jamais exécutez jamais la commande kdf-setup (qui configure la YubiKey pour nécessiter que les clients de l’application OpenPGP exécutent un KDF sur vos PINs avant de les fournir à la YubiKey) — cela entraînerait des incompatibilités avec certains clients OpenPGP, et cela ne fournit pas d’avantage de sécurité pratique sauf si vous réutilisez le même PIN avec différentes cartes ou applications sécurisées.
Nous exécuterons la commande generate à présent pour générer un nouvel ensemble de clés OpenPGP ; cependant, vous devrez généralement exécuter cette commande uniquement une seule fois dans votre vie.
Si vous souhaitez commencer tout à nouveau avec OpenPGP sur votre YubiKey (maintenant ou à un moment quelconque à l’avenir), vous pouvez exécuter la commande factory-reset. Elle effacera vos clés et paramètres OpenPGP existants de la YubiKey — vous ne pourrez plus utiliser les clés OpenPGP que vous aviez précédemment générées sur la YubiKey pour signer, déchiffrer ou s’authentifier. Elle n’affectera aucune des autres applications sur votre YubiKey (comme PIV, FIDO ou OATH).
Si vous exécutez la commande factory-reset après avoir déjà généré un ensemble de clés OpenPGP sur votre YubiKey que vous ne prévoyez jamais d’utiliser à nouveau, assurez-vous également d’exécuter la commande gpg --delete-secret-and-public-key (une fois que vous sortez de l’interface CLI edit-card) avec l’ID de la clé maîtresse ancienne, pour effacer les informations précédemment stockées à son sujet dans le magasin de clés GnuPG de votre ordinateur (sinon vous et GnuPG pourriez vous confondre sur quels sont les nouvelles clés sur la YubiKey, et quels sont les anciens qui ne sont plus disponibles).
### OpenPGP PINs
Premièrement, utilisez la commande `passwd` pour changer les PINs existants de leurs valeurs par défaut :
```bash
gpg/card> passwd
gpg: Carte OpenPGP détectée no. D2760001240100000006123456780000
1 - changer le PIN
2 - débloquer le PIN
3 - changer le PIN administrateur
4 - définir le Code de réinitialisation
Q - quitter
Votre sélection?
L’application OpenPGP a 3 PINs : le PIN utilisateur, le code de réinitialisation (appelé PUK ou Clé de déverrouillage du PIN), et le PIN administrateur. Le PIN utilisateur est celui que vous utilisez pour accéder quotidiennement à vos clés privées OpenPGP ; vous n’avez pas besoin et ne devriez pas définir un code de réinitialisation ; et le PIN administrateur est utilisé pour modifier les paramètres de l’application OpenPGP elle-même (et pour déverrouiller ou changer le PIN utilisateur si vous l’oubliez ou entrez incorrectement trop de fois consécutivement). Lorsqu’on vous demande d’entrer votre “PIN” sans qualificateur “administrateur”, cela signifie généralement que vous devriez entrer le PIN utilisateur, pas le PIN administrateur.
Entrez 1 à l’invite pour la commande passwd, puis entrez 123456 au premier prompt de PIN (le PIN utilisateur par défaut est 123456). Ensuite, entrez le nouveau PIN utilisateur (vous serez invité à le saisir deux fois). N’utilisez pas un numéro — au lieu de cela, utilisez une phrase de passe simple (dans l’ “correct horse battery staple” style) qui fait au moins 6 caractères et est facile à taper (vous devrez le frapper souvent, probablement plusieurs fois par jour). Assurez-vous qu’il est différent de tout autre PIN ou phrase de passe que vous avez jamais utilisé avant.
|
Tip
|
Générer un bon code PIN aléatoire en exécutant la commande suivante : Ce PIN n’a pas besoin d’être aussi fort qu’un mot de passe normal que vous utiliseriez ailleurs, car la YubiKey bloquera automatiquement l’utilisation de l’application OpenPGP après plusieurs tentatives de code PIN incorrectes (plus en détail plus tard) — il suffit qu’il soit à l’extérieur des premiers 100 ou deuxièmes essais que l’adversaire tenterait. Toute bonne phrase aléatoire ou deux mots feront l’affaire — la seule exigence est qu’elle ne soit pas liée à des faits concernant vous (vous devriez supposer que l’adversaire sait tous les faits personnels possibles sur vous, comme votre anniversaire, les noms de vos enfants, vos équipes de sports préférées, les lieux où vous avez vécu, etc.). |
La CLI affichera PIN changed si la modification est réussie :
Votre sélection ? 1
PIN modifié.
1 - modifier le PIN
2 - déverrouiller le PIN
3 - modifier le PIN administrateur
4 - définir le code de réinitialisation
Q - quitter
Votre sélection ?
Ensuite, entrez 3 pour définir le PIN administrateur, puis entrez 12345678 au premier prompt de code PIN (le PIN administrateur par défaut est 12345678). Ensuite, entrez le nouveau PIN administrateur (vous serez invité à l’entrer deux fois). Comme avec le PIN utilisateur ci-dessus, n’utilisez pas un numéro — au lieu de cela, utilisez une phrase de passe simple d’au moins 8 caractères. Elle ne doit pas être plus forte que le PIN utilisateur, juste différent (assez pour qu’un adversaire ne puisse pas deviner le PIN administrateur si elle découvre votre PIN utilisateur).
Le CLI affichera à nouveau PIN changed si l’opération est réussie :
Votre sélection ? 3
PIN changed.
1 - changer le PIN
2 - déverrouiller le PIN
3 - changer le PIN administrateur
4 - définir le code de réinitialisation
Q - quitter
Votre sélection ?
Écrivez sur du papier votre nouveau mot de passe PIN, ainsi que le numéro de série de la YubiKey, et une note indiquant que ces informations sont pour l’application OpenPGP (chaque application YubiKey, comme PIV, FIDO, OATH, etc., utilise son propre ensemble distinct de PINs ou mots de passe). En particulier, vous utiliserez rarement votre PIN administrateur après avoir terminé la configuration de l’application OpenPGP pour la première fois, donc vous allez certainement oublier le PIN administrateur à moins que vous ne l’écriviez sur du papier.
Entrez q pour revenir au CLI principal :
Votre sélection ? q
gpg/card>
Clés OpenPGP
Maintenant, utilisez la commande key-attr afin que lors de la génération de vos clés, elles génèrent des clés Curve 25519 plutôt que des clés RSA :
gpg/card> key-attr
Changement des attributs de la clé du support pour : Clé de signature
Veuillez sélectionner le type de clé que vous souhaitez :
(1) RSA
(2) ECC
Votre sélection ?
Sélectionnez l’option ECC :
Votre sélection ? 2
Veuillez sélectionner la courbe elliptique que vous souhaitez utiliser :
(1) Curve 25519
(4) NIST P-384
Votre sélection ?
Sélectionnez Curve 25519 :
Votre sélection ? 1
Le support sera maintenant reconfiguré pour générer une clé de type : ed25519
Note : Il n'y a aucune garantie que le support supporte la taille demandée.
Si la génération de la clé échoue, veuillez vérifier la documentation de votre support pour voir quelles tailles sont autorisées.
Entrez le code PIN administrateur lorsqu’on vous demande de sauvegarder vos modifications pour cette clé. Sélectionnez les mêmes options (ECC et Curve 25519) que les invites de choix continuent pour la clé d’encryption et la clé d’authentification :
Changement des attributs de clé de la carte pour : Clé d'encryption
Veuillez sélectionner quel type de clé vous souhaitez :
(1) RSA
(2) ECC
Votre sélection ? 2
Veuillez sélectionner quelle courbe elliptique vous souhaitez :
(1) Curve 25519
(4) NIST P-384
Votre sélection ? 1
La carte sera maintenant re-configurée pour générer une clé de type : cv25519
Changement des attributs de clé de la carte pour : Clé d'authentification
Veuillez sélectionner quel type de clé vous souhaitez :
(1) RSA
(2) ECC
Votre sélection ? 2
Veuillez sélectionner quelle courbe elliptique vous souhaitez :
(1) Curve 25519
(4) NIST P-384
Votre sélection ? 1
La carte sera maintenant re-configurée pour générer une clé de type : ed25519
gpg/card>
Si vous liste les informations de la carte, vous devriez maintenant voir le paramètre Key attributes défini comme ed25519 cv25519 ed25519 :
gpg/card> list
Lecteur ...........: Yubico YubiKey OTP FIDO CCID 00 00
Identifiant de l'application ...: D2760001240100000006123456780000
Type d'application .: OpenPGP
Version ..........: 3.4
Fabricant .....: Yubico
Numéro de série ....: 12345678
Nom du titulaire de la carte : [non défini]
Préférences linguistiques ...: [non défini]
Salutation .......:
URL de la clé publique : [non défini]
Données d'identification ..: [non défini]
PIN de signature ....: non forcé
Attributs de clé ...: ed25519 cv25519 ed25519
Longueurs max. PIN .: 127 127 127
Compteur d'essais PIN : 3 0 3
Compteur de signature : 0
Paramétrage KDF ......: désactivé
Clé de signature ....: [aucune]
Clé d'encryption....: [aucune]
Clé d'authentification: [aucune]
Informations générales sur la clé..: [aucune]
```gpg/card>
Vous êtes prêt à générer un nouveau jeu de clés OpenPGP sur la YubiKey en utilisant la commande generate :
gpg/card> generate
Faire une sauvegarde hors carte de la clé d'encryption ? (Y/n)
Entrez n pour vous assurer que les clés privées ne sortent jamais de la YubiKey, puis entrez le PIN administrateur lorsque vous y êtes invité :
Faire une sauvegarde hors carte de la clé d'encryption ? (Y/n) n
Veuillez noter que les paramètres de fabrique des PIN sont
PIN = '123456' PIN administrateur = '12345678'
Vous devriez les changer en utilisant la commande --change-pin
Spécifiez combien la clé doit être valide.
0 = la clé ne expire jamais
<n> = la clé expire dans n jours
<n>w = la clé expire dans n semaines
<n>m = la clé expire dans n mois
<n>y = la clé expire dans n années
La clé est-elle valide pour ? (0)
Puis entrez 0 pour empêcher les clés de s’expirationner :
La clé est-elle valide pour ? (0) 0
La clé ne expire jamais
Est-ce correct ? (y/N) y
GnuPG a besoin de construire un ID utilisateur pour identifier votre clé.
Nom réel :
Lorsqu’on vous demande le nom réel, l’adresse e-mail et le commentaire, utilisez le champ “nom réel” pour le nom d’affichage ou l’alias que vous souhaitez associer à la clé OpenPGP, le champ “adresse e-mail” pour le compte e-mail associé à la clé, et le champ “commentaire” pour un mot ou une phrase qui distingue cette clé des autres clés que vous avez utilisées ou allez utiliser dans l’avenir avec le même nom et e-mail. Par exemple, je pourrais entrer les suivants pour le nom réel, l’adresse e-mail et le commentaire :
Nom réel : Justin Ludwig
Adresse e-mail : justin.ludwig@example.com
Commentaire : clé de travail 1
GnuPG affichera cette identité utilisateur (ou uid) comme Justin Ludwig (clé de travail 1) <justin.ludwig@example.com> lorsque je listerai plus tard toutes les clés que j’ai sur mon portefeuille de clés :
$ gpg --list-keys justin
pub ed25519/0xABCDEF1234567890 2023-01-01 [SC]
1234567890ABCDEF1234567890ABCDEF12345678
uid [ultimate] Justin Ludwig (clé de travail 1) <justin.ludwig@example.com>
sub ed25519/0xFEDCBA0987654321 2023-01-01 [A]
sub cv25519/0x1234567890ABCDEF 2023-01-01 [E]
pub ed25519/0xBCDEF1234567890A 2023-01-01 [SC]
234567890ABCDEF1234567890ABCDEF123456789
uid [ultimate] Justin Ludwig (clé de travail 2) <justin.ludwig@example.com>
sub ed25519/0xEDCBA0987654321F 2023-01-01 [A]
sub cv25519/0x234567890ABCDEF1 2023-01-01 [E]
pub ed25519/0xCDEF1234567890AB 2023-02-01 [SC]
34567890ABCDEF1234567890ABCDEF1234567890
uid [ultimate] Justin Ludwig (clé de maison 1) <jl@example.org>
uid [ultimate] Justin (hk1) <justin@example.net>
sub ed25519/0xDCBA0987654321FE 2023-02-01 [A]
sub cv25519/0x34567890ABCDEF12 2023-02-01 [E]
```pub ed25519/0xDEF1234567890ABC 2023-02-01 [SC]
4567890ABCDEF1234567890ABCDEF1234567890A
uid [ultimate] Justin Ludwig (home key 2) <jl@example.org>
uid [ultimate] Justin (hk2) <justin@example.net>
sub ed25519/0xCBA0987654321FED 2023-02-01 [A]
sub cv25519/0x4567890ABCDEF123 2023-02-01 [E]
|
Note
|
Vous pouvez ajouter plus tard des uids à une clé OpenPGP via la commande gpg --edit-key. Vous pouvez également supprimer des uids existants d’une clé de la même manière — mais la suppression de uids peut être difficile à obtenir complètement correctement et correctement diffusée dans toutes les copies de la clé. Si vous distribuez publiquement une clé, vous devriez envisager de considérer tous les uids distribués avec la clé au moment de sa distribution comme étant efficacement permanemment liés à la clé.
|
Continuer sur le processus de génération. Confirmez que vous êtes satisfait des valeurs uid sélectionnées en entrant o lorsqu’on vous le demande :
Nom réel : Justin
Adresse e-mail : justin@example.com
Commentaire : key1
Vous avez sélectionné cet IDENTIFIANT UTILISATEUR :
"Justin (key1) <justin@example.com>"
Modifier (N)om, (C)ommentaire, (E)mail ou (O)kay/(Q)uit ? o
Ensuite, vous serez invité à entrer à nouveau le PIN administrateur et ensuite le PIN utilisateur. Ensuite, l’ID de la nouvelle clé maître générée sera affiché :
gpg: la clé 0xABCDEF1234567890 est marquée comme étant ultimement de confiance
gpg: le certificat de révocation est stocké dans '/home/justin/.gnupg/openpgp-revocs.d/1234567890ABCDEF1234567890ABCDEF12345678.rev'
clé publique et secrète créées et signées.
Maintenant, si vous liste les détails de la carte, vous verrez les nouvelles clés listées :
gpg/card> list
Lecteur ...........: Yubico YubiKey OTP FIDO CCID 00 00
Identifiant d'application ...: D2760001240100000006123456780000
Type d'application .: OpenPGP
Version ..........: 3.4
Fabricant .....: Yubico
Numéro de série ....: 12345678
Nom du titulaire de la carte : [non défini]
Préférences linguistiques ...: [non défini]
Salutation .......:
URL de la clé publique : [non défini]
Données d'identification .......: [non défini]
PIN de signature ....: non forcé
Attributs de la clé ...: ed25519 cv25519 ed25519
Longueurs maximales du PIN .: 127 127 127
Compteur de tentatives de PIN : 3 0 3
Compteur de signatures : 0
Paramétrage KDF ......: désactivé
Clé de signature ....: 1234 5678 90AB CDEF 1234 5678 90AB CDEF 1234 5678
créée ....: 2023-01-01 12:34:56
Clé de chiffrement....: ABCD EF12 3412 3456 7890 ABCD EF12 3456 7890 ABCD
créée ....: 2023-01-01 12:34:56
Clé d'authentification : 0987 6543 21FE DCBA 0987 6543 21FE DCBA 0987 6543
créée ....: 2023-01-01 12:34:56
Informations générales de la clé..:
pub ed25519/0xABCDEF1234567890 2023-01-01 Justin (key1) <justin@example.com>
sec> ed25519/0xABCDEF1234567890 créé: 2023-01-01 expire: jamais
numéro de carte: 0006 12345678
ssb> ed25519/0xFEDCBA0987654321 créé: 2023-01-01 expire: jamais
numéro de carte: 0006 12345678
ssb> cv25519/0x1234567890ABCDEF créé: 2023-01-01 expire: jamais
numéro de carte: 0006 12345678
gpg/card>
Et maintenant, si vous exécutez la commande quit, GnuPG affichera vos nouvelles clés dans son format habituel :
gpg/card> quit
pub ed25519/0xABCDEF1234567890 2023-01-01 [SC]
1234567890ABCDEF1234567890ABCDEF12345678
uid [ultimate] Justin (key1) <justin@example.com>
sub ed25519/0xFEDCBA0987654321 2023-01-01 [A]
sub cv25519/0x1234567890ABCDEF 2023-01-01 [E]
$
Paramètres OpenPGP
Enfin, nous utiliserons le CLI ykman pour ajuster les politiques PIN et touch pour la nouvelle clé OpenPGP. Exécutez la commande suivante pour vérifier leurs paramètres actuels :
$ ykman openpgp info
OpenPGP version: 3.4
Application version: 5.4.3
PIN tries remaining: 3
Reset code tries remaining: 0
Admin PIN tries remaining: 3
Require PIN for signature: Once
Touch policies:
Signature key: Off
Encryption key: Off
Authentication key: Off
Attestation key: Off
|
Tip
|
Si la commande précédente échoue avec un message comme |
Comme vous avez défini un bon PIN aléatoire pour les deux PIN utilisateur et administrateur plus tôt, vous pouvez relaxer les contraintes de tentatives de PIN un peu, disons à 9 chacun :
$ ykman openpgp access set-retries 9 9 9
Entrez le code PIN administrateur lorsqu’il vous est demandé, et y pour confirmer le changement :
Entrez le code PIN administrateur :
Définissez les compteurs de tentatives de code PIN à : 9 9 9? [y/N] : y
Si, à un moment donné, vous échouez 9 fois consécutivement à entrer correctement le code PIN utilisateur, la YubiKey vous bloquera de l’accès à toutes ses clés privées OpenPGP. Si cela arrive, vous pouvez utiliser la sous-commande passwd du command gpg --edit-card que nous avons vu plus tôt pour « débloquer » le code PIN utilisateur et permettre davantage d’essais (ou pour changer le code PIN utilisateur en quelque chose d’autre) — tant que vous pouvez entrer correctement le code PIN administrateur.
Si, à un moment donné, vous échouez 9 fois consécutivement à entrer correctement le code PIN administrateur, la YubiKey vous bloquera de mettre à jour les paramètres OpenPGP de toute façon ou de débloquer le code PIN utilisateur — de manière permanente. Cependant, tant que le code PIN utilisateur n’est pas bloqué, vous pouvez toujours utiliser les clés privées OpenPGP sur la YubiKey même avec le code PIN administrateur bloqué. Et vous pouvez toujours utiliser la sous-commande factory-reset du command gpg --edit-card mentionnée plus tôt pour effacer les clés OpenPGP existantes et commencer à zéro, même si les codes PIN utilisateur et administrateur sont tous deux bloqués.
|
Note
|
Annuler une tentative de code PIN ou ne pas entrer un code PIN avant que la boîte de dialogue d’entrée de code PIN n’expire (ou ne toucher pas la YubiKey quand elle clignote) **ne compte pas** comme une tentative de code PIN — donc vous pouvez toujours annuler en toute sécurité une défis de code PIN sans conséquences si vous ne souhaitez pas effectuer l’opération protégée par le code PIN. |
Dernière configuration à modifier pour l’application OpenPGP : exécutez la commande suivante pour nécessiter un contact pour accéder à la clé de signature OpenPGP :
$ ykman openpgp keys set-touch sig cached
Entrez le PIN administrateur lorsque vous êtes invité, et y pour confirmer le changement :
Enter Admin PIN:
Set touch policy of SIG key to cached? [y/N]: y
Faites de même pour les clés de déchiffrement et d’authentification OpenPGP :
$ ykman openpgp keys set-touch enc cached
Enter Admin PIN:
Set touch policy of ENC key to cached? [y/N]: y
$ ykman openpgp keys set-touch aut cached
Enter Admin PIN:
Set touch policy of AUT key to cached? [y/N]: y
Chaque fois que vous avez besoin de signer ou déchiffrer quelque chose avec vos clés OpenPGP, la YubiKey s’allumera rapidement et vous devez toucher la clé dans les 15 secondes suivantes ou l’essai sera refusé par la YubiKey. Utiliser cached au lieu de on pour ces paramètres signifie que la YubiKey permettra l’utilisation de vos clés OpenPGP pendant 15 secondes après un contact, sans nécessiter plus de contacts (autrement dit, signer une série de commits après un rebase ou déchiffrer une série de fichiers individuels d’un archive devient un test de patience et de finesse motrices).
Test OpenPGP
Vous pouvez effectuer un test rapide de la signature et le déchiffrement PGP en exécutant la commande suivante (remplacez key1 dans la commande suivante par le commentaire que vous avez utilisé lors de la génération de votre nouvelle clé, ou avec son ID de clé complet, comme 0xABCDEF1234567890) :
$ echo test | gpg -se -u clé1 -r clé1 | gpg -d
Vous serez d’abord invité à entrer votre code PIN utilisateur (pour signer le test), puis votre YubiKey va clignoter jusqu’à ce que vous la touchiez. Une fois touchée, vous serez invité à nouveau à entrer votre code PIN utilisateur (cette fois-ci pour déchiffrer le test). Ensuite, vous devriez voir une sortie semblable à celle-ci :
gpg: chiffré avec la clé cv25519, ID 0xABCDEF1234567890, créé 2023-01-01
"Justin (clé1) <justin@example.com>"
test
gpg: Signature faite le lun. 27 mar. 2023 13:13:36 PDT
gpg: utilisant la clé EDDSA 1234567890ABCDEF1234567890ABCDEF12345678
gpg: émetteur "justin@example.com"
gpg: Bonne signature de "Justin (clé1) <justin@example.com>" [ultime]
Distribution des clés OpenPGP
Enfin, vous êtes prêt à publier vos nouvelles clés OpenPGP. Vous pouvez exporter les clés publiques vers un fichier qui peut être partagé avec d’autres annuaires de clés en utilisant la commande suivante (remplacez clé1 par le commentaire que vous avez utilisé lors de la génération de votre nouvelle clé, ou avec son ID de clé complet, comme 0xABCDEF1234567890) :
$ gpg --armor --export clé1 > clé1.asc
Ce fichier peut être copié sur un autre ordinateur et importé dessus en exécutant la commande inverse :
$ gpg --import clé1.asc
Vous pouvez également publier vos clés OpenPGP publiquement en les envoyant à un serveur de clés PGP. La commande suivante enverra les clés au serveur de clés configuré dans votre fichier ~/.gnupg/gpg.conf :
$ gpg --send-keys 0xABCDEF1234567890
Et si vous souhaitez utiliser votre nouvelle clé d’authentification pour l’authentification SSH, vous pouvez l’exporter avec la commande suivante :
$ gpg --export-ssh-key key1
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB openpgp:0x90ABCDEF
Copiez la sortie de la commande dans une ligne du fichier ~/.ssh/authorized_keys sur tout hôte avec lequel vous souhaitez utiliser votre nouvelle clé OpenPGP pour l’authentification. Si votre agent GnuPG est configuré avec un support SSH, vous devriez être en mesure d’accéder à l’un de ces hôtes (comme bastion.example.com) avec la commande suivante :
$ SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) ssh me@bastion.example.com
|
Tip
|
Pour l’SSH, FIDO fonctionne généralement beaucoup mieux que OpenPGP — les versions modernes d’OpenSSH ont un support intégré pour FIDO, au lieu de nécessiter une interopérabilité finiky avec GnuPG. Consultez la section FIDO SSH pour plus de détails. |
PIV
Nous allons configurer l’application PIV (PIV signifie Personnel Identity Verification, le standard de carte à puce NIST SP 800-73 produit par le gouvernement américain pour les cartes d’identité) sur votre YubiKey avec un ensemble supplémentaire de clés privées qui peuvent être utilisées pour des cryptographies asymétriques générales : signatures, chiffrement/déchiffrement et (basées sur la signature) l’authentification. L’application PIV ne prend pas en charge Curve 25519, donc nous utiliserons la courbe P-384 pour ces clés à la place.
Les clients de l’application PIV utilisent l’API PKCS #11 pour y accéder. Pour activer l’accès PKCS #11 à votre YubiKey, vous devrez installer la bibliothèque YKCS11. Vous pouvez soit construire cette bibliothèque vous-même avec le code source de yubico-piv-tool, soit l’installer via un gestionnaire de paquets.
Sur une Debian et ses dérivés, vous pouvez l’installer avec le package ykcs11 ; la bibliothèque sera installée sur votre système à /usr/lib/$(uname -p)-linux-gnu/libykcs11.so.2 :
$ sudo apt install ykcs11
...
$ ls -l /usr/lib/$(uname -p)-linux-gnu/libykcs11*
lrwxrwxrwx 1 root root 14 Dec 8 2021 /usr/lib/x86_64-linux-gnu/libykcs11.so -> libykcs11.so.2
lrwxrwxrwx 1 root root 18 Dec 8 2021 /usr/lib/x86_64-linux-gnu/libykcs11.so.2 -> libykcs11.so.2.2.0
-rw-r--r-- 1 root root 182672 Dec 8 2021 /usr/lib/x86_64-linux-gnu/libykcs11.so.2.2.0
Sur Fedora et ses dérivés, vous pouvez l’installer avec le package yubico-piv-tool ; la bibliothèque sera installée sur votre système à /usr/lib64/libykcs11.so.2 :
$ sudo dnf install yubico-piv-tool
...
$ ls -l /usr/lib*/libykcs11*
lrwxrwxrwx. 1 root root 18 Feb 7 11:06 /usr/lib64/libykcs11.so.2 -> libykcs11.so.2.3.1
-rwxr-xr-x. 1 root root 157584 Feb 7 11:06 /usr/lib64/libykcs11.so.2.3.1
Vous n’avez pas besoin d’avoir la bibliothèque YKCS11 installée pour utiliser le CLI ykman pour configurer l’application PIV, ou pour générer des clés pour elle.
Exécutez la commande suivante pour afficher l’état actuel de l’application PIV sur votre YubiKey :
$ ykman piv info
PIV version: 5.4.3
PIN tries remaining: 3/3
Management key algorithm: 3
WARNING: Using default PIN!
WARNING: Using default Management key!
CHUID: No data available
CCC: No data available
PIV PINs
La première chose à configurer est de modifier le nombre d’essais autorisés pour le code PIN. Modifier ce nombre réinitialise automatiquement le code PIN et la PUK (Clé déverrouilleur PIN) à leurs valeurs par défaut de fabrique, donc effectuez cette opération en premier avant de définir le code PIN et la PUK. Exécutez la commande suivante pour définir les essais autorisés pour le code PIN et la PUK sur 9 :
$ ykman piv access set-retries 9 9
Appuyez simplement sur Entrée à l’invite de la clé de gestion, puis entrez 123456 à l’invite du code PIN :
Enter a management key [blank to use default key]:
Enter PIN:
Ensuite, entrez y pour confirmer le changement :
WARNING: This will reset the PIN and PUK to the factory defaults!
Set the number of PIN and PUK retry attempts to: 9 9? [y/N]: y
Default PINs are set:
PIN: 123456
PUK: 12345678
Ensuite, exécutez la commande suivante pour modifier le code PIN :
$ ykman piv access change-pin
Le code PIN doit comporter 6 à 8 caractères alphanumériques. Vous l’utiliserez fréquemment si vous utilisez régulièrement l’application PIV ; il est nécessaire pour utiliser les clés privées stockées dans l’application PIV et pour modifier ses paramètres. Il est difficile de choisir un bon code PIN avec autant de lettres disponibles — mais parce qu’un adversaire n’a que 9 tentatives pour le deviner, il ne doit pas être excellent — il suffit d’être un mot de passe que vous n’avez jamais utilisé avant et qui n’est lié à aucune information personnelle (comme votre anniversaire, les noms de vos enfants, votre équipe de sport préférée, etc).
|
Tip
|
Générer un bon code PIN de 6 à 8 caractères qui sera relativement facile à retenir et à taper en exécutant la commande suivante : |
Entrez d’abord l’ancien code PIN, 123456 :
Entrez le code PIN actuel :
Ensuite entrez votre nouveau code PIN, deux fois :
Entrez le nouveau code PIN :
Confirmez par répétition :
Nouveau code PIN défini.
Ensuite, exécutez la commande suivante pour changer le PUK (code de déverrouillage du PIN) :
$ ykman piv access change-puk
Le PUK doit également être composé de 6 à 8 caractères alphanumériques. Un adversaire aura également seulement 9 tentatives pour deviner ce code, donc il n’a pas besoin d’être génial. Cependant, étant donné que vous ne devriez généralement jamais avoir besoin de le taper (il est utilisé uniquement pour déverrouiller le PIN si vous avez mal saisi le code PIN 9 fois consécutives), et étant donné qu’il peut être à peine plus long que 8 caractères, vous pouvez bien sûr utiliser un numéro aléatoire de 8 caractères.
|
Tip
|
Générer un PUK aléatoire de 8 caractères en exécutant la commande suivante : |
Entrez d’abord l’ancien PUK, 12345678 :
Entrez le code PUK actuel :
Ensuite entrez votre nouveau PUK, deux fois :
Entrez le nouveau code PUK :
Confirmez par répétition :
Nouveau code PUK défini.
Écrivez votre nouveau code PIN et PUK sur le même papier que celui où vous avez noté vos codes PIN utilisateur OpenPGP et administrateur, en notant qu’ils sont pour l’application PIV de la YubiKey (chaque application YubiKey, comme OpenPGP, FIDO, etc., utilise son propre ensemble séparé de codes PIN ou mots de passe).
Ensuite, exécutez la commande suivante pour changer la clé de gestion PIV :
$ ykman piv access change-management-key --algorithm aes128 --protect --touch
Intérieurement, la clé de gestion est requise par l’application PIV chaque fois que les paramètres de l’application sont modifiés (comme pour générer une nouvelle clé ou importer des certificats ou d’autres données dans le stockage de l’application). Contrairement au code PIN ou PUK, cependant, le nombre d’essais successifs incorrects à son utilisation n’est pas limité — donc la clé devrait être longue et forte.
Au lieu de devoir entrer une chaîne aléatoire de caractères longue chaque fois que vous devez modifier un paramètre sur l’application PIV, les YubiKeys ont une fonctionnalité qui permet de stocker une clé de gestion longue et forte dans l’application PIV elle-même et de protéger la clé avec le code PIN régulier de l’application PIV (plus un contact tactile de la YubiKey). Le CLI ykman et la bibliothèque YKCS11 détecteront automatiquement lorsque cette fonctionnalité est utilisée, et demanderont transparentement le code PIN pour accéder à la clé de gestion lorsqu’elle est nécessaire (donc vous n’avez jamais besoin de connaître ou d’entrer le code PIN de gestion lui-même).
L’option --protect dans la commande ci-dessus indique à l’application PIV de la YubiKey d’utiliser cette fonctionnalité lors de la configuration de la nouvelle clé de gestion (et de générer automatiquement une nouvelle clé aléatoire forte). L’option --touch lui indique également de sauvegarder la clé de manière qui nécessite un contact pour chaque accès.
Appuyez sur Entrée lorsque vous êtes invité, puis entrez le PIN (le nouveau que vous venez de définir via la commande piv access change-pin ci-dessus) :
Entrez la clé de gestion actuelle [laissez vide pour utiliser la clé par défaut] :
Entrez le PIN :
Maintenant, lorsque vous exécutez la commande suivante, la sortie doit indiquer que vous n’utilisez plus le PIN ou la clé de gestion par défaut pour l’application PIV :
$ ykman piv info
Version PIV : 5.4.3
Essais de PIN restants : 9/9
Algorithme de clé de gestion : 8
La clé de gestion est stockée sur la YubiKey, protégée par le PIN.
CHUID : Pas de données disponibles
CCC : Pas de données disponibles
Clés PIV
Vous êtes maintenant prêt à générer un nouveau jeu de clés PIV pour la YubiKey. Il y a 25 emplacements de clé distincts (numérotés avec des chiffres hexadécimaux, comme f9 ou 9a etc) disponibles sur votre YubiKey ; 5 avec une définition prescrite et 20 emplacements miscelléneux :
Tableau 1. Emplacements de clés PIV
| Emplacement | Libellé | But | |
|---|---|---|---|
| f9 | Attestation PIV | Équivalent de la clé “cert” de PGP | |
| 9a | Authentification PIV | Équivalent de la clé “auth” de PGP | |
| 9c | Signature numérique | Équivalent de la clé “sign” de PGP | |
| 9d | Gestion des clés | Équivalent de la clé “encr” de PGP | |
| 9e | Authentification de la carte | Authentification physique du détenteur de la carte | |
| 82-95 | Clé de déchiffrement obsolète 1-20 | Clés de déchiffrement obsolètes |
L’emplacement f9 (Attestation PIV) est préchargé avec une clé et un certificat générés et signés par Yubico. L’application PIV utilise automatiquement cette clé pour signer les autres clés PIV que vous générez sur votre YubiKey. C’est le seul emplacement qui n’est pas effacé si vous réinitialisez l’application PIV, bien qu’il puisse être remplacé par une autre clé si vous le souhaitez. Sauf si vous avez une raison spécifique de la changer, vous devriez la laisser telle quelle (et ne l’utiliser pour rien d’autre que la certification des clés).
L’emplacement 9e (Authentification de la carte) est prévu pour être utilisé pour déverrouiller les portes ou autres appareils qui n’ont pas un écran PIN, mais si vous ne utilisez votre YubiKey pour l’authentification physique, vous pouvez l’utiliser pour ce que vous voulez. Nous allons le sauter.
Pour des raisons pratiques, ce guide vous montrera comment configurer le 9a emplacement (Authentification PIV) avec une clé SSH, le 9c emplacement (Signature numérique) comme clé de signature avec un certificat signé par une autre CA, le 9d emplacement (Gestion des clés) pour l’accord de clés (c’est-à-dire dériver une clé de chiffrement/déchiffrement partagée avec une autre partie), et le 82 emplacement (Clé obsolète 1) comme un simple CA racine.
|
Note
|
Bien que les définitions soient plus ou moins strictes pour tous les 25 emplacements, l’application PIV est en réalité également capable d’utiliser chaque emplacement comme une clé de déchiffrement ou de signature (ou d’authentification basée sur la signature). Pour tout client application que vous avez qui prend en charge PKCS #11 et les algorithmes de clés disponibles sur le YubiKey (RSA-1024, RSA-2048, P-256 ou P-384), vous pouvez choisir n’importe quel des 25 emplacements à l’utiliser avec elle — même s’il ne correspond pas au but prévu de l’emplacement. |
Comme vous allez avoir besoin de sauvegarder quelques clés publiques et d’autres fichiers temporaires sur le disque pour les étapes suivantes, pour votre commodité, créez un nouveau répertoire et changez-y :
$ mkdir ykpivfiles && cd ykpivfiles
Maintenant générez votre première clé PIV, entrant votre PIN PIV et touchant le YubiKey lorsque vous êtes invité :
$ ykman piv keys generate --algorithm eccp384 --pin-policy once --touch-policy cached 9a key1-9a.pub
Entrez le PIN :
Touchez votre YubiKey...
Cela générera une nouvelle clé P-384 dans le slot 9a de l’application PIV (PIV Authentication). Lorsque vous utiliserez cette clé privée à l’avenir, vous devrez fournir le PIN PIV une fois par session client PKCS #11, ainsi que toucher votre YubiKey une fois par utilisation (si vous n’aviez pas déjà touché à la dernière minute).
La nouvelle clé publique sera enregistrée dans le fichier key1-9a.pub :
$ cat key1-9a.pub
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0hUUs8J8bWeVQvpELjcUJUDsOudV4HP0
3hfqf2wb6Pm8th3MIVdSBNx+mc8IiQwjTK0IJYc1BbO68ClR87jAGyM0fGeUZkYZ
nKfuS9DOCevRTvaf9xXD+S+rjmQVoH7O
-----END PUBLIC KEY-----
Nous l’utiliserons dans le prochain pas, mais vous n’avez pas besoin de la sauvegarder permanemment — vous pouvez toujours demander à l’application PIV d’exporter une nouvelle copie de la clé publique plus tard. Par exemple, la commande suivante l’exportera sur la sortie standard :
$ ykman piv keys export 9a -
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0hUUs8J8bWeVQvpELjcUJUDsOudV4HP0
3hfqf2wb6Pm8th3MIVdSBNx+mc8IiQwjTK0IJYc1BbO68ClR87jAGyM0fGeUZkYZ
nKfuS9DOCevRTvaf9xXD+S+rjmQVoH7O
-----END PUBLIC KEY-----
Ensuite, nous générerons un certificat auto-signé pour la nouvelle clé. Vous n’avez pas nécessairement besoin d’un certificat pour chaque clé, mais certains clients PKCS #11 peuvent le nécessiter, donc c’est agréable à avoir. Vous pouvez toujours le remplacer plus tard par un autre certificat (auto-signé avec la même clé ou signé par une autre CA).
Pour générer un nouveau certificat auto-signé, exécutez la commande suivante, entrant votre PIN PIV et touchant le YubiKey lorsque vous êtes invité :
$ ykman piv certificates generate --subject 'CN=Justin (key1-9a) <justin@example.com>' --valid-days 4000 9a key1-9a.pub
Entrez le PIN :
Touchez votre YubiKey...
Vous devrez spécifier un DN (Distinguished Name) pour le certificat via l’option --subject. Si vous n’avez pas un format spécifique de DN requis pour votre utilisation de la clé, vous pouvez simplement spécifier une composante CN (Common Name) avec tout texte qui vous aidera (ou à toute personne qui consulte le certificat) à le distinguer des autres certificats que vous pourriez utiliser. Utiliser le même format qu’un UID OpenPGP (par exemple nom réel (commentaire) <adresse e-mail>) peut être un bon point de départ. Vous pouvez également vouloir noter la YubiKey et le slot PIV dans lequel la clé peut être trouvée (comme le texte (key1-9a) de l’exemple ci-dessus).
Vous devriez également spécifier une période d’validité pour le certificat via l’option --valid-days (la valeur par défaut est 365 jours). La clé restera toujours valide après que cette période expire — mais le certificat ne sera plus. Bien qu’une courte période d’validité en général soit une bonne pratique de sécurité, elle offre des avantages pratiques limités pour un certificat auto-signé (puisqu’un détenteur de clé peut simplement générer un nouveau certificat auto-signé à la demande). Une période d’validité de 4000 jours (presque 11 ans) devrait vous suffire tout au long de la durée de vie de la clé.
Lorsque vous avez besoin d’accéder à ce certificat, exécutez simplement la commande suivante pour le sauvegarder dans un fichier :
$ ykman piv certificates export 9a key1-9a.crt
Vous pouvez utiliser OpenSSL pour inspecter les détails du certificat :
$ ykman piv certificates export 9a - | openssl x509 -text
Certificat :
Données :
Version : 3 (0x2)
Numéro de série :
14:f3:43:15:4e:8d:2b:95:41:41:c8:8e:f0:15:71:06:eb:84:57:a9
Algorithme de signature : ecdsa-with-SHA256
Émetteur : CN = "Justin (key1-9a) <justin@example.com>"
Validité
Valide du : Mar 28 21:39:54 2023 GMT
Valide jusqu'au : Mar 10 21:39:54 2034 GMT
Sujet : CN = "Justin (key1-9a) <justin@example.com>"
Informations sur la clé publique du sujet :
Algorithme de clé publique : id-ecPublicKey
Clé publique : (384 bits)
pub :
04:d2:15:14:b3:c2:7c:6d:67:95:42:fa:44:2e:37:
14:25:40:ec:3a:e7:55:e0:73:f4:de:17:ea:7f:6c:
1b:e8:f9:bc:b6:1d:cc:21:57:52:04:dc:7e:99:cf:
08:89:0c:23:4c:ad:08:25:87:35:05:b3:ba:f0:29:
51:f3:b8:c0:1b:23:34:7c:67:94:66:46:19:9c:a7:
ee:4b:d0:ce:09:eb:d1:4e:f6:9f:f7:15:c3:f9:2f:
ab:8e:64:15:a0:7e:ce
OID ASN.1 : secp384r1
CURVE NIST : P-384
Algorithme de signature : ecdsa-with-SHA256
Valeur de signature :
30:65:02:30:43:bc:33:58:65:4f:d4:15:47:86:3b:b5:7b:e6:
55:84:6d:f6:dc:05:ee:c4:37:a6:6f:c4:e7:e4:30:dc:0d:90:
c7:5c:6d:b2:7a:f2:dd:2d:af:a9:66:a3:d7:79:a3:12:02:31:
00:b2:65:f8:81:10:94:c0:9b:a6:20:e5:7c:69:ee:4b:a6:ae:
3b:27:b7:23:92:46:78:18:d4:9f:d4:81:ef:b0:5d:17:23:a0:
1f:6e:2d:8f:ec:28:fe:8d:a7:28:ff:f3:a7
-----BEGIN CERTIFICATE-----
MIIBnTCCASOgAwIBAgIUFPNDFU6NK5VBQciO8BVxBuuEV6kwCgYIKoZIzj0EAwIw
MDEuMCwGA1UEAwwlSnVzdGluIChrZXkxLTlhKSA8anVzdGluQGV4YW1wbGUuY29t
PjAeFw0yMzAzMjgyMTM5NTRaFw0zNDAzMTAyMTM5NTRaMDAxLjAsBgNVBAMMJUp1
c3RpbiAoa2V5MS05YSkgPGp1c3RpbkBleGFtcGxlLmNvbT4wdjAQBgcqhkjOPQIB
BgUrgQQAIgNiAATSFRSzwnxtZ5VC+kQuNxQlQOw651Xgc/TeF+p/bBvo+by2Hcwh
V1IE3H6ZzwiJDCNMrQglhzUFs7rwKVHzuMAbIzR8Z5RmRhmcp+5L0M4J69FO9p/3
FcP5L6uOZBWgfs4wCgYIKoZIzj0EAwIDaAAwZQIwQ7wzWGVP1BVHhju1e+ZVhG32
3AXuxDemb8Tn5DDcDZDHXG2yevLdLa+pZqPXeaMSAjEAsmX4gRCUwJumIOV8ae5L
pq47J7cjkkZ4GNSf1IHvsF0XI6Afbi2P7Cj+jaco//On
-----END CERTIFICATE-----
Générer une clé et un certificat pour toute autre clé PIV dont vous voulez les mêmes choses, comme pour le slot 9c (Signature numérique) :
$ ykman piv keys generate --algorithm eccp384 --pin-policy once --touch-policy cached 9c key1-9c.pub
Entrez le PIN :
Touchez votre YubiKey...
$ ykman piv certificates generate --subject 'CN=Justin (key1-9c) <justin@example.com>' --valid-days 4000 9c key1-9c.pub
Entrez le PIN :
Touchez votre YubiKey...
Et pour le slot 9d (Gestion de clés — chiffrement/déchiffrement) :
$ ykman piv keys generate --algorithm eccp384 --pin-policy once --touch-policy cached 9d key1-9d.pub
Entrez le PIN :
Touchez votre YubiKey...
$ ykman piv certificates generate --subject 'CN=Justin (key1-9d) <justin@example.com>' --valid-days 4000 9d key1-9d.pub
Entrez le PIN :
Touchez votre YubiKey...
Et pour le slot 82 (Clé retraitée 1 — une clé miscellénée que nous utiliserons comme un exemple de CA) :
$ ykman piv keys generate --algorithm eccp384 --pin-policy once --touch-policy cached 82 key1-82.pub
Entrez le PIN :
Touchez votre YubiKey...
$ ykman piv certificates generate --subject 'CN=Justin (key1-82) <justin@example.com>' --valid-days 4000 82 key1-82.pub
Entrez le PIN :
Touchez votre YubiKey...
Maintenant, si vous exécutez la commande suivante, vous verrez les détails listés pour chacune des 4 clés que nous venons de générer :
$ ykman piv info
Version PIV : 5.4.3
Essais PIN restants : 9/9
Algorithme de la clé de gestion : 8
La clé de gestion est stockée sur le YubiKey, protégée par le PIN.
CHUID: 3019d4e739da739ced39ce739d836858210842108421c84210c3eb34103c7e8730f91233d720965737edb16e0c350832303330303130313e00fe00
CCC: Pas de données disponibles
Slot 82:
Algorithme : ECCP384
DN du sujet : CN=Justin (key1-82) \<justin@example.com\>
DN de l'émetteur : CN=Justin (key1-82) \<justin@example.com\>
Numéro de série : 267690053478081854363456881922522153929109828202
Empreinte : a2815042003b14b265001d46be2671b374f08360a602b81ebfab2c5ff404cf3d
Valide avant : 2023-03-28T21:45:00
Valide jusqu'au : 2034-03-10T21:45:00
Slot 9a:
Algorithme : ECCP384
DN du sujet : CN=Justin (key1-9a) \<justin@example.com\>
DN de l'émetteur : CN=Justin (key1-9a) \<justin@example.com\>
Numéro de série : 119604740273219646681371186984377340943623542697
Empreinte : 40f1a1830c8251640e9e3962c42c749fd193faf0f2c3e574f1405f9dbb81f7df
Valide avant : 2023-03-28T21:39:54
Valide jusqu'au : 2034-03-10T21:39:54
Slot 9c:
Algorithme : ECCP384
DN du sujet : CN=Justin (key1-9c) \<justin@example.com\>
DN de l'émetteur : CN=Justin (key1-9c) \<justin@example.com\>
Numéro de série : 708868326279358429629319480715759510696124050124
Empreinte : 1568d64ab4512d560e3ed092c6c1f7f77f34c30eed05654136a9dae3baae7fe3
Valide avant : 2023-03-28T21:44:28
Valide jusqu'au : 2034-03-10T21:44:28
```markdown
Slot 9d:
Algorithm: ECCP384
Subject DN: CN=Justin (key1-9d) \<justin@example.com\>
Issuer DN: CN=Justin (key1-9d) \<justin@example.com\>
Serial: 543818019060290952793661077378467821810601313771
Fingerprint: a53f2898862615be970d80d17d6f4ff797afd9e57fcff4845bbddbc1771d934d
Not before: 2023-03-28T21:44:43
Not after: 2034-03-10T21:44:43
PIV SSH
Pour utiliser la clé 9a (authentification PIV) que nous avons générée précédemment pour l’authentification SSH, exécutez d’abord la commande suivante pour afficher les clés PIV disponibles sur votre YubiKey au format des clés autorisées SSH :
$ ssh-keygen -D /usr/lib/x86_64-linux-gnu/libykcs11.so.2
ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBNIVFLPCfG1nlUL6RC43FCVA7DrnVeBz9N4X6n9sG+j5vLYdzCFXUgTcfpnPCIkMI0ytCCWHNQWzuvApUfO4wBsjNHxnlGZGGZyn7kvQzgnr0U72n/cVw/kvq45kFaB+zg== Clé publique pour l'authentification PIV
ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBCzyCnYDe9I0ODXQmuLvA/nmF3A9qB1R/eWjEQ/LIjsqhrdBCGXDNX26DUhFlQcVV2dqDlC5Njl1wNaHA5AHy05ECEuSxtvuUbDyz4kB5Q4cNRSPGceUoQAVfuL768TNrw== Clé publique pour la signature numérique
ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBBsDKveWSipVinDEoug6N+hCUQiUafhYUrevy56G76FwE+RGVDOhnJZaB87CulXkBQGHhMPsCMFvfTwTfVFQFDWK2o5sj8HDEUoeI/bMiqQTWxb7Qg6Qb+DsYOVbItkUlA== Clé publique pour la gestion des clés
ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBFnYzXtTLuBY/z76EJ74eNLG9+j0qk8S7pA/YAngTlkF7V4wt1nz8dswnwIulSjEgCiJsDx9gyYDzCGD6mIqMzqorXwZnSYeodwplgyTmy37tcVWqYxeiuyUQiVGdLL9cA== Clé publique pour la clé retraitée 1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/p7ppATZ75y1RwLiswoTEKwX2qixHNjc1Xfo1/PLHBsXWRnH0mZvB7cmHBh7qrGjfPFzFIkVi7LlyFuX4iJmP/cS+K5oRrNr9PaOeha5JgzGqO5i75FDFDUdufK7l3gTe3DkC7jjRRu/8XAr/9FE6OUHHqe6HEhn2eiY9VvnuZbfXWUL8H3E3c5Sl9uByOzbwIvue6ZSry+Q4TanO2Lv08ez9FZxqnbOEKswMxtNN0MPHVZkfsjlY1+IUDshUMANektwx/31uim8eWid+TeL3oGy6bJUe0/phA+TNYhQkf+amDvtXR2Jjth+BRmq4vcoP3a8GKdq2gGqLIYCMuz8P Clé publique pour l'attestation PIV
Remplacez /usr/lib/x86_64-linux-gnu/libykcs11.so.2 par le chemin de votre bibliothèque YKCS11 (voir la section PIV au début) si elle est différente.
Trouvez la ligne dans la sortie qui contient un commentaire indiquant “Authentication PIV” (l’étiquette pour la clé 9a), et copiez-la dans le fichier ~/.ssh/authorized_keys sur tout hôte avec lequel vous souhaitez utiliser la clé pour l’authentification (comme bastion.example.com).
Vous pouvez ensuite SSH sur ce serveur en exécutant la commande suivante :
$ ssh -I /usr/lib/x86_64-linux-gnu/libykcs11.so.2 me@bastion.example.com
Entrez votre PIN lorsque vous y êtes invité, puis touchez le YubiKey quand il commence à clignoter :
Enter PIN for 'YubiKey PIV #12345678':
Bienvenue sur Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-1030-aws aarch64)
Dernière connexion : mar. 28 mars 2023 23:15:35 UTC depuis 198.51.100.123
me@bastion:~$
|
Mise en garde
|
Cela offrira toutes les clés publiques PIV de votre YubiKey au serveur — pas seulement les clés que vous avez ajoutées au fichier authorized-keys du serveur. (Ce n’est pas un problème de sécurité, mais cela pourrait être un problème de confidentialité avec un serveur malveillant.) |
Certificat PIV Signé
Pour obtenir un certificat d’une CA réelle (Certificate Authority) pour la clé 9c (Signature numérique) que nous avons générée ci-dessus, exécutez d’abord la commande suivante pour générer une demande de signature de certificat (CSR — Certificate Signing Request) :
$ ykman piv certificates request --subject 'CN=Justin,OU=IT,O=Example Co.,ST=Washington,C=US' 9c key1-9c.pub key1-9c.csr
Définissez l’option --subject sur le nom DN approprié pour la certificat et utilisez le fichier de clé publique key1-9c.pub que vous avez exporté précédemment (ou ré-exportez-le si nécessaire). Entrez votre PIN, touchez votre YubiKey, et la commande enregistrera la CSR dans le fichier key1-9c.csr :
Entrez le PIN :
Touchez votre YubiKey...
Affichez la CSR avec la commande OpenSSL suivante :
$ openssl req -text -in key1-9c.csr
Requête de certificat :
Données :
Version : 1 (0x0)
Sujet : C = US, ST = Washington, O = Example Co., OU = IT, CN = Justin
Informations sur la clé publique du sujet :
Algorithme de clé publique : id-ecPublicKey
Clé publique : (384 bits)
pub :
04:2c:f2:0a:76:03:7b:d2:34:38:35:d0:9a:e2:ef:
03:f9:e6:17:70:3d:a8:1d:51:fd:e5:a3:11:0f:cb:
22:3b:2a:86:b7:41:08:65:c3:35:7d:ba:0d:48:45:
95:07:15:57:67:6a:0e:50:b9:36:39:75:c0:d6:87:
03:90:07:cb:4e:44:08:4b:92:c6:db:ee:51:b0:f2:
cf:89:01:e5:0e:1c:35:14:8f:19:c7:94:a1:00:15:
7e:e2:fb:eb:c4:cd:af
OID ASN.1 : secp384r1
CURVE NIST : P-384
Attributs :
(aucun)
Extensions demandées :
Algorithme de signature : ecdsa-with-SHA256
Valeur de signature :
30:66:02:31:00:e2:01:de:34:96:53:cf:a3:cf:b7:dc:33:4e:
58:7b:2e:e0:01:c4:df:9b:06:97:ce:ca:bf:c2:79:26:6e:4b:
77:43:d0:99:01:f6:48:35:52:cb:f6:fc:72:1c:33:15:45:02:
31:00:86:c0:b3:77:46:9b:ff:1d:c6:28:27:3c:0b:e6:92:cf:
26:16:32:71:37:e0:68:1d:35:ba:dc:97:59:7e:7a:06:38:94:
c8:04:19:e4:10:be:3e:c1:d6:82:38:13:89:10
-----BEGIN CERTIFICATE REQUEST-----
MIIBTzCB1QIBADBWMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2FzaGluZ3RvbjEU
MBIGA1UECgwLRXhhbXBsZSBDby4xCzAJBgNVBAsMAklUMQ8wDQYDVQQDDAZKdXN0
aW4wdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQs8gp2A3vSNDg10Jri7wP55hdwPagd
Uf3loxEPyyI7Koa3QQhlwzV9ug1IRZUHFVdnag5QuTY5dcDWhwOQB8tORAhLksbb
7lGw8s+JAeUOHDUUjxnHlKEAFX7i++vEza+gADAKBggqhkjOPQQDAgNpADBmAjEA
4gHeNJZTz6PPt9wzTlh7LuABxN+bBpfOyr/CeSZuS3dD0JkB9kg1Usv2/HIcMxVF
AjEAhsCzd0ab/x3GKCc8C+aSzyYWMnE34GgdNbrcl1l+egY4lMgEGeQQvj7B1oI4
E4kQ
-----END CERTIFICATE REQUEST-----
|
Tip
|
Si vous avez besoin d’ajouter des attributs supplémentaires ou d’autres extensions (comme |
Fournissez le CSR au représentant de l’autorité de certification ; et lorsque le représentant de l’autorité de certification retourne le certificat signé, importez-le en exécutant la commande suivante (où le fichier du certificat est nommé key1-9c.crt dans cet exemple) :
$ ykman piv certificates import --verify 9c key1-9c.crt
Utilisez l’option --verify lors de l’importation d’un certificat pour vérifier que le certificat correspond à la clé stockée dans le slot 9c (pour éviter d’importer accidentellement un certificat pour une autre clé). Entrez votre PIN, touchez votre YubiKey, et la commande importera le certificat (si il correspond à la clé) :
Entrez le PIN :
Touchez votre YubiKey...
La commande échouera avec un message d’erreur si le certificat ne correspond pas à la clé :
ERREUR : Ce certificat n'est lié à la clé privée dans le slot SIGNATURE.
Votre YubiKey fournira maintenant le certificat de l’autorité de certification, au lieu du certificat auto-signé que vous avez généré initialement, lorsqu’il sera consulté :
$ ykman piv info
PIV version : 5.4.3
Essais restants PIN : 9/9
Algorithme de la clé de gestion : 8
La clé de gestion est stockée sur le YubiKey, protégée par le PIN.
CHUID: 3019d4e739da739ced39ce739d836858210842108421c84210c3eb3410ba09f7ff3812142caf30606345cd3b01350832303330303130313e00fe00
CCC: Pas de données disponibles
Slot 82 :
Algorithme : ECCP384
DN du sujet : CN=Justin (key1-82) \<justin@example.com\>
DN de l'émetteur : CN=Justin (key1-82) \<justin@example.com\>
Numéro de série : 267690053478081854363456881922522153929109828202
Empreinte numérique : a2815042003b14b265001d46be2671b374f08360a602b81ebfab2c5ff404cf3d
Valide du : 2023-03-28T21:45:00
Valide jusqu'au : 2034-03-10T21:45:00
Slot 9a :
Algorithme : ECCP384
DN du sujet : CN=Justin (key1-9a) \<justin@example.com\>
DN de l'émetteur : CN=Justin (key1-9a) \<justin@example.com\>
Numéro de série : 119604740273219646681371186984377340943623542697
Empreinte numérique : 40f1a1830c8251640e9e3962c42c749fd193faf0f2c3e574f1405f9dbb81f7df
Valide du : 2023-03-28T21:39:54
Valide jusqu'au : 2034-03-10T21:39:54
Slot 9c :
Algorithme : ECCP384
DN du sujet : CN=Justin,OU=IT,O=Example Co.,ST=Washington,C=US
DN de l'émetteur : CN=Example CA XYZ,OU=IT,O=Example Co.,ST=Washington,C=US
Numéro de série : 291
Empreinte numérique : ba6803b4a95047bc15e573c205dc6401e6c5c4fe3cb72f9d6c386f4b0831d525
Valide du : 2023-03-29T01:46:18
Valide jusqu'au : 2024-03-28T01:46:18
Slot 9d:
Algorithm: ECCP384
Subject DN: CN=Justin (key1-9d) \<justin@example.com\>
Issuer DN: CN=Justin (key1-9d) \<justin@example.com\>
Serial: 543818019060290952793661077378467821810601313771
Fingerprint: a53f2898862615be970d80d17d6f4ff797afd9e57fcff4845bbddbc1771d934d
Not before: 2023-03-28T21:44:43
Not after: 2034-03-10T21:44:43
PIV Key Agreement
Si vous souhaitez utiliser une clé PIV comme la clé 9d (Gestion des clés) pour le déchiffrement, par exemple pour échanger des messages avec une autre personne, disons votre amie Alice, vous devrez d’abord échanger les clés publiques. Vous lui donnerez le fichier key1-9d.pub contenant la clé publique de votre clé 9d que vous avez exportée, et elle vous donnera sa clé publique (elle doit être une clé publique du même type que la vôtre, pour la courbe P-384).
Elle pourrait créer son paire de clés avec les commandes OpenSSL suivantes :
$ openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:secp384r1 -out alice.key
$ openssl pkey -pubout -in alice.key -out alice.pub
Sa clé privée a été enregistrée dans le fichier alice.key, et sa clé publique dans le fichier alice.pub. Avec le fichier key1-9d.pub contenant votre clé publique, elle peut dériver un secret partagé avec sa clé privée en exécutant la commande suivante :
$ openssl pkeyutl -derive -inkey alice.key -peerkey key1-9d.pub | xxd
00000000: 0c4c 06e8 1afb a9da 160f 8eff 8800 c43d .L.............=
00000010: e642 04c9 381d 2d67 caf2 e058 9b50 b77f .B..8.-g...X.P..
00000020: c8b5 dcd0 6176 a877 8ffa 5fbb 26a1 6495 ....av.w.._.&.d.
Elle peut injecter ce secret partagé dans la commande openssl enc pour l’utiliser pour chiffrer un message que seul vous et elle pouvez lire :
$ echo 'Hi Dude!' |
openssl enc -chacha20 -pbkdf2 -a \
-pass file:<(openssl pkeyutl -derive -inkey alice.key -peerkey key1-9d.pub)
U2FsdGVkX1/f6Cna6360s7SrA6zo0OY0mQ==
Si elle vous envoie la sortie de cette commande (U2FsdGVkX1/f6Cna6360s7SrA6zo0OY0mQ==), vous pouvez le déchiffrer en dérivant le même secret partagé avec la clé privée stockée dans l’emplacement 9d de votre YubiKey, ainsi que son fichier alice.pub public :
$ echo U2FsdGVkX1/f6Cna6360s7SrA6zo0OY0mQ== |
openssl enc -d -chacha20 -pbkdf2 -a \
-pass file:<(PKCS11_MODULE_PATH=/usr/lib/x86_64-linux-gnu/libykcs11.so.2 \
openssl pkeyutl -derive \
-engine pkcs11 -keyform engine -inkey "pkcs11:object=Private key for Key Management;type=private" \
-peerkey alice.pub)
Engine "pkcs11" set.
Enter PKCS#11 token PIN for YubiKey PIV #12345678:
|
Note
|
Pour exécuter la commande ci-dessus, vous avez besoin du plugin d’engine PKCS #11 pour OpenSSL (ainsi que de la bibliothèque YKCS11 installée). Consultez la section suivante (PIV CA) pour plus de détails à ce sujet. |
Entrez votre PIN PIV à l’invite, touchez votre YubiKey et vous devriez voir le message d’Alice en sortie du résultat de la commande :
Hi Dude!
|
Avertissement
|
N’utilisez pas la primitive DH (Diffie-Hellman) “derive” directement comme dans cet exemple, à l’exception du test (parce que c’est trop facile de faire une erreur qui permettrait à un adversaire de deviner votre secret partagé, ou même votre clé privée). Au lieu de cela, utilisez des abstractions de niveau supérieur, comme la fonctionnalité seal/open evp de libcrypto pour chiffrer et déchiffrer des messages/fichiers, ou libssl pour chiffrer et déchiffrer des flux. |
PIV CA
Pour utiliser la clé 82 (Clé retraitée 1) comme une racine CA, vous pouvez configurer un simple CA avec OpenSSL. Tout d’abord, vous devez installer le Plugin du moteur PKCS #11 pour OpenSSL. Vous pouvez le construire à partir de la source ou l’installer à partir de votre gestionnaire de paquets.
Sur une Debian et les amis, vous pouvez l’installer avec le package libengine-pkcs11-openssl ; sur une Fedora et les amis, vous pouvez l’installer avec le package openssl-pkcs11. La commande suivante affichera le nom du moteur si il est installé :
$ openssl engine pkcs11 2>/dev/null
(pkcs11) pkcs11 engine
Assurez-vous également d’avoir installé la bibliothèque YKCS11 (comme décrit au début de la section PIV).
Vous pouvez tester que le moteur et la bibliothèque YKCS11 ont été installés correctement et peuvent accéder à vos clés PIV en exécutant les commandes suivantes pour signer un fichier de test :
$ echo test > test.txt
$ PKCS11_MODULE_PATH=/usr/lib/x86_64-linux-gnu/libykcs11.so.2 \
openssl pkeyutl -sign \
-engine pkcs11 -keyform engine -inkey "pkcs11:object=Clé privée pour Clé retraitée 1;type=private" \
-in test.txt -out test.sig
Remplacez /usr/lib/x86_64-linux-gnu/libykcs11.so.2 par le chemin réel de votre bibliothèque YKCS11 si celui-ci est différent. Le texte Clé privée pour Clé retraitée 1 dans la commande fait référence à la clé privée du tampon 82. De nombreux clients PKCS #11, tels que le plugin OpenSSL, font référence aux clés par étiquette (alias de clé), plutôt que par numéro de tampon. Vous pouvez rechercher l’étiquette pour chaque tampon PIV dans la table « Alias de clé par tampon et type d’objet » de la documentation YKCS11 Functions and values.
La commande signe devrait vous inviter à entrer votre PIN PIV ; entrez-le, puis touchez votre YubiKey lorsque celui-ci commence à clignoter :
Engine "pkcs11" set.
Enter PKCS#11 token PIN for YubiKey PIV #12345678:
Cette commande générera un fichier test.sig. Vous pouvez vérifier la signature en utilisant le fichier key1-82.pub qui a été généré précédemment :
$ openssl pkeyutl -verify -pubin -inkey key1-82.pub -in test.txt -sigfile test.sig
Signature Verified Successfully
Pour générer un certificat racine simple avec une clé de taille 82, exécutez la commande suivante :
$ PKCS11_MODULE_PATH=/usr/lib/x86_64-linux-gnu/libykcs11.so.2 \
openssl req -new -x509 \
-engine pkcs11 -keyform engine -key "pkcs11:object=Clé privée pour Clé obsolète 1;type=private" \
-out key1-82.crt
Entrez votre PIN lorsque vous y êtes invité :
Engine "pkcs11" set.
Enter PKCS#11 token PIN for YubiKey PIV #12345678:
Ensuite, entrez les composants par défaut pour le nom DN du nouveau certificat lorsque vous y êtes invité :
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:Washington
Locality Name (eg, city) []:Seattle
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Co.
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:Example CA 123
Email Address []:
À la fin de ce processus, votre YubiKey va commencer à clignoter ; touchez-le et le nouveau certificat CA sera sorti dans le fichier key1-82.crt.
Maintenant, importez ce nouveau certificat dans la slot du certificat pour la clé 82 sur votre YubiKey avec la commande suivante :
$ ykman piv certificates import 82 key1-82.crt
Entrez votre code PIN lorsque vous y êtes invité, puis touchez votre YubiKey :
Entrez le code PIN :
Touchez votre YubiKey...
Vous pouvez exporter ce certificat à tout moment de votre YubiKey en exécutant la commande suivante :
$ ykman piv certificates export 82 - | openssl x509 -text
Certificat :
Données :
Version : 3 (0x2)
Numéro de série :
2d:de:77:8f:c6:c0:bf:cd:8a:ad:4c:87:0d:d2:bc:53:fa:bb:af:0e
Algorithme de signature : ecdsa-with-SHA256
Émetteur : C = US, ST = Washington, O = Example Co., OU = IT, CN = Example CA 123
Validité
Non valide avant : Mar 29 20:12:36 2023 GMT
Non valide après : Apr 28 20:12:36 2023 GMT
Sujet : C = US, ST = Washington, O = Example Co., OU = IT, CN = Example CA 123
Informations sur la clé publique du sujet :
Algorithme de clé publique : id-ecPublicKey
Clé publique : (384 bits)
pub :
04:59:d8:cd:7b:53:2e:e0:58:ff:3e:fa:10:9e:f8:
78:d2:c6:f7:e8:f4:aa:4f:12:ee:90:3f:60:09:e0:
4e:59:05:ed:5e:30:b7:59:f3:f1:db:30:9f:02:2e:
95:28:c4:80:28:89:b0:3c:7d:83:26:03:cc:21:83:
ea:62:2a:33:3a:a8:ad:7c:19:9d:26:1e:a1:dc:29:
96:0c:93:9b:2d:fb:b5:c5:56:a9:8c:5e:8a:ec:94:
42:25:46:74:b2:fd:70
OID ASN1 : secp384r1
CURVE NIST : P-384
Extensions X509v3 :
Identifiant de clé publique du sujet X509v3 :
97:44:2C:98:02:61:6D:CE:64:96:63:C0:30:B4:FF:36:7B:6F:AD:14
Identifiant de clé publique d'autorité X509v3 :
97:44:2C:98:02:61:6D:CE:64:96:63:C0:30:B4:FF:36:7B:6F:AD:14
Contraintes de base X509v3 : critique
CA:TRUE
Algorithme de signature : ecdsa-with-SHA256
Valeur de signature :
30:65:02:31:00:c3:d3:ec:ef:5a:47:3c:9c:d0:b8:45:56:da:
a8:83:e8:0e:73:3a:49:d7:15:18:6e:0e:16:05:e7:3c:d6:28:
cd:8f:d7:60:21:cd:04:b7:c3:4b:dd:4f:4c:6a:b4:2a:56:02:
30:66:6a:18:36:de:9b:84:0e:ed:64:ff:33:b1:f3:a0:67:40:
14:0d:51:f9:05:60:02:33:c3:e9:d2:68:88:26:68:7a:de:41:
36:4d:cb:7f:60:22:85:39:30:48:48:c0:ee
-----BEGIN CERTIFICATE-----
MIICTjCCAdSgAwIBAgIULd53j8bAv82KrUyHDdK8U/q7rw4wCgYIKoZIzj0EAwIw
XjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldhc2hpbmd0b24xFDASBgNVBAoMC0V4
YW1wbGUgQ28uMQswCQYDVQQLDAJJVDEXMBUGA1UEAwwORXhhbXBsZSBDQSAxMjMw
HhcNMjMwMzI5MjAxMjM2WhcNMjMwNDI4MjAxMjM2WjBeMQswCQYDVQQGEwJVUzET
MBEGA1UECAwKV2FzaGluZ3RvbjEUMBIGA1UECgwLRXhhbXBsZSBDby4xCzAJBgNV
BAsMAklUMRcwFQYDVQQDDA5FeGFtcGxlIENBIDEyMzB2MBAGByqGSM49AgEGBSuB
BAAiA2IABFnYzXtTLuBY/z76EJ74eNLG9+j0qk8S7pA/YAngTlkF7V4wt1nz8dsw
nwIulSjEgCiJsDx9gyYDzCGD6mIqMzqorXwZnSYeodwplgyTmy37tcVWqYxeiuyU
QiVGdLL9cKNTMFEwHQYDVR0OBBYEFJdELJgCYW3OZJZjwDC0/zZ7b60UMB8GA1Ud
IwQYMBaAFJdELJgCYW3OZJZjwDC0/zZ7b60UMA8GA1UdEwEB/wQFMAMBAf8wCgYI
KoZIzj0EAwIDaAAwZQIxAMPT7O9aRzyc0LhFVtqog+gOczpJ1xUYbg4WBec81ijN
j9dgIc0Et8NL3U9MarQqVgIwZmoYNt6bhA7tZP8zsfOgZ0AUDVH5BWACM8Pp0miI
Jmh63kE2Tct/YCKFOTBISMDu
-----END CERTIFICATE-----
Pour signer la clé d’une autre personne avec cette CA, commencez par faire en sorte que le propriétaire de la clé génère une CSR avec sa clé et la fournisse à vous. Par exemple, supposons que votre collègue Bob génère une nouvelle clé privée et une CSR avec les commandes suivantes :
$ openssl genpkey -algorithm ed25519 -out bob.key
$ openssl req -new -key bob.key -out bob.csr
Vous allez être invité à entrer des informations qui seront incorporées dans votre demande de certificat.
Ce que vous allez entrer est ce qu'on appelle un Nom Distingué ou DN.
Il y a beaucoup de champs, mais vous pouvez laisser certains vides.
Pour certains champs il y aura une valeur par défaut,
Si vous entrez '.', le champ sera laissé vide.
-----
Code pays (2 lettres) [AU]:US
État ou province (nom complet) [Some-State]:Washington
Localité (par exemple, ville) []:
Organisation (par exemple, société) [Internet Widgits Pty Ltd]:Example Co.
Unité organisationnelle (par exemple, section) []:IT
Nom commun (par exemple, nom de domaine complet du serveur ou votre nom) []:Bob
Adresse e-mail []:
Veuillez entrer les attributs 'extra' suivants à envoyer avec votre demande de certificat
Un mot de passe de défi []:
Un nom d'entreprise optionnel []:
Il lui fournira le fichier de sortie bob.csr ; vous pouvez maintenant produire un certificat signé avec votre CA.
Avec une CA réelle, vous auriez un fichier de configuration OpenSSL personnalisé et une structure de répertoires définies; mais pour cet exemple simple, nous utiliserons la structure de répertoires par défaut “demoCA” d’OpenSSL. Créez les répertoires suivants et les fichiers :
$ mkdir demoCA && touch demoCA/index.txt && echo 01 > demoCA/serial
Vous pouvez ensuite signer la demande de signature (CSR) de Bob avec la commande suivante :
$ PKCS11_MODULE_PATH=/usr/lib/x86_64-linux-gnu/libykcs11.so.2 \
openssl ca \
-engine pkcs11 -keyform engine -keyfile "pkcs11:object=Clé privée pour la clé obsolète 1;type=private" \
-cert key1-82.crt -in bob.csr -outdir .
Entrez le PIN du token PIV de votre YubiKey lorsque vous y êtes invité :
Engine "pkcs11" set.
Utilisation de la configuration depuis /usr/lib/ssl/openssl.cnf
Entrez le PIN du token PKCS#11 pour YubiKey PIV #12345678 :
OpenSSL affichera les détails de la demande de signature (CSR) de Bob afin que vous puissiez les examiner :
Vérifiez que la requête correspond à la signature
Signature valide
Détails du certificat :
Numéro de série : 1 (0x1)
Validité
Non antérieur au : Mar 29 20:56:42 2023 GMT
Non après : Mar 28 20:56:42 2024 GMT
Sujet :
pays = US
état ou province = Washington
organisation = Example Co.
unité organisationnelle = IT
nom commun = Bob
Extensions X509v3 :
X509v3 Conventions de base :
CA:FALSE
X509v3 Identifiant clé du sujet :
0F:FD:F3:44:43:05:16:C1:79:3C:73:DD:97:FB:7B:C8:07:6C:81:6F
X509v3 Identifiant clé de l'autorité :
97:44:2C:98:02:61:6D:CE:64:96:63:C0:30:B4:FF:36:7B:6F:AD:14
Le certificat doit être validé jusqu'au : Mar 28 20:56:42 2024 GMT (365 jours)
Signer le certificat ? [y/n] :
Si cela semble correct, entrez y à l’invite ; alors votre YubiKey va clignoter — tapez-y pour signer le nouveau certificat. OpenSSL vous demandera ensuite de mettre à jour les fichiers « base de données » dans le dossier demoCA ; entrez y à nouveau :
1 out of 1 demande de certificat validée, valider ? [y/n]y
Écriture de la base de données avec 1 nouvelle entrée
Certificat :
Données :
Version : 3 (0x2)
Numéro de série : 1 (0x1)
Algorithme de signature : ecdsa-with-SHA256
Émetteur : C=US, ST=Washington, O=Example Co., OU=IT, CN=Example CA 123
Validité
Non valide avant : mar. 29 avr. 20:56:42 2023 GMT
Non valide après : lun. 28 avr. 20:56:42 2024 GMT
Sujet : C=US, ST=Washington, O=Example Co., OU=IT, CN=Bob
Informations sur la clé publique du sujet :
Algorithme de clé publique : ED25519
Clé publique ED25519 :
pub :
7a:c6:42:6a:62:9c:d7:f6:36:5e:7e:d9:7d:46:64:
ad:29:9c:44:3b:35:c8:da:cf:9e:eb:e5:12:7a:ba:
bd:6b
Extensions X509v3 :
X509v3 Contraintes de base :
CA : FAUX
X509v3 Identifiant de clé du sujet :
0F:FD:F3:44:43:05:16:C1:79:3C:73:DD:97:FB:7B:C8:07:6C:81:6F
X509v3 Identifiant de clé de l'autorité :
97:44:2C:98:02:61:6D:CE:64:96:63:C0:30:B4:FF:36:7B:6F:AD:14
Algorithme de signature : ecdsa-with-SHA256
Valeur de signature :
30:66:02:31:00:82:31:46:2f:05:a4:59:40:37:8d:bd:43:bc:
42:59:17:df:d4:a2:9e:2f:48:d3:2d:e7:69:25:f9:c1:40:91:
e4:57:26:6c:b2:a9:4e:98:58:0e:3d:78:91:cf:1c:0e:62:02:
31:00:e6:fc:aa:93:90:0b:ca:ed:ce:f2:17:63:09:68:e0:da:
92:3d:68:3a:c6:ce:25:e1:e5:ac:e0:30:d0:75:5a:a1:d9:6c:
f0:93:53:55:94:5e:01:0d:59:ec:3a:06:4b:7c
-----BEGIN CERTIFICATE-----
MIIB3zCCAWSgAwIBAgIBATAKBggqhkjOPQQDAjBeMQswCQYDVQQGEwJVUzETMBEG
A1UECAwKV2FzaGluZ3RvbjEUMBIGA1UECgwLRXhhbXBsZSBDby4xCzAJBgNVBAsM
AklUMRcwFQYDVQQDDA5FeGFtcGxlIENBIDEyMzAeFw0yMzAzMjkyMDU2NDJaFw0y
NDAzMjgyMDU2NDJaMFMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApXYXNoaW5ndG9u
MRQwEgYDVQQKDAtFeGFtcGxlIENvLjELMAkGA1UECwwCSVQxDDAKBgNVBAMMA0Jv
YjAqMAUGAytlcAMhAHrGQmpinNf2Nl5+2X1GZK0pnEQ7Ncjaz57r5RJ6ur1ro00w
SzAJBgNVHRMEAjAAMB0GA1UdDgQWBBQP/fNEQwUWwXk8c92X+3vIB2yBbzAfBgNV
HSMEGDAWgBSXRCyYAmFtzmSWY8AwtP82e2+tFDAKBggqhkjOPQQDAgNpADBmAjEA
gjFGLwWkWUA3jb1DvEJZF9/Uop4vSNMt52kl+cFAkeRXJmyyqU6YWA49eJHPHA5i
AjEA5vyqk5ALyu3O8hdjCWjg2pI9aDrGziXh5azgMNB1WqHZbPCTU1WUXgENWew6
Bkt8
-----END CERTIFICATE-----
Base de données mise à jour
Le nouveau certificat sera enregistré avec un nom de fichier correspondant à son numéro de série — dans ce cas, 01.pem. Renvoyez ce fichier à Bob. Vous (ou tout autre ayant votre CA publique, key1-82.crt) pouvez vérifier qu’il a été signé par votre clé privée en exécutant la commande suivante :
$ openssl verify -CAfile key1-82.crt 01.pem
01.pem: OK
|
Tip
|
Consultez le guide excellent de Jamie Nguyen sur OpenSSL Certificate Authority pour une formation beaucoup plus détaillée sur la mise en place d’une CA avec OpenSSL. N’oubliez pas de remplacer l’argument pour la clé privée de la CA dans les commandes qui l’utilisent dans ce guide par une référence à la clé du moteur PKCS #11, comme montré dans les exemples ci-dessus. (Notez que le nom de l’argument pour la clé privée n’est pas cohérent entre les commandes OpenSSL — parfois c’est -key, parfois c’est -inkey, parfois c’est -keyfile, et ainsi de suite.)
|
FIDO
Les applications YubiKey FIDO U2F et FIDO2 partagent une interface de gestion et d’utilisateur commune, donc en tant qu’utilisateur final de FIDO, vous n’avez pas à vous soucier de la différence entre les deux. Vous pouvez penser à U2F comme étant « FIDO 1.0 » et à FIDO2 comme étant « FIDO 2.0 », où les YubiKeys sont capables de soutenir transparentement les clients qui peuvent tirer parti des nouvelles fonctionnalités de FIDO2, tout en restant compatibles avec les anciens clients qui ne prennent en charge que l’ensemble des fonctionnalités U2F. (« FIDO » était initialement un acronyme pour Fast IDentity Online ; maintenant, c’est le nom d’embrasure pour une série de normes relatives à l’activation de l’authentification basée sur les signatures dans diverses applications et appareils.)
WebAuthn, l’API de navigateur web qui utilise les identifiants FIDO, fonctionne avec à la fois U2F et FIDO2. La fonctionnalité “sans mot de passe” de WebAuthn, connue sous le nom de Passkeys, nécessite FIDO2. Sur les navigateurs modernes exécutant des systèmes d’exploitation modernes (sortis il y a environ 2 ans ou moins), vous n’avez pas besoin d’installer quoi que ce soit de spécial pour utiliser votre YubiKey avec WebAuthn — cela devrait simplement fonctionner “en mode hors ligne” (mais consultez les matrices de support WebAuthn fournies par Yubico et Okta pour quelques notes spécifiques aux plateformes).
Clés FIDO
L’application FIDO de la YubiKey vous permet de générer une série de paires de clés de signature, où la clé privée de la paire de clés de signature est accessible uniquement à la YubiKey (chaque paire de clés, ainsi que les métadonnées associées, forment une credential FIDO). Chaque paire de clés individuelle est destinée à être utilisée pour un seul but spécifique en coordination avec une seule autre partie (cette partie est appelée “partie dépendante”, aka RP). Vous utilisez la clé privée de la paire de clés ; la partie dépendante utilise la clé publique.
Ces paires de clés sont de deux types : un type est stocké sur le YubiKey lui-même, appelé “clés résidentes” (aussi appelées “clés détectables”) ; et le autre type (les clés non-résidentes) est stocké à l’extérieur du YubiKey, par la partie dépendante. Même si la partie dépendante stocke la clé privée des clés non-résidentes, elle n’a pas accès pour les utiliser — la clé privée est toujours exportée sous forme chiffrée, chiffrée par une clé maîtresse secrète tenue par le YubiKey lui-même. Par conséquent, seul le YubiKey peut utiliser la clé privée de la clé (et seulement lorsque la clé est retenue et fournie par la partie dépendante).
U2F (“FIDO 1.0”) n’a supporté que les clés non-résidentes ; tandis que FIDO2 prend en charge à la fois les clés résidentes et non-résidentes. Votre YubiKey peut stocker jusqu’à 25 clés résidentes — mais il peut générer un nombre infini de clés non-résidentes. Les clés résidentes sont principalement destinées à être utilisées comme des Passkeys WebAuthn (où la clé FIDO est utilisée en tant que facteur principal, et souvent le seul), ce qui permet à un site web d’éviter de publiquement divulguer les Passkeys qu’il a stockés.
Avec WebAuthn, les identifiants non résidents sont généralement attendus pour être utilisés uniquement pour la 2FA, où un site web demande d’abord à l’utilisateur de s’authentifier par une autre méthode (comme un mot de passe) ; et seulement si le premier facteur est réussi, le site web fournira les identifiants FIDO stockés de l’utilisateur afin qu’il puisse essayer la 2FA avec eux. Cependant, avec d’autres applications comme SSH ou PAM, où énumérer les utilisateurs par nom d’utilisateur n’est pas possible ou ne pose pas de problème, les identifiants non résidents sont adéquats pour être utilisés en tant que facteur principal d’authentification.
PIN FIDO
Vous devriez définir le PIN de l’application FIDO, ce qui vous permettra de lister et de supprimer les identifiants résidents (important car la YubiKey peut contenir uniquement 25 d’eux). Avant de définir votre PIN, le ykman CLI affichera ce qui suit lorsque vous consultez l’état de l’application FIDO :
$ ykman fido info
PIN n'est pas défini.
$ ykman fido credentials list
ERREUR : La gestion des identifiants nécessite d'avoir un PIN. Définissez d'abord un PIN.
|
Note
|
Une fois que vous avez défini un code PIN FIDO, certains sites Web utilisant WebAuthn peuvent nécessiter que vous entriez ce code PIN pour vous connecter avec une credential WebAuthn (alors que d’autres ne le font pas). Si nécessaire, vous serez invité à entrer votre code PIN FIDO dans la même boîte de dialogue du navigateur qui vous guide à toucher votre YubiKey pour vous authentifier sur le site (cependant, n’entre jamais directement votre code PIN dans le formulaire d’authentification propre au site — votre code PIN est un secret utilisé par le YubiKey lui-même et ne doit jamais être fourni directement au site). En général, le code PIN protège l’application FIDO contre la liste, la création et la suppression des credentials résidents — mais pas de leur utilisation. Cependant, pour certains credentials ou tentatives d’authentification spécifiques, un site (le partie prenante du credential) peut vous demander de fournir le code PIN à votre YubiKey afin d’utiliser le credential (via une flèche permanente inscrite dans le credential lui-même, ou via une flèche temporaire demandée pour une tentative d’authentification individuelle), au nom du vérification de l’utilisateur. La plupart des guides pratiques sur WebAuthn recommanderont que les sites exigent que vous fournissiez votre code PIN lors de l’utilisation de WebAuthn comme seul facteur d’authentification, mais pas lors de son utilisation en tant que second facteur. Cependant, il est finalement à la décision du site de décider si ou non il doit exiger votre code PIN. |
Exécutez la commande suivante pour définir votre code PIN FIDO :
$ ykman fido access change-pin
Le code PIN doit être compris entre 4 et 64 caractères. N’utilisez pas un chiffre — au lieu de cela, utilisez une phrase de passe simple (dans le style “correct horse battery staple”) qui fait au moins 4 caractères et est facile à taper. Assurez-vous qu’il est différent de tout autre code PIN ou phrase de passe que vous avez jamais utilisé auparavant (y compris les OpenPGP ou PIV PINs que vous avez définis pour cette YubiKey). Consultez le conseil dans la section OpenPGP sur la façon de générer un bon code PIN aléatoire.
|
Avertissement
|
Comme les PINs OpenPGP ou PIV, si vous entrez le mauvais code PIN FIDO trop de fois de suite, la YubiKey vous empêchera d’essayer encore (contrairement à OpenPGP ou PIV, cette limite n’est pas configurable — elle est codée pour bloquer après 8 tentatives de code PIN incorrectes en série). Si cela arrive, vous ne pourrez plus lister ni supprimer vos identifiants résidents FIDO — et vous ne pourrez plus utiliser aucun identifiant FIDO qui nécessite que votre code PIN soit fourni. |
Entrez votre nouveau code PIN lorsque vous y êtes invité, puis répétez-le :
Enter your new PIN:
Repeat for confirmation:
Écrivez votre code PIN FIDO sur le même papier que celui où vous avez noté vos OpenPGP et PIV PINs (assurez-vous de noter qu’il s’agit du code PIN pour l’application FIDO de la YubiKey, car chaque application utilise un ensemble indépendant de codes PIN ou de mots de passe).
Une fois que vous avez défini votre code PIN FIDO, l’interface de ligne de commande ykman affichera cela lorsque vous consultez l’état de l’application FIDO :
$ ykman fido info
Le code PIN est défini, avec 8 tentative(s) restante(s).
$ ykman fido credentials list
Entrez votre code PIN :
ID d'identité du répartiteur ID du répartiteur Nom d'utilisateur Nom d'affichage
FIDO SSH
FIDO peut être utilisé pour générer des clés d’authentification SSH FIDO. Vous pouvez en fait générer un nombre infini de clés SSH FIDO non résidentes, une pour chaque hôte auquel vous connectez via SSH (ou vous pouvez générer simplement une seule clé SSH et l’utiliser pour tous les hôtes).
Vous devez exécuter au moins OpenSSH 8.2 sur le client et le serveur afin d’utiliser des clés SSH FIDO. Exécutez la commande suivante pour vérifier votre version de client SSH :
$ ssh -V
OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022
Exécutez la commande ssh-keygen suivante pour générer une clé non résidente qui sera présentée par défaut par votre client SSH à tous les serveurs SSH :
$ ssh-keygen -t ed25519-sk
Génération d'un paire de clés publique/privée ed25519-sk.
Vous pourriez avoir besoin de toucher votre authenticateur pour autoriser la génération de la clé.
Entrez votre code PIN FIDO lorsque vous y êtes invité, puis touchez votre YubiKey :
Entrez le code PIN de l'authentificateur :
Vous pourriez avoir besoin de toucher à nouveau votre authenticateur (encore une fois) pour autoriser la génération de la clé.
Comme pour vos autres clés SSH, entrez un mot de passe fort et unique pour elle (utilisez votre gestionnaire de mots de passe pour générer et stocker un mot de passe aléatoire pour la clé SSH) :
Entrez le mot de passe (laissez vide pour ne pas utiliser de mot de passe) :
Entrez à nouveau le même mot de passe :
Votre identité a été enregistrée dans /home/justin/.ssh/id_ed25519_sk
Votre clé publique a été enregistrée dans /home/justin/.ssh/id_ed25519_sk.pub
Lempreinte de la clé est :
SHA256:61lJwqyM7gVkGjshgI1Ye2AM+wT4VjzvWE8xQ4SRlh4 justin@mylaptop
Copiez le contenu du nouveau fichier id_ed25519_sk.pub généré :
$ cat ~/.ssh/id_ed25519_sk.pub
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIF+8W+W7m4VBDAs7xA9E0qctv8QfXXeqTCKzJxqUVO6+AAAABHNzaDo= justin@mylaptop
Et collez-le en tant que nouvelle ligne dans le fichier ~/.ssh/authorized_keys sur chaque hôte distant avec lequel vous souhaitez utiliser cette clé SSH (ou utilisez la commande ssh-copy-id comme raccourci pour tous les hôtes auxquels vous avez déjà accès via SSH).
Lorsque vous vous connectez à un hôte (par exemple, bastion.example.com) en utilisant cette nouvelle clé SSH, vous serez invité à entrer le mot de passe de la clé SSH :
$ ssh bastion.example.com
Entrez le mot de passe pour la clé '/home/justin/.ssh/id_ed25519_sk' :
Et ensuite vous serez invité à toucher votre YubiKey :
Confirmez la présence de l'utilisateur pour la clé ED25519-SK SHA256:61lJwqyM7gVkGjshgI1Ye2AM+wT4VjzvWE8xQ4SRlh4
[YubiKey touché]
Présence de l'utilisateur confirmée
Bienvenue sur Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-1030-aws aarch64)
Dernière connexion : mar. 29 mars 01:12:03 UTC 2023 depuis 198.51.100.123
justin@bastion:~$
Si vous utilisez un [agent SSH](https://man.openbsd.org/ssh-agent.1) pour mettre en cache vos informations d'identification SSH, vous n'aurez pas à entrer le mot de passe de votre clé SSH lors des connexions ultérieures (tant que la clé est mise en cache) — vous devrez simplement toucher votre YubiKey lorsque celui-ci clignote :
```bash
$ ssh bastion.example.com
[YubiKey touched]
Bienvenue sur Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-1030-aws aarch64)
Dernière connexion : mar. 29 mars 01:13:25 UTC 2023 depuis 198.51.100.123
justin@bastion:~$
Pour générer des clés SSH supplémentaires, spécifiez un fichier de clé privée personnalisé (et optionnellement un commentaire personnalisé à stocker dans le fichier de clé publique). Par exemple, je pourrais exécuter la commande suivante pour générer une clé SSH spécifique au bastion SSH en production :
$ ssh-keygen -t ed25519-sk -f ~/.ssh/bastion_key1 -C 'justin on key1 for prod bastion'
Génération d'une paire de clés publique/privée ed25519-sk.
Vous pourriez avoir besoin de toucher votre authenticateur pour autoriser la génération de la clé.
Entrez le PIN de l'authentificateur :
[YubiKey touched]
Entrez un mot de passe (laissez vide pour aucun mot de passe) :
Entrez le même mot de passe à nouveau :
Votre identité a été enregistrée dans /home/justin/.ssh/bastion_key1
Votre clé publique a été enregistrée dans /home/justin/.ssh/bastion_key1.pub
Lempreinte de la clé est :
SHA256:IwZCagv9RzaAlRX8n8yL39TTF2/7dhYeleLM1wGJ2Dw justin on key1 for prod bastion
L’option -f spécifie le chemin où enregistrer le nouveau fichier de clé privée (une extension .pub sera ajoutée à ce chemin pour le fichier de clé publique), et l’option -C spécifie un nouveau commentaire à stocker dans le fichier de clé publique.
Copiez le contenu du fichier ~/.ssh/bastion_key1.pub, puis collez-le dans le fichier ~/.ssh/authorized_keys sur l’hôte. Ensuite, vous pouvez vous connecter à l’hôte en spécifiant le chemin vers le fichier de clé privée via l’option -i :
$ ssh -i ~/.ssh/bastion_key1 bastion.example.com
Entrez le mot de passe pour la clé '/home/justin/.ssh/bastion_key1':
Confirmez la présence de l'utilisateur pour la clé ED25519-SK SHA256:IwZCagv9RzaAlRX8n8yL39TTF2/7dhYeleLM1wGJ2Dw
[Touchez le YubiKey]
Présence de l'utilisateur confirmée
Bienvenue sur Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-1030-aws aarch64)
Dernière connexion : mar. 29 mars 2023 01:18:57 UTC depuis 198.51.100.123
justin@bastion:~$
|
Tip
|
Pour éviter de spécifier l’option |
FIDO PAM
FIDO peut être utilisé pour vous connecter à votre ordinateur local ou pour exécuter des commandes sudo sur votre ordinateur local (ou tout autre chose qui utilise PAM pour l’authentification sur votre ordinateur) — soit en tant que deuxième facteur, soit comme le seul facteur. Vous devez avoir la bibliothèque pam-u2f installée sur votre ordinateur pour utiliser les clés FIDO PAM.
Sur Debian et ses dérivées, installez les paquets libpam-u2f et pamu2fcfg :
$ sudo apt install libpam-u2f pamu2fcfg
Ou sur Fedora et ses dérivées, installez les paquets pam-u2f et pamu2fcfg :
$ sudo dnf install pam-u2f pamu2fcfg
Ensuite, exécutez la commande suivante pamu2fcfg pour générer une clé non résidente qui peut être utilisée pour PAM :
$ pamu2fcfg --type eddsa --origin pam://mylaptop; echo
Le drapeau --type spécifie le type et l’algorithme de la clé (par exemple, EdDSA vs ECDSA conventionnelle vs RSA), et le drapeau --origin spécifie le nom de l’hôte sur lequel la clé peut être utilisée. Vous n’avez pas besoin d’utiliser le nom littéral de l’ordinateur dans la chaîne d’origine, mais elle doit commencer par le préfixe pam://.
|
Note
|
Les clés EdDSA (aussi appelées Ed25519) nécessitent une version 1.2 ou plus récente de la bibliothèque pam-u2f. Vérifiez la version installée sur votre ordinateur en exécutant la commande suivante : Si vous avez une version inférieure à 1.2, utilisez ECDSA avec la courbe P-256 au lieu d’EdDSA : |
Entrez le FIDO PIN lorsque vous y êtes invité, puis touchez votre YubiKey :
Enter PIN for /dev/hidraw6:
justin:qTUtCkST3kmnn59wQkdMLFdwq5jkqD0iXz8zNRlTt7RrcKerJAy+uXJyTaibpnG0rMxxvNc6OPShX98OovQjPA==,YtE5P7sYandqzEkOzuIvwe/IKS/Y+SYetILCNJqEY0m+/ixZj+IngkDEeaHEK23lIfsdZt9fjF8k7lrLkVYOig==,eddsa,+presence
Créez un nouveau fichier /etc/u2f_mappings en tant que root sur votre ordinateur local et copiez-y et collez la sortie de la commande précédente (commençant par votre nom d’utilisateur) dans le fichier.
|
Note
|
Si vous générez plusieurs clés FIDO (par exemple, pour utiliser plusieurs YubiKeys différentes pour l’authentification sur votre ordinateur local), combinez toutes les clés en une seule ligne, séparées par des deux-points (avec votre nom d’utilisateur comme première entrée de la ligne et ne le répétez nulle part ailleurs). Par exemple, pour permettre à 3 différentes clés FIDO d’être utilisées pour l’authentification PAM, je les combine toutes en une seule ligne comme suit : Pour l’illustration, si je remplacais tous les caractères sauf les trois premiers de chaque chaîne codée en base64 dans le-dessus par des points de suspension, la ligne apparaîtrait comme suit : Et si je remplacais ensuite chaque deux-points par une nouvelle ligne, elle apparaîtrait comme suit : (La troisième clé de l’exemple ci-dessus provient d’une attestation résidentielle, c’est pourquoi elle utilise |
Suivez ensuite l’édition du fichier /etc/pam.d/sudo en tant que root. Ajoutez la ligne suivante au début du fichier (mais conservez le reste du fichier inchangé !) :
# /etc/pam.d/sudo
auth sufficient pam_u2f.so authfile=/etc/u2f_mappings origin=pam://mylaptop debug
Modifiez l’indicateur origin dans l’exemple ci-dessus pour qu’il corresponde exactement à la chaîne d’origine que vous avez utilisée lors de la génération de vos clés FIDO PAM (pam://mylaptop dans cet exemple).
|
Important
|
L’indicateur d’origine que vous avez utilisé lors de la génération d’une clé avec la commande pamu2fcfg **doit** correspondre à l’indicateur d’origine que vous utilisez dans les fichiers de configuration PAM.
Si vous ne spécifiez pas d’origine, PAM utilisera le nom d’hôte actuel par défaut. Le problème avec cela est que si le nom d’hôte change jamais, votre clé ne fonctionnera plus.
|
Enregistrez le fichier — mais n’abandonnez pas votre éditeur ! Testez-le en exécutant sudo dans un nouveau terminal, comme suit :
$ sudo -k echo make me a sandwich
Si tout va bien, vous devriez voir une série de messages de débogage envoyés à votre terminal et votre YubiKey doit commencer à clignoter :
debug(pam_u2f): pam-u2f.c:111 (parse_cfg): called.
debug(pam_u2f): pam-u2f.c:112 (parse_cfg): flags 32768 argc 3
debug(pam_u2f): pam-u2f.c:114 (parse_cfg): argv[0]=authfile=/etc/u2f_mappings
debug(pam_u2f): pam-u2f.c:114 (parse_cfg): argv[1]=origin=pam://mylaptop
debug(pam_u2f): pam-u2f.c:114 (parse_cfg): argv[2]=debug
...
adjust_assert_count: cbor_type
cbor_decode_assert_authdata: buf=0x5625a2af9bf0, len=37
debug(pam_u2f): util.c:1106 (get_authenticators): Found key in authenticator 0
fido_tx: dev=0x5625a2ae9f70, cmd=0x10
fido_tx: buf=0x5625a2ae9a00, len=145
0000: 02 a4 01 6c 70 61 6d 3a 2f 2f 6d 79 68 6f 73 74
0016: 02 58 20 77 f0 0e 7f ec e2 d8 25 49 14 32 cd 4d
0032: 34 ee 5b 7e 34 2f 55 de 2a c9 e8 34 6c dc 4d c9
0048: 2d 34 4e 03 81 a2 62 69 64 58 40 2b 19 a4 e3 35
0064: 93 ae 7e 26 26 20 58 2f 77 03 dd f1 7c 3a 52 b2
0080: b4 97 cf 27 8c 77 82 5d 1e cb 3d 32 9f 6c 32 a6
0096: 3a cd 74 86 d7 9e 73 0f 47 ad 2b 4d c8 ea 98 fc
0112: 00 75 f7 78 ea c0 1b 1d ce a3 47 64 74 79 70 65
0128: 6a 70 75 62 6c 69 63 2d 6b 65 79 05 a1 62 75 70
0144: f5
Touchez votre YubiKey, observez la sortie de débogage s’afficher et à la fin du processus, vous devriez voir votre commande de test exécutée avec succès :
fido_rx: dev=0x5625a2ae9f70, cmd=0x10, ms=-1
rx_preamble: buf=0x7ffe162cc480, len=64
0000: 63 5e 2e 3a 90 00 cb 00 a3 01 a2 62 69 64 58 40
0016: 2b 19 a4 e3 35 93 ae 7e 26 26 20 58 2f 77 03 dd
0032: f1 7c 3a 52 b2 b4 97 cf 27 8c 77 82 5d 1e cb 3d
0048: 32 9f 6c 32 a6 3a cd 74 86 d7 9e 73 0f 47 ad 2b
rx: payload_len=203
rx: buf=0x7ffe162cc480, len=64
...
fido_check_flags: flags=01
fido_check_flags: up=2, uv=0
debug(pam_u2f): pam-u2f.c:473 (pam_sm_authenticate): done. [Success]
make me a sandwich
Si la commande de test a réussi, supprimez le drapeau debug à la fin de la ligne dans votre fichier /etc/pam.d/sudo :
# /etc/pam.d/sudo
auth sufficient pam_u2f.so authfile=/etc/u2f_mappings origin=pam://mylaptop
La valeur de contrôle PAM sufficient permet à votre YubiKey d’agir comme un facteur primaire optionnel pour l’authentification sudo. Si vous ne touchez pas votre YubiKey (ou si elle est débranchée), vous pouvez toujours utiliser le mot de passe de votre compte utilisateur pour l’authentification sudo — et si vous touchez votre YubiKey, vous n’aurez pas besoin d’entrer votre mot de passe.
Pour configurer sudo afin qu’il utilise votre YubiKey comme un facteur secondaire obligatoire, changez la valeur de contrôle sufficient en requisite :
# /etc/pam.d/sudo
auth requisite pam_u2f.so authfile=/etc/u2f_mappings origin=pam://mylaptop
Maintenant, si vous exécutez une commande sudo de test, comme celle-ci :
$ sudo -k echo make me a sandwich
D’abord, votre YubiKey va clignoter, et la commande s’arrêtera jusqu’à ce que vous la touchiez ; ensuite, vous serez invité à entrer le mot de passe de votre compte utilisateur :
[sudo] password for justin:
Et une fois que vous aurez entré votre mot de passe, la commande de test s’exécutera :
make me a sandwich
Si vous ne touchez pas votre YubiKey ou si elle n’est pas branchée, vous ne pourrez pas exécuter d’commandes sudo.
Vous pouvez appliquer la même ligne de configuration à divers autres fichiers dans le répertoire /etc/pam.d/sudo pour activer l’utilisation de votre YubiKey comme deuxième facteur (ou facteur principal) pour divers autres services (comme pour vous connecter à votre environnement de bureau).
|
Tip
|
Si vous faites une erreur dans votre configuration PAM (ou si elle ne fonctionne plus après une mise à jour du système), et que vous ne pouvez plus utiliser sudo ou vous connecter à votre ordinateur local, vous pouvez toujours démarrer depuis un stick USB de récupération, monter votre volume racine sur un point de montage dans votre système de récupération, et éditer les fichiers /etc/pam.d à partir de ce point de montage pour mettre à jour ou supprimer les paramètres FIDO que vous aviez ajoutés (puis redémarrer et vous connecter normalement).
|
|
Note
|
Fedora et ses dérivés utilisent Authselect pour gérer la configuration PAM. Si vous utilisez une distribution avec Authselect, vous pouvez l’utiliser directement pour configurer l’intégration YubiKey PAM ; consultez l’article Utiliser des clés de sécurité FIDO U2F avec Fedora Linux pour plus de détails. |
Suppression d’une Clé FIDO
Vous pouvez supprimer n’importe quelle des identifiants résidents stockés sur votre YubiKey en exécutant d’abord la commande suivante pour rechercher les premiers chiffres hexadécimaux de l’ID de l’identifiant :
$ ykman fido credentials list
Entrez votre PIN :
ID de l'identifiant ID du RP Nom d'utilisateur Nom d'affichage
87422920... webauthn.me test Utilisateur de test
53badd61... webauthn.io Justin Two Justin Two
8b17e0e4... webauthn.io Justin One Justin One
Spécifiez les premiers chiffres hexadécimaux de l’ID de l’identifiant comme dernier argument à la commande suivante pour le supprimer :
$ ykman fido credentials delete 8b17e0e4
Entrez votre code PIN FIDO, puis y pour confirmer :
Entrez votre PIN :
Supprimer webauthn.io Justin One Justin One (8b17e0e4a1de2aceb7565dc4b9552b7078ed09a992b9d7b7d36cfb7595f2aaaa216ebfc3f6c769a2dbed662d5fe754a4)? [y/N]: y
Le credential sera perpétuellement révoqué et impossible à utiliser à nouveau :
$ ykman fido credentials list
Entrez votre PIN :
ID du Credential ID de l'RP Nom d'utilisateur Nom d'affichage
87422920... webauthn.me test Utilisateur Test
53badd61... webauthn.io Justin Two Justin Two
Vous ne pouvez pas supprimer les credentials non résidents que vous avez créés (puisqu’ils sont stockés par le fournisseur de service). Tant que le fournisseur de service continue de stocker le credential, il peut toujours vous (ou qui que ce soit possède votre YubiKey et connaît son code PIN FIDO) demander d’utiliser le credential à un moment donné dans l’avenir.
La seule façon de révoquer pleinement vos credentials non résidents est de réinitialiser l’application FIDO sur votre YubiKey. Cela ne supprimera pas que les credentials résidents, mais effacera également la clé maître secrète nécessaire pour déchiffrer et utiliser vos credentials FIDO existants, à la fois résidents et non résidents :
$ ykman fido reset
ATTENTION ! Cela supprimera tous les credentials FIDO, y compris les credentials U2F, et restaurera les paramètres de fabrique. Continuer ? [y/N]: y
Retirez et insérez votre YubiKey pour effectuer la réinitialisation...
Touchez votre YubiKey...
|
Avertissement
|
Ne pas exécuter la commande reset sauf si vous êtes 100% sûr d’avoir ajouté une option d’authentification primaire de sauvegarde à chaque site Web où vous avez utilisé l’application FIDO de votre YubiKey pour l’authentification sans mot de passe (c’est-à-dire les Passkeys), et une option d’authentification à deux facteurs de sauvegarde à chaque site Web où vous avez utilisé l’application FIDO de votre YubiKey pour 2FA ! Vous ne pourrez plus vous connecter à aucun site Web où vous n’avez pas ajouté une option de sauvegarde.
Dans la plupart des cas où vous avez utilisé FIDO pour les Passkeys, le site Web aura utilisé une identité résidentielle — vous pourrez afficher ces sites Web via la commande ykman fido credentials list. Cependant, il n’y a pas de commande équivalente pour afficher les identités non-résidentielles (votre YubiKey ne suit pas leurs enregistrements) — donc si le site Web a utilisé une identité non-résidentielle (rarement le cas avec l’authentification primaire, mais plus fréquemment le cas avec 2FA), vous ne saurez pas à moins que vous n’aviez noté cela au moment de la mise en place de l’identité.
Par conséquent, il est une bonne idée de suivre manuellement les sites Web où vous avez utilisé votre YubiKey pour l’authentification FIDO (soit comme des notes dans votre gestionnaire de mots de passe, soit via un classeur Excel autonome), afin de savoir sur quels sites Web vous devez mettre à jour vos identités lorsque vous remplacez (ou réinitialisez) votre YubiKey.
|
OATH
L’application OATH ne nécessite pas beaucoup de configuration. Cette application peut être utilisée pour stocker jusqu’à 32 secrets TOTP (Password à un temps unique basé sur le temps) ou HOTP (Password à un temps unique basé sur l’HMAC) sur votre YubiKey, à partir duquel vous pouvez générer les codes 2FA (Authentification à deux facteurs) utilisés par de nombreux sites Web.
Vous pourriez vouloir installer l’application Yubico Authenticator sur votre téléphone afin d’aider à utiliser cette application, en particulier pour scanner les codes QR qui peuvent être utilisés comme raccourci pour configurer un nouveau secret TOTP dans votre YubiKey. Cependant, vous n’avez pas besoin d’utiliser l’application Yubico Authenticator si vous ne le souhaitez pas — vous pouvez enregistrer des secrets et générer des codes uniquement via la ligne de commande ykman CLI.
Mot de passe OATH
La seule étape de configuration que vous devriez effectuer avant d’utiliser cette application est de définir un mot de passe pour l’application. Une fois défini, votre YubiKey nécessitera ce mot de passe pour ajouter ou supprimer des secrets, ainsi que pour générer des codes 2FA.
Exécutez la commande suivante pour définir un nouveau mot de passe OATH :
$ ykman oath access change
Il n’y a aucune contrainte de taille ou de nombre de caractères pour ce mot de passe. Cependant, contrairement aux codes PIN d’autres applications YubiKey, il n’y a pas de limite maximale sur le nombre d’essais successifs incorrects que l’adversaire peut faire — si l’adversaire dispose d’un accès non contrôlé à votre YubiKey, il serait limité uniquement par la capacité matérielle du YubiKey à traiter les tentatives de mot de passe, permettant environ 100 000 tentatives de mot de passe par jour.
Par conséquent, vous devriez utiliser un mot de passe assez fort du type « correct horse battery staple ».
|
Tip
|
Générez un mot de passe composé de quatre mots aléatoires en exécutant la commande suivante : |
Entrez votre nouveau mot de passe à l’invite, puis répétez-le pour la confirmation :
Enter the new password:
Repeat for confirmation:
Password updated.
Écrivez le mot de passe sur le même papier où vous avez noté votre OpenPGP PIN et d’autres phrases de passe YubiKey.
|
Tip
|
Vous pouvez atténuer l’inconvénient de l’utilisation d’un mot de passe OATH fort en le stockant sur votre ordinateur. L’Authenticator Yubico sur la plupart des plateformes vous permet de sauvegarder le mot de passe dans le coffre-fort de la plateforme ou le magasin de clés. Avec l’interface CLI ykman, vous pouvez exécuter la commande suivante pour sauvegarder votre mot de passe dans le coffre-fort de la plateforme : Et la commande suivante pour le supprimer : |
Ajouter une clé secrète TOTP
Lorsque vous configurez l’authentification à deux facteurs (2FA) pour un site Web en utilisant TOTP, le site Web vous présente généralement un code QR à scanner. Ce code QR contient la clé secrète TOTP (ainsi que des métadonnées associées, comme le nom du site Web et votre nom d’utilisateur sur celui-ci). Si le site Web affiche également la clé elle-même (qui sera un code de 32 caractères comme ABCDEFGHIJKLMNOPQRSTUVWXYZ234567), vous pouvez copier cette clé et l’ajouter à votre application OATH YubiKey via l’interface CLI ykman.
|
Tip
|
Si un site web affiche simplement le code QR pour un secret TOTP et non le secret lui-même, vous pouvez décoder le code QR pour le trouver. Si vous téléchargez l’image contenant le code QR, vous pouvez généralement utiliser Zbar pour le décoder (disponible dans la plupart des distributions Linux sous forme du package La valeur du paramètre URL nommé |
Exécutez la commande suivante pour enregistrer le secret dans votre application OATH YubiKey :
$ ykman oath accounts add --oath-type TOTP --touch --issuer example.com justin
Le drapeau --touch ajoute la nécessité de toucher votre YubiKey chaque fois que vous souhaitez générer un code 2FA à partir du secret. Le secret sera stocké en combinant l’éditeur (example.com dans l’exemple ci-dessus) et le nom d’utilisateur (justin ci-dessus).
|
Note
|
Dans Yubico Authenticator, pour chaque entrée, l’éditeur est affiché au-dessus du nom d’utilisateur, comme ceci :
|
Entrez le nouveau secret lorsque vous y êtes invité, puis entrez votre mot de passe OATH :
Entrez une clé secrète (base32) : ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
Entrez le mot de passe :
Générer un code 2FA TOTP
Vous pouvez afficher tous les comptes pour lesquels vous avez stocké des secrets en exécutant la commande suivante :
$ ykman oath accounts list
Lorsque vous êtes invité, entrez votre mot de passe OATH :
Entrez le mot de passe :
Tous les comptes OATH stockés seront affichés, chacun formaté avec le nom de l’éditeur, un deux-points et ensuite le nom d’utilisateur du compte :
example.com:justin
Google:jl123@example.net
AOL:justin
Vous pouvez générer un code 2FA pour n’importe quel compte qui correspond à une chaîne unique de cette liste (comme jl123) en exécutant la commande suivante :
$ ykman oath accounts code jl123
Entrez votre mot de passe OATH et touchez votre YubiKey lorsque vous êtes invité, et le compte correspondant sera affiché, ainsi que le code 2FA actuel pour ce compte :
Entrez le mot de passe :
Touchez votre YubiKey...
Google:jl123@example.net 904875
Entrez le code affiché dans la commande de sortie (904875 dans l’exemple ci-dessus) dans le formulaire de défi 2FA du site Web.
OTP
L’application OTP gère deux emplacements qui peuvent chacun contenir l’un des quatre types de credentials suivants :
- Un secret YubiCloud
- Un secret TOTP (Password à un temps unique basée sur le temps)
- Un secret HOTP (Password à un temps unique basée sur l’hmac)
- Un secret statique (jusqu’à 38 caractères de long)
L’application OTP émettra un code 2FA (Authentification à deux facteurs) pour les types 1-3, ou émettra le secret statique pour le type 4, lorsque vous appuyez brièvement (slot 1) ou longuement (slot 2) sur la YubiKey.
Le slot 1 est préchargé avec un secret YubiCloud. Si vous utilisez ou envisagez d’utiliser YubiCloud pour l’authentification à deux facteurs, vous devriez le protéger avec un code d’accès (pour empêcher l’écrabouillage du secret ou de ses paramètres de configuration).
Si vous ne prévoyez pas d’utiliser YubiCloud, vous pouvez simplement supprimer le secret préchargé avec la CLI ykman (vous pouvez toujours réinscrire votre YubiKey avec un autre secret YubiCloud plus tard):
$ ykman otp delete 1
Voulez-vous vraiment supprimer la configuration du slot 1 ? [y/N]: y
Suppression de la configuration dans le slot 1...
Si vous avez utilisé tous les 32 slots de l’application OATH, vous pourriez utiliser les 2 slots OTP pour des secrets TOTP (ou HOTP). L’utilisation la plus courante des slots OTP est en effet d’entrer un secret statique dans une boîte de dialogue de mot de passe sur votre ordinateur lorsqu’il démarre (comme le mot de passe pour déverrouiller le volume de démarrage chiffré, ou pour vous connecter à votre compte utilisateur).
Si vous utilisez un ou deux emplacements OTP pour une clé secrète statique, vous devriez les protéger avec un code d’accès (pour prévenir l’écrabouillage de la clé secrète ou de ses paramètres de configuration). Chaque emplacement utilise un code d’accès différent (et par défaut, aucun n’est défini). Avant de définir un code d’accès sur un emplacement, vous devez toutefois le configurer avec une clé secrète.
Clé secrète OTP statique
Pour configurer l’emplacement OTP 1 pour utiliser une clé secrète statique, exécutez la commande suivante :
$ ykman otp static --generate --length 38 1
Cela générera un mot de passe aléatoire de 38 caractères (en utilisant l’encodage modhex personnalisé par Yubico par défaut), et le stockera dans l’emplacement 1.
Pour afficher le mot de passe, entrez la commande suivante, puis appuyez sur la YubiKey jusqu’à ce qu’elle commence à émettre du texte :
$ read
nJXB.Gtipd>YnIEbukC.jpyDj>PGKncdikgtTP
Code d’accès OTP
Pour protéger un emplacement avec un code d’accès (après que l’emplacement ait été configuré avec une clé secrète), exécutez la commande suivante :
$ ykman otp settings --new-access-code - 1
Le-dessus définit le code d’accès pour l’emplacement 1 (chaque emplacement a un code d’accès distinct). Le code d’accès doit être composé de 12 chiffres hexadécimaux. Vous n’en aurez besoin que si vous souhaitez modifier la clé secrète (ou d’autres paramètres de configuration) de l’emplacement 1, ou pour supprimer la clé secrète.
|
Tip
|
Pour générer un bon code d’accès aléatoire, exécutez la commande suivante : |
Entrez le nouveau code d’accès une fois, puis à nouveau, et ensuite entrez y pour confirmer :
Entrez le nouveau code d'accès :
Répétez pour la confirmation :
Mettre à jour les paramètres du slot 1 ? Tous les paramètres existants seront écrabouillés. [y/N] : y
Mise à jour des paramètres du slot 1...
Le avertissement “les paramètres existants seront écrabouillés” ne s’applique pas au secret lui-même, mais aux autres options qui peuvent être spécifiées avec la commande settings :
--no-enter: Ne pas émettre une pression de touche Entrée après le secret (par défaut à false sauf si spécifié)--pacing: Millisecondes entre chaque caractère émis (par défaut à 0 sauf si spécifié)--use-numeric-keypad: Émettre les codes d’entrée du pavé numérique (par défaut à false sauf si spécifié)
Écrivez le code d’accès (ainsi que le numéro de slot) sur la même feuille de papier sur laquelle vous avez écrit vos OpenPGP PINs. Vous en aurez besoin plus tard si vous souhaitez écraser le secret avec quelque chose d’autre (ou le supprimer).
Par exemple, pour supprimer le secret du slot 1 maintenant, exécutez la commande suivante :
$ ykman otp --access-code - delete 1
Si vous ne spécifiez pas l’option --access-code, la commande échouera avec une erreur. Fournir - à l’option --access-code entraînera la commande à demander le code d’accès. Entrez-le lorsque vous y êtes invité :
Entrez le code d'accès :
Voulez-vous vraiment supprimer la configuration du slot 1 ? [y/N] : y
Suppression de la configuration dans le slot 1...
Le secret du slot (ainsi que les paramètres de configuration du slot, y compris le code d’accès) sera effacé de la YubiKey.
Sauvegarde
Vous ne sauvegardez pas une YubiKey — la fonctionnalité la plus importante d’une carte de sécurité matériel comme une YubiKey est qu’elle conserve ses clés privées à l’intérieur du carton lui-même et ne peut pas les extraire. Mais vous perdrez une YubiKey à un moment donné — vous la perdez, ou vous la roulez dessus, ou elle est volée de votre sac, ou elle tombe dans un lac.
La meilleure sauvegarde est le système des pairs : assurez-vous que au moins une autre personne a un ensemble d’identifiants équivalent pour chaque application pour laquelle vous utilisez votre YubiKey.
Pour tout ce que vous signez avec votre YubiKey (comme les versions logicielles ou les certificats PKI), assurez-vous qu’une autre personne a une autre clé de signature qui sera acceptée de manière équivalente par tout ce qui doit vérifier votre signature ; pour tout ce qui est crypté avec votre YubiKey (comme des disques durs ou des sauvegardes archivées), assurez-vous que ces choses soient cryptées afin qu’une autre clé de déchiffrement puisse également les déchiffrer ; et pour tout auquel votre YubiKey vous aide à vous authentifier (avec une authentication primaire basée sur la signature ou « sans mot de passe », ou avec un mot de passe unique ou une attestation FIDO comme second facteur), assurez-vous qu’une autre personne a un ensemble d’identifiants séparés qui lui permettront d’authentifier et de gérer l’application à votre place.
Le deuxième meilleur moyen de sauvegarde est une deuxième YubiKey (ou un autre carton de sécurité matériel, ou un ensemble de cartes, qui ont toutes les fonctionnalités que vous utilisez avec votre YubiKey). Assurez-vous que les signatures de votre deuxième YubiKey seront acceptées partout où les signatures de votre première YubiKey sont acceptées. Assurez-vous que vous (et d’autres) cryptez tout pour les clés de déchiffrement de votre deuxième YubiKey, comme vous le faites avec votre première YubiKey. Assurez-vous que les clés d’authentification de votre deuxième YubiKey soient acceptées comme des clés autorisées partout où les clés de votre première YubiKey sont acceptées ; assurez-vous de configurer une authentification sans mot de passe avec votre deuxième YubiKey partout où vous l’avez fait pour votre première YubiKey ; et assurez-vous d’ajouter votre deuxième YubiKey comme un second facteur partout où vous avez configuré votre première YubiKey.
Enfin, envisagez d’ajouter une troisième (ami ou YubiKey) — il y a une vieille expression « deux est un, et un est rien ». Tout ce qui est vraiment important devrait avoir une troisième clé qui peut l’accéder, où au moins l’une des trois clés n’est jamais à la même place que les autres deux en même temps.
Sauvegarde des PINs
Assurez-vous d’écrire tous les PINs et phrases de passe que vous utilisez pour les applications de votre YubiKey sur un morceau de papier. (Cette même information est une bonne candidate pour stocker dans votre gestionnaire de mots de passe — mais vous ne pourriez peut-être pas accéder à votre gestionnaire de mots de passe sans d’abord entrer l’un des PINs que vous avez oubliés.)
Appliquez la même règle des trois à vos copies de PIN en papier que vous utilisez pour d’autres sauvegardes : conservez trois copies, avec au moins une copy à un emplacement géographiquement différent des autres deux. Vous voudrez également avoir au moins une copy près de chez vous où vous travaillez habituellement, afin de pouvoir y faire référence facilement chaque fois que vous avez oublié un PIN.
Voici un exemple de ce que vous devriez avoir noté :
Numéro de série YubiKey : 1234578
Alias : key1
Code de verrouillage de configuration : 10a43eacde8630603fc15016bc508605
ID de la clé maîtresse OpenPGP : 0xABCDEF1234567890
PIN utilisateur OpenPGP : lampe à souffler chaude
PIN administrateur OpenPGP : poules prêches
PIN PIV : zéroes
PUK PIV : kXHt2J1u
PIN FIDO : modicums surproduits
Mot de passe OATH : ormeur sentimental pleursations toit
Slot OTP 1 : ordinateur portable de travail FDE
Code d'accès du slot OTP 1 : 576bc54882f3
Secret du slot OTP 1 : nJXB.Gtipd>YnIEbukC.jpyDj>PGKncdikgtTP
4/5/2023
par Justin Ludwig
by Justin Ludwig translated by: Patrice Le Guyader
