Kompletný sprievodca k /dev/tpm0, /dev/tpmrm0 a príkazom tpm2_pcrread a tpm2_pcr_extend v systéme Linux

  • TPM 2.0 umožňuje meranie bootovacích a LUKS kľúčov viazaných na PCR, ideálne s PIN kódom PBA.
  • Na správu PCR použite /dev/tpmrm0 a tpm2_pcrread/tpm2_pcrextend.
  • Podpísaná politika UKI + PCR stabilizuje aktualizácie bez straty bezpečnosti.
  • Zmiernite studený štart a sniffing pomocou PBA a šifrovania parametrov; zachovajte obnovu.

Príkazy TPM a tpm2 v systéme Linux

V posledných rokoch sa moduly TPM 2.0 stali z hardvérovej záhady bežnou súčasťou každého moderného počítača s UEFI a Secure Boot. Tento článok vysvetľuje, čo sú /dev/tpm0 a /dev/tpmrm0 a ako používať tpm2_pcrread a tpm2_pcrextend. (ako aj jeho skutočný príkaz v tpm2-tools), ako aj vysvetlenie, ako zapadajú do politík meraného bootovania, šifrovania disku a podpísanej PCR v systéme Linux.

Užitočná dokumentácia existuje, ale je roztrúsená medzi manuálovými stránkami systemd, článkami wiki a veľmi hustými príspevkami; Tu zhromažďujeme všetky kľúčové informácie (PCR, praktické príklady, riziká a obranu) aby technickí ľudia, aj keď nie sú expertmi na TPM, mohli s týmito nástrojmi pracovať bez toho, aby sa stratili v nejasných detailoch.

Čo je TPM 2.0 a prečo by vás to mohlo zaujímať

Modul dôveryhodnej platformy (Trusted Platform Module) je bezpečnostný čip, ktorý sa nachádza na základnej doske (alebo vo vnútri procesora, ako napríklad fTPM/Intel PTT) a funguje ako bezpečné úložisko, generátor náhodných čísel a koreň dôveryhodnosti systému. Je pasívny: ak ho nepoužívate, nerobí nič., ale keď ho integrujete do procesu zavádzania a šifrovania disku, poskytuje overenie integrity a hardvérovo chránené kľúče.

V praxi umožňuje TPM 2.0 dva hlavné režimy použitia pri šifrovaní disku: a) generovanie/uloženie silného kľúča a ochrana jeho použitia PIN kódom s ochranou proti hrubej sile; b) aktivácia tzv. meraného bootovania, kde Každá zložka bootovania sa meria v záznamoch PCR, takže kľúč sa „rozbalí“ iba v prípade, že systém nebol zmenený (a voliteľne s PIN kódom pred spustením).

/dev/tpm0 a /dev/tpmrm0: rozdiely a kedy ich použiť

V systéme Linux uvidíte dve znakové zariadenia, keď je k dispozícii TPM 2.0. /dev/tpm0 je „surové“ rozhranie TPMKým /dev/tpmrm0 sprístupňuje prístup cez Správcu zdrojov (správca, ktorý násobí klientov, spravuje relácie a zdroje), ktorý vo väčšine scenárov odporúča nástroj tpm2-tools.

Ak si nie ste istí, či modul TPM existuje alebo nie, môžete ho otestovať za chodu. Ak je /sys/class/tpm/ prázdny alebo príkaz wiki nič nevráti, TPM nie je viditeľný: Možno fyzicky neexistuje alebo je zakázaný vo firmvéri.

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

Keď sú prítomné oba uzly zariadenia, nástroj tpm2-tools zvyčajne zistí /dev/tpmrm0 a automaticky ho použije. Ak potrebujete vynútiť pripojenie zariadenia, väčšina nástrojov akceptuje –tcti alebo použite premenné prostredia TCTI, ale pre bežné úlohy to zvyčajne nie je potrebné.

TPM PCR: Ako fungujú a čo merajú

Registre konfigurácie platformy sú záznamy, ktoré ukladajú hash hodnoty (zvyčajne SHA-256) stavu kritických komponentov v každej fáze zavádzania. Pri zapnutí sa inicializujú na nulu a dajú sa iba „rozšíriť“.nikdy neprepisovať ani vymazávať (okrem prípadov ladenia, ako napríklad PCR 16).

Základnou operáciou je rozšírenie: nová_hodnota = SHA256(aktuálna_hodnota || SHA256(dáta))Takto sú merania prepojené bez umožnenia oportúnnych resetov. Tento vzor sa používa okrem iného na meranie firmvéru, konfigurácie, zabezpečeného spustenia, jadra, initrd a parametrov jadra.

Na moderných zariadeniach uvidíte 24 PCR (0–23). Najrelevantnejšie v bootovaní UEFI so systemd sú:
– PCR 0: kód firmvéru.
– PCR 1: konfigurácia firmvéru (nastavenia UEFI).
– PCR 7: Stav zabezpečeného spustenia a certifikáty, ktorým dôveruje.
– PCR 9: initrd(y) merané jadrom.
– PCR 11: UKI (Unified Kernel Image) a fázové značky cez systemd-stub/systemd-pcrphase.
– PCR 12: príkazový riadok jadra.

Čítanie a rozširovanie PCR pomocou nástrojov tpm2: tpm2_pcrread a tpm2_pcr_extend

V nástrojoch tpm2-tools sa čítanie vykonáva pomocou tpm2_pcrread a rozšírenie s tpm2_pcrextendNiekedy uvidíte „tpm2_pcr_extend“ označované ako koncepčná operácia rozšírenia, ale Skutočný príkaz balíka je tpm2_pcrextend.

Kontrola aktuálneho stavu PCR SHA-256, je to také jednoduché ako:

# 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

Ak chcete rozšíriť PCR o hash ľubovoľných údajov (ako pedagogický príklad, hash /etc/passwd), vypočítajte SHA-256 a rozšírte ho. Pamätajte: TPM neprijíma obrovské množstvo dát, ale ich hash., obmedzeniami a dizajnom.

# 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

Ak chcete reprodukovať matematické výpočty rozšírenia mimo TPM, Aktuálnu hodnotu PCR (binárnu) zreťazíte s novým hashom a znova použijete SHA-256 na kontrolu výsledku.

Dá sa PCR resetovať?

Za normálnych podmienok nie. Filozofia je, že PCR rastie iba s rozšíreniamiExistuje jedna výnimka: PCR 16 je zvyčajne vyhradený pre „ladenie“ a v určitých postupoch sa dá resetovať, ale nie je užitočný ako koreň zabezpečenia vašej politiky.

Merané bootovanie, LUKS a systemd-cryptenroll: Spájanie jednotlivých častí

Keď integrujete TPM do šifrovania disku, môžete „prepojiť“ odomknutie kľúča so sadou PCR. Ak majú tieto PCR v aktuálnom boote rovnaké hodnoty ako pri registrácii kľúča, TPM sa odpečati a zväzok LUKS sa automaticky otvorí (s PIN kódom pred spustením alebo bez neho, v závislosti od vašej konfigurácie).

Toto sa dá veľmi pekne urobiť pomocou systemd-cryptenroll a systemd-cryptsetup. Cieľom je vytvoriť si zväzok, zaregistrovať kľúč TPM a pridať kľúč na obnovenie. takže nezostanete bokom, ak sa merania zmenia (napríklad po aktualizácii firmvéru alebo jadra).

# 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

Ak vynútite nezrovnalosť (napríklad PCR 4 predlžujete zámerne), TPM už kľúč neuvoľní a budete musieť použiť obnovovací kľúč. Neskôr môžete TPM znova zaregistrovať s novými aktuálnymi hodnotami pomocou –wipe-slot=tpm2 a ďalšie spustenie systemd-cryptenroll.

Ktoré PCR testy si vybrať a prečo

Čím viac relevantných PCR prepojíte, tým väčšiu plochu znížite, ale tým častejšie sa budete musieť po legitímnych zmenách znova zaregistrovať. Niektoré praktické kritériá:
– PCR 7 (Secure Boot): Malo by byť veľmi stabilné, ak sa vaša sada kľúčov nemení.
– PCR 0/1 (firmvér a konfigurácia): Tieto sa zriedka menia; vyžadujú si opätovnú registráciu po aktualizácii firmvéru alebo zmene systému BIOS/UEFI.
– PCR 9/11/12 (jadro, initrd, UKI a cmdline): Tieto sa často menia, ak nepoužívate UKI alebo stabilný podpis/politiku.

V niektorých prostrediach sa pozorovalo prepojenie iba s PCR 7, pričom sa spoliehal na Secure Boot, ktorý overoval jadro a initrd, či sú spustené ako podpísané UKI, a používal systemd-boot, ktorý neumožňuje úpravu parametrov jadra, keď je SB aktívnyTo funguje, ale ak sa váš Secure Boot spolieha na kľúče tretích strán (napríklad od Microsoftu), je jednoduchšie nastaviť alternatívny boot, ktorý zachováva PCR 7, a preto... Nie je to najreštriktívnejšia možnosť.

Podpísané politiky UKI a PCR: stabilita bez straty bezpečnosti

Praktickým riešením, ako sa vyhnúť opätovnej registrácii pri každej aktualizácii jadra, je použiť UKI (Unified Kernel Image) a podpísaná politika PCRVygenerujete pár kľúčov, pri registrácii prepojíte verejný kľúč s TPM a po každej aktualizácii podpíšete svoj UKI. TPM dôveruje tomuto podpisu a umožňuje odomknutie, aj keď sa zmení konkrétny hash jadra.

Nástroj systemd-measure a pomocník systemd-ukify to uľahčujú: ukify balíčky kernel, initrd a cmdline do UKI (zvyčajne merané v PCR 11) a systemd-measure podpisuje politiku. S mkinitcpio je možné integrovať ukify tak, aby po inštalácii podpis sa vykoná 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 spôsobom Vaša politika zostáva stabilná voči zmenám jadra/initrdu, pokiaľ budete naďalej podpisovať UKI svojím kľúčom.Ak si obnovíte heslá alebo zmeníte sadu PCR, budete sa musieť znova zaregistrovať.

Príklady meracích reťazcov so systemd

Počas bootovania systemd-stub a systemd-pcrphase predlžujú PCR v určitých časoch. Napríklad „enter-initrd“ je zaznamenané v PCR 11, čo umožňuje, aby odomknutie bolo platné iba v rámci initrd (redukuje vektory, kde sa útočník pokúša kľúč neskôr znova použiť).

V systémoch s UKI sa obsah UKI meria v PCR 11; v systémoch bez UKI, Jadro meria initrdy v PCR 9 a bootloader dokáže zmerať cmdline v PCR 12. Uistite sa, že vo svojej politike máte zahrnuté initrd a cmdline, inak by niekto mohol zadné dvere initrd alebo bootovanie so škodlivým cmdline ako napríklad init=/bin/bash.

Skutočné riziká: studený štart, TPM sniffing a ďalšie

Čo sa môže pokaziť? Niekoľko vecí, ktoré treba vedieť pri modelovaní hrozieb. Útoky zo studeného štartu sú stále životaschopné: ak je odomknutie plne automatické, útočník môže opakovať neobmedzený počet pokusov. Jasným zmiernením je vyžadovanie PIN kódu pred spustením (PBA), čím sa zníži počet pokusov na jeden na jedno napájanie/vypnutie.

Ďalšou kategóriou je útoky sniffingom na zbernicu TPMCPU si vyžiada kľúč, TPM ho odošle; ak je odkaz odpočúvaný, kľúč môže byť prezradený. ​​Na tento účel systemd implementuje „šifrovanie parametrov“, aby bola výmena šifrovaná; alternatívne, použitie fTPM/Intel PTT alebo šifrovanej pamäte znižuje odhalenie. Existujú relatívne dostupné verejné demonštrácie (aj s mikrokontrolérmi), ktoré ilustrujú uskutočniteľnosť na notebookoch hlavných značiek.

Vyskytli sa aj akademické a praktické zraniteľnosti: Zlyhanie TPM, chyba TPM (s výrazným vplyvom na AMD) a prípad bitpixie (CVE-2023-21563)To neznamená, že TPM je zbytočný, ale mali by ste si udržiavať firmvér aktuálny, rozumieť modelu hrozieb a nedôverovať mu slepo.

Stav BitLockeru v porovnaní s týmito hrozbami

Vo svete Windowsu je najrozšírenejším šifrovaním disku BitLocker. V súčasnosti sa uvádza, že jeho predvolená konfigurácia (automatické odomknutie iba s TPM) Necháva otvorené dvere pre studený štart aj pre sniffing kanálov TPM, pretože neimplementuje šifrovanie parametrov v štýle systemd. Vďaka tomu sú niektoré firemné počítače zraniteľné voči útoku v priebehu niekoľkých minút.

Odporúčanie je umožniť overenie pred spustením prostredníctvom politík/registra alebo rozhrania príkazového riadka, čo nie je dostatočne dostupné bežnému používateľovi. Nezabudnite tiež skontrolovať, kde je uložený kľúč na obnovenie: často sa nachádza v používateľovom účte Microsoft, ktorý Je to ďalší uhol pohľadu na riziko ak nie je kontrolovaný.

Ofenzívny/obranný trik: Nahraďte root LUKS, aby ste si vynútili heslo

Zaujímavým vektorom je situácia, keď neexistuje žiadne overenie pred spustením systému. Útočník môže naklonovať skutočný oddiel LUKS, nahraďte ho iným LUKS s rovnakým UUID a heslom, ktoré poznáa spustite počítač. Keďže sa merania PCR zhodujú, TPM uvoľní kľúč, ale nezhoduje sa s falošným LUKS, takže initrd vyzve na zadanie „obnovovacieho“ kľúča. Zadaním hesla, ktoré útočník pozná, sa váš systém spustí ako root v initrd a vy potom môžete zorganizovať krádež pôvodného kľúča (napríklad pripojením skutočnej kópie cez sieť a použitím systemd-cryptsetup).

Jasné zmierňujúce opatrenia: aktivovať overenie pred spustením, využite systemd-pcrphase na striktné prepojenie odomykania s fázou initrd a zvážte aj meranie/prepojenie cieľového zväzku LUKS (vyžaduje si to starostlivý návrh, aby sa predišlo začarovaným kruhom).

Výber rozdelenia a druhého kľúča: osvedčený postup

udržiavať kľúč na obnovenie Je to povinné: ak sa TPM alebo základná doska pokazia, váš kľúč prepojený s TPM je zbytočný. LUKS umožňuje viacero slotov (TPM používa jeden, recovery používa druhý). Okrem toho má oddelenie oddielov / a /home výhody: môžete použiť prísne meranie s TPM a/ a použiť silný kľúč alebo zariadenie FIDO2/YubiKey pre /home, čím sa zníži celková dôvera v jeden mechanizmus.

Čo sa stane, keď aktualizujete firmvér alebo jadro?

Ak zmeníte firmvér alebo sa dotknete možností UEFI, PCR ako napríklad 0/1 sa zmenia a TPM kľúč neuvoľní, kým ho znova nezaregistrujete. Pre jadro a initrd, zmeny sú častéAk nepoužívate UKI s podpísanou politikou, každá aktualizácia vás môže prinútiť použiť možnosť obnovenia a neskôr sa znova zaregistrovať. S podpísaným UKI ho stačí podpísať a to je všetko.

Poznámky a pozorovania komunity

V niektorých populárnych sprievodcoch k určitým distribúciám sa odporúča pri použití UKI a systemd-boot viazať iba PCR 7, spoliehajúc sa na bezpečnostné opatrenia Secure Boot a nemožnosť upravovať cmdline. Funguje to, ale existujú riziká, ak sa spoliehate na tretie strany. V minulosti bola tiež zdokumentovaná chyba, kde stlačenie klávesu Enter po odomknutí vyvolalo obnovovací shell; je dobré udržiavať si verzie aktuálne, aby ste sa vyhli prekvapeniam.

V rokoch 2025/06 boli zdieľané zaujímavé komentáre: Chyba TPM naďalej ovplyvňuje AMD do istej miery; wiki pridali špecifické sekcie o podpísaných politikách PCR; a inštalátor pre distribúciu, ktorá ponúka FDE s TPM ako experimentálnu funkciu, bol testovaný s niekoľkými praktickými problémami (vyžadujúca obnovenie pri prvom spustení, závislosť od snap súborov, šifrovanie dvoch diskov), čo je problém, ktorý zaslúži si hlbšiu kontrolu.

V rokoch 2025/07 bola publikovaná pokračujúca práca zameraná na šifrovanie disku v systéme Windows. Celkový záver potvrdzuje potrebu PBA a šifrovania kanála TPM., ako aj obmedzenie spoliehania sa na kľúče tretích strán v Secure Boot.

Tipy na používanie nástrojov tpm2 a systemd

Pre každodenné použitie: Nainštalujte si tpm2-tools a tpm2-tss. Predvolene používa /dev/tpmrm0a tpm2_pcrread/tpm2_pcrextend na testovanie a experimentovanie s PCR. Vyhnite sa rozširovaniu produkčných PCR o ľubovoľné údaje: robte to v laboratóriách alebo použite PCR 16 na testovanie.

Pri registrácii pomocou systemd-cryptenroll: –tpm2-device=auto detekuje TPM; –tpm2-s-pinom pridáva PBA; –tpm2-pcrs=… vyberte si PCR; –tpm2-public-key=… a –tpm2-public-key-pcrs=… aktivovať podpísanú politiku PCR (napr. viazanú na PCR 11 pre UKI). Nezabudnite –stierací otvor keď chcete vyčistiť predchádzajúci slot.

Ak nemáte TPM a systemd vás nechá čakať pri bootovaní

Občas sa po aktualizácii služba pokúša použiť TPM, aj keď ho váš počítač nemá viditeľný, čo spôsobuje časové limity pri spustení. Najprv skontrolujte, či sa nezobrazuje /dev/tpm* ani položky v /sys/class/tpm.

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

Ak nie je k dispozícii TPM, skontrolujte súbor /etc/crypttab nemajú možnosti ako tpm2-device=autoAk existujú, odstráňte ich a znova vytvorte súbor initrd. Fázu merania môžete tiež vypnúť na počítačoch 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

Vďaka tomu sa eliminuje zbytočné čakanie, ak vaše zariadenie nemá TPM. Ak neskôr povolíte TPM v systéme BIOS/UEFI, odstráňte čiernu listinu a odmaskujte jednotku, aby ste obnovili merania.

Osvedčené postupy a rozhodnutia o dôvere

Niektorí ľudia sa obávajú TPM, pretože je to „čierna skrinka“, rovnako ako samošifrovacie disky. To sú opodstatnené pochybnosti. Posúďte svoj model hrozieb a vyvažuje použiteľnosť, súkromie a údržbu. Pre mnohých ľudí predstavuje TPM+PBA+podpísané UKI obrovský bezpečnostný skok bez nadmerných problémov.

Na hardvéri, ktorý to umožňuje, pridajte šifrovaná pamäť a vyhnite sa spoliehaniu sa na kľúče tretích strán v systéme Secure Boot; obmedzte reťazec na vlastné kľúče, kedykoľvek je to možné. Aktualizujte firmvér a jadro, aby ste zahrnuli opatrenia na zmiernenie publikovaných zraniteľností.

Zvládnutie operácií /dev/tpm0, /dev/tpmrm0 a tpm2_pcrread/tpm2_pcr_extend otvára dvere k meranému bootovaniu a robustnému šifrovaniu disku v Linuxe; s UKI a podpísanou politikou PCR dosiahnete prevádzkovú stabilitu a pridanie PIN kódu pred bootovaním vás tiež chráni pred praktickejšími útokmi. Kľúčom je dobre si vybrať PCR, často podpisovať zmeny a vždy si uchovávať dobrý kľúč na obnovenie..

Ubuntu 25.10 beta prichádza s jadrom Linuxu 6.17
Súvisiaci článok:
Ubuntu 25.10 beta prichádza s Linuxom 6.17 a kľúčovými zmenami

Pridať ako preferovaný zdroj v Google