Kompletní průvodce pro /dev/tpm0, /dev/tpmrm0 a příkazy tpm2_pcrread a tpm2_pcr_extend v Linuxu

  • TPM 2.0 umožňuje měřené bootovací a LUKS klíče vázané na PCR, ideální s PIN kódem PBA.
  • Pro správu PCR použijte /dev/tpmrm0 a tpm2_pcrread/tpm2_pcrextend.
  • Podepsaná politika UKI + PCR stabilizuje aktualizace bez ztráty zabezpečení.
  • Zmírněte studený start a sniffing pomocí PBA a šifrování parametrů; zachovejte obnovu.

Příkazy TPM a tpm2 v Linuxu

V posledních letech se moduly TPM 2.0 staly z hardwarové záhady běžnou součástí každého moderního počítače s UEFI a Secure Boot. Tento článek vysvětluje, co jsou /dev/tpm0 a /dev/tpmrm0 a jak používat tpm2_pcrread a tpm2_pcrextend. (stejně jako jeho skutečný příkaz v tpm2-tools), a také vysvětlení, jak zapadají do politik měřeného bootování, šifrování disku a podepsaného PCR v Linuxu.

Užitečná dokumentace existuje, ale je roztroušena mezi manuálovými stránkami systemd, články na wiki a velmi hustými příspěvky; Zde shromažďujeme všechny klíčové informace (PCR, praktické příklady, rizika a obrany) aby techničtí pracovníci, i když nejsou experty na TPM, mohli s těmito nástroji pracovat, aniž by se ztráceli v nejasných detailech.

Co je TPM 2.0 a proč by vás to mohlo zajímat

Modul důvěryhodné platformy (Trusted Platform Module) je bezpečnostní čip, který se nachází na základní desce (nebo uvnitř procesoru, jako je fTPM/Intel PTT) a funguje jako bezpečné úložiště, generátor náhodných čísel a kořen důvěryhodnosti systému. Je pasivní: pokud ho nepoužíváte, nedělá nic., ale když jej integrujete do spouštěcího procesu a šifrování disku, poskytuje ověřování integrity a hardwarově chráněné klíče.

V praxi umožňuje TPM 2.0 dva hlavní režimy použití při šifrování disku: a) generování/ukládání silného klíče a ochrana jeho použití PINem s ochranou proti hrubé síle; b) aktivace tzv. měřeného spouštění, kde Každá složka boty je měřena v PCR záznamech, takže klíč je „rozbalen“ pouze tehdy, pokud systém nebyl zmanipulován (a volitelně s PIN kódem před spuštěním).

/dev/tpm0 a /dev/tpmrm0: rozdíly a kdy je použít

V Linuxu uvidíte dvě znaková zařízení, pokud je k dispozici TPM 2.0. /dev/tpm0 je „syrové“ rozhraní TPMZatímco /dev/tpmrm0 zpřístupňuje přístup prostřednictvím Správce zdrojů (správce, který násobí klienty, spravuje relace a zdroje), což je ten, který tpm2-tools doporučuje ve většině scénářů.

Pokud si nejste jisti, zda modul TPM existuje, můžete jej otestovat za provozu. Pokud je /sys/class/tpm/ prázdný nebo příkaz wiki nic nevrátí, není viditelný žádný TPM: Možná fyzicky neexistuje nebo je ve firmwaru zakázán.

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

Pokud jsou přítomny oba uzly zařízení, nástroj tpm2-tools obvykle detekuje /dev/tpmrm0 a automaticky jej použije. Pokud potřebujete vynutit přístup k zařízení, většina nástrojů akceptuje –tcti nebo použít proměnné prostředí TCTI, ale pro běžné úlohy to obvykle není nutné.

TPM PCR: Jak fungují a co měří

Registry konfigurace platformy jsou záznamy, které ukládají hash hodnoty (obvykle SHA-256) stavu kritických komponent v každé fázi spouštění. Při zapnutí jsou inicializovány na nulu a lze je pouze „rozšířit“.Nikdy nepřepisovat ani nemazat (s výjimkou případů ladění, jako je PCR 16).

Základní operací je rozšíření: new_value = SHA256(current_value || SHA256(data))Takto jsou měření zřetězena, aniž by umožňovala oportunní resety. Tento vzorec se používá mimo jiné k měření firmwaru, konfigurace, Secure Boot, jádra, initrd a parametrů jádra.

Na moderním vybavení uvidíte 24 PCR (0–23). Nejrelevantnější v UEFI bootování se systemd jsou:
– PCR 0: kód firmwaru.
– PCR 1: konfigurace firmwaru (nastavení UEFI).
– PCR 7: Stav zabezpečeného spouštění a certifikáty, kterým důvěřuje.
– PCR 9: initrd(y) měřené jádrem.
– PCR 11: UKI (Unified Kernel Image) a fázové značky pomocí systemd-stub/systemd-pcrphase.
– PCR 12: příkazový řádek jádra.

Čtení a rozšiřování PCR pomocí nástrojů tpm2: tpm2_pcrread a tpm2_pcr_extend

V tpm2-tools se čtení provádí pomocí tpm2_pcrread a prodloužení s tpm2_pcrextendNěkdy se setkáte s operací „tpm2_pcr_extend“ označovanou jako konceptuální operace rozšíření, ale Skutečný příkaz sady je tpm2_pcrextend.

Pro kontrolu aktuálního stavu PCR SHA-256, je to tak jednoduché jako:

# 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

Chcete-li rozšířit PCR o hash libovolných dat (jako pedagogický příklad hash /etc/passwd), vypočítejte SHA-256 a rozšířte jej. Pamatujte: TPM nepřijímá gigantická data, ale jejich hash., z důvodu omezení a návrhu.

# 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

Pokud chcete reprodukovat rozšiřující matematiku mimo TPM, Zřetězíte aktuální hodnotu PCR (binární) s novým hašem. a znovu použijete SHA-256 pro kontrolu výsledku.

Lze resetovat PCR?

Za normálních podmínek ne. Filozofie je taková, že PCR roste pouze s extenzemi.Existuje jedna výjimka: PCR 16 je obvykle rezervován pro „ladění“ a v určitých tocích jej lze resetovat, ale není užitečný jako kořen zabezpečení vaší zásady.

Změřené bootování, LUKS a systemd-cryptenroll: Dáváme dohromady jednotlivé části

Když integrujete TPM do šifrování disku, můžete „vázat“ odemknutí klíče na sadu PCR. Pokud v aktuálním bootu mají tyto PCR stejné hodnoty jako při registraci klíče, TPM se odpečetí a svazek LUKS se automaticky otevře (s PIN kódem před spuštěním nebo bez něj, v závislosti na vaší konfiguraci).

To se dělá velmi pěkně pomocí systemd-cryptenroll a systemd-cryptsetup. Jde o to vytvořit si svazek, zaregistrovat klíč TPM a přidat klíč pro obnovení. takže nebudete opomenuti, pokud se měření změní (například po aktualizaci firmwaru nebo jádra).

# 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

Pokud vynucujete nesrovnalost (například PCR 4 prodlužujete schválně), TPM již klíč neuvolní a budete muset použít obnovovací klíč. Později můžete TPM znovu zaregistrovat s novými aktuálními hodnotami pomocí –wipe-slot=tpm2 a další spuštění systemd-cryptenroll.

Které PCR testy si vybrat a proč

Čím více relevantních PCR propojíte, tím větší plochu zmenšíte, ale tím častěji se budete muset po legitimních změnách znovu registrovat. Některá praktická kritéria:
– PCR 7 (Secure Boot): Pokud se vaše klíčová sada nezmění, mělo by to být velmi stabilní.
– PCR 0/1 (firmware a konfigurace): Tyto se mění jen zřídka; po aktualizaci firmwaru nebo změně BIOSu/UEFI je nutné je znovu zaregistrovat.
– PCR 9/11/12 (jádro, initrd, UKI a cmdline): Tyto se často mění, pokud nepoužíváte UKI nebo stabilní podpis/zásady.

V některých prostředích bylo pozorováno propojení pouze PCR 7, spoléhání se na Secure Boot, který ověřuje jádro a initrd, zda jsou spuštěny jako podepsané UKI, a používá systemd-boot, který neumožňuje úpravu parametrů jádra, když je aktivní SBTo funguje, ale pokud vaše Secure Boot spoléhá na klíče třetích stran (například od Microsoftu), je snazší zorganizovat alternativní boot, který zachovává PCR 7, a proto... Není to nejomezující možnost.

Podepsané politiky UKI a PCR: stabilita bez ztráty bezpečnosti

Praktickým řešením, jak se vyhnout opětovné registraci při každé aktualizaci jádra, je použití UKI (Unified Kernel Image) a podepsaná politika PCRVygenerujete pár klíčů, při registraci propojíte veřejný klíč s TPM a po každé aktualizaci podepíšete svůj UKI. TPM tomuto podpisu důvěřuje a umožňuje odemknutí, i když se změní specifický hash jádra.

Nástroj systemd-measure a pomocník systemd-ukify to usnadňují: ukify balíčky kernel, initrd a cmdline do UKI (obvykle měřeno v PCR 11) a systemd-measure podepisuje politiku. S mkinitcpio lze integrovat ukify tak, aby po instalaci podpis se provede sám.

# 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

Tímto způsobem Vaše zásady zůstanou stabilní vůči změnám jádra/initrd, dokud budete UKI nadále podepisovat svým klíčem.Pokud obnovíte hesla nebo změníte sadu PCR, budete se muset znovu zaregistrovat.

Příklady měřicích řetězců se systemd

Během bootování systemd-stub a systemd-pcrphase prodlužují PCR v určitých časech. Například „enter-initrd“ je zaznamenáno v PCR 11, což umožňuje, aby odemčení bylo platné pouze v rámci initrd (snížení vektorů, kde se útočník pokouší klíč později znovu použít).

V systémech s UKI se obsah UKI měří v PCR 11; v systémech bez UKI, Jádro měří initrdy v PCR 9 a bootloader může měřit cmdline v PCR 12. Ujistěte se, že máte ve svých zásadách zahrnuty initrd a cmdline, jinak by někdo mohl zadní dveře initrd nebo bootování se škodlivým příkazem cmdline, jako je init=/bin/bash.

Skutečná rizika: studený start, detekce TPM a další

Co se může pokazit? Několik věcí, které je třeba vědět při modelování hrozeb. Útoky ze studeného startu jsou stále životaschopné: pokud je odemčení plně automatické, útočník může opakovat neomezený počet pokusů. Jasným zmírněním problému je vyžadování PIN kódu před spuštěním (PBA), čímž se sníží počet pokusů na jeden za jeden cyklus napájení.

Další kategorií je útoky sniffingem na sběrnici TPMCPU si vyžádá klíč, TPM ho odešle; pokud je odkaz odposlechnut, může dojít k úniku klíče. Za tímto účelem systemd implementuje „šifrování parametrů“, takže výměna je šifrovaná; alternativně použití fTPM/Intel PTT nebo šifrované paměti snižuje odhalení. Existují relativně dostupné veřejné demonstrace (i s mikrokontroléry), které ilustrují proveditelnost na noteboocích hlavních značek.

Objevily se také akademické a praktické zranitelnosti: Selhání TPM, chyba TPM (s výrazným dopadem na AMD) a případ bitpixie (CVE-2023-21563)To neznamená, že TPM je k ničemu, ale měli byste si udržovat firmware aktuální, rozumět svému modelu hrozeb a nevěřit mu slepě.

Stav BitLockeru proti těmto hrozbám

Ve světě Windows je nejrozšířenějším šifrováním disku BitLocker. Nyní se uvádí, že jeho výchozí konfigurace (automatické odemykání pouze s TPM) Umožňuje jak studený start, tak i sniffing kanálů TPM, protože neimplementuje šifrování parametrů ve stylu systemd. Díky tomu jsou některé firemní počítače zranitelné vůči útoku během několika minut.

Doporučení tam zní povolit ověřování před spuštěním prostřednictvím zásad/registru nebo CLI, což není pro průměrného uživatele dostatečně dostupné. Nezapomeňte také zkontrolovat, kde je uložen klíč pro obnovení: často se nachází v uživatelském účtu Microsoft, který Je to další úhel pohledu na riziko pokud není kontrolováno.

Ofenzivní/obranný trik: Nahraďte root LUKS pro vynucení hesla

Zajímavým vektorem je situace, kdy neexistuje žádné ověřování před spuštěním systému. Útočník může naklonovat skutečný oddíl LUKS, nahraďte ho jiným LUKSem se stejným UUID a heslem, které znáa spusťte počítač. Protože se měření PCR shodují, TPM uvolní klíč, ale neshoduje se s falešným LUKS, takže initrd vyzve k zadání „obnovovacího“ klíče. Zadáním hesla známého útočníkovi se váš systém spustí v initrd jako root a vy pak můžete zorganizovat krádež původního klíče (například připojením skutečné kopie přes síť a použitím systemd-cryptsetup).

Jasná zmírnění: aktivovat ověřování před spuštěním, využijte systemd-pcrphase k striktnímu navázání odemykání na fázi initrd a zvažte také měření/navázání cílového svazku LUKS (vyžaduje pečlivý návrh, aby se předešlo začarovaným kruhům).

Výběr dělení a druhého klíče: osvědčený postup

Udržujte klíč pro obnovení Je to povinné: pokud se TPM nebo základní deska pokazí, váš klíč spojený s TPM je k ničemu. LUKS umožňuje více slotů (TPM používá jeden, recovery používá druhý). Oddělení oddílů / a /home má navíc výhody: můžete použít přísné měření s TPM a/ a použít silný klíč nebo zařízení FIDO2/YubiKey pro /home, čímž se sníží celková důvěra v jeden mechanismus.

Co se stane, když aktualizujete firmware nebo jádro?

Pokud změníte firmware nebo se dotknete možností UEFI, PCR, jako například 0/1, se změní a TPM klíč neuvolní, dokud jej znovu nezaregistrujete. Pro jádro a initrd, změny jsou častéPokud nepoužíváte UKI s podepsanou politikou, každá aktualizace vás může donutit použít možnost obnovení a pozdější opětovnou registraci. S podepsaným UKI jej pouze podepíšete a tím to končí.

Poznámky a pozorování komunity

V některých populárních průvodcích k určitým distribucím se doporučuje Při použití UKI a systemd-boot vázat pouze PCR 7, spoléhající se na ochranná opatření Secure Boot a nemožnost upravovat příkazový řádek. Funguje to, ale existují rizika, pokud se spoléháte na třetí strany. V minulosti byla také zdokumentována chyba, kdy stisknutí klávesy Enter po odemčení vyvolalo obnovovací shell; je dobré udržovat verze aktuální, abyste se vyhnuli překvapením.

V letech 2025/06 byly sdíleny zajímavé komentáře: Chyba TPM nadále ovlivňuje AMD do určité míry; wiki přidaly specifické sekce o podepsaných zásadách PCR; a byl testován instalační program pro distribuci, která nabízí FDE s TPM jako experimentální funkci, s několika praktickými zádrheli (vyžadující obnovení při prvním spuštění, závislost na snapovacích souborech, šifrování dvojitého disku), což je problém, který zaslouží si hlubší audit.

V letech 2025/07 byla publikována pokračující práce zaměřená na šifrování disku ve Windows. Celkový závěr posiluje potřebu PBA a šifrování kanálu TPM., a také omezení závislosti na klíčích třetích stran v Secure Boot.

Tipy pro práci s nástroji tpm2 a systemd

Pro každodenní použití: Nainstalujte si tpm2-tools a tpm2-tss. Ve výchozím nastavení používá /dev/tpmrm0a tpm2_pcrread/tpm2_pcrextend pro testování a experimentování s PCR. Vyhněte se rozšiřování produkčních PCR o libovolná data: provádějte to v laboratořích nebo použijte pro testování PCR 16.

Při registraci pomocí systemd-cryptenroll: –tpm2-device=auto detekuje TPM; –tpm2-s-pinem přidává PBA; –tpm2-pcrs=… vyberte si PCR; –tpm2-public-key=… a –tpm2-public-key-pcrs=… aktivovat podepsanou pojistku PCR (např. vázanou na PCR 11 pro UKI). Nezapomeňte – stírací slot když chcete vyčistit předchozí slot.

Pokud nemáte TPM a systemd vás nechá čekat na bootování

Občas se po aktualizaci stane, že se služba pokusí použít TPM, i když jej váš počítač nemá viditelný, což způsobí časové limity při spuštění. Nejprve zkontrolujte, zda se neobjevuje /dev/tpm* ani položky v /sys/class/tpm.

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

Pokud není k dispozici žádný TPM, zkontrolujte soubor /etc/crypttab. nemají možnosti jako tpm2-device=autoPokud existují, odstraňte je a znovu sestavte soubor initrd. Fázi měření můžete také zakázat na počítačích bez modulu 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

Díky tomu se eliminuje zbytečné čekání, pokud vaše zařízení postrádá TPM. Pokud později povolíte TPM v systému BIOS/UEFI, odstraňte černou listinu a odmaskujte jednotku, abyste obnovili naměřené hodnoty.

Osvědčené postupy a rozhodnutí o důvěře

Někteří lidé se k TPM staví opatrně, protože je to „černá skříňka“, stejně jako samošifrovací disky. To je důvodná pochybnost. Zhodnoťte svůj model hrozeb a vyvažuje použitelnost, soukromí a údržbu. Pro mnoho lidí představuje TPM+PBA+podepsaný UKI obrovský bezpečnostní skok bez nadměrných komplikací.

Na hardwaru, který to umožňuje, přidejte šifrovaná paměť a vyhněte se spoléhání na klíče třetích stran v Secure Boot; omezte řetězec na své vlastní klíče, kdykoli je to možné. Udržujte firmware a jádro aktualizované, aby zahrnovaly zmírnění publikovaných zranitelností.

Zvládnutí operací /dev/tpm0, /dev/tpmrm0 a tpm2_pcrread/tpm2_pcr_extend otevírá dveře k měřenému bootování a robustnímu šifrování disku v Linuxu; s UKI a podepsanou politikou PCR dosáhnete provozní stability a přidání PIN kódu před bootováním vás také ochrání před praktičtějšími útoky. Klíčem je dobře vybrat PCR, často podepisovat změny a vždy si uchovávat dobrý klíč pro obnovení..

Beta verze Ubuntu 25.10 je dodávána s jádrem Linuxu 6.17.
Související článek:
Ubuntu 25.10 beta přichází s Linuxem 6.17 a klíčovými změnami