====== Usage et configuration d’une Yubikey ======
{{ :authentification:yubikey-5-nfc-yubico.jpg?200|}}
La [[https://www.yubico.com/|YubiKey]] est un dispositif d’authentification électronique fabriqué par Yubico qui supporte les mots de passe à usage unique, le chiffrement et l’authentification par clé publique et le protocole Universal Second Factor (U2F) développé par l’alliance FIDO (FIDO U2F).
[[https://www.yubico.com/|YubiKey]] met en œuvre l’algorithme de mots de passe à usage unique basé sur HMAC (HOTP) et celui basé sur le temps (TOTP). Il se substitue à un clavier qui fournit un mot de passe à usage unique à travers le protocole USB HID. Les versions YubiKey 4 et 5 incluent des protocoles tels que celui des cartes OpenPGP (utilisant le RSA) et la cryptographie à courbe elliptique (ECC) p256 et p384 (la curve25519 est supportée depuis la version 5.2.3), la communication en champ proche (NFC) et le FIDO U2F. La quatrième génération de YubiKey lancée le 16 novembre 2015 supporte OpenPGP avec RSA 4096-bit (pour seulement 2048-bit avant) et le support Public Key Cryptographic Standards (PKCS #11) pour les smart cards d’identification personnelle, fonctionnalité qui permet la signature d’images Docker.
===== Logiciels =====
==== Logiciel de personnalisation ====
Pour configurer une Yubikey il faut installer le [[https://developers.yubico.com/yubikey-personalization-gui/|logiciel de personnalisation]]. Une version est disponible pour les systèmes Linux, Mac OSX et Windows. Pour une première approche de la clef le logiciel de personnalisation suffira.
=== Installation pour Debian ou Ubuntu ===
sudo apt update
sudo apt install yubikey-personalization yubikey-personalization-gui
==== Logiciel de configuration ====
Le package du gestionnaire principal est ''yubikey-manager'' fournit l'interface ''ykman'' .
=== Installation pour Debian ou Ubuntu ===
sudo apt update
sudo apt install yubikey-manager
==== Yubico PPA ====
Pour Ubuntu, [[https://support.yubico.com/support/solutions/articles/15000010964-enabling-the-yubico-ppa-on-ubuntu|il existe un dépôt]].
sudo add-apt-repository ppa:yubico/stable && sudo apt update
===== Les différents modes =====
La [[https://www.yubico.com/|YubiKey]] prend en charge jusqu’à 3 modes de connexion / transport USB différents (selon le modèle) :
**Mode U2F**, ce sous-système ne prend en charge que le protocole U2F. Il est entièrement configuré lorsque vous achetez une YubiKey. Il ne nécessite ni ne prend en charge aucune configuration. Il ne peut être activé / désactivé qu’en réglant le mode.
**Mode OTP**, ce sous-système est responsable des mots de passe OTP, Challenge-Response et Static. Si le mode de transport OTP est activé, les **deux slots** YubiKey, appui long et appui court, peuvent être configurés et utilisés. Ces emplacements peuvent avoir l’une des informations d’identification suivantes configurées : un Yubico OTP (qui est pré-configuré dans le raccourci sous une nouvelle clé), un mot de passe statique, un justificatif de réponse à la demande, un identifiant OATH-HOTP.
**Mode CCID**, il s’agit du sous-système permettant à la clé d’agir comme une carte à puce (utilisant le protocole CCID).
==== Que fait un mode ? ====
Un mode définit :
* comment on accède à YubiKey,
* quelle fonctionnalité est disponible (par exemple, si vous désactivez le mode U2F, votre YubiKey ne gérera plus aucune demande U2F)
Ces modes peuvent être activés / désactivés indépendamment les uns des autres.
==== Quel mode est utilisé ? ====
Un seul mode de connexion est utilisé à un moment donné pour communiquer avec la YubiKey. Lorsque la YubiKey est branché le mode de connexion est choisi en fonction de l'ordre de préférence.
''ykman mode'' indiquera quels modes sont actuellement activés ou disponibles. Cela pourrait produire quelque chose comme
Current connection mode is: OTP+FIDO+CCID
Supported USB interfaces are: OTP, FIDO, CCID
Ce qui signifie qu’actuellement le sous-système OTP, U2F et CCID de la clé est activé.
==== Définir les modes activés ====
''ykman mode '' permet de définir quels modes doivent être activés ou désactivés :
* peut être une chaîne, telle que « OTP + U2F + CCID », ou une forme abrégée « o + u + c »,
* peut être un numéro de mode, qui est un nombre qui code plusieurs modes activés (comme les indicateurs) en une seule valeur. Le seul mode valide lors de l'utilisation des nombres est 0 – 6.
Pour rendre toutes les fonctionnalités disponibles : ''ykman mode c+u+o'' ou ''ykman mode 6''.
==== U2F Mode ====
Aucune configuration à effectuer, c’est le mode qui sera le plus utilisé par les sites importants du réseau comme Google. Il existe une [[https://www.yubico.com/product/security-key-by-yubico/|clef plus simple]] qui gère uniquement ce mode et son évolution le FIDO2.
Firefox – au moment de l’écriture de ce texte – gère mal le U2F. Il faudra vérifier dans ''about: config'' que les paramètres suivants soient à ''true'' :
* security.webauth.u2f
* security.webauth.webauthn_enable_usbtoken
==== Challenge-Response et OTP Mode ====
La clef [[https://www.yubico.com/products/yubikey-5-overview/|Yubikey 5]] dispose de ''2 slots'', ils sont utilisables avec un appui court et appui long sur la clef.
=== Mot de passe à usage unique Yubico OTP Mode ===
C’est le mode par défaut à utiliser sur le ''slot 1''. Il est normalement déjà configuré, dans ce cas la clef partagée est déjà sur les serveurs de Yubico, mais il est possible de reprendre cette configuration.
Une vidéo est disponible sur [[https://www.yubico.com/products/services-software/personalization-tools/yubikey-otp/|cette page]] du [[https://support.yubico.com/|support]].
{{vimeo>77862029}}
Sur l’écran principal du [[https://developers.yubico.com/yubikey-personalization-gui/|logiciel de personnalisation]] il faut choisir sur « Yubico OTP Mode » pour commencer, puis dans cette fenêtre sur le logiciel sur le bouton « Quick ».
{{ :authentification:yubikey-tool-yubico-otp-mode.png?200|}}
Tout ce dont nous avons besoin pour configurer OTP est affiché et toutes les valeurs sont générées aléatoirement, et pré-remplies par le logiciel. Il faudra choisir la fente de mémoire que nous voulons utiliser, qui pour cet exemple – je recommande ce choix – sera « Configuration Slot 1 », puis il faudra valider en cliquant sur « Write Configuration » et sur « oui » si une fenêtre indique que le slot est déjà configuré, sauf si la clef est déjà utilisée sur des services en ligne (dans ce cas choisir le slot 2).
Le logiciel écrira ensuite les valeurs générées dans le premier emplacement de mémoire de notre Yubikey.
Une fois la configuration de l’authentification de la Yubikey faite pour One Time Password, nous devrons fournir les informations d’identification uniques aux serveurs Yubico. Afin que le système de mot de passe à usage unique fonctionne les services qui utiliseront OTP pour vous authentifier devront être en mesure de vérifier que la chaîne à une heure valide d’attribuée ; cela se fera en envoyant une demande aux serveurs de Yubico. Nous devons donc fournir nos données à Yubico afin qu’ils puissent vérifier les chaînes OTP. Pour cela nous cliquerons sur le bouton « Upload to Yubico ».
=== Challenge-Response ===
Cette technique peut être utilisée pour s’authentifier.
Un défi est envoyé à la clef, une réponse est calculée puis renvoyée. Ce calcul nécessite un secret (par exemple, une clé AES dans le cas du mode Yubico OTP). Le même défi entraîne toujours la même réponse. Sans le secret, ce calcul n’est pas censé être réalisable. Même si dans la possession de nombreuses paires défi-réponse.
C’est un mode à utiliser sur le ''slot 2''. Ce mode est utilisé via les appels d’API à la clef. Ce mode s’utilise généralement via un outil pour communiquer le défi à la clef et récupérer la réponse.
Il existe deux modes Challenge-Réponse:
* Mode ''Yubico OTP'',
* Mode ''HMAC-SHA1''.
=== Configurer HMAC-SHA1 Challenge-Response ===
Un avantage du mode HMAC-SHA1 est qu’il nécessite pas de connexion réseau à un serveur de validation externe. Pour configurer le ''slot 2'' en mode ''Challenge-Response'', vous pouvez exécuter :
ykpersonalize -v -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible -ochal-btn-trig
Les arguments ci-dessus signifient :
* Sortie détaillée ( -v )
* Utilisez la fente 2 ( -2 )
* Définir le mode de réponse à la -ochal-resp ( -ochal-resp )
* Générer des réponses aux défis HMAC-SHA1 ( -ochal-hmac )
* Calculer HMAC sur moins de 64 octets en entrée ( -ohmac-lt64 )
* Autoriser la lecture du numéro de série Yubikey à l'aide d'un appel API ( -oserial-api-visible )
* Exiger de toucher Yubikey avant la réponse à un problème ( -ochal-btn-trig )
La configuration peut aussi se faire par l’interface graphique. Une vidéo est disponible sur [[https://www.yubico.com/products/services-software/personalization-tools/challenge-response/|cette page]] du [[https://support.yubico.com/|support]]. L’utilisation de ''Require user input (button press)'' est recommandée.
{{vimeo>94353666}}
Pour utiliser un slot ''Challenge-Response'' (quel que soit le mode) :
ykchalresp -2
=== Configurer HMAC-SHA1 sur au moins deux clefs avec la GUI ===
Pour programmer une ou plusieurs Yubikeys afin de répondre aux défis HMAC-SHA1, insérez une clef dans un port USB de votre ordinateur, puis lancez l'outil de personnalisation, Une fois le logiciel ouvert vous cliquerez sur l'onglet ''Settings'' :
* et vous vous assurerez-vous que ''Button at startup '' et ''API Call'' soient sélectionnés.
* enfin, vous validerez avec le bouton ''Update Settings''.
Ensuite vous choisirez l'onglet ''Challenge-Response'', puis ''HMAC-SHA1'', et :
* dans le groupe ''Configuration Slot'', vous sélectionnerez ''Configuration Slot 2'' ;
* si vous désirez programmer une ou plusieurs clefs de sauvegarde (ce qui est recommandé), vous sélectionnerez ''Program Multiple YubiKeys'' et ''Automatically program YubiKeys when inserted'' ;
* puis dans le groupe ''Parameter Generation Scheme'', vous indiquerez '' Same Secret for all Keys.''.
Ensuite dans le groupe '' Configuration Protection'', vous effectuerez l'une des opérations suivantes ; soit pour verrouiller la configuration, de sorte que vous devrez taper un code d'accès pour apporter des modifications à la configuration, dans ce vous procéderez comme suit :
- localisation de la '' YubiKey(s) unprotected – Keep it that way'' afin de '' YubiKey(s) unprotected – Enable
Protection.'' ; le champ ''New Access Code'' situé sous le menu devient actif,
- et dans le champ ''New Access Code'', vous taperez un code d'accès numérique à 12 chiffres ou vous sélectionnerez ''Use Serial Number'' (Enregistrez ce code d'accès dans un endroit sûr, car vous ne pourrez pas mettre à jour la configuration de la clé sans elle).
Si vous ne voulez pas utiliser de code d'accès, gardez la sélection par défaut ''YubiKey(s) unprotected – Keep it that
way''.
Enfin dans le groupe ''HMAC-SHA1 Parameter'', vous sélectionnerez les options suivantes :
* pour le mode HMAC-SHA1, il faudra choisir ''Variable input.'',
* puis afin de créer la clé secrète, cliquer sur ''Generate''.
IMPORTANT : Si vous configurez vos Yubikeys pour l'application YubiKey Windows Login, assurez-vous de ne pas sélectionner **Require user input**.
CONSEIL : Lorsque votre configuration YubiKey sera réussie, un message s'affichera.
Pour programmer une autre Yubikey avec la même clé secrète :
* retirez la Yubikey que vous venez de configurer et insérez en une autre,
* si vous avez oublié de sélectionner ''Automatically program YubiKeys when inserted'', vous choisirez ''Write Configuration'' pour chaque clef devant être configurée.
Le processus générera un fichier d'activité au format CSV, celui contiendra la clef privé ; il faudra le converser dans un espace protégé.
Un guide officiel se trouve ici : [[https://www.yubico.com/wp-content/uploads/2016/06/YubiKey_Identical_Credentials_ConfigGuide_en.pdf|How to Configure Identical Credentials in Challenge-Response]].
==== CCID Mode, carte à puce OpenPGP ====
=== Logiciels pour Debian ou Ubuntu ===
sudo apt update
sudo apt install pcscd scdaemon pcsc-tools
=== Configuration GPG et SSH ===
Une carte à puce OpenPGP a toujours __trois emplacements__ de clé séparés. Ceux-ci sont intitulés **Signature**, **Cryptage** et **Authentification**. Chaque sous-clé a généralement son propre ID de clé.
Il existe différentes approches pour démarrer avec une carte à puce. Parfois, les gens utilisent deux cartes à puce et rangent leur clé principale à la maison sur une, et en utilisent une seconde avec les sous-clés pour la signature et le décryptage pour un usage quotidien ... De plus, les gens peuvent migrer des clés précédemment générées vers une nouvelle carte ; nous ne ferons rien de tout cela.
Ici, nous allons générer une clé principale avec les capacités Certifier et Signer et deux sous-clés avec chacune des capacités Crypter et Authentifier respectivement et les déplacer vers une YubiKey, mais cela peut se faire avec des clefs existantes.
Les plus paranos généreront leurs clefs sur un ordinateur sécurisé plutôt que sur la carte. Idéalement, cela serait une machine exécutant [[https://tails.boum.org/|Tails]] ou [[https://www.qubes-os.org/|Qubes OS]] et elle ne serait pas connecté à internet. Néanmoins, produire ces clefs sur son ordinateur plutôt que sur la carte permet surtout la sauvegarde de celles-ci, car les clés privées ne peuvent jamais quitter l'appareil une fois qu'elles sont chargées.
Les YubiKeys supérieures à la version 5.2.3 offrent une nouvelle fonctionnalité à la carte à puce OpenPGP, l'attestation des clés générées sur l'appareil. Avec la fonction d'attestation, la génération d'une clé d'authentification, de signature ou de déchiffrement sur une YubiKey créera également un certificat X.509 signé avec la clé d'attestation présente sur l'appareil, voir cette [[https://support.yubico.com/hc/en-us/articles/360016649139-YubiKey-5-2-3-Enhancements-to-OpenPGP-3-4-Support|page du support]].
== Changer les codes PIN ==
Les valeurs par défaut du code PIN et du PUK sont 123456 et 12345678, respectivement ; voir cette [[https://developers.yubico.com/PIV/Introduction/Admin_access.html|page du support]].
gpg --edit-card
gpg/carte> admin
Les commandes d'administration sont permises
gpg/carte> kdf-setup
gpg/carte> passwd
gpg: carte OpenPGP nº D2760001240100000001223334440000 détectée
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Quel est votre choix ? 3
PIN changed.
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Quel est votre choix ? 1
PIN changed.
1 - change PIN
2 - unblock PIN
3 - change Admin PIN
4 - set the Reset Code
Q - quit
Quel est votre choix ? Q
gpg/carte>
== Générer des clefs ==
Un article de ce site détaille la [[cryptographie:gnupg2|création de clef GPG]].
Il faudra utiliser la commande :
gpg --expert --full-gen-key
et la fonction
gpg> addkey
Afin d'obtenir une clef et des sous-clefs comme ci-dessous :
gpg --expert --edit-key 'A0B000FF0000FF0011111111A0B00000000000FF'
gpg (GnuPG) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
La clef secrète est disponible.
sec ed25519/0xA0B00000000000FF
créé : 2020-12-29 expire : 2029-12-28 utilisation : SC
confiance : ultime validité : ultime
ssb cv25519/0xB0FFFFFFFFFFFF00
créé : 2020-12-29 expire : 2029-12-28 utilisation : E
ssb ed25519/0xB0FFFFFFFFFFFF22
créé : 2020-12-29 expire : 2029-12-28 utilisation : A
[ ultime ] (1). John Doe
== Chargement des clés sur la carte à puce ==
Une [[https://developers.yubico.com/PGP/Importing_keys.html|page du support]] détaille la procédure d'importation.
Attention la fonction **keytocard** déplace les clefs, assurez-vous d'avoir une copie, car les clefs privées ne pourront pas être exportées depuis la carte.
gpg --expert --edit-key 'A0B000FF0000FF0011111111A0B00000000000FF'
gpg (GnuPG) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
La clef secrète est disponible.
sec ed25519/0xA0B00000000000FF
créé : 2020-12-29 expire : 2029-12-28 utilisation : SC
confiance : ultime validité : ultime
ssb cv25519/0xB0FFFFFFFFFFFF00
créé : 2020-12-29 expire : 2029-12-28 utilisation : E
ssb ed25519/0xB0FFFFFFFFFFFF22
créé : 2020-12-29 expire : 2029-12-28 utilisation : A
[ ultime ] (1). John Doe
gpg> keytocard
Faut-il vraiment déplacer la clef principale ? (o/N) o
Veuillez sélectionner l'endroit où stocker la clef :
(1) Clef de signature
(3) Clef d'authentification
Quel est votre choix ? 1
sec ed25519/0xA0B00000000000FF
créé : 2020-12-29 expire : 2029-12-28 utilisation : SC
confiance : ultime validité : ultime
ssb cv25519/0xB0FFFFFFFFFFFF00
créé : 2020-12-29 expire : 2029-12-28 utilisation : E
ssb ed25519/0xB0FFFFFFFFFFFF22
créé : 2020-12-29 expire : 2029-12-28 utilisation : A
[ ultime ] (1). John Doe
gpg> key 1
sec ed25519/0xA0B00000000000FF
créé : 2020-12-29 expire : 2029-12-28 utilisation : SC
confiance : ultime validité : ultime
ssb* cv25519/0xB0FFFFFFFFFFFF00
créé : 2020-12-29 expire : 2029-12-28 utilisation : E
ssb ed25519/0xB0FFFFFFFFFFFF22
créé : 2020-12-29 expire : 2029-12-28 utilisation : A
[ ultime ] (1). John Doe
gpg> keytocard
Veuillez sélectionner l'endroit où stocker la clef :
(2) Clef de chiffrement
Quel est votre choix ? 2
sec ed25519/0xA0B00000000000FF
créé : 2020-12-29 expire : 2029-12-28 utilisation : SC
confiance : ultime validité : ultime
ssb* cv25519/0xB0FFFFFFFFFFFF00
créé : 2020-12-29 expire : 2029-12-28 utilisation : E
ssb ed25519/0xB0FFFFFFFFFFFF22
créé : 2020-12-29 expire : 2029-12-28 utilisation : A
[ ultime ] (1). John Doe
gpg> key 1
gpg> key 2
sec ed25519/0xA0B00000000000FF
créé : 2020-12-29 expire : 2029-12-28 utilisation : SC
confiance : ultime validité : ultime
ssb cv25519/0xB0FFFFFFFFFFFF00
créé : 2020-12-29 expire : 2029-12-28 utilisation : E
ssb* ed25519/0xB0FFFFFFFFFFFF22
créé : 2020-12-29 expire : 2029-12-28 utilisation : A
[ ultime ] (1). John Doe
gpg> keytocard
Veuillez sélectionner l'endroit où stocker la clef :
(3) Clef d'authentification
Quel est votre choix ? 3
gpg> save
== Personnification des champs dans la carte ==
Le détail des différents champs est expliqué dans la [[https://gnupg.org/howtos/card-howto/en/ch03.html|documentation de GnuPG]].
Il faut utiliser cette commande :
gpg --card-edit
gpg/carte> admin
Les commandes d'administration sont permises
gpg/carte> help
quit quitter ce menu
admin afficher les commandes d'administration
help afficher cette aide
list afficher toutes les données disponibles
name modifier le nom du détenteur de la carte
url modifier l'URL pour récupérer la clef
fetch récupérer la clef indiquée dans l'URL de la carte
login modifier l'identifiant de connexion
lang modifier les préférences de langue
salutation change card holder's salutation
cafpr modifier une empreinte d'autorité de certification
forcesig inverser le paramètre obligeant à entrer le code personnel pour les
signatures
generate générer de nouvelles clefs
passwd menu pour modifier ou déverrouiller le code personnel
verify vérifier le code personnel et afficher toutes les données
unblock débloquer le code personnel en utilisant un code de réinitialisation
factory-reset destroy all keys and data
kdf-setup setup KDF for PIN authentication
key-attr change the key attribute
gpg/carte>
== Authentification SSH ==
L’exportation de la sous-clef publique dédiée pour l’authentification SHH s’obtient via la commande :
gpg --export-ssh-key 0xB0FFFFFFFFFFFF22
===== Les défauts de la YubiKey =====
La conception matérielle et le microprogramme sont tous deux propriétaires, cette clef n’est ni open source, ni open hardware, mais c’est un produit commercial d’une société américaine.
* Le [[https://support.yubico.com/support/solutions/articles/15000006434-upgrading-yubikey-firmware|firmware]] ne peut pas être mis à jour afin qu’il ne puisse pas être modifié par malice, mais c’est une politique discutable et des attaques sont possibles. Les [[https://www.yubico.com/support/security-advisories/ysa-2017-01/|versions de 4.2.6 à 4.3.4]] du firmware sont faillibles à la [[https://en.wikipedia.org/wiki/ROCA_vulnerability|vulnérabilité ROCA]] ;
* Pour un usage de carte à puce ''OpenPGP'' une clef [[https://www.gniibe.org/FST-01/fst-01.html|FST-01]] semble préférable (voir [[https://lwn.net/Articles/736231/|Comparison of cryptographic keycards]]) ;
* Avant le [[https://support.yubico.com/support/solutions/articles/15000027139-yubikey-5-2-3-enhancements-to-openpgp-3-4-support|firmware 5.2.3]] la courbe elliptique [[wpfr>Curve25519]] n’était pas supportée ; les algorithmes [[https://fr.wikipedia.org/wiki/Chiffrement_RSA|RSA]] et les courbes [[https://fr.wikipedia.org/wiki/Elliptic_curve_digital_signature_algorithm|ECDSA]] du [[https://fr.wikipedia.org/wiki/National_Institute_of_Standards_and_Technology|NIST]] étant suspectés d’affaiblissement par la [[https://fr.wikipedia.org/wiki/National_Security_Agency|NSA]].
Néanmoins, cela reste un formidable outil pour augmenter sa sécurité, j'en possède plusieurs.
===== Sources et liens utiles =====
* [[https://wiki.archlinux.org/index.php/yubikey|Wiki.Archlinux.org/Yubikey]]
* [[https://www.yubico.com/wp-content/uploads/2016/03/YubiKeyPersonalizationToolUserGuideMarch2016.pdf]|YubiKey
Personalization Tool]]
* [[https://geekeries.org/2020/03/keepass-et-yubikey-multiplateforme-article-misc-103/|KeePass et Yubikey multiplateforme, article MISC 103]]
* [[https://www.christiaanconover.com/blog/yubikeyconfig/|How To Configure Your Yubikey for Maximum Usefulness & Security]]
* [[https://gist.github.com/ageis/14adc308087859e199912b4c79c4aaa4|Technical guide for using YubiKey series 4 for GPG and SSH]]
* [[https://github.com/drduh/YubiKey-Guide|YubiKey-Guide]]