
Pēdējos gados TPM 2.0 moduļi no aparatūras noslēpuma ir kļuvuši par jebkura mūsdienu datora ar UEFI un Secure Boot standarta sastāvdaļu. Šajā rakstā ir paskaidrots, kas ir /dev/tpm0 un /dev/tpmrm0, un kā lietot tpm2_pcrread un tpm2_pcrextend. (kā arī tā faktisko komandu tpm2-tools), kā arī paskaidrojumu par to, kā tie iederas mērītajā sāknēšanas, diska šifrēšanas un parakstītajās PCR politikās Linux sistēmā.
Noderīga dokumentācija pastāv, taču tā ir izkaisīta starp systemd rokasgrāmatas lapām, wiki ierakstiem un ļoti blīviem ierakstiem; Šeit mēs apkopojam visu svarīgāko informāciju (PCR, praktiskus piemērus, riskus un aizsardzības pasākumus) lai tehniskie cilvēki, pat ja viņi nav TPM eksperti, varētu strādāt ar šiem rīkiem, neapmaldoties neskaidrās detaļās.
Kas ir TPM 2.0 un kāpēc tas jums varētu interesēt
Uzticamas platformas modulis ir drošības mikroshēma, kas atrodas jūsu mātesplatē (vai centrālā procesora iekšpusē, piemēram, fTPM/Intel PTT) un darbojas kā droša krātuve, nejaušo skaitļu ģenerators un sistēmas uzticamības sakne. Tas ir pasīvs: ja to nelieto, tas neko nedara., bet, integrējot to sāknēšanas plūsmā un diska šifrēšanā, tas nodrošina integritātes pārbaudi un ar aparatūru aizsargātas atslēgas.
Praksē TPM 2.0 disku šifrēšanā piedāvā divus galvenos lietošanas režīmus: a) spēcīgas atslēgas ģenerēšanu/saglabāšanu un tās lietošanas aizsardzību ar PIN kodu ar pretbrute force bloķēšanu; b) tā sauktās mērītās sāknēšanas aktivizēšanu, kur Katra zābaka sastāvdaļa tiek mērīta PCR ierakstos, tāpēc atslēga tiek “atvērta” tikai tad, ja sistēma nav tikusi manipulēta (un pēc izvēles ar pirms sāknēšanas PIN kodu).
/dev/tpm0 un /dev/tpmrm0: atšķirības un kad katru no tiem lietot
Operētājsistēmā Linux redzēsiet divas rakstzīmju ierīces, kad būs pieejama TPM 2.0. /dev/tpm0 ir TPM “neapstrādātā” saskarneKamēr /dev/tpmrm0 nodrošina piekļuvi, izmantojot resursu pārvaldnieku (pārvaldnieks, kas pavairo klientus, pārvalda sesijas un resursus), ko vairumā scenāriju iesaka tpm2-tools.
Ja neesat pārliecināts, vai TPM pastāv vai nē, varat to testēt karstā veidā. Ja /sys/class/tpm/ ir tukšs vai wiki komanda neatgriež neko, TPM nav redzams: tas, iespējams, fiziski nepastāv vai ir atspējots programmaparatūrā.
# ¿Hay TPM 2.0?
ls /sys/class/tpm/
cat /sys/class/tpm/tpm*/tpm_version_major
# Dispositivos
ls -l /dev/tpm*
Ja ir abi ierīču mezgli, tpm2-tools parasti nosaka /dev/tpmrm0 un izmanto to automātiski. Ja nepieciešams piespiest ierīci darboties, lielākā daļa rīku akceptē –tcti vai izmantot TCTI vides mainīgos, taču bieži sastopamiem uzdevumiem tas parasti nav nepieciešams.
TPM PCR: Kā tie darbojas un ko tie mēra
Platformas konfigurācijas reģistri ir ieraksti, kuros katrā sāknēšanas fāzē tiek glabāti kritisko komponentu stāvokļa heši (parasti SHA-256). Ieslēgšanas cikla laikā tie tiek inicializēti uz nulli, un tos var tikai "pagarināt".nekad nepārrakstīt un nedzēst (izņemot atkļūdošanas gadījumus, piemēram, PCR 16).
Pamatdarbība ir paplašinājums: jaunā_vērtība = SHA256(pašreizējā_vērtība || SHA256(dati))Tādā veidā mērījumi tiek savienoti ķēdē, nepieļaujot oportūnistiskas atiestatīšanas. Šis modelis tiek izmantots, lai mērītu programmaparatūru, konfigurāciju, drošās sāknēšanas (Secure Boot), kodola, initrd un kodola parametrus, kā arī citus parametrus.
Modernās iekārtās jūs redzēsiet 24 PCR (0–23). Visatbilstošākie UEFI sāknēšanas procesā ar systemd ir:
– PCR 0: programmaparatūras kods.
– PCR 1: programmaparatūras konfigurācija (UEFI iestatījumi).
– PCR 7: drošās sāknēšanas statuss un sertifikāti, kuriem tā uzticas.
– PCR 9: kodola izmērītie initrdi.
– PCR 11: UKI (vienotais kodola attēls) un fāzes atzīmes, izmantojot systemd-stub/systemd-pcrphase.
– PCR 12: kodola komandrinda.
PCR lasīšana un paplašināšana ar tpm2 rīkiem: tpm2_pcrread un tpm2_pcr_extend
Tpm2 rīkā nolasīšana tiek veikta ar tpm2_pcrread un pagarinājums ar tpm2_pcrextendDažreiz “tpm2_pcr_extend” tiks dēvēts par paplašināšanas konceptuālo darbību, taču Faktiskā komplekta komanda ir tpm2_pcrextend.
Lai pārbaudītu PCR pašreizējo statusu SHA-256, tas ir tik vienkārši, kā:
# 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
Lai paplašinātu PCR ar patvaļīgu datu hešu (kā pedagoģisku piemēru, /etc/passwd hešu), aprēķiniet SHA-256 un paplašiniet to. Atcerieties: TPM nesaņem milzīgus datus, bet gan to jaucējkodu (hash)., pēc ierobežojumiem un dizaina.
# 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
Ja vēlaties reproducēt paplašinājuma matemātiku ārpus TPM, Jūs apvienojat pašreizējo PCR vērtību (bināro) ar jauno jaucējkodu. un jūs vēlreiz lietojat SHA-256, lai pārbaudītu rezultātu.
Vai PCR var atiestatīt?
Normālos apstākļos nē. Filozofija ir tāda, ka PCR aug tikai ar paplašinājumiem.Ir viens izņēmums: PCR 16 parasti ir rezervēts “atkļūdošanai” un to var atiestatīt noteiktās plūsmās, taču tas nav noderīgs kā jūsu politikas drošības sakne.
Izmērītā sāknēšana, LUKS un systemd-cryptenroll: Salikšana kopā
Integrējot TPM diska šifrēšanā, atslēgas atbloķēšanu var “saistīt” ar PCR kopu. Ja pašreizējā sāknēšanas reizē šiem PCR ir tādas pašas vērtības kā atslēgas reģistrēšanas laikā, TPM tiek atvērts un LUKS sējums tiek automātiski atvērts (ar vai bez pirms sāknēšanas PIN koda atkarībā no konfigurācijas).
Tas tiek ļoti labi paveikts ar systemd-cryptenroll un systemd-cryptsetup. Ideja ir izveidot savu sējumu, reģistrēt TPM atslēgu un pievienot atkopšanas atslēgu. lai jūs nepaliktu nepamanīts, ja mainās mērījumi (piemēram, pēc programmaparatūras vai kodola atjaunināšanas).
# 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
Ja jūs piespiežat neatbilstību (piemēram, jūs PCR 4 pagarināt apzināti), TPM vairs neatbrīvos atslēgu, un jums būs jāizmanto atkopšanas atslēga. Vēlāk varat atkārtoti reģistrēt TPM ar jaunajām pašreizējām vērtībām, izmantojot –wipe-slot=tpm2 un vēl viena systemd-cryptenroll izpilde.
Kuras PCR metodes izvēlēties un kāpēc
Jo vairāk atbilstošu PCR jūs saistāt, jo lielāku virsmas laukumu jūs samazināt, bet jo biežāk jums būs jāpārreģistrējas pēc likumīgām izmaiņām. Daži praktiski kritēriji:
– PCR 7 (droša sāknēšana): Vajadzētu būt ļoti stabilam, ja jūsu atslēgu komplekts nemainās.
– PCR 0/1 (programmatūra un konfigurācija): Tie mainās reti; pēc programmaparatūras atjaunināšanas vai BIOS/UEFI maiņas tie ir jāreģistrē atkārtoti.
– PCR 9/11/12 (kodols, initrd, UKI un cmdline): Tie bieži mainās, ja neizmantojat UKI vai stabilu parakstu/politiku.
Dažās vidēs ir novērots, ka tas saista tikai PCR 7, paļaujoties uz Secure Boot, kas pārbauda kodolu un initrd, ja tie tiek palaisti kā parakstīti UKI, un izmantojot systemd-boot, kas neļauj rediģēt kodola parametrus, kad SB ir aktīvsTas darbojas, bet, ja jūsu drošā sāknēšana balstās uz trešo pušu atslēgām (piemēram, Microsoft 3rd Party), ir vieglāk organizēt alternatīvu sāknēšanu, kas saglabā PCR 7 un tādējādi Tā nav visierobežojošākā iespēja.
UKI un PCR parakstītā politika: stabilitāte, nezaudējot drošību
Praktisks risinājums, lai izvairītos no atkārtotas reģistrācijas katru reizi, kad atjaunināt kodolu, ir izmantot UKI (vienotais kodola attēls) un parakstīta PCR politikaJūs ģenerējat atslēgu pāri, reģistrējoties piesaistāt publisko atslēgu TPM un pēc katra atjauninājuma parakstāt savu UKI. TPM uzticas šim parakstam un ļauj atbloķēt pat tad, ja mainās konkrētais kodola jaucējkods.
Systemd-measure rīks un systemd-ukify palīgs to padara vienkāršu: ukify pakotnē kodolu, initrd un cmdline UKI formātā (parasti mērīts PCR 11) un systemd-measure paraksta politiku. Ar mkinitcpio var integrēt ukify, lai pēc instalēšanas paraksts izpildās pats.
# 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ādā veidā Jūsu politika paliek stabila pret kodola/initrd izmaiņām, ja vien turpināt parakstīt UKI ar savu atslēgu.Ja atjaunojat paroles vai maināt PCR komplektu, jums būs jāreģistrējas atkārtoti.
Mērījumu ķēžu piemēri ar systemd
Palaišanas laikā systemd-stub un systemd-pcrphase noteiktā laikā pagarina PCR. Piemēram, “enter-initrd” tiek ierakstīts PCR 11., ļaujot atbloķēšanai būt derīgai tikai initrd ietvaros (samazinot vektorus, kuros uzbrucējs mēģina atkārtoti izmantot atslēgu vēlāk).
Sistēmās ar UKI UKI saturu mēra ar PCR 11; sistēmās bez UKI kodols mēra initrds PCR 9 vidē un sāknēšanas ielādētājs var izmērīt cmdline PCR 12. Pārliecinieties, vai jūsu politikā ir iekļauti initrd un cmdline, pretējā gadījumā kāds varētu aizmugurējā auss initrd vai boot ar ļaunprātīgu cmdline, piemēram, init=/bin/bash.
Reāli riski: aukstā palaišana, TPM šifrēšana un citi
Kas var noiet greizi? Vairākas lietas, kas jāzina, modelējot draudus. Aukstās palaišanas uzbrukumi joprojām ir dzīvotspējīgas: ja atbloķēšana ir pilnībā automātiska, uzbrucējs var atkārtot neierobežotu skaitu mēģinājumu. Skaidrs risinājums ir pieprasīt pirms sāknēšanas PIN kodu (PBA), samazinot mēģinājumus līdz vienam katrā ieslēgšanas/izslēgšanas ciklā.
Vēl viena kategorija ir sniffing uzbrukumi TPM kopneiCentrālais procesors pieprasa atslēgu, TPM to nosūta; ja saite tiek noklausīta, atslēga var tikt nopludināta. Šim nolūkam systemd ievieš "parametru šifrēšanu", lai apmaiņa tiktu šifrēta; alternatīvi, izmantojot fTPM/Intel PTT vai šifrētu atmiņu, tiek samazināta atklāsmju skaits. Ir samērā pieejamas publiskas demonstrācijas (pat ar mikrokontrolleriem), kas ilustrē tās iespējamību lielāko zīmolu klēpjdatoros.
Ir bijušas arī akadēmiskas un praktiskas ievainojamības: TPM kļūme, kļūmeTPM (ar ievērojamu ietekmi uz AMD) un lieta bitpixie (CVE-2023-21563)Tas nenozīmē, ka TPM ir bezjēdzīgs, taču jums vajadzētu regulāri atjaunināt savu programmaparatūru, izprast savu apdraudējumu modeli un neakli tam uzticēties.
BitLocker statuss pret šiem draudiem
Windows vidē visplašāk izmantotā disku šifrēšana ir BitLocker. Tagad ir atzīmēts, ka tā noklusējuma konfigurācija (automātiska atbloķēšana tikai ar TPM) Tas pieļauj gan aukstās palaišanas, gan TPM kanālu pārtveršanas iespējas, jo neīsteno systemd stila parametru šifrēšanu. Tas padara noteiktus korporatīvos datorus neaizsargātus pret uzbrukumiem dažu minūšu laikā.
Ieteikums ir iespējot pirms sāknēšanas autentifikācija izmantojot politikas/reģistru vai komandrindas saskarni (CLI), kas nav pietiekami pieejama vidusmēra lietotājam. Tāpat atcerieties pārbaudīt, kur tiek glabāta atkopšanas atslēga: tā bieži atrodas lietotāja Microsoft kontā, kas Tas ir vēl viens riska aspekts ja netiek kontrolēts.
Uzbrukuma/aizsardzības triks: nomainiet LUKS sakni, lai piespiestu paroli
Pastāv interesants vektors, ja nav pirms sāknēšanas autentifikācijas. Uzbrucējs var klonēt īsto LUKS nodalījumu, nomainiet to ar citu LUKS ar tādu pašu UUID un paroli, ko viņš zinaun palaidiet datoru. Tā kā PCR mērījumi sakrīt, TPM atbrīvo atslēgu, bet tā nesakrīt ar viltoto LUKS, tāpēc initrd pieprasīs "atkopšanas" atslēgu. Ievadot uzbrucējam zināmo paroli, jūsu sistēma darbojas initrd kā root lietotājs, un pēc tam varat organizēt oriģinālās atslēgas zādzību (piemēram, pievienojot īsto kopiju tīklā un izmantojot systemd-cryptsetup).
Skaidri mazināšanas pasākumi: aktivizēt pirms sāknēšanas autentifikāciju, izmantojiet systemd-pcrphase, lai atbloķēšanu stingri saistītu ar initrd fāzi, un apsveriet arī mērķa LUKS apjoma mērīšanu/saistīšanu (nepieciešama rūpīga izstrāde, lai izvairītos no apburtajiem lokiem).
Sadalīšanas un otrās atslēgas izvēle: labākā prakse
Saglabāt atkopšanas atslēga Tas ir obligāti: ja TPM vai mātesplate sabojājas, jūsu atslēga, kas piesaistīta TPM, vairs nav noderīga. LUKS atļauj vairākus slotus (TPM izmanto vienu, atkopšana — citu). Turklāt / un /home nodalījumu atdalīšanai ir priekšrocības: varat lietot stingra mērīšana ar TPM a/ un izmantojiet spēcīgu atslēgu vai FIDO2/YubiKey ierīci domēnam /home, samazinot kopējo uzticēšanos vienam mehānismam.
Kas notiek, atjauninot programmaparatūru vai kodolu?
Ja maināt programmaparatūru vai pieskaraties UEFI opcijām, PCR, piemēram, 0/1, mainīsies, un TPM neatbrīvos atslēgu, kamēr nereģistrēsities atkārtoti. Par kodols un initrd, izmaiņas ir biežasJa neizmantojat UKI ar parakstītu politiku, katrs atjauninājums var piespiest jūs izmantot atkopšanas opciju un vēlāk atkārtoti reģistrēties. Ar parakstītu UKI jūs to vienkārši parakstāt, un viss.
Kopienas piezīmes un novērojumi
Dažās populārās noteiktu izplatījumu rokasgrāmatās tas ir ieteikts saistīt tikai PCR 7, kad tiek izmantots UKI un systemd-boot, paļaujoties uz drošās sāknēšanas drošības pasākumiem un nespēju rediģēt komandrindu. Tas darbojas, taču pastāv riski, ja paļaujaties uz trešo pušu pakalpojumiem. Iepriekš ir dokumentēta arī kļūda, kad, nospiežot taustiņu Enter, pēc atbloķēšanas tika atvērts atkopšanas apvalks; ieteicams atjaunināt versijas, lai izvairītos no pārsteigumiem.
Interesanti komentāri tika kopīgoti 2025./06. gadā: TPM kļūme turpina ietekmēt AMD zināmā mērā; wiki ir pievienojušas īpašas sadaļas par parakstītajām PCR politikām; un tika pārbaudīta instalētāja versija izplatīšanai, kas piedāvā FDE ar TPM kā eksperimentālu funkciju, ar dažām praktiskām problēmām (nepieciešama atkopšana pirmajā palaišanas reizē, atkarība no snaps, dubultā diska šifrēšana), kas ir problēma, kas ir pelnījis padziļinātāku auditu.
Turpinājums par disku šifrēšanu operētājsistēmā Windows tika publicēts 2025./07. gadā. Kopējais secinājums apstiprina PBA un TPM kanāla šifrēšanas nepieciešamību., kā arī ierobežojot paļaušanos uz trešo pušu atslēgām drošajā sāknēšanas režīmā.
Darbības padomi ar tpm2-tools un systemd
Ikdienas lietošanai: instalējiet tpm2-tools un tpm2-tss. Pēc noklusējuma izmanto /dev/tpmrm0un tpm2_pcrread/tpm2_pcrextend testēšanai un eksperimentēšanai ar PCR. Izvairieties paplašināt ražošanas PCR ar patvaļīgiem datiem: dariet to laboratorijās vai testēšanai izmantojiet PCR 16.
Reģistrējoties, izmantojot systemd-cryptenroll: –tpm2-device=automātiski nosaka TPM; –tpm2 ar tapu pievieno PBA; –tpm2-pcrs=… izvēlieties savus PCR; –tpm2-public-key=… un –tpm2-public-key-pcrs=… aktivizēt parakstītu PCR politiku (piemēram, saistītu ar PCR 11 UKI gadījumā). Neaizmirstiet –wipe-slot ja vēlaties iztīrīt iepriekšējo slotu.
Ja jums nav TPM un systemd liek gaidīt sāknēšanas laikā
Reizēm pēc atjaunināšanas pakalpojums mēģina izmantot TPM, pat ja jūsu ierīcē tas nav redzams, izraisot taimautus sāknēšanas laikā. Vispirms pārbaudiet, vai nav redzams /dev/tpm* nedz arī ierakstus failā /sys/class/tpm.
# Verificación rápida
ls /dev/tpm*
ls /sys/class/tpm/
Ja TPM nav, pārbaudiet savu /etc/crypttab failu. nav tādu opciju kā tpm2-device=autoJa tādi pastāv, izdzēsiet tos un izveidojiet savu initrd no jauna. Varat arī atspējot mērīšanas fāzi datoros bez 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
Tas novērš nevajadzīgu gaidīšanu, ja jūsu iekārtai nav TPM. Ja vēlāk BIOS/UEFI iespējojat TPM, noņemiet melno sarakstu un atmaskojiet ierīci, lai atgūtu mērījumus.
Laba prakse un uzticības lēmumi
Daži cilvēki baidās no TPM, jo tā ir "melnā kaste", tāpat kā paššifrējošie diski. Šas šaubas ir pamatotas. Novērtējiet savu apdraudējumu modeli un līdzsvaro lietojamību, privātumu un uzturēšanu. Daudziem cilvēkiem TPM+PBA+parakstīts UKI ir milzīgs drošības lēciens bez pārmērīgas berzes.
Uz aparatūras, kas to atļauj, pievienojiet šifrēta atmiņa un izvairieties no paļaušanās uz trešo pušu atslēgām drošā sāknēšanas režīmā; kad vien iespējams, ierobežojiet ķēdi līdz savām atslēgām. Regulāri atjauniniet programmaparatūru un kodolu, lai iekļautu publicēto ievainojamību mazināšanas pasākumus.
/dev/tpm0, /dev/tpmrm0 un tpm2_pcrread/tpm2_pcr_extend operāciju apgūšana paver durvis uz mērītu sāknēšanas procesu un stabilu disku šifrēšanu operētājsistēmā Linux; ar UKI un parakstītu PCR politiku jūs panākat darbības stabilitāti, un pirms sāknēšanas PIN pievienošana arī pasargā jūs no praktiskākiem uzbrukumiem. Svarīgi ir labi izvēlēties PCR, parakstīt bieži maināmos failus un vienmēr glabāt labu atkopšanas atslēgu..