• [^] # Re: DM-CRYPT et FIDO2

    Posté par . En réponse au journal Les bases de l'authentification, clé de sécurité FIDO2 sous Linux et Windows. Évalué à 2.

    Tu parles de la seed des Ledger, ou bien des passkeys utilisées avec cryptsetup ?
    Parce que rien ne t’oblige à sortir ta seed du Ledger ou à la noter. :)

    Si tu parle du passkey, cryptsetup ne reçoit JAMAIS la clé privée FIDO2

    Avec FIDO2, le fonctionnement est inversé par rapport à un smartcard classique :

    LUKS n’a jamais le secret.

    Seule la clé USB FIDO2 possède la clé privée.

    LUKS n’obtient qu’une signature.

    Ce comportement est imposé par le protocole CTAP2 : aucune commande ne permet d’exporter la clé privée.

    Pendant l’enrôlement (cryptenroll), cryptsetup enregistre uniquement un identifiant

    Quand tu enroll un token FIDO2, cryptsetup :

    envoie un challenge à la clé FIDO2 ;

    la clé crée un credential interne : une paire de clés privée/publique ;

    cryptsetup reçoit uniquement :

    • la clé publique,

    • un credential ID,

    • quelques métadonnées FIDO2.

    Jamais la clé privée.
    Elle reste dans le Secure Element de la clé USB.

    LUKS stocke juste la clé publique dans l’en-tête du volume.

    Pendant l’ouverture du disque, cryptsetup fait une vérification FIDO2

    Quand tu tapes : cryptsetup open /dev/sdaX toto --token-id 1

    voici ce qui se passe :

    1) LUKS génère un challenge aléatoire

    Ce challenge ne contient aucune clé sensible.

    2) La clé FIDO2 signe ce challenge en interne

    La signature est faite avec la clé privée interne, qui :

    n’est pas exportable,

    n’est jamais vue par le kernel,

    n’est jamais stockée dans la RAM du PC.

    3) Cryptsetup vérifie cette signature avec la clé publique stockée dans l’en-tête LUKS

    Si la signature est valide :

    cryptsetup débloque la clé LUKS (la vraie clé de chiffrement).
    Cette clé LUKS est chiffrée dans un keyslot et n’est pas liée au FIDO2.

    La clé FIDO2 ne dérive pas la clé LUKS et ne la voit jamais.
    Elle sert uniquement à valider que l’utilisateur possède le bon token.

    Résultat : cryptsetup n’a jamais accès à la clé FIDO2

    La clé privée FIDO2 :

    n’est jamais transmise,

    n’entre jamais dans la RAM du PC,

    n’est jamais écrite sur disque,

    ne transite jamais sur USB sous forme brute.

    Elle ne sert qu’à signer un challenge, à l’intérieur du token.

    Donc :

    ✔ LUKS ne voit que des signatures
    ✔ La clé privée reste physiquement dans le hardware
    ✔ Même un rootkit ne peut pas l’extraire
    ✔ L’hôte ne peut rien faire d’autre que vérifier l’authenticité du token