Komplet guide til /dev/tpm0, /dev/tpmrm0 og kommandoerne tpm2_pcrread og tpm2_pcr_extend i Linux

  • TPM 2.0 tillader mÃ¥lt opstart og LUKS-nøgler knyttet til PCR'er, ideelt med PBA PIN.
  • Brug /dev/tpmrm0 og tpm2_pcrread/tpm2_pcrextend til at administrere PCR'er.
  • UKI + PCR-politik underskrevet stabiliserer opdateringer uden at miste sikkerhed.
  • Reducer koldstart og sniffing med PBA og parameterkryptering; oprethold gendannelse.

TPM- og tpm2-kommandoer i Linux

I de senere år er TPM 2.0-moduler gået fra at være et hardwaremysterium til en almindelig del af enhver moderne computer med UEFI og Secure Boot. Denne artikel forklarer, hvad /dev/tpm0 og /dev/tpmrm0 er, og hvordan man bruger tpm2_pcrread og tpm2_pcrextend. (samt dens faktiske kommando i tpm2-tools), samt en forklaring af, hvordan de passer ind i målt opstart, diskkryptering og signerede PCR-politikker i Linux.

Der findes nyttig dokumentation, men den er spredt blandt systemd man-sider, wiki-indlæg og meget tætte indlæg; Her samler vi alle de vigtigste oplysninger (PCR'er, praktiske eksempler, risici og forsvar) så tekniske personer, selvom de ikke er TPM-eksperter, kan arbejde med disse værktøjer uden at fare vild i obskure detaljer.

Hvad er en TPM 2.0, og hvorfor du måske er interesseret i det

Et Trusted Platform Module er en sikkerhedschip, der findes på dit bundkort (eller inde i CPU'en som fTPM/Intel PTT) og fungerer som et sikkert lager, en tilfældig talgenerator og en tillidsrod for systemet. Den er passiv: hvis du ikke bruger den, gør den ingenting., men når du integrerer det i dit opstartsflow og diskkryptering, leverer det integritetsverifikation og hardwarebeskyttede nøgler.

I praksis giver en TPM 2.0 dig to primære brugsmåder i diskkryptering: a) generer/gem en stærk nøgle og beskyt dens brug med en PIN-kode med anti-brute force-lås; b) aktiver den såkaldte målte opstart, hvor Hver bootkomponent måles i PCR-registreringer, så nøglen kun "pakkes ud", hvis systemet ikke er blevet manipuleret med (og eventuelt med en pre-boot PIN-kode).

/dev/tpm0 og /dev/tpmrm0: forskelle og hvornår man skal bruge hver enkelt

På Linux vil du se to tegnenheder, når TPM 2.0 er tilgængelig. /dev/tpm0 er den "rå" grænseflade til TPM'enMens /dev/tpmrm0 eksponerer adgang via Ressourcehåndteringen (en manager, der multiplicerer klienter, administrerer sessioner og ressourcer), hvilket er den, der anbefales af tpm2-tools i de fleste scenarier.

Hvis du er usikker på, om der findes en TPM eller ej, kan du udføre en varmtest. Hvis /sys/class/tpm/ er tom, eller wiki-kommandoen ikke returnerer noget, ingen TPM er synlig: Den findes muligvis ikke fysisk, eller den er muligvis deaktiveret i firmwaren.

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

Når begge enhedsnoder er til stede, vil tpm2-tools normalt registrere /dev/tpmrm0 og bruge det automatisk. Hvis du har brug for at tvinge en enhed, accepterer de fleste værktøjer –tcti eller brug TCTI-miljøvariabler, men det er normalt ikke nødvendigt til almindelige opgaver.

TPM PCR'er: Hvordan de fungerer, og hvad de måler

Platformkonfigurationsregistre er poster, der lagrer hashes (normalt SHA-256) af status for kritiske komponenter i hver opstartsfase. De initialiseres til nul ved opstartscyklus og kan kun "udvides": aldrig omskrive eller slette (undtagen i fejlfindingssager som PCR 16).

Den grundlæggende operation er udvidelsen: ny_værdi = SHA256(aktuel_værdi || SHA256(data))Sådan kædes målinger sammen uden at tillade opportunistiske nulstillinger. Dette mønster bruges til at måle firmware, konfiguration, sikker opstart, kerne, initrd og kerneparametre, blandt andet.

PÃ¥ moderne udstyr vil du se 24 PCR'er (0-23). De mest relevante i UEFI-opstart med systemd er:
– PCR 0: firmwarekode.
– PCR 1: firmwarekonfiguration (UEFI-indstillinger).
– PCR 7: Status for sikker opstart og certifikater, den har tillid til.
– PCR 9: initrd(er) målt af kernen.
– PCR 11: UKI (Unified Kernel Image) og fasemærker via systemd-stub/systemd-pcrphase.
– PCR 12: kernekommandolinje.

Læs og udvid PCR'er med tpm2-værktøjerne: tpm2_pcrread og tpm2_pcr_extend

I tpm2-tools udføres aflæsningen med tpm2_pcrread og forlængelsen med tpm2_pcrextendDu vil nogle gange se "tpm2_pcr_extend" omtalt som den konceptuelle operation extending, men Den faktiske suite-kommando er tpm2_pcrextend.

For at inspicere den aktuelle status for PCR'erne SHA-256, det er så simpelt som:

# 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

For at udvide en PCR med hashen af ​​vilkårlige data (som et pædagogisk eksempel, hashen af ​​/etc/passwd), skal du beregne SHA-256 og udvide den. Husk: TPM'en modtager ikke gigantiske data, men dens hash, efter begrænsninger og design.

# 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

Hvis du vil reproducere udvidelsesmatematikken uden for TPM'en, Du sammenkæder den aktuelle PCR-værdi (binær) med den nye hash. og du anvender SHA-256 igen for at kontrollere resultatet.

Kan en PCR nulstilles?

Under normale forhold, nej. Filosofien er, at en PCR kun vokser med udvidelserDer er én undtagelse: PCR 16 er typisk reserveret til "debug" og kan nulstilles i visse flows, men den er ikke nyttig som sikkerhedsroden for din politik.

Measured Boot, LUKS og systemd-cryptenroll: Samlingen af ​​delene

Når du integrerer TPM'en i din diskkryptering, kan du "binde" nøgleoplåsningen til et sæt PCR'er. Hvis disse PCR'er i den aktuelle opstart har de samme værdier som da du registrerede nøglen, TPM'en bliver afsløret, og LUKS-volumenet åbnes automatisk (med eller uden en pre-boot PIN, afhængigt af din konfiguration).

Dette gøres meget pænt med systemd-cryptenroll og systemd-cryptsetup. Ideen er at oprette din volumen, tilmelde TPM-nøglen og tilføje en gendannelsesnøgle. så du ikke bliver udeladt, hvis målingerne ændrer sig (for eksempel efter opdatering af firmware eller kerne).

# 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

Hvis du fremtvinger en uoverensstemmelse (f.eks. Du forlænger PCR 4 med vilje), vil TPM'en ikke længere frigive nøglen, og du skal bruge gendannelsesnøglen. Du kan senere genregistrere TPM'en med de nye aktuelle værdier ved hjælp af –wipe-slot=tpm2 og endnu en udførelse af systemd-cryptenroll.

Hvilke PCR'er skal man vælge og hvorfor

Jo flere relevante PCR'er du linker, jo mere overfladeareal reducerer du, men jo oftere skal du genregistrere efter legitime ændringer. Nogle praktiske kriterier:
– PCR 7 (Secure Boot): Burde være meget stabil, hvis dit nøglesæt ikke ændres.
– PCR 0/1 (firmware og konfiguration): Disse ændres sjældent; de kræver genregistrering efter opdatering af firmware eller ændring af BIOS/UEFI.
– PCR 9/11/12 (kernel, initrd, UKI og cmdline): Disse ændres ofte, hvis du ikke bruger UKI eller stabil signatur/politik.

I nogle miljøer er det set, at det kun forbinder PCR 7, idet det er afhængigt af Secure Boot, der verificerer kernel og initrd, hvis de startes som signeret UKI, og bruger systemd-boot, som tillader ikke redigering af kerneparametre, når SB er aktivDet virker, men hvis din sikre opstart er afhængig af tredjepartsnøgler (f.eks. Microsoft 3rd Party), er det nemmere at orkestrere en alternativ opstart, der bevarer PCR 7 og derfor Det er ikke den mest restriktive mulighed.

UKI- og PCR-politikker underskrevet: stabilitet uden tab af sikkerhed

En praktisk løsning til at undgå at skulle registrere igen hver gang du opdaterer kernen er at bruge UKI (Unified Kernel Image) og en underskrevet PCR-politikDu genererer et nøglepar, binder den offentlige nøgle til TPM'en ved registrering og signerer din UKI efter hver opdatering. TPM'en stoler på denne signatur og tillader oplåsning, selvom den specifikke kernehash ændres.

Værktøjet systemd-measure og systemd-ukify-hjælperen gør dette nemt: ukify pakker kernel, initrd og cmdline ind i UKI (normalt målt i PCR 11) og systemd-measure underskriver politikken. Med mkinitcpio kan ukify integreres, så efterinstallation signaturen udfører sig selv.

# 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

På denne måde Din politik forbliver stabil mod kerne-/initrd-ændringer, så længe du fortsætter med at signere UKI'en med din nøgle.Hvis du fornyer dine adgangskoder eller ændrer dit PCR-sæt, skal du tilmelde dig igen.

Eksempler på målekæder med systemd

Under opstart forlænger systemd-stub og systemd-pcrphase PCR'er på bestemte tidspunkter. For eksempel er "enter-initrd" registreret i PCR 11, hvilket tillader en oplåsning kun at være gyldig inden for initrd (reducerer vektorer, hvor en angriber forsøger at genbruge nøglen senere).

I systemer med UKI måles UKI-indholdet i PCR 11; i systemer uden UKI, Kernen måler initrds i PCR 9 og bootloaderen kan måle cmdline i PCR 12. Sørg for at du dækker initrd og cmdline i din politik, ellers kan nogen gøre det. bagdør initrd'en eller opstarten med en ondsindet cmdline som f.eks. init=/bin/bash.

Reelle risici: koldstart, TPM-sniffing og mere

Hvad kan gå galt? Der er flere ting, man skal være opmærksom på, når man modellerer trusler. Koldstartsangreb er stadig mulige: hvis oplåsningen er fuldautomatisk, kan en angriber gentage et ubegrænset antal forsøg. Den klare afhjælpning er at kræve en pre-boot PIN (PBA), hvilket reducerer forsøgene til ét pr. tænd/sluk-cyklus.

En anden kategori er sniffeangreb på TPM-bussenCPU'en anmoder om nøglen, TPM'en sender den; hvis linket trykkes på, kan nøglen lækkes. Til dette formål implementerer systemd "parameterkryptering", så udvekslingen krypteres; alternativt reducerer brugen af ​​fTPM/Intel PTT eller krypteret hukommelse eksponeringen. Der findes relativt overkommelige offentlige demonstrationer (selv med mikrocontrollere), der illustrerer muligheden for det på bærbare computere af større mærker.

Der har også været akademiske og praktiske sårbarheder: TPM-fejl, faultTPM (med betydelig indflydelse på AMD) og sagen bitpixie (CVE-2023-21563)Det betyder ikke, at TPM er ubrugelig, men du bør holde din firmware opdateret, forstå din trusselsmodel og ikke blindt stole på den.

BitLocker-status mod disse trusler

I Windows-verdenen er BitLocker den mest udbredte diskkryptering. Det er nu blevet bemærket, at dens standardkonfiguration (automatisk oplåsning kun med TPM) Det åbner døren for både koldstart og TPM-kanalsniffing, da det ikke implementerer parameterkryptering i systemd-stil. Dette gør visse virksomhedscomputere sårbare over for angreb inden for få minutter.

Anbefalingen er at aktivere godkendelse før opstart via politikker/registreringsdatabase eller CLI, noget der ikke er tilstrækkeligt eksponeret for den gennemsnitlige bruger. Husk også at kontrollere, hvor gendannelsesnøglen er gemt: den findes ofte i brugerens Microsoft-konto, hvilket Det er en anden risikovinkel hvis ikke kontrolleret.

Offensivt/Defensivt trick: Erstat LUKS-roden for at tvinge din adgangskode frem

Der er en interessant vektor, når der ikke er nogen godkendelse før opstart. En angriber kan klone den rigtige LUKS-partition, erstatte den med en anden LUKS med samme UUID og en adgangskode, som han kender, og start computeren. Da PCR-målingerne stemmer overens, frigiver TPM'en nøglen, men den matcher ikke den falske LUKS, så initrd'en vil bede om "gendannelses"-nøglen. Ved at indtaste den adgangskode, som angriberen kender, kører dit system som root i initrd'en, og du kan derefter orkestrere tyveriet af den originale nøgle (for eksempel ved at montere den rigtige kopi over netværket og bruge systemd-cryptsetup).

Tydelige afbødninger: aktiver godkendelse før opstart, udnytte systemd-pcrphase til at binde oplåsning strengt til initrd-fasen, og overvej også at måle/binde den ønskede LUKS-volumen (kræver omhyggeligt design for at undgå onde cirkler).

Valg af partitionering og anden nøgle: bedste praksis

vedligeholde en gendannelsesnøgle Det er obligatorisk: hvis TPM'en eller bundkortet går i stykker, er din nøgle, der er knyttet til TPM'en, ubrugelig. LUKS tillader flere slots (TPM bruger én, recovery bruger en anden). Derudover har det fordele at adskille / og /home partitionerne: du kan anvende streng måling med TPM a/ og brug en stærk nøgle eller FIDO2/YubiKey-enhed til /home, hvilket reducerer den samlede tillid til en enkelt mekanisme.

Hvad sker der, når du opdaterer firmware eller kerne?

Hvis du ændrer firmware eller berører UEFI-indstillinger, ændres PCR'er som 0/1, og TPM'en frigiver ikke nøglen, før du tilmelder dig igen. For kerne og initrd, ændringer er hyppigeHvis du ikke bruger en UKI med en underskrevet politik, kan hver opdatering tvinge dig til at bruge gendannelsesmuligheden og genregistrere dig senere. Med en underskrevet UKI skal du bare underskrive den, og det er det.

Noter og observationer fra lokalsamfundet

I nogle populære guider til bestemte distributioner er det blevet anbefalet bind kun PCR 7, når UKI og systemd-boot bruges, afhængig af Secure Boots sikkerhedsforanstaltninger og manglende evne til at redigere cmdlinjen. Det virker, men der er risici, hvis du er afhængig af tredjeparter. Der er også tidligere blevet dokumenteret en fejl, hvor tryk på Enter ville åbne en gendannelsesshell efter oplåsning; det er en god idé at holde dine versioner opdaterede for at undgå overraskelser.

Interessante kommentarer blev delt i 2025/06: TPM-fejl fortsætter med at påvirke AMD til en vis grad; wikier har tilføjet specifikke afsnit om signerede PCR-politikker; og installationsprogrammet til en distribution, der tilbyder FDE med TPM som en eksperimentel funktion, blev testet med nogle praktiske problemer (kræver gendannelse ved første opstart, afhængighed af snaps, dobbelt diskkryptering), et problem der fortjener en mere dybdegående revision.

En opfølgning med fokus på diskkryptering i Windows blev udgivet i 2025/07. Den overordnede konklusion styrker behovet for PBA og kryptering af TPM-kanalen., samt begrænsning af afhængigheden af ​​tredjepartsnøgler i Secure Boot.

Driftstips med tpm2-tools og systemd

Til daglig brug: Installer tpm2-tools og tpm2-tss. Bruger /dev/tpmrm0 som standardog tpm2_pcrread/tpm2_pcrextend til testning og eksperimentering med PCR'er. Undgå at udvide produktions-PCR'er med vilkårlige data: gør dette i laboratorier eller brug PCR 16 til testning.

Når du tilmelder dig systemd-cryptenroll: –tpm2-enhed=auto registrerer TPM; –tpm2-med-ben tilføjer PBA; –tpm2-pcrs=… vælg dine PCR'er; –tpm2-offentlig-nøgle=… og –tpm2-offentlig-nøgle-pcrs=… aktivere en underskrevet PCR-politik (f.eks. knyttet til PCR 11 for UKI). Glem ikke –tørre-slot når du vil rengøre en tidligere sprække.

Hvis du ikke har TPM, og systemd får dig til at vente på opstart

Af og til, efter en opdatering, forsøger en tjeneste at bruge TPM'en, selvom din maskine ikke har den synlig, hvilket forårsager timeouts ved opstart. Kontroller først, at /dev/tpm* ikke vises heller ikke poster i /sys/class/tpm.

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

Hvis der ikke er nogen TPM, skal du tjekke din /etc/crypttab har ikke muligheder som tpm2-device=autoHvis de findes, skal du slette dem og genopbygge din initrd. Du kan også deaktivere målefasen på computere uden en 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

Dette eliminerer unødvendig ventetid, hvis dit udstyr mangler TPM. Hvis du senere aktiverer TPM i BIOS/UEFI, fjern sortlisten og afmaskér enheden for at gendanne målingerne.

God praksis og tillidsbeslutninger

Nogle mennesker er skeptiske over for TPM, fordi det er en "sort boks", ligesom selvkrypterende diske. Dette er en rimelig tvivl. Vurder din trusselsmodel og balancerer brugervenlighed, privatliv og vedligeholdelse. For mange mennesker er TPM+PBA+signeret UKI et stort sikkerhedsspring uden overdreven friktion.

På hardware, der tillader det, tilføj krypteret hukommelse og undgå at stole på tredjepartsnøgler i Secure Boot; begræns kæden til dine egne nøgler, når det er muligt. Hold firmware og kerne opdateret for at inkorporere afhjælpninger af offentliggjorte sårbarheder.

At mestre /dev/tpm0, /dev/tpmrm0 og tpm2_pcrread/tpm2_pcr_extend operationerne åbner døren for målrettet opstart og robust diskkryptering i Linux; med UKI og en signeret PCR-politik opnår du driftsstabilitet, og tilføjelse af en pre-boot PIN beskytter dig også mod mere praktiske angreb. Nøglen er at vælge PCR'er omhyggeligt, underskrive det, der ændres, ofte og altid have en god gendannelsesnøgle..

Ubuntu 25.10 beta leveres med Linux 6.17-kernen
relateret artikel:
Ubuntu 25.10 beta ankommer med Linux 6.17 og vigtige ændringer