FIDO2 est un standard d’authentification développé par l’Alliance FIDO, basé sur le principe de la cryptographie à clé publique. L’objectif de FIDO2 est de remplacer l’utilisation des mots de passe pour s’authentifier, limitant les risques de vol de mot de passe par hameçonnage. Pour cela, FIDO2 utilise des Passkeys (clé d’accès en Français), qui sont des justificatifs d’identité numérique pouvant être stockés sur des clés de sécurité physiques.
FIDO2 se base sur le protocole CTAP (Client To Authenticator Protocol), qui définit la communication entre le navigateur et la clé FIDO2, et l’API WebAuthN (Web Authentication API) qui permet aux serveurs d’enregistrer et d’authentifier les utilisateurs à l’aide de la cryptographie à clé publique au lieu d’un mot de passe.
Pour comprendre le mécanisme d’authentification de FIDO2, il faut connaître le principe de cryptographie à clé publique. Aussi je vous propose un rappel succinct de ce principe utilisé pour le chiffrement des données et la signature numérique.
Rappel du principe de la cryptographie à clé publique
Le principe de cryptographie à clé publique repose sur une paire de clés cryptographiques liées mathématiquement. Un programme de génération de clés génère ces deux clés à partir d’un nombre aléatoire. La clé publique peut être mise à la disposition de tous, alors que la clé privée doit rester confidentielle et être conservée en lieu sûr par son propriétaire.
Tout ce qui est chiffré avec une clé publique ne peut être déchiffré que par sa clé privée correspondante et vice versa. La paire de clés est utilisée pour assurer la confidentialité des données (chiffrement) et garantir leur authenticité (signature numérique).
Utilisation de la cryptographie à clé publique pour le chiffrement de données
Dans l’exemple ci-dessous, Bob souhaite envoyer un document confidentiel à Alice, et que personne d’autre que Alice puisse le déchiffrer. Bob chiffre alors le document avec la clé publique d’Alice (cette clé étant publique tout le monde peut la connaître, elle peut être distribuée dans un annuaire par exemple). Seule Alice peut déchiffrer le document grâce à sa clé privée. Alice n’a pas besoin de connaître la clé publique de Bob dans ce mécanisme.
Utilisation de la cryptographie à clé publique pour la signature numérique
Dans l’exemple ci-dessous, Alice souhaite s’assurer que le document qu’elle reçoit a bien été envoyé par Bob et qu’il n’a pas été modifié lors de son transport. Pour cela, Bob va signer son document et transmettre à Alice le document accompagné de sa signature numérique. La signature correspond au chiffrement du hachage cryptographique du document avec la clé privée de Bob.
Lorsque Alice reçoit le message, elle déchiffre la signature avec la clé publique de Bob. Elle obtient donc le hachage cryptographique du document original. Il lui suffit de vérifier que ce hachage cryptographique donne un résultat identique à celui du document qu’elle vient de recevoir. Si les résultats sont identiques cela prouve que l’expéditeur est bien Bob et que le document reçu est bien identique à l’original.
La signature numérique garantit l’authentification et l’intégrité des données.
Enrôlement d’une clé FIDO2
La première étape est d’enrôler le Passkey auprès du service pour lequel vous souhaitez l’utiliser pour vous authentifier. Lors de cette procédure d’enregistrement, la clé de sécurité crée une paire de clés publique/privée unique pour ce service et le compte utilisateur. La clé privée est stockée sur la clé de sécurité et ne doit jamais en sortir. La clé publique est transmise au service en ligne et associée au compte utilisateur.
Connexion avec une clé FIDO2
Une fois la clé de sécurité enrôlée auprès du service, l’utilisateur peut s’y connecter avec son Passkey. Le service fais parvenir un défi à la clé de sécurité. La clé de sécurité signe ce défi avec sa clé privée et renvoi au service ce défi signé. Le service peut alors vérifier cette signature à l’aide la clé publique associée au compte utilisateur lors de l’enrôlement. Si la vérification est réussie, l’utilisateur est connecté au service.
Le principe des clés de sécurité USB est généralement d’insérer la clé dans un port USB de l’ordinateur, et de toucher la clé pour confirmer la connexion au service. En effet, la norme FIDO nécessite un geste de l’utilisateur afin de confirmer sa présence lors de l’authentification.
Authentification forte vs authentification multifacteur?
Il est important de distinguer une authentification forte d’une authentification multifacteur. Une authentification forte est une authentification qui se base sur un protocole cryptographique résistant aux attaques. Une authentification multifacteur est une authentification qui repose sur au moins 2 facteurs d’authentification.
FIDO2 est basé sur un protocole cryptographique fort et il permet l’utilisation de plusieurs facteurs d’authentification. Le fait de posséder la clé de sécurité est un facteur de possession, et le fait d’ajouter un code PIN est un facteur de connaissance. FIDO2 est donc une norme d’authentification forte et multifacteur.
Pour aller plus loin, je vous recommande vivement la lecture du guide de l’ANSSI (agence nationale de la sécurité des systèmes d’information) : Recommandations relatives à l’authentification multifacteur et aux mots de passe.
Utilisation comme facteur d’authentification supplémentaire
Certains sites ne permettent pas de se connecter uniquement avec une clé FIDO2, mais ils permettent de l’utiliser comme facteur d’authentification additionnel au mot de passe.
Par exemple, à ce jour le site Facebook nécessite toujours l’utilisation du mot de passe, la clé FIDO2 ne sert que comme facteur d’authentification supplémentaire.
Test de votre clé de sécurité
Si vous possédez une clé de sécurité FIDO2, vous pouvez dès à présent la tester grâce au site https://www.token2.com/tools/fido2-demo.
- Insérer la clé de sécurité dans un port USB
- Cliquer sur Register
- Entrer le code PIN de la clé de sécurité (si vous avez sélectionné l’option)
- Toucher la clé de sécurité
Si tout s’est bien déroulé, votre clé est maintenant enrôlée au service de démonstration FIDO2 du site www.token2.com.
Vous pouvez maintenant vous connecter à ce service avec votre clé de sécurité.
- Cliquer sur Login
- Entrer le code PIN de la clé de sécurité (si vous avez sélectionné l’option)
- Toucher la clé de sécurité
Bravo, vous venez de réussir avec brio votre première connexion à un service en ligne en utilisant une clé de sécurité FIDO2. 🙂
Une clé de sécurité FIDO 2 sur un Raspberry Pi Pico ?
Le projet Pico FIDO de Pol Henarejos permet de transformer votre Raspberry Pi Pico en une clé d’accès FIDO.
Télécharger la dernière version du firmware correspondant à votre matériel (pico_fido_pico-5.12.uf2 par exemple pour un Raspberry Pi Pico) depuis l’espace Releases.
Pour installer ce firmware sur le Pico, il faut démarrer le Pico en mode Bootloader. Pour cela maintenir le bouton BOOTSEL appuyé et brancher le Pico sur votre PC via un câble USB. Ne relâcher le bouton qu’après que Pico soit bien connecté à votre PC. Le Pico est alors vu comme un stockage de masse USB nommé RPI-RP2 contenant les fichiers INDEX.HTML et INFO_U2F.TXT. Il suffit alors de glisser-déposer le fichier UF2 sur ce stockage de masse.
Lorsqu’il redémarre, la LED du Pico se met à clignoter, il se comporte maintenant comme une clé FIDO2. Le bouton BOOTSEL sert tout simplement de bouton sur lequel il faut appuyer lorsque le navigateur demande de “toucher la clé” lors de la procédure d’enrôlement ou de connexion.
Note : A la date à laquelle j’écris cet article (04 octobre 2024), j’ai repéré quelques bugs. Le Pico FIDO ne fonctionne pas avec le navigateur Firefox sur mon système Linux (Pico FIDO 5.12, Firefox 131.0), il fonctionne cependant très bien sous Chromium. La procédure d’enrôlement d’une clé Pico FIDO ne semble pas fonctionner pour le site Github.
Exemple authentification au site Linkedin.com avec une clé Pico FIDO
Le site Linkedin.com permet de se connecter avec une clé FIDO2, nous allons tester l’enrôlement de notre clé Pico FIDO sur ce site internet :
Étape 1 : Une fois connecté au site aller dans le menu Identification et sécurité et cliquer sur Clés d’accès
Étape 2 : Cliquer sur Créer une clés d’accès et entrer le mot de passe de votre compte Linkedin
Étape 3 : Comme pour tout enrôlement de clé, entrer son code PIN et toucher la clé. Votre clé apparaît maintenant dans la liste des clés d’accès autorisées pour s’authentifier sur Linkedin.
Étape 4 : Vous pouvez dès à présent vous connecter à Linkedin avec votre clé de sécurité, en cliquant sur la zone E-mail ou téléphone l’option Utiliser une clé d’accès apparaît. Il suffit de cliquer dessus, de taper le code PIN et de toucher la clé pour être connecté à Linkedin.
Remarque important relative à la sécurité d’une clé FIDO2 sur un Raspberry Pi Pico
Attention, l’utilisation d’un Pico comme clé de sécurité FIDO2 est à risque. En effet, la clé privée n’est pas stockée de manière sécurisée dans un Pico car sa mémoire flash n’est pas protégée. Il est donc possible de dupliquer la clé FIDO2 ou d’extraire les secrets (code PIN et clés privées) de sa mémoire flash.
C’est pourquoi il est vivement recommandé d’utiliser une clé de sécurité (Winkeo-C FIDO2 par exemple) qui embarque un composant de sécurité qui protège les informations stockées dans la clé.
Compiler Pico FIDO sur Linux
Pour installer et compiler Pico FIDO sur Linux, il faut tout d’abord installer Pico SDK (dans votre répertoire utilisateur par exemple ici) :
cd ~
git clone --recurse-submodules https://github.com/raspberrypi/pico-sdk.git
Puis ensuite il suffit d’installer et de compiler Pico FIDO :
git clone --recurse-submodules https://github.com/polhenarejos/pico-fido.git
cd pico-fido
mkdir build
cd build
cmake .. -DPICO_SDK_PATH=~/pico-sdk/
make
Le binaire pico_fido.uf2 est maintenant disponible pour votre Raspberry Pi Pico.
Conclusion
L’utilisation d’une clé FIDO2 permet à la fois de simplifier l’authentification aux services en ligne, tout en améliorant le niveau de sécurité. En effet, FIDO 2 est une authentification forte mutlifacteur et permet de lutter efficacement contre le vol d’un mot de passe.
Je vous recommande la lecture du numéro 56 du magazine Hackable paru en septembre 2024, un article entier est dédié à ce sujet.
J’espère que cet article vous aura intéressé. N’hésitez pas à donner votre avis en cliquant sur les étoiles ci-dessous.