Technologies Web Mobile Cybersécurité

Unboxing numérique de la YubiKey 5

Et si, en prévision des résolutions de l'année 2020, on ajoutait un peu plus de sécurité à nos comptes et applications les plus sensibles ?
À l'occasion de la sortie du modèle 5Ci compatible Lightning pour les "iDevices" et USB-C pour la plupart des nouveaux appareils mobiles, nous vous proposons de revenir sur les premières étapes de mise en route et d'utilisation des clefs YubiKeys de cinquième génération.

Mais pourquoi un déballage purement "numérique" alors ?


Comme il s'agit d'un périphérique USB, il est d'avantage pertinent de se concentrer sur ses fonctionnalités que sur son packaging !

Vous êtes prêt(e) ? On attaque la première étape dans la foulée !

Vérification de l'authenticité de la clef

Vous avez reçu ou acheté une YubiKey, mais rien ne vous dit qu'elle n'a pas été altérée, ou pire encore, qu'elle soit "factice".
Yubico a prévu le coup et propose un service en ligne permettant de vérifier l'authenticité de votre périphérique.

Pour cela connectez-le sur votre ordinateur préféré, et rendez-vous sur : https://www.yubico.com/genuine/.

Unboxing numérique de la YubiKey 5 | Mozilla Firefox nous demandant d'autoriser Yubico.com à accéder à notre clef de sécurité

Mozilla Firefox nous demandant d'autoriser Yubico.com à accéder à notre clef de sécurité

Suivez la procédure, et vérifiez que le résultat obtenu est valide.
Si ce n'est pas le cas, vous pouvez d'ores-et-déjà commencer à formatter et réinstaller votre machine, tout en jetant la clef en question à la poubelle :D

Unboxing numérique de la YubiKey 5 | Yubico.com nous indique que la vérification de l'authenticité de la clef a été effectuée

Yubico.com nous indique que la vérification de l'authenticité de la clef a été effectuée

Découverte et re-génération des secrets contenus dans la clef

Bien que votre clef ait été prouvée comme "authentique" du point de vue de Yubico à l'étape précédente, et que selon eux "les données ne sont en aucun cas exportables", rien ne vous dit que quelqu'un n'y a pas au préalable configuré quelques secrets qu'ils possèdent également (#paranoïa).
Pour mitiger ce risque, nous allons procéder à la réinitialisation de la totalité de la clef, ce qui nous permettra par la même occasion de revenir sur le fonctionnement et les différents cas d'usage du périphérique.

Les YubiKeys de la cinquième génération embarquent cinq applets différentes :

Unboxing numérique de la YubiKey 5 | Les YubiKeys 5 possèdent cinq composants distincts : OTP, FIDO2, PIV, OATH & OpenPGP

Les YubiKeys 5 possèdent cinq composants distincts : OTP, FIDO2, PIV, OATH & OpenPGP

Chaque applets contient donc un ou plusieurs secrets qui lui est (sont) propre(s).
Nous allons donc devoir utiliser des utilitaires spécifiques pour interagir avec ceux-ci, et comme nous sommes des hackers lamers, nous allons passer par la tant redoutée ligne de commande !
Vous trouverez ci-dessous une procédure "guide" pour Debian, version stable à date :

sudo apt install python3-virtualenv swig libykpers-1-1 libu2f-udev pcscd libpcsclite-dev scdaemon

# La version du YubiKey-Manager disponible dans les dépôts datant de Mars, nous allons l'installer à l'aide d'un environnement Python virtuel et de PIP.
mkdir yubikey-manager && cd yubikey-manager/
virtualenv -p python3 .venv/
source .venv/bin/activate
pip3 install yubikey-manager

# On vérifie l'installation du Manager.
ykman -v

# Afficher la ou les clefs connectée(s).
ykman list

Applet OTP

En accord avec l'ordre d'affichage des différentes applets ci-dessus, nous allons commencer avec celle se chargeant de l'OTP (One-Time Password).

Sur la base d'un secret partagé et d'un compteur interne, la clef est en mesure de générer un jeton.
Une fois que le serveur a connaissance de cette clef, ce dernier est capable de vérifier que le jeton qu'il reçoit a été généré avec celle-ci.
Il en profite pour mettre à jour son compteur interne également (la valeur étant présente de manière chiffrée dans le jeton lui-même), ce qui permet de se prémunir contre les attaques dites de "rejeu" (l'attaquant essaie de "rejouer" un jeton ayant déjà servi).

Durant ce guide, nous allons re-générer le secret partagé avec les serveurs de Yubico, dans le cadre d'une utilisation de leur service YubiCloud :

# Suppression des configurations dans les deux emplacements.
ykman otp delete 1
ykman otp delete 2

# Re-programmation de l'emplacement n°1 avec :
# * le numéro de série de la clef en tant qu'identifiant public ;
# * une identité privée générée aléatoirement ;
# * une clef secrète générée pour l'occasion ;
# * la clef secrète téléversée sur les serveurs de Yubico.
ykman otp yubiotp 1 \
    --serial-public-id \
    --generate-private-id \
    --generate-key \
    --upload

# Votre navigateur devrait s'ouvrir. Suivez les instructions affichées !

# Pour plus de sécurité, vous pouvez ajouter un code d'accès à votre emplacement pour "verrouiller" sa configuration.
ykman otp settings 1 --new-access-code ""
# Le terminal vous demandera de renseigner un code de 6 octets sous forme hexadécimale, soit 12 caractères compris dans `[0-9A-F]` !

Vous pouvez ensuite vous rendre sur ce lien pour vérifier que les OTPs générés sont correctement reconnus par Yubico.

Il vous restera l'emplacement n°2 si vous désirez un jour programmer un autre OTP en particulier.
Au quotidien, vous pouvez utiliser les emplacements n°1 et n°2 en appuyant respectivement moins ou plus de deux secondes sur le bouton touch de la clef.


Les emplacements sont facilement "inversables" (s'il n'y a pas de code d'accès paramétré) à l'aide de la commande :

ykman otp swap

Applet FIDO2 / U2F (WebAuthn)

À l'inverse d'OTP basé sur de la cryptographie symétrique, WebAuthn fonctionne à l'aide de la cryptographie asymétrique et est découpé en deux phases.
La première est l'enregistrement. Typiquement, celle-ci se déroule lorsque vous créez un nouveau compte ou bien ajoutez une nouvelle clef de sécurité à un compte existant. À ce moment-même, votre clef génère une nouvelle bi-clef (couple clef publique / clef privée), avant que la partie publique soit poussée sur le serveur.
La seconde phase est donc l'authentification. Vous vous connectez classiquement avec vos identifiants, à la seule différence que cette fois le serveur fera parvenir un "challenge" qui devra être signé par la clef privée contenue sur votre clef personnelle.
Vous connaissez la chanson, une fois effectuée et transmise, la signature pourra aisément être vérifiée à l'aide de la clef publique enregistrée au préalable côté serveur.

# Suppression de tous les jetons existants.
ykman fido reset

# Ajout d'un code PIN.
ykman fido set-pin


Vous pouvez ensuite vous rendre sur ce lien pour vérifier les phases d'inscription et d'authentification à l'aide du protocole WebAuthn.

Applet PIV

Personal Identity Verification est un standard permettant l'utilisation de cartes à puce, basé sur de la cryptographie asymétrique (RSA classique ou bien sur courbes elliptiques).
La documentation de Yubico indique que ce standard est géré nativement par Windows, et en effet, il semblerait que ce soit bien le cas si l'on en croit la manière dont le système interprète la clef lors du premier branchement :

Unboxing numérique de la YubiKey 5 | Windows parvient à détecter l'interface de gestion des cartes PIV ("SP 800-73")

Windows parvient à détecter l'interface de gestion des cartes PIV ("SP 800-73")

# Réinitialisation vers les paramètres par défaut.
ykman piv reset

# Changement du code PIN (6 chiffres).
ykman piv change-pin

# Changement du code PUK (8 chiffres).
ykman piv change-puk

# Changement de la clef de gestion (48 caractères compris dans `[0-9A-F]`).
ykman piv change-management-key

Applet OATH

Le composant OATH (Open Authentication) est capable de gérer deux types de protocoles : TOTP (basé sur le temps) & HOTP (basé sur un compteur).
Si vous utilisez l'application Authenticator de Google ou bien FreeOTP, il s'agit bien de TOTP. Les jetons sont générés en calculant une empreinte basée sur un secret partagé ainsi que l'heure courante (fonctionnant par tranches de 30 secondes permettant de "petits" décalages horaires entre le périphérique générant le jeton et le serveur le vérifiant).
HOTP fonctionne de la même manière en remplaçant l'heure courante par un compteur. Seul problème, si vous générez plusieurs jetons sans en faire part au serveur, les compteurs seront désynchronisés et les vérifications ultérieures seront toujours rejetées...

# Suppression des identités actuellement existantes.
ykman oath reset

# Ajout d'un mot de passe sur le composant.
ykman oath set-password

Applet OpenPGP

Sûrement un terme que vous avez déjà dû croiser auparavant.
En effet, il s'agit bien d'un composant supportant PGP. À travers celui-ci, et encore grâce à la cryptographie asymétrique, il est possible d'effectuer les opérations "classiques", basées sur vos clefs personnelles déjà existantes, ou bien sur de nouvelles dédiées à votre périphérique car générées directement par et pour celui-ci (souvenez-vous, les données ne sont pas censées être exportables !).

# Suppression des identités actuellement existantes.
ykman openpgp reset

# Changement du nombre d'essais autorisés pour les saisis des PINs et du code de réinitialisation.
ykman openpgp --admin-pin 12345678 set-pin-retries 8 8 8

# On rentre dans le dur du sujet en modifiant l'applet directement à travers GnuPG.
gpg --edit-card
[gpg/card>] admin

# Changement des PINs et du code de réinitialisation.
[gpg/card>] passwd
[gpg/card>] ...

# Paramétrage de l'identité du porteur / de la porteuse.
[gpg/card>] name
[gpg/card>] sex
[gpg/card>] lang
[gpg/card>] login

# Paramétrage d'une URL permettant de récupérer les clefs publiques du propriétaire.
[gpg/card>] url


Maintenant l'applet réinitialisée et vos codes d'accès paramétrés, vous pouvez aisément générer et/ou importer vos clefs PGP pour effectuer des opérations de signature/chiffrement/vérification en suivant ce guide.



De manière générale, ou si vous préférez effectuer ces opérations à l'aide d'une interface graphique, vous retrouverez l'ensemble des procédures de réinitialisation en fonction de votre système ici.
 

Lier vos services/applications à vos nouvelles identités numériques

En fait, l'utilisation que vous pourrez faire de votre YubiKey dépendra notamment des applications et services que vous utilisez.
Il est nécessaire que le compte que vous désirez "sécuriser" intègre une logique pouvant interagir avec l'une des cinq applets disponibles et précedemment présentées.
Vous trouverez une liste exhaustive des services actuellement supportés ici.

Par exemple, pour GitHub, une fois la double authentification activée, vous pourrez très aisément ajouter votre périphérique en tant que "Clef de Sécurité" à partir de cette page.
Vous utilisez une instance de GitLab et vous sentez oublié(e) ? Aucun souci.
Vous êtes auto-hébergé(e) depuis longtemps au moyen d'une instance de Gitea ? Désolé, voilà pour vous.

Pour ces trois exemples, il s'agit du composant FIDO2 / U2F / WebAuthn qui répondra.

L'hiver arrive...

... et votre clef risque de prendre froid.
Que diriez-vous d'une petite séance d'habillage ?

Unboxing numérique de la YubiKey 5 | Trois paires d'autocollants sont fournies avec la YubiKey 5Ci pour personnaliser chaque face

Trois paires d'autocollants sont fournies avec la YubiKey 5Ci pour personnaliser chaque face

Il n'y a bien entendu pas assez de thèmes de personnalisation pour équiper toute la planète différemment, mais c'est un bon début.

Conclusion

Compte tenu de la complexité de ce qui est manipulé à l'intérieur du périphérique du point de vue du grand-public, les YubiKeys restent très accessibles si l'on se penche quelques minutes sur les documentations et que l'on suit correctement les guides ;-)

Côté marketing, Yubico donne l'impression de faire les choses un peu "étape par étape".
Bien qu'une clef soit maintenant "compatible pour mobile" (modèle 5Ci), cette dernière n'intègre tout de même plus de puce NCF, et il faudra donc attendre la 5C NFC :')

Unboxing numérique de la YubiKey 5 | Sur le site officiel, la YubiKey "5C NFC" est annoncée pour "bientôt"

Sur le site officiel, la YubiKey "5C NFC" est annoncée pour "bientôt"

Bien sûr, comme pour la majorité des solutions technologiques accessibles, des alternatives existent.
Parmi elles, nous retrouvons les SoloKeys qui commencent à faire parler d'elles, mais aussi la gamme de clefs de sécurité Titan développée par Google, dont le support pour l'USB-C a été annoncé très récemment également.

Les protocoles du domaine tendent à être normalisés et universels, il conviendra donc à tout un chacun de trouver l'appareil qui lui correspondra le mieux.
Peut-être que d'ailleurs, dans ce domaine restant très geek et/ou professionnel, le design finira par devenir un vrai critère de choix !

    Personne n'a encore commenté cet article, à vous de jouer !

Les commentaires sont soumis à la modération, ils n'apparaîtront pas immédiatement.