
În ultimii ani, modulele TPM 2.0 au trecut de la a fi un mister hardware la o parte comună a oricărui computer modern cu UEFI și Secure Boot. Acest articol explică ce sunt /dev/tpm0 și /dev/tpmrm0 și cum se utilizează tpm2_pcrread și tpm2_pcrextend. (precum și comanda sa propriu-zisă în tpm2-tools), precum și explicarea modului în care se încadrează acestea în politicile de bootare măsurată, criptare a discului și PCR semnată în Linux.
Există documentație utilă, dar este împrăștiată printre paginile de manual systemd, intrările wiki și postările foarte dense; Aici adunăm toate informațiile cheie (PCR-uri, exemple practice, riscuri și măsuri de apărare) astfel încât personalul tehnic, chiar dacă nu sunt experți în TPM, să poată lucra cu aceste instrumente fără a se pierde în detalii obscure.
Ce este un TPM 2.0 și de ce ți-ar putea interesa
Un Modul de Platformă de Trăsire (Trusted Platform Module) este un cip de securitate care se află pe placa de bază (sau în interiorul procesorului, cum ar fi fTPM/Intel PTT) și acționează ca un depozit securizat, un generator de numere aleatorii și un punct de încredere pentru sistem. Este pasiv: dacă nu îl folosești, nu face nimic., dar când îl integrați în fluxul de bootare și în criptarea discului, oferă verificarea integrității și chei protejate prin hardware.
În practică, un TPM 2.0 vă permite două moduri principale de utilizare a criptării discului: a) generarea/salvarea unei chei puternice și protejarea utilizării acesteia cu un PIN cu blocare anti-brute force; b) activarea așa-numitei porniri măsurate, unde Fiecare componentă a încălțămintei este măsurată în înregistrări PCR, deci cheia este „despachetată” doar dacă sistemul nu a fost modificat (și opțional cu un cod PIN de pre-pornire).
/dev/tpm0 și /dev/tpmrm0: diferențe și când se utilizează fiecare dintre ele
Pe Linux veți vedea dispozitive cu două caractere atunci când este disponibil TPM 2.0. /dev/tpm0 este interfața „brută” a TPM-uluiÎn timp ce /dev/tpmrm0 expune accesul prin intermediul Managerului de resurse (un manager care multiplică clienții, gestionează sesiunile și resursele), fiind cel recomandat de tpm2-tools în majoritatea scenariilor.
Dacă nu sunteți sigur dacă există sau nu un TPM, îl puteți testa la cald. Dacă /sys/class/tpm/ este gol sau comanda wiki nu returnează nimic, niciun TPM nu este vizibil: Este posibil să nu existe fizic sau să fie dezactivat în firmware.
# ¿Hay TPM 2.0?
ls /sys/class/tpm/
cat /sys/class/tpm/tpm*/tpm_version_major
# Dispositivos
ls -l /dev/tpm*
Când ambele noduri ale dispozitivului sunt prezente, tpm2-tools va detecta în mod normal /dev/tpmrm0 și îl va utiliza automat. Dacă trebuie să forțați un dispozitiv, majoritatea instrumentelor acceptă –tcti sau utilizați variabile de mediu TCTI, dar pentru sarcini comune nu este de obicei necesar.
TPM PCR-uri: Cum funcționează și ce măsoară
Registrele de configurare a platformei sunt înregistrări care stochează hash-uri (de obicei SHA-256) ale stării componentelor critice la fiecare fază de pornire. Acestea sunt inițializate la zero la ciclul de pornire și pot fi doar „extinse”: nu rescrie și nu șterge niciodată (cu excepția cazurilor de depanare precum PCR 16).
Operația fundamentală este extensia: valoare_nouă = SHA256(valoare_curentă || SHA256(date))Acesta este modul în care măsurătorile sunt înlănțuite fără a permite resetări oportuniste. Acest model este utilizat pentru a măsura firmware-ul, configurația, Secure Boot, kernelul, initrd și parametrii kernelului, printre altele.
Pe echipamente moderne veți vedea 24 de PCR-uri (0–23). Cele mai relevante în bootarea UEFI cu systemd sunt:
– PCR 0: cod firmware.
– PCR 1: configurare firmware (setări UEFI).
– PCR 7: Starea Secure Boot și certificatele în care are încredere.
– PCR 9: initrd(uri) măsurat(e) de nucleu.
– PCR 11: UKI (Unified Kernel Image) și marcaje de fază prin systemd-stub/systemd-pcrphase.
– PCR 12: linie de comandă a kernelului.
Citiți și extindeți PCR-uri cu instrumentele tpm2: tpm2_pcrread și tpm2_pcr_extend
În tpm2-tools citirea se face cu tpm2_pcrread și extensia cu tpm2_pcrextendVeți vedea uneori „tpm2_pcr_extend” menționat ca operațiune conceptuală de extindere, dar Comanda propriu-zisă a suitei este tpm2_pcrextend.
Pentru a verifica starea actuală a PCR-urilor SHA-256, este la fel de simplu ca:
# 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
Pentru a extinde un PCR cu hash-ul unor date arbitrare (ca exemplu pedagogic, hash-ul fișierului /etc/passwd), calculați SHA-256 și extindeți-l. Rețineți: TPM-ul nu primește date gigantice, ci hash-ul acestora, prin limite și proiectare.
# 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
Dacă doriți să reproduceți matematica extensiei în afara TPM-ului, Concatenați valoarea PCR curentă (binară) cu noul hash și aplici din nou SHA-256 pentru a verifica rezultatul.
Se poate reseta un PCR?
În condiții normale, nu. Filosofia este că un PCR crește doar odată cu extensiile.Există o excepție: PCR 16 este de obicei rezervat pentru „depanare” și poate fi resetat în anumite fluxuri, dar nu este util ca rădăcină de securitate a politicii dumneavoastră.
Boot măsurat, LUKS și systemd-cryptenroll: Punând piesele cap la cap
Când integrați TPM-ul în criptarea discului, puteți „lega” deblocarea cheii la un set de PCR-uri. Dacă în bootarea curentă acele PCR-uri au aceleași valori ca atunci când ați înregistrat cheia, TPM-ul este desigilat și volumul LUKS se deschide automat (cu sau fără un cod PIN de pre-pornire, în funcție de configurație).
Acest lucru se face foarte bine cu systemd-cryptenroll și systemd-cryptsetup. Ideea este să vă creați volumul, să înscrieți cheia TPM și să adăugați o cheie de recuperare. astfel încât să nu fii exclus dacă măsurătorile se modifică (de exemplu, după actualizarea firmware-ului sau a kernelului).
# 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
Dacă forțați o discrepanță (de exemplu, Extinzi PCR 4 intenționat), TPM-ul nu va mai elibera cheia și va trebui să utilizați cheia de recuperare. Ulterior, puteți reînregistra TPM-ul cu noile valori actuale utilizând –wipe-slot=tpm2 și o altă execuție a comenzii systemd-cryptenroll.
Ce PCR-uri să alegeți și de ce
Cu cât legăți mai multe PCR-uri relevante, cu atât reduci mai multă suprafață, dar cu atât mai des va trebui să te reînregistrezi după modificări legitime. Câteva criterii practice:
– PCR 7 (Secure Boot): Ar trebui să fie foarte stabil dacă setul de chei nu se schimbă.
– PCR 0/1 (firmware și configurare): Acestea se modifică rar; necesită reînregistrare după actualizarea firmware-ului sau modificarea BIOS-ului/UEFI.
– PCR 9/11/12 (kernel, initrd, UKI și cmdline): Acestea se schimbă frecvent dacă nu utilizați UKI sau o semnătură/politică stabilă.
În unele medii s-a observat că se leagă doar PCR 7, bazându-se pe Secure Boot care verifică kernelul și initrd dacă sunt pornite ca UKI semnate și utilizând systemd-boot, care nu permite editarea parametrilor kernelului când SB este activAsta funcționează, dar dacă Secure Boot se bazează pe chei terțe (cum ar fi Microsoft 3rd Party), este mai ușor să orchestrezi o bootare alternativă care păstrează PCR 7 și, prin urmare, Nu este cea mai restrictivă opțiune.
Politicile UKI și PCR semnate: stabilitate fără pierderea securității
O soluție practică pentru a evita reînregistrarea de fiecare dată când actualizați kernelul este să utilizați UKI (Unified Kernel Image) și o politică PCR semnatăGenerați o pereche de chei, legați cheia publică de TPM la înregistrare și semnați UKI-ul după fiecare actualizare. TPM-ul are încredere în acea semnătură și permite deblocarea chiar dacă hash-ul specific al kernelului se modifică.
Instrumentul systemd-measure și instrumentul auxiliar systemd-ukify simplifică acest lucru: ukify împachetează kernelul, initrd și cmdline în UKI (de obicei măsurat în PCR 11) și systemd-measure semnează politica. Cu mkinitcpio, ukify poate fi integrat astfel încât post-instalare semnătura se execută singură.
# 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
În acest fel, Politica dumneavoastră rămâne stabilă în cazul modificărilor kernel/initrd atâta timp cât continuați să semnați UKI-ul cu cheia dumneavoastră.Dacă vă reînnoiți parolele sau vă schimbați setul PCR, va trebui să vă reînregistrați.
Exemple de lanțuri de măsurare cu systemd
În timpul pornirii, systemd-stub și systemd-pcrphase extind PCR-urile la momente specifice. De exemplu, „enter-initrd” este înregistrat în PCR 11, permițând ca o deblocare să fie validă doar în cadrul initrd-ului (reducând vectorii în care un atacator încearcă să reutilizeze cheia ulterior).
În sistemele cu UKI, conținutul de UKI este măsurat în PCR 11; în sistemele fără UKI, nucleul măsoară initrd-urile în PCR 9 și bootloader-ul poate măsura cmdline în PCR 12. Asigurați-vă că includeți initrd și cmdline în politica dvs., altfel cineva ar putea ureche din spate initrd-ul sau bootarea cu o linie de comandă malițioasă, cum ar fi init=/bin/bash.
Riscuri reale: pornire la rece, scanare TPM și multe altele
Ce poate merge prost? Câteva lucruri de știut atunci când modelezi amenințări. Atacuri de pornire la rece sunt încă viabile: dacă deblocarea este complet automată, un atacator poate repeta un număr nelimitat de încercări. Atenuarea clară este solicitarea unui cod PIN pre-pornire (PBA), reducând încercările la una per ciclu de alimentare.
O altă categorie este atacuri de sniffing asupra magistralei TPMCPU-ul solicită cheia, TPM-ul o trimite; dacă se atinge legătura, cheia poate fi divulgată. În acest scop, systemd implementează „criptarea parametrilor” astfel încât schimbul să fie criptat; alternativ, utilizarea fTPM/Intel PTT sau a memoriei criptate reduce expunerea. Există demonstrații publice relativ accesibile (chiar și cu microcontrolere) care ilustrează fezabilitatea pe laptopuri de mărci importante.
Au existat, de asemenea, vulnerabilități academice și practice: TPM-Eșec, eroareTPM (cu impact notabil asupra AMD) și cazul bitpixie (CVE-2023-21563)Asta nu înseamnă că TPM-ul este inutil, dar ar trebui să vă mențineți firmware-ul actualizat, să înțelegeți modelul de amenințare și să nu aveți încredere orbește în el.
Starea BitLocker împotriva acestor amenințări
În lumea Windows, cea mai răspândită metodă de criptare a discurilor este BitLocker. Acum s-a observat că configurația implicită (deblocare automată doar cu TPM) Lasă calea deschisă atât pentru pornirea la rece, cât și pentru detectarea canalelor TPM, deoarece nu implementează criptarea parametrilor în stil systemd. Acest lucru face ca anumite computere corporative să fie vulnerabile la atacuri în câteva minute.
Recomandarea de acolo este de a permite autentificare pre-pornire prin politici/registru sau CLI, ceva ce nu este suficient de expus utilizatorului obișnuit. De asemenea, nu uitați să verificați unde este stocată cheia de recuperare: aceasta se află adesea în contul Microsoft al utilizatorului, care Este un alt unghi de risc dacă nu este controlată.
Truc ofensiv/defensiv: Înlocuiți rădăcina LUKS pentru a vă forța parola
Există un vector interesant atunci când nu există autentificare pre-boot. Un atacator poate clona partiția LUKS reală, înlocuiește-l cu un alt LUKS cu același UUID și o parolă pe care o cunoaște...și porniți computerul. Deoarece măsurătorile PCR se potrivesc, TPM eliberează cheia, dar aceasta nu se potrivește cu LUKS-ul fals, așa că initrd va solicita cheia de „recuperare”. Prin introducerea parolei cunoscute atacatorului, sistemul dvs. rulează ca root în initrd și apoi puteți orchestra furtul cheii originale (de exemplu, prin montarea copiei reale în rețea și utilizarea systemd-cryptsetup).
Atenuări clare: activați autentificarea pre-pornire, utilizați systemd-pcrphase pentru a lega deblocarea strict de faza initrd și luați în considerare și măsurarea/legarea volumului țintă LUKS (necesită o proiectare atentă pentru a evita cercurile vicioase).
Alegerea partiționării și a celei de-a doua chei: cele mai bune practici
menține o cheie de recuperare Este obligatoriu: dacă TPM-ul sau placa de bază se defectează, cheia legată de TPM este inutilă. LUKS permite sloturi multiple (TPM folosește unul, recuperarea folosește altul). În plus, separarea partițiilor / și /home are avantaje: puteți aplica măsurare strictă cu TPM a/ și să folosească o cheie puternică sau un dispozitiv FIDO2/YubiKey pentru /home, reducând încrederea generală într-un singur mecanism.
Ce se întâmplă când actualizezi firmware-ul sau kernel-ul?
Dacă modificați firmware-ul sau atingeți opțiunile UEFI, PCR-urile precum 0/1 se vor schimba, iar TPM-ul nu va elibera cheia până când nu vă reînregistrați. Pentru kernel și initrd, schimbările sunt frecventeDacă nu utilizați un UKI cu o poliță semnată, fiecare actualizare v-ar putea obliga să utilizați opțiunea de recuperare și să vă reînregistrați ulterior. Cu un UKI semnat, pur și simplu îl semnați și asta e tot.
Note și observații comunitare
În unele ghiduri populare ale anumitor distribuții s-a recomandat leagă doar PCR 7 ori de câte ori folosești UKI și systemd-boot, bazându-se pe măsurile de siguranță ale Secure Boot și pe incapacitatea de a edita linia de comandă. Funcționează, dar există riscuri dacă vă bazați pe terțe părți. De asemenea, a fost documentată în trecut o eroare în care apăsarea tastei Enter afișa o shell de recuperare după deblocare; este o idee bună să mențineți versiunile actualizate pentru a evita surprizele.
Comentarii interesante au fost împărtășite în 2025/06: Eroarea TPM continuă să afecteze AMD într-o oarecare măsură; wiki-urile au adăugat secțiuni specifice despre politicile PCR semnate; și a fost testat programul de instalare pentru o distribuție care oferă FDE cu TPM ca funcție experimentală, cu unele probleme practice (necesitatea recuperării la prima pornire, dependența de snaps-uri, criptarea discului dublu), o problemă care merită un audit mai amănunțit.
O continuare axată pe criptarea discului în Windows a fost publicată în 2025/07. Concluzia generală întărește necesitatea PBA și a criptării canalului TPM., precum și limitarea dependenței de chei terțe în Secure Boot.
Sfaturi operaționale cu tpm2-tools și systemd
Pentru utilizare zilnică: Instalați tpm2-tools și tpm2-tss. Folosește /dev/tpmrm0 în mod implicitși tpm2_pcrread/tpm2_pcrextend pentru testarea și experimentarea cu PCR-uri. Evitați extinderea PCR-urilor de producție cu date arbitrare: faceți acest lucru în laboratoare sau utilizați PCR 16 pentru testare.
La înscrierea cu systemd-cryptenroll: –tpm2-device=auto detectează TPM; –tpm2-cu-pin adaugă PBA; –tpm2-pcrs=… selectați-vă PCR-urile; –tpm2-public-key=… și –tpm2-public-key-pcrs=… activați o politică PCR semnată (de exemplu, legată de PCR 11 pentru UKI). Nu uitați –fantă de ștergere când doriți să curățați un slot anterior.
Dacă nu ai TPM și systemd te pune să aștepți la bootare
Ocazional, după o actualizare, un serviciu încearcă să utilizeze TPM-ul chiar dacă mașina nu îl are vizibil, ceea ce provoacă expirare la pornire. Mai întâi verificați dacă nu apare /dev/tpm* nici intrări în /sys/class/tpm.
# Verificación rápida
ls /dev/tpm*
ls /sys/class/tpm/
Dacă nu există TPM, verificați /etc/crypttab nu am opțiuni precum tpm2-device=autoDacă există, ștergeți-le și reconstruiți initrd-ul. De asemenea, puteți dezactiva faza de măsurare pe computerele fără 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
Acest lucru elimină așteptarea inutilă dacă echipamentul dumneavoastră nu dispune de TPM. Dacă ulterior activați TPM în BIOS/UEFI, eliminați lista neagră și demascați unitatea pentru a recupera măsurătorile.
Bune practici și decizii de încredere
Unii oameni sunt precauți în privința TPM deoarece este o „cutie neagră”, la fel ca discurile cu autocriptare. Aceasta este o îndoială rezonabilă. Evaluează-ți modelul de amenințare și echilibrează utilizabilitatea, confidențialitatea și întreținerea. Pentru mulți oameni, TPM+PBA+UKI semnat reprezintă un salt uriaș în materie de securitate, fără dificultăți excesive.
Pe hardware-ul care permite acest lucru, adăugați memorie criptată și evitați să vă bazați pe chei terțe în Secure Boot; limitați lanțul la propriile chei ori de câte ori este posibil. Mențineți firmware-ul și kernel-ul actualizate pentru a încorpora măsuri de atenuare a vulnerabilităților publicate.
Stăpânirea operațiunilor /dev/tpm0, /dev/tpmrm0 și tpm2_pcrread/tpm2_pcr_extend deschide calea către bootare măsurată și criptare robustă a discului în Linux; cu UKI și o politică PCR semnată, obțineți stabilitate operațională, iar adăugarea unui cod PIN pre-boot vă protejează și de atacuri mai practice. Cheia este să alegi bine PCR-urile, să semnezi des ce se schimbă și să păstrezi întotdeauna o cheie de recuperare bună..