Guide complet sur /dev/tpm0, /dev/tpmrm0 et les commandes tpm2_pcrread et tpm2_pcr_extend sous Linux

  • TPM 2.0 permet un démarrage mesuré et des clés LUKS liées aux PCR, idéal avec le code PIN PBA.
  • Utilisez /dev/tpmrm0 et tpm2_pcrread/tpm2_pcrextend pour gérer les PCR.
  • La politique UKI + PCR signée stabilise les mises à jour sans perte de sécurité.
  • Atténuez le démarrage à froid et le reniflage avec PBA et le cryptage des paramètres ; maintenez la récupération.

Commandes TPM et tpm2 sous Linux

Ces dernières années, les modules TPM 2.0 sont passés d’un mystère matériel à un élément commun de tout ordinateur moderne avec UEFI et Secure Boot. Cet article explique ce que sont /dev/tpm0 et /dev/tpmrm0 et comment utiliser tpm2_pcrread et tpm2_pcrextend. (ainsi que sa commande réelle dans tpm2-tools), ainsi qu'une explication de la manière dont ils s'intègrent dans les politiques de démarrage mesuré, de cryptage de disque et de PCR signées sous Linux.

Une documentation utile existe, mais elle est dispersée entre les pages de manuel de systemd, les entrées du wiki et des publications très denses ; Nous rassemblons ici toutes les informations clés (PCR, exemples pratiques, risques et défenses) afin que les techniciens, même s'ils ne sont pas experts TPM, puissent travailler avec ces outils sans se perdre dans des détails obscurs.

Qu'est-ce qu'un TPM 2.0 et pourquoi cela pourrait vous intéresser

Un module de plateforme sécurisée est une puce de sécurité qui se trouve sur votre carte mère (ou à l'intérieur du processeur comme fTPM/Intel PTT) et agit comme un magasin sécurisé, un générateur de nombres aléatoires et une racine de confiance pour le système. C'est passif : si vous ne l'utilisez pas, cela ne fait rien., mais lorsque vous l'intégrez dans votre flux de démarrage et votre chiffrement de disque, il fournit une vérification de l'intégrité et des clés protégées par le matériel.

En pratique, un TPM 2.0 vous permet deux principaux modes d'utilisation dans le chiffrement de disque : a) générer/enregistrer une clé forte et protéger son utilisation avec un code PIN avec verrouillage anti-force brute ; b) activer le démarrage dit mesuré, où Chaque composant de démarrage est mesuré dans les enregistrements PCR, donc la clé n'est « déballée » que si le système n'a pas été falsifié (et éventuellement avec un code PIN de pré-démarrage).

/dev/tpm0 et /dev/tpmrm0 : différences et quand utiliser chacun d'eux

Sous Linux, vous verrez deux périphériques de caractères lorsque TPM 2.0 est disponible. /dev/tpm0 est l'interface « brute » du TPM, pendant que /dev/tpmrm0 expose l'accès via le gestionnaire de ressources (un gestionnaire qui multiplie les clients, gère les sessions et les ressources), étant celui recommandé par tpm2-tools dans la plupart des scénarios.

Si vous n'êtes pas sûr qu'un TPM existe ou non, vous pouvez le tester à chaud. Si /sys/class/tpm/ est vide ou si la commande wiki ne renvoie rien, aucun TPM n'est visible : il se peut qu'il n'existe pas physiquement ou qu'il soit désactivé dans le micrologiciel.

# ¿Hay TPM 2.0?
ls /sys/class/tpm/
cat /sys/class/tpm/tpm*/tpm_version_major
# Dispositivos
ls -l /dev/tpm*

Lorsque les deux nœuds de périphérique sont présents, tpm2-tools détectera normalement /dev/tpmrm0 et l'utilisera automatiquement. Si vous devez forcer un périphérique, la plupart des outils acceptent –tcti ou utilisez des variables d'environnement TCTI, mais pour les tâches courantes, ce n'est généralement pas nécessaire.

PCR TPM : comment fonctionnent-elles et ce qu'elles mesurent

Les registres de configuration de la plate-forme sont des enregistrements qui stockent les hachages (généralement SHA-256) de l'état des composants critiques à chaque phase de démarrage. Ils sont initialisés à zéro au cycle de mise sous tension et ne peuvent être que « étendus »: ne jamais réécrire ou effacer (sauf dans les cas de débogage comme PCR 16).

L'opération fondamentale est l'extension : nouvelle_valeur = SHA256(valeur_actuelle || SHA256(données))C'est ainsi que les mesures sont enchaînées sans permettre de réinitialisations opportunistes. Ce modèle est utilisé pour mesurer, entre autres, le micrologiciel, la configuration, le démarrage sécurisé, le noyau, l'initrd et les paramètres du noyau.

Sur les équipements modernes, vous verrez 24 PCR (0–23). Les plus pertinents dans le démarrage UEFI avec systemd sont:
– PCR 0 : code du micrologiciel.
– PCR 1 : configuration du firmware (paramètres UEFI).
– PCR 7 : état de Secure Boot et certificats auxquels il fait confiance.
– PCR 9 : initrd(s) mesuré(s) par le noyau.
– PCR 11 : UKI (Unified Kernel Image) et marques de phase via systemd-stub/systemd-pcrphase.
– PCR 12 : ligne de commande du noyau.

Lire et étendre les PCR avec tpm2-tools : tpm2_pcrread et tpm2_pcr_extend

Dans tpm2-tools la lecture est effectuée avec tpm2_pcrread et l'extension avec tpm2_pcrextend. Vous verrez parfois « tpm2_pcr_extend » désigné comme l’opération conceptuelle d’extension, mais La commande de suite actuelle est tpm2_pcrextend.

Pour inspecter l'état actuel des PCR SHA-256, c'est aussi simple que:

# Leer PCRs en SHA-256 (ejemplos de índices habituales)
sudo tpm2_pcrread sha256:0,1,7,9,11,12

# O todos los PCRs SHA-256 disponibles
tpm2_pcrread sha256:all

Pour étendre un PCR avec le hachage de données arbitraires (à titre d'exemple pédagogique, le hachage de /etc/passwd), calculez le SHA-256 et étendez-le. N'oubliez pas : le TPM ne reçoit pas de données gigantesques, mais son hachage, par des limites et une conception.

# 1) Guardar el hash de /etc/passwd
echo -n $(sha256sum /etc/passwd | cut -d' ' -f1) > passwd.sha

# 2) Extender PCR 7 (ejemplo) con el hash previo
sudo tpm2_pcrextend 7:sha256=$(cat passwd.sha)

# 3) Ver el nuevo valor del PCR 7
tpm2_pcrread sha256:7

Si vous souhaitez reproduire les mathématiques d’extension en dehors du TPM, Vous concaténez la valeur PCR actuelle (binaire) avec le nouveau hachage et vous appliquez à nouveau SHA-256 pour vérifier le résultat.

Un PCR peut-il être réinitialisé ?

Dans des conditions normales, non. La philosophie est qu'un PCR ne grandit qu'avec des extensionsIl existe une exception : PCR 16 est généralement réservé au « débogage » et peut être réinitialisé dans certains flux, mais il n’est pas utile comme racine de sécurité de votre politique.

Démarrage mesuré, LUKS et systemd-cryptenroll : assembler les pièces

Lorsque vous intégrez le TPM dans le chiffrement de votre disque, vous pouvez « lier » le déverrouillage de la clé à un ensemble de PCR. Si dans le démarrage actuel ces PCR ont les mêmes valeurs que lorsque vous avez enregistré la clé, le TPM est descellé et le volume LUKS est automatiquement ouvert (avec ou sans code PIN de pré-démarrage, selon votre configuration).

Cela se fait très bien avec systemd-cryptenroll et systemd-cryptsetup. L’idée est de créer votre volume, d’inscrire la clé TPM et d’ajouter une clé de récupération. afin que vous ne soyez pas laissé de côté si les mesures changent (par exemple, après la mise à jour du firmware ou du noyau).

# Ejemplo: crear LUKS, matricular TPM y añadir recuperación (pseudoflujo)
# 1) Crear el volumen con contraseña temporal
sudo cryptsetup luksFormat /dev/nvme0n1p2

# 2) Matricular TPM en LUKS usando PCRs concretos y PIN
sudo systemd-cryptenroll \
  --tpm2-device=auto \
  --tpm2-with-pin=yes \
  --tpm2-pcrs=1+2+3+4 \
  --wipe-slot=empty \
  /dev/nvme0n1p2

# 3) Añadir clave de recuperación aleatoria
sudo systemd-cryptenroll --recovery-key /dev/nvme0n1p2

# 4) Abrir con TPM o con recovery cuando proceda
systemd-cryptsetup attach root /dev/nvme0n1p2 - tpm2-device=auto

Si vous forcez une divergence (par exemple, vous étendez volontairement le PCR 4), le TPM ne libérera plus la clé et vous devrez utiliser la clé de récupération. Vous pourrez ensuite réenregistrer le TPM avec les nouvelles valeurs actuelles en utilisant –wipe-slot=tpm2 et une autre exécution de systemd-cryptenroll.

Quels PCR choisir et pourquoi

Plus vous liez de PCR pertinents, plus vous réduisez la surface, mais plus souvent vous devrez vous réenregistrer après des modifications légitimes. Quelques critères pratiques:
– PCR 7 (Secure Boot) : devrait être très stable si votre jeu de clés ne change pas.
– PCR 0/1 (firmware et configuration) : Ceux-ci changent rarement ; ils nécessitent un réenregistrement après la mise à jour du firmware ou la modification du BIOS/UEFI.
– PCR 9/11/12 (noyau, initrd, UKI et cmdline) : Ceux-ci changent fréquemment si vous n’utilisez pas UKI ou une signature/politique stable.

Dans certains environnements, il a été observé qu'il ne liait que PCR 7, en s'appuyant sur Secure Boot vérifiant le noyau et l'initrd s'ils sont démarrés en tant qu'UKI signé et en utilisant systemd-boot qui ne permet pas de modifier les paramètres du noyau lorsque SB est actif. Cela fonctionne, mais si votre démarrage sécurisé repose sur des clés tierces (telles que Microsoft 3rd Party), il est plus facile d'orchestrer un démarrage alternatif qui préserve PCR 7 et donc Ce n’est pas l’option la plus restrictive.

Signature des accords UKI et PCR : stabilité sans perte de sécurité

Une solution pratique pour éviter de devoir se réenregistrer à chaque mise à jour du noyau est d'utiliser UKI (Unified Kernel Image) et une politique PCR signéeVous générez une paire de clés, liez la clé publique au TPM lors de l'enregistrement et signez votre UKI après chaque mise à jour. Le TPM approuve cette signature et autorise le déverrouillage même si le hachage spécifique du noyau change.

L'outil systemd-measure et l'assistant systemd-ukify facilitent cette tâche : ukify regroupe le noyau, initrd et cmdline dans UKI (généralement mesuré dans PCR 11) et systemd-measure signe la politique. Avec mkinitcpio, ukify peut être intégré afin que post-installation la signature s'exécute d'elle-même.

# Esquema típico (pseudocomandos)
# 1) Crear claves para política PCR firmada
openssl genpkey -algorithm RSA -out /etc/kernel/pcr-initrd.key.pem -pkeyopt rsa_keygen_bits:3072
openssl req -new -x509 -key /etc/kernel/pcr-initrd.key.pem -out /etc/kernel/pcr-initrd.pub.pem -subj "/CN=UKI PCR Policy"

# 2) Configurar ukify/mkinitcpio para generar UKI y firmar política
# (consultar man ukify y systemd-measure para parámetros)

# 3) Matricular en LUKS atando PCRs y clave pública de la política
sudo systemd-cryptenroll \
  --tpm2-device=auto \
  --wipe-slot=tpm2 \
  --tpm2-with-pin=yes \
  --tpm2-pcrs=0+1+2+7 \
  --tpm2-public-key=/etc/kernel/pcr-initrd.pub.pem \
  --tpm2-public-key-pcrs=11 \
  /dev/nvme0n1p2

Ainsi, Votre politique reste stable face aux modifications du noyau/initrd tant que vous continuez à signer l'UKI avec votre clé.Si vous renouvelez vos mots de passe ou modifiez votre ensemble PCR, vous devrez vous réinscrire.

Exemples de chaînes de mesure avec systemd

Lors du démarrage, systemd-stub et systemd-pcrphase étendent les PCR à des moments spécifiques. Par exemple, « enter-initrd » est enregistré dans PCR 11, permettant à un déverrouillage d'être valide uniquement dans l'initrd (réduisant les vecteurs où un attaquant tente de réutiliser la clé ultérieurement).

Dans les systèmes avec UKI, la teneur en UKI est mesurée en PCR 11 ; dans les systèmes sans UKI, le noyau mesure les initrds dans PCR 9 et le chargeur de démarrage peut mesurer la ligne de commande dans PCR 12. Assurez-vous de couvrir initrd et la ligne de commande dans votre politique, sinon quelqu'un pourrait porte dérobée l'initrd ou le démarrage avec une ligne de commande malveillante comme init=/bin/bash.

Risques réels : démarrage à froid, détection de TPM, etc.

Que peut-il se passer ? Plusieurs points à connaître pour modéliser les menaces. Attaques de démarrage à froid sont toujours viables : si le déverrouillage est entièrement automatique, un attaquant peut répéter un nombre illimité de tentatives. La solution la plus simple consiste à exiger un code PIN de pré-démarrage (PBA), réduisant ainsi les tentatives à une par cycle d'alimentation.

Une autre catégorie est la attaques par sniffing sur le bus TPMLe processeur demande la clé, le TPM l'envoie ; si le lien est intercepté, la clé peut être divulguée. À cette fin, systemd implémente le chiffrement des paramètres afin que l'échange soit chiffré ; l'utilisation d'un TPM/PTT Intel ou d'une mémoire chiffrée réduit également l'exposition. Des démonstrations publiques relativement abordables (même avec des microcontrôleurs) illustrent la faisabilité sur les ordinateurs portables des grandes marques.

Il y a également eu des vulnérabilités académiques et pratiques : TPM-Fail, faultTPM (avec un impact notable sur AMD) et le cas bitpixie (CVE-2023-21563)Cela ne signifie pas que le TPM est inutile, mais vous devez maintenir votre firmware à jour, comprendre votre modèle de menace et ne pas lui faire aveuglément confiance.

Statut de BitLocker contre ces menaces

Dans l'univers Windows, le chiffrement de disque le plus répandu est BitLocker. Il a maintenant été constaté que sa configuration par défaut (déverrouillage automatique uniquement avec TPM) Cela ouvre la porte au démarrage à froid et à l'analyse des canaux TPM, car il n'implémente pas le chiffrement des paramètres de type systemd. Cela rend certains ordinateurs d'entreprise vulnérables aux attaques en quelques minutes.

La recommandation ici est de permettre authentification avant le démarrage via les politiques/registre ou l'interface de ligne de commande (CLI), ce qui n'est pas suffisamment exposé à l'utilisateur lambda. Pensez également à vérifier où est stockée la clé de récupération : elle se trouve souvent dans le compte Microsoft de l'utilisateur, ce qui C'est un autre angle de risque si non contrôlé.

Astuce offensive/défensive : remplacez la racine LUKS pour forcer votre mot de passe

Il existe un vecteur intéressant en l'absence d'authentification préalable au démarrage. Un attaquant peut cloner la véritable partition LUKS. remplacez-le par un autre LUKS avec le même UUID et un mot de passe qu'il connaîtet redémarrez l'ordinateur. Puisque les mesures PCR correspondent, le TPM libère la clé, mais celle-ci ne correspond pas au faux LUKS ; l'initrd demandera donc la clé de « récupération ». En saisissant le mot de passe connu de l'attaquant, votre système s'exécute en tant que root dans l'initrd, et vous pouvez alors orchestrer le vol de la clé d'origine (par exemple, en montant la copie réelle sur le réseau et en utilisant systemd-cryptsetup).

Atténuations claires : activer l'authentification avant le démarrage, exploitez systemd-pcrphase pour lier le déverrouillage strictement à la phase initrd, et envisagez également de mesurer/lier le volume LUKS cible (nécessite une conception minutieuse pour éviter les cercles vicieux).

Choix du partitionnement et de la deuxième clé : bonnes pratiques

Garder une clé de récupération C'est obligatoire : si le TPM ou la carte mère tombe en panne, votre clé liée au TPM est inutile. LUKS autorise plusieurs emplacements (le TPM en utilise un, le recovery en utilise un autre). De plus, séparer les partitions / et /home présente des avantages : vous pouvez appliquer mesure stricte avec TPM a/ et utilisez une clé forte ou un périphérique FIDO2/YubiKey pour /home, réduisant ainsi la confiance globale dans un seul mécanisme.

Que se passe-t-il lorsque vous mettez à jour le firmware ou le noyau ?

Si vous modifiez le micrologiciel ou touchez aux options UEFI, les PCR tels que 0/1 changeront et le TPM ne libérera pas la clé tant que vous ne vous serez pas réinscrit. Pour noyau et initrd, les changements sont fréquentsSi vous n'utilisez pas d'UKI avec une politique signée, chaque mise à jour pourrait vous obliger à utiliser l'option de récupération et à vous réenregistrer ultérieurement. Avec un UKI signé, il vous suffit de le signer et c'est tout.

Notes et observations de la communauté

Dans certains guides populaires de certaines distributions, il a été recommandé lier uniquement PCR 7 lors de l'utilisation de UKI et systemd-boot, en s'appuyant sur les protections de Secure Boot et l'impossibilité de modifier la ligne de commande. Cela fonctionne, mais il y a des risques si vous vous fiez à des tiers. Un bug a également été signalé : appuyer sur Entrée affichait un shell de récupération après le déverrouillage ; il est conseillé de maintenir vos versions à jour pour éviter les mauvaises surprises.

Des commentaires intéressants ont été partagés en 2025/06 : La panne du TPM continue d'affecter AMD dans une certaine mesure ; les wikis ont ajouté des sections spécifiques sur les politiques PCR signées ; et le programme d'installation d'une distribution qui propose FDE avec TPM comme fonctionnalité expérimentale a été testé, avec quelques problèmes pratiques (nécessitant une récupération au premier démarrage, dépendance aux snaps, double cryptage du disque), un problème qui mérite un audit plus approfondi.

Un suivi axé sur le chiffrement de disque sous Windows a été publié en 2025/07. La conclusion générale renforce la nécessité du PBA et du cryptage du canal TPM., ainsi que de limiter la dépendance aux clés tierces dans Secure Boot.

Conseils d'utilisation avec tpm2-tools et systemd

Pour une utilisation quotidienne : installez tpm2-tools et tpm2-tss. Utilise /dev/tpmrm0 par défautet tpm2_pcrread/tpm2_pcrextend pour tester et expérimenter les PCR. Évitez d'étendre les PCR de production avec des données arbitraires : effectuez cette opération en laboratoire ou utilisez PCR 16 pour les tests.

Lors de l'inscription avec systemd-cryptenroll : –tpm2-device=auto détecte le TPM ; –tpm2-avec-broche ajoute PBA; –tpm2-pcrs=… sélectionnez vos PCR ; –tpm2-public-key=… et –tpm2-public-key-pcrs=… Activer une politique PCR signée (par exemple, liée à PCR 11 pour UKI). N'oubliez pas –fente d'essuyage lorsque vous souhaitez nettoyer un emplacement précédent.

Si vous n'avez pas de TPM et que systemd vous fait attendre au démarrage

Parfois, après une mise à jour, un service tente d'utiliser le TPM même si votre machine ne l'a pas visible, ce qui provoque des délais d'attente au démarrage. Vérifiez d'abord qu'aucun /dev/tpm* n'apparaît ni entrées dans /sys/class/tpm.

# Verificación rápida
ls /dev/tpm*
ls /sys/class/tpm/

S'il n'y a pas de TPM, vérifiez votre /etc/crypttab je n'ai pas d'options comme tpm2-device=autoS'ils existent, supprimez-les et reconstruisez votre initrd. Vous pouvez également désactiver la phase de mesure sur les ordinateurs sans TPM :

# 1) Eliminar referencias TPM en /etc/crypttab y regenerar initrd
sudo mkinitcpio -P    # (o dracut/rebuildinitrd según distro)

# 2) Evitar carga de módulos TPM si el firmware publica algo extraño
echo -e "blacklist tpm\nblacklist tpm_tis\nblacklist tpm_crb" | sudo tee /etc/modprobe.d/no-tpm.conf

# 3) Opcional: evitar pcrphase si te da problemas
sudo systemctl mask systemd-pcrphase.service

Cela élimine les attentes inutiles si votre équipement ne dispose pas de TPM. Si vous activez ultérieurement le TPM dans le BIOS/UEFI, supprimez la liste noire et démasquez l'unité pour récupérer les mesures.

Bonnes pratiques et décisions de confiance

Certaines personnes se méfient du TPM, car il s'agit d'une « boîte noire », tout comme les disques à chiffrement automatique. C'est un doute raisonnable. Évaluez votre modèle de menace et équilibre entre convivialité, confidentialité et maintenance. Pour beaucoup, l'association TPM + PBA + UKI signé représente un énorme bond en avant en matière de sécurité, sans frictions excessives.

Sur le matériel qui le permet, ajoutez mémoire cryptée Évitez de vous fier à des clés tierces dans le démarrage sécurisé ; limitez la chaîne à vos propres clés autant que possible. Maintenez le micrologiciel et le noyau à jour pour intégrer les mesures d'atténuation des vulnérabilités publiées.

La maîtrise des opérations /dev/tpm0, /dev/tpmrm0 et tpm2_pcrread/tpm2_pcr_extend ouvre la porte à un démarrage mesuré et à un chiffrement de disque robuste sous Linux ; avec UKI et une politique PCR signée, vous obtenez une stabilité opérationnelle, et l'ajout d'un code PIN de pré-démarrage vous protège également contre des attaques plus pratiques. La clé est de bien choisir les PCR, de signer souvent ce qui change et de toujours conserver une bonne clé de récupération..

Ubuntu 25.10 beta est livré avec le noyau Linux 6.17
Article connexe:
Ubuntu 25.10 bêta arrive avec Linux 6.17 et des changements clés