Aller au contenu principal
Retour à Sécurité

Authentification matérielle et continuité

Configurer deux YubiKey sans perdre l'accès

Une clé principale pour l'usage quotidien et une seconde clé pour la continuité. Cette page décrit une architecture cible et les vérifications en lecture seule, pas un état matériel en direct.

Schéma conceptuel public. Aucun numéro de série, code PIN/PUK, secret OTP, clé privée, certificat personnel, chemin d'escrow ou information de compte n'est publié. « Observé » signifie documenté lors d'une vérification antérieure, pas revérifié aujourd'hui.

Graphe des usages et des dépendances

Sélectionnez un nœud pour explorer son rôle. Les liens décrivent une fonction ou une dépendance, jamais une synchronisation automatique des secrets entre les deux clés.

La clé de secours exige son propre enrôlement auprès des services : il n'existe pas de copie automatique de ses clés privées.
Liste accessible des relations du diagramme
  • Poste de confiance → YubiKey principale — utilisation quotidienne
  • Poste de confiance → YubiKey secondaire — continuité indépendante
  • YubiKey principale → Comptes WebAuthn — authentification FIDO2
  • YubiKey principale → Accès SSH — clé SSH FIDO
  • YubiKey principale → Certificats PIV — certificat et clé PIV
  • YubiKey principale → Signature OpenPGP — signature et chiffrement
  • YubiKey principale → OTP / HMAC — défi-réponse
  • YubiKey secondaire → Tests de reprise — contrôle sans mutation
  • YubiKey secondaire → Escrow chiffré age — restauration vérifiée
  • YubiKey secondaire → KeePassXC — déverrouillage à tester

La clé de secours exige son propre enrôlement auprès des services : il n'existe pas de copie automatique de ses clés privées.

Configuration prévue et éléments à vérifier

01Documenté

Inventaire en lecture seule

Vérifier les interfaces USB/NFC, versions de firmware, capacités FIDO2, OTP, PIV et OpenPGP des deux clés sans modifier de slots.

02Prévu

FIDO2 / WebAuthn

Enregistrer les deux clés séparément sur chaque compte critique, garder une méthode de reprise indépendante et tester la connexion avec chacune.

03Documenté

SSH avec confirmation physique

Conserver une clé SSH matérielle de secours dédiée (ed25519-sk), vérifier le toucher et le code PIN et tester l'accès de manière non destructive.

04À débloquer

PIV et certificats

Inventorier les emplacements (dont 9A et 82), vérifier les dates et la chaîne de confiance ; renouveler les certificats expirés seulement après sauvegarde et autorisation explicite.

05Prévu

OpenPGP / agent GPG

Documenter l'usage d'OpenPGP et les interactions GPG-agent/pcscd ; différencier certificat PIV, sous-clé OpenPGP et clé SSH FIDO.

06Documenté

OTP HMAC-SHA1

Conserver le défi-réponse historique comme mécanisme distinct de FIDO2. Vérifier le slot et l'application cliente sans divulguer ni reprogrammer le secret.

07À débloquer

Escrow et copies indépendantes

Produire deux archives age distinctes, valider empreintes et chemins de restauration sans secret dans les journaux ; bloquer la procédure si deux sauvegardes sont le même fichier.

08Prévu

KeePassXC et rotation

Tester le déverrouillage avec la clé principale et le scénario de secours ; documenter les dépendances et la procédure de rotation après une perte.

09Prévu

Exercice de continuité

Simuler la perte de la clé principale : comptes prioritaires, SSH, coffre, certificats, récupération des archives et journal de preuves expurgées.

Exemples d’utilisation : courants et avancés

Commandes indicatives pour un environnement déjà configuré. Les variables entre $ et les noms de machines sont des exemples. Aucune opération de provisionnement de la YubiKey n'est déclenchée par cette page.

CourantFIDO2 / WebAuthn

MFA sur les comptes critiques

Enrôler séparément les deux YubiKey sur GitHub, Cloudflare ou un fournisseur d'identité compatible. Tester ensuite chacune des clés.

Prérequis / Attention

Prérequis : Compte compatible WebAuthn, accès déjà rétabli et méthode de récupération indépendante.

Attention : Enregistrement depuis les paramètres de sécurité du service : ajouter une clé principale puis une clé de secours. Éviter toute dépendance à un seul appareil.

Référence : FIDO Alliance

CourantOpenSSH / FIDO2

Connexion SSH sur serveur ou workstation

Utiliser une identité matérielle ed25519-sk déjà enregistrée sur le serveur ; l'opération demande généralement le toucher de la clé et éventuellement un PIN.

Prérequis / Attention

Prérequis : OpenSSH avec prise en charge FIDO, clé publique déjà autorisée dans authorized_keys et méthode de secours SSH indépendante.

Attention : Ne pas remplacer la seule identité SSH fonctionnelle. La clé locale est un handle, pas une copie de la clé privée.

ssh -V
ssh -i ~/.ssh/id_ed25519_sk user@host.example

Référence : Yubico SSH FIDO2

AvancéFIDO2 / Git / SSH

Signature Git avec une clé SSH FIDO

Signer un commit avec une identité SSH matérielle dédiée, distincte de l'authentification SSH si possible.

Prérequis / Attention

Prérequis : Clé de signature ed25519-sk existante ; clé publique enregistrée comme clé de signature dans GitHub ; Git compatible.

Attention : Ces commandes modifient la configuration Git locale. Ne pas affirmer qu'un commit est Verified sans vérification côté forge.

git config --local gpg.format ssh
git config --local user.signingkey "$HOME/.ssh/id_ed25519_sk_git_signing.pub"
git config --local commit.gpgsign true

Référence : Yubico Git FIDO2

AvancéOpenPGP / GPG

Signature GPG des commits et tags Git

Utiliser une sous-clé de signature OpenPGP présente dans la YubiKey ; git appelle gpg-agent et exige éventuellement toucher/PIN.

Prérequis / Attention

Prérequis : Sous-clé OpenPGP et gpg-agent opérationnels ; empreinte de clé publique vérifiée.

Attention : Ne pas confondre clé PIV, sous-clé OpenPGP et clé SSH FIDO. Aucun changement de PIN ou de sous-clé automatisé.

gpg --card-status
git config --local gpg.format openpgp
git config --local user.signingkey "$GPG_SIGNING_FINGERPRINT"
git config --local commit.gpgsign true

Référence : GitHub signing commits

CourantSOPS / age

Secrets de développement chiffrés sur la workstation

Stocker la configuration sensible chiffrée dans Git et l'injecter à la demande sans publier le clair. SOPS utilise un destinataire age, qui peut être logiciel ou fourni par un plugin YubiKey.

Prérequis / Attention

Prérequis : Fichier déjà chiffré, destinataire déclaré dans .sops.yaml, identité age accessible et commande de développement autorisée.

Attention : Ne jamais committer un fichier .env en clair ni afficher les variables en console. Une identité age logicielle n'est pas automatiquement protégée par la YubiKey.

sops edit config/dev.enc.yaml
sops exec-env config/dev.enc.yaml 'just dev-up'

Référence : SOPS

AvancéSOPS / age / PIV

Secrets SOPS protégés par une identité age YubiKey

Déchiffrer les secrets de développement avec une identité age déjà provisionnée dans une YubiKey, sans créer de fichier en clair. L’accès reste soumis au PIN/toucher configuré sur le matériel.

Prérequis / Attention

Prérequis : Identité age-plugin-yubikey existante, fichier d'identité accessible, plugin compatible installé, destinataire YubiKey déjà inscrit dans la politique SOPS et destinataire de secours indépendant.

Attention : L'exemple est une lecture et un lancement de processus, pas un provisioning PIV. La commande exec-env convient seulement aux secrets en valeurs scalaires de premier niveau ; ne jamais afficher l'environnement ou committer des secrets déchiffrés.

age-plugin-yubikey --list
SOPS_AGE_KEY_FILE="$HOME/.config/sops/age/yubikey-identity.txt" \
  sops exec-env config/dev.enc.yaml 'just dev-up'

Référence : age-plugin-yubikey

Avancéage-plugin-yubikey / PIV

Chiffrement de fichiers avec une clé age matérielle

Après une configuration autorisée du plugin age-plugin-yubikey, chiffrer pour un destinataire issu du matériel et déchiffrer à l'aide de l'identité de plugin.

Prérequis / Attention

Prérequis : Plugin installé, slot PIV prévu et validé, fichier d'identité du plugin sauvegardé, destinataire vérifié et politique de reprise indépendante.

Attention : La génération initiale de l'identité peut modifier le slot PIV : ne pas l'exécuter sans validation. Une identité sur clé USB n'est pas une clé privée PIV résidente.

age-plugin-yubikey --list
age -r "$AGE_YUBIKEY_RECIPIENT" -o artifact.age artifact.txt
age -d -i "$AGE_YUBIKEY_IDENTITY_FILE" artifact.age | sha256sum

Référence : age-plugin-yubikey

AvancéPostgreSQL / age

Sauvegarde PostgreSQL chiffrée en flux

Chiffrer un dump PostgreSQL sans créer de fichier intermédiaire en clair. Destiner le flux à plusieurs clés de reprise indépendantes.

Prérequis / Attention

Prérequis : Droits pg_dump limités, destinataires age validés dans recipients.txt, destination de backup sécurisée et test de restauration planifié.

Attention : Le listing ne remplace pas une restauration réelle isolée. Utiliser des destinataires indépendants et contrôler le code de retour de chaque étape.

set -o pipefail
pg_dump -Fc --no-owner "$PGDATABASE" | age -R recipients.txt -o postgres.dump.age
age -d -i "$AGE_IDENTITY_FILE" postgres.dump.age | pg_restore --list

Référence : PostgreSQL pg_dump

AvancéOpenPGP / PostgreSQL

Signature GPG d'une sauvegarde PostgreSQL

Apposer une signature détachée sur une sauvegarde déjà chiffrée afin de contrôler l'origine et l'intégrité avant restauration.

Prérequis / Attention

Prérequis : Sous-clé GPG de signature accessible sur YubiKey, fichier postgres.dump.age déjà produit et copie fiable de la clé publique.

Attention : La signature ne chiffre pas le backup. Valider l'empreinte du signataire et vérifier avant toute restauration.

gpg --local-user "$GPG_SIGNING_FINGERPRINT" --detach-sign --armor --output postgres.dump.age.asc postgres.dump.age
gpg --verify postgres.dump.age.asc postgres.dump.age

Référence : GnuPG

CourantPIV / PKCS#11 / X.509

Certificats d'authentification et de signature

Inspecter le certificat d'authentification PIV (slot 9a), son expiration, son émetteur et les usages autorisés. Pour l'usage client TLS, configurer le middleware PKCS#11.

Prérequis / Attention

Prérequis : YubiKey accessible, ykman installé, certificat existant ; chaîne d'autorité de certification approuvée.

Attention : L'export ne contient que le certificat public, mais peut révéler une identité personnelle. Ne pas publier dans Git ; ne pas régénérer les clés en diagnostic.

ykman piv info
ykman piv certificates export 9a auth-public.pem
openssl x509 -in auth-public.pem -noout -subject -issuer -dates

Référence : Yubico PIV

CourantVaultwarden / WebAuthn

MFA du coffre Vaultwarden

Activer WebAuthn/FIDO2 pour la connexion au coffre, puis enregistrer la seconde clé séparément et vérifier les codes de récupération hors ligne.

Prérequis / Attention

Prérequis : Instance et client compatibles, session de secours, code de récupération conservé hors ligne.

Attention : Dans les paramètres du compte, activer la connexion en deux étapes WebAuthn puis enregistrer et tester les deux clés.

Référence : Bitwarden two-step login

AvancéHashiCorp Vault / OIDC

Vault via fédération d'identité

Faire protéger l'accès humain à HashiCorp Vault par un fournisseur OIDC qui impose FIDO2/WebAuthn ; Vault peut également appliquer sa propre MFA selon les méthodes prises en charge.

Prérequis / Attention

Prérequis : Méthode OIDC configurée dans Vault et MFA imposée en amont par l'IdP.

Attention : Vault ne prend pas automatiquement WebAuthn en MFA native. Ne pas confondre MFA du fournisseur d'identité et politique MFA interne à Vault.

vault login -method=oidc

Référence : HashiCorp Vault MFA

CourantKeePassXC / OTP HMAC-SHA1

Déverrouillage KeePassXC par défi-réponse

Associer une base KeePassXC au mécanisme HMAC-SHA1 du slot OTP de la YubiKey. Prévoir la reprise indépendamment de la clé principale.

Prérequis / Attention

Prérequis : Slot défi-réponse existant, KeePassXC compatible, copie de test de la base et procédure de reprise validée.

Attention : Ne jamais reprogrammer le slot OTP sans sauvegarde du secret. Deux clés distinctes ne déverrouillent pas automatiquement la même base.

Référence : KeePassXC

CourantOATH-TOTP / Yubico Authenticator

Codes temporaires de seconde authentification

Conserver les secrets OATH-TOTP dans la YubiKey et afficher les codes via Yubico Authenticator, si le service ne prend pas WebAuthn en charge.

Prérequis / Attention

Prérequis : Application OATH configurée, service compatible TOTP et méthode de secours.

Attention : Le TOTP est moins résistant à l'hameçonnage que WebAuthn. OATH-TOTP et le slot OTP HMAC-SHA1 KeePassXC sont deux applications différentes.

Référence : Yubico Authenticator

Règles de sécurité

  • Ne jamais modifier PIN, PUK, clé de gestion PIV, slots OTP ou clés privées dans un diagnostic automatique.
  • Ne jamais mettre les secrets, identifiants matériels, certificats personnels, contenus de sauvegarde ou chemins privés dans Git et dans une page publique.
  • La clé de secours doit être testée indépendamment, stockée séparément et protégée par son propre code PIN.
  • Séparer « configuré », « fonctionnel au dernier test » et « à vérifier ». Un test lecture seule ne valide pas une restauration.

Lexique des acronymes

Les sigles employés dans le graphe et dans le plan.

FIDO2

Fast IDentity Online 2

Standard d'authentification forte avec clé matérielle, notamment pour l'accès sans mot de passe.

WebAuthn

Web Authentication

API Web utilisée pour enregistrer puis authentifier une clé de sécurité.

CTAP

Client to Authenticator Protocol

Protocole entre navigateur/système et authentificateur matériel.

SSH

Secure Shell

Protocole d'accès distant ; la variante -sk emploie un authentificateur FIDO.

PIV

Personal Identity Verification

Application de carte à puce pour les certificats et opérations cryptographiques.

PKCS#11

Public-Key Cryptography Standards #11

Interface standard pour accéder aux objets cryptographiques d'un module ou d'une carte.

GPG

GNU Privacy Guard

Logiciel pour gérer les clés et les signatures OpenPGP.

OpenPGP

Open Pretty Good Privacy

Standard ouvert de chiffrement et de signature des données.

OTP

One-Time Password

Mot de passe à usage unique ; ne pas confondre avec WebAuthn.

HMAC

Hash-based Message Authentication Code

Code d'authentification calculé à partir d'une clé secrète et d'une fonction de hachage.

SHA-1

Secure Hash Algorithm 1

Fonction de hachage historique utilisée par certains modes défi-réponse ; ne pas généraliser cet usage à la signature moderne.

NFC

Near Field Communication

Communication radio courte portée avec un téléphone ou un lecteur compatible.

PIN

Personal Identification Number

Code personnel de déverrouillage de la clé.

PUK

PIN Unblocking Key

Code de déblocage du PIN de l'application PIV, à conserver hors ligne.

CA

Certificate Authority

Autorité de certification qui émet ou signe des certificats.

age

age encryption tool

Outil de chiffrement de fichiers utilisé pour les sauvegardes chiffrées.

MFA

Multi-Factor Authentication

Authentification multifacteur : au moins deux facteurs indépendants, par exemple mot de passe et clé matérielle.

SOPS

Secrets OPerationS

Outil d'édition et de chiffrement des secrets structurés, notamment avec age.

OIDC

OpenID Connect

Protocole d'identité sur OAuth 2.0 utilisé notamment pour la connexion fédérée à Vault.

IdP

Identity Provider

Fournisseur d'identité qui authentifie l'utilisateur et applique éventuellement WebAuthn.

OATH

Initiative for Open Authentication

Famille de standards pour les codes de vérification, distincte de l'application OTP défi-réponse.

TOTP

Time-based One-Time Password

Code temporaire fondé sur le temps, généralement à six chiffres.

TLS

Transport Layer Security

Protocole de protection des connexions réseau ; peut utiliser un certificat client.

X.509

ITU-T X.509

Norme de format et de validation de certificats à clé publique.

SQL

Structured Query Language

Langage de bases de données utilisé notamment par PostgreSQL.

Conditions de clôture

  1. Vérifier les deux clés en lecture seule et enregistrer des résultats expurgés datés.
  2. Enrôler la clé secondaire dans chaque service critique et valider un accès de reprise.
  3. Réparer la chaîne PIV/les certificats et les deux sauvegardes age indépendantes avant tout changement destructif.
  4. Tester KeePassXC et conduire un exercice complet de restauration.

Documentation de référence: Yubico · FIDO Alliance · age