6 minute(s) de lecture

Introduction

Ce petit article a pour but de décrire l’utilisation d’une clef YubiKey FIDO U2F. Mon modèle de Yubikey est une Security Key NFC.

Security Key NFC

Yubikey vend une autre série de clefs, les YubiKey 5 Series. Les Security Keys sont moins cher mais plus basiques (support de U2F et FIDO2 seulement).

Yubico propose un programme de personnalisation des Yubikey (yubikey-personalization-gui) mais ce programme ne reconnaît pas les Security Key. Les Security Key sont seulement U2F/FIDO2 et ne peuvent être programmées, pas de OTP, pas de Challenge-Response(HMAC-SHA1), …

Il est tout d’abord nécessaire de donner quelques définitions :

U2F : Universal 2nd Factor, implémentation d’un 2FA. Voir https://en.wikipedia.org/wiki/Universal_2nd_Factor Initialement développé par Google et Yubico, la norme est désormais gérée par la FIDO Alliance.

2FA : 2nd Factor Authentication, l’utilisation de 2 moyens d’authentification (ici, un login/passwd + Challenge-response gérée par une clef cryptographique)

FIDO2 : = WebAuthn + CTAP (cf https://paulstamatiou.com/getting-started-with-security-keys/)

webauthn : client/browser JavaScript API that allows websites to create and use credentials based on public keys, which may come from hardware authenticators

CTAP : = Client to Authenticator Protocol; comm entre le Browser et le Token Crypto (la Security Key dans mon cas).

Authentification forte :

  • ce que je sais (password)
  • ce que je possède (clef crypto/token)
  • ce que je suis (biométrie)

Utilisation yubikey U2F Security Key

A quoi ça sert

La Security Key sert de 2nd facteur d’authentification, “ce que j’ai”, le premier étant “ce que je sais”, le login/password.

Son utilisation augmente la sécurité d’accès aux éléments l’utilisant (comptes gmail, github, …).

Même avec un mot de passe trop faible l’utilisation de la Security Key permet un niveau de sécurité élevé.

Comment ça marche

D’après https://fastmail.blog/2016/07/23/how-u2f-security-keys-work/, il y a une phase d’enregistrement, ou on donne au service (github par exemple) des éléments généré par clef, puis une phase de vérification quand on veut se connecter au service, ce dernier envoie un challenge et la clef permet de répondre et de renvoyer la réponse attendue.

la registration Auprès d’un site web (par exemple),

  • le RGN de la clef génère un Nonce,
  • X = HASH( Nonce + URL du site web + Clef Crypto Unique de U2F Security Key)
  • X est la clef privée, on en sort une clef publique Y et un Checksum (???) plutôt génération d’une paire de clef privée/publique (https://developers.yubico.com/U2F/Protocol_details/Key_generation.html
  • la clef envoie (Nonce, Y, Checksum) au serveur Web.

la vérification

Aucune clef secrète associée à un service n’est stockée sur le token. Il existe une seule clef présente et elle n’est pas extractible. La paire de clefs privée/publique pour un service, est régénérée à chaque nouvelle demande de Challenge d’un site web.

Génération de clef

Gmail

Il suffit de se :

  • connecter à son compte,

  • d’aller dans la gestion de la sécurité,

  • d’activer l’authentification 2 Facteurs

Turn on 2-Step Verification

https://authy.com/guides/googleandgmail/

Yahoo

Rien de prévu pour Yahoo …

Pour faire du 2FA avec Yahoo seuls sont dispo la méthode par SMS et le yahoo account key.

Github

Il est facile d’activer la U2F Security Key for Two-Factor Authentication avec github. Il suffit de se :

  • connecter à son compte,
  • d’aller dans la gestion de la sécurité,
  • d’activer l’authentification 2 Facteurs
  • de choisir SMS/App

puis une fois ceci fait il sera possible d’utiliser un token de sécurité, la Security Key.

https://yubikey.me/github/

https://authy.com/guides/github/)

https://help.github.com/en/github/authenticating-to-github/configuring-two-factor-authentication#configuring-two-factor-authentication-using-a-security-key

Pour ce connecter, il faudra entrer son login/mdp puis brancher sa Yubikey en USB et presser sur le bouton le moment venu.

Cela dit, cette authentification n’est valable que pour l’interface Web.

Pour la ligne de commande, faire un git push origin sur github, il est nécessaire de passer par la création d’un Token d’authentification Github.

https://github.com/github/hub/issues/822

Le mieux pour la ligne de commande étant probablement d’avoir une clef SSH.

SSH

TODO

Avec une clef au dessus, il est possible de stocker la clef SSH sur le Token. https://developers.yubico.com/PGP/SSH_authentication/ , pas sur une simple Security Key.

Possible d’utiliser l’OTP des clef au dessus pour après avoir fait authen avec login/passwd, on passe un OTP que le serveur validera avec le serveur de Yubico Authentication Server.

https://medium.com/@james_poole/yubikey-2fa-on-ubuntu-ssh-e09b4e91bfc8 semble parler aussi d’une conf d’un serveur SSH avec l’utilisation d’OTP.

https://developers.yubico.com/yubico-pam/YubiKey_and_SSH_via_PAM.html

https://www.techpassion.net/1134/securiser-ssh-avec-une-yubikey/ quel type de clef ?

https://duo.com/labs/tech-notes/u2f-key-support-in-openssh et https://marc.info/?l=openssh-unix-dev&m=157259802529972&w=2 parle d’utiliser une Security Key ?

https://github.com/drduh/YubiKey-Guide#github

Login de Linux

Pour une utilisation avec une U2F Security Key, il faut suivre la procédure décrite dans : https://support.yubico.com/support/solutions/articles/15000011356-ubuntu-linux-login-guide-u2f

J’ai modifié un peu le test et créant tout d’abord un nouvel utilisateur, tokyo.

sudo useradd -m -U -s bash -p tokyo tokyo

J’ai mis tokyo dans les groupes adm et sudo.

Ensuite j’ai installé libpam-u2f.

sudo apt-get install libpam-u2f

Suite a quelques problèmes inconnues pour faire marcher pamu2cfg avec le compte tokyo (pb de groupe ?), je suis passé par la manipulation suivante :

pamu2fcfg -u tokyo > u2f_keys_tokyo

sous mon compte puis transfert dans /home/tokyo/.config/Yubico/u2f_keys

L’utilisation de pamu2fcfg correspond à la phase de registration telle qu’on peut la trouver vers un serveur web.

L’étape suivante consiste à modifier PAM pour utiliser U2F quand on le veux.

Modification de PAM pour sudo :

sudo cat /etc/pam.d/sudo
#%PAM-1.0

session    required   pam_env.so readenv=1 user_readenv=0
session    required   pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
@include common-auth
auth       required   pam_u2f.so nouserok
@include common-account
@include common-session-noninteractive

nouserok permet que pour tokyo on demande bien la clef U2F, car il y a un fichier u2f_keys et que pour les autres on demande juste le mot de passe.

Pour une connexion via gdm :

sudo cat /etc/pam.d/gdm-password
#%PAM-1.0
auth    requisite       pam_nologin.so
auth	required	pam_succeed_if.so user != root quiet_success
@include common-auth
auth       required   pam_u2f.so nouserok
auth    optional        pam_gnome_keyring.so
@include common-account
...

https://github.com/Yubico/pam-u2f

https://wiki.gentoo.org/wiki/Pam_u2f#Configuration

La Security Key ne supportant pas les Challenge-Response, pour cela il faut une YubiKey “audessus”, il n’est pas possible d’appliquer la procédure décrite dans :  

Linux encrypt partition

TODO

https://www.techrepublic.com/article/how-to-use-a-yubikey-on-linux-with-an-encrypted-drive/ Yubikey slot for HMAC-SHA1 ?

https://github.com/cornelinux/yubikey-luks Semble utiliser OTP …

https://github.com/darkskiez/u2f-luks pourrait faire l’affaire ???

Keypass/KeypassXC

Ceux sont des gestionnaires de password.

Keypass supporte les Yubikeys via un plugin Yubikey http://richardbenjaminrush.com/keechallenge/

KeypassXC, écrit en C++ et non en C#, supporte également les Yubkey.

Les 2 logiciels s’appuient sur le Challenge-Response HMAC, non présent sur les Security Key.

D’après

https://security.stackexchange.com/questions/201345/is-it-reasonable-to-use-keepassxc-with-yubikey D’après https://keepassxc.org/docs/#faq-yubikey-why-hmac-sha1 et https://developers.yubico.com/U2F/Protocol_details/Overview.html#_4_device_cloning_detection et https://github.com/keepassxreboot/keepassxc/pull/127 il n’est pas possible d’utiliser U2F dans Keepass/Keepssxc.

Ceci semble étonnnat. Il y a effectivement un compteur utilisé pour U2F, coté Secure Token et coté Relay Service, mais d’après https://fidoalliance.org/specs/fido-u2f-v1.0-ps-20141009/fido-u2f-raw-message-formats-ps-20141009.pdf chapitre 5.4,

Le service Relay connait tout les éléments ayant servi à la signature. Il peut très bien la verifier et même faire une autre signature sans counter si vraiment il veut utiliser cette donnée comme clef crypto. De plus je en vois pas ce qui empeche Keepass de stocker un counter pour le U2F …

le Passwordless

D’après https://paulstamatiou.com/getting-started-with-security-keys/ Passwordless fait partie de FIDO2, c’est anciennement issu de UAF. Ce mode permet de s’authentifier juste avec la clef, sans avoir à taper de mot de passe.

https://www.yubico.com/solutions/passwordless/

Divers

Les Secret Key sans NFC n’ont pas le logo NFC sur la pastille dorée, et ont un petit 2 sérigraphiée sur le corps de la clef.

Je n’ai pas regardé les éléments concernant les YubiKey, non Security Key. Il semble possible de les configurer, sur certains modèles de stocker des clefs, et d’avoir plusieurs Token cryptographique (vu qu’on parle de Slot) sur certaines clefs.

Concernant les détails cryptographique, les explications recuillies ne sont pas claires.

https://developers.yubico.com/U2F/Protocol_details/Key_generation.html

https://developers.yubico.com/U2F/Protocol_details/Overview.html parle de génération de paire de clef + un Handle pour chaque nouvelle enregistrement auprès d’un site web. Le Handle est stockée par le site web.

A U2F device should generate a new ECC key pair for each service it registers with

Algorithme crypto utilisé : AES-256 in CCM mode (https://developers.yubico.com/U2F/Protocol_details/Key_generation.html)

Quel crypto est utilisée et quand ?

Autres clefs U2F ? Ntrokey ? SoloKeys https://static.solokeys.com/ Titan, clef de Google.

Liens

Mis à jour :

Laisser un commentaire