
Viime vuosina TPM 2.0 -moduulit ovat muuttuneet laitteistomysteeristä yleiseksi osaksi mitä tahansa nykyaikaista tietokonetta, jossa on UEFI ja Secure Boot. Tässä artikkelissa selitetään, mitä /dev/tpm0 ja /dev/tpmrm0 ovat ja miten tpm2_pcrread- ja tpm2_pcrextend-tiedostoja käytetään. (sekä sen varsinaisen komennon tpm2-tools-tiedostossa), sekä selitetään, miten ne sopivat mitattuun käynnistykseen, levyn salaukseen ja allekirjoitettuihin PCR-käytäntöihin Linuxissa.
Hyödyllistä dokumentaatiota on olemassa, mutta se on hajallaan systemd:n ​​man-sivuilla, wiki-merkinnöissä ja erittäin tiheissä viesteissä; Kokoamme tähän kaikki keskeiset tiedot (PCR:t, käytännön esimerkit, riskit ja puolustuskeinot) jotta tekniset ihmiset, vaikka he eivät olisikaan TPM-asiantuntijoita, voivat työskennellä näiden työkalujen kanssa eksymättä hämärän peittoon.
Mikä on TPM 2.0 ja miksi se saattaa kiinnostaa sinua
Trusted Platform Module on emolevyllä (tai suorittimen sisällä, kuten fTPM/Intel PTT) sijaitseva suojauspiiri, joka toimii suojattuna tallennuspaikkana, satunnaislukugeneraattorina ja järjestelmän luottamuksen juurena. Se on passiivinen: jos sitä ei käytetä, se ei tee mitään., mutta kun integroit sen käynnistysprosessiin ja levyn salaukseen, se tarjoaa eheyden varmennuksen ja laitteistosuojatut avaimet.
Käytännössä TPM 2.0 mahdollistaa kaksi pääkäyttötapaa levysalauksessa: a) vahvan avaimen luominen/tallentaminen ja sen käytön suojaaminen PIN-koodilla, jossa on raakaa voimaa estävä lukitus; b) niin sanotun mitatun käynnistyksen aktivointi, jossa Jokainen käynnistyskomponentti mitataan PCR-tietueissa, joten avain "puretaan" vain, jos järjestelmää ei ole peukaloitu (ja valinnaisesti käynnistystä edeltävällä PIN-koodilla).
/dev/tpm0 ja /dev/tpmrm0: erot ja milloin kutakin käytetään
Linuxissa näet kaksi merkkilaitetta, kun TPM 2.0 on saatavilla. /dev/tpm0 on TPM:n "raaka" rajapintaVaikka /dev/tpmrm0 mahdollistaa pääsyn resurssienhallinnan kautta (hallintaohjelma, joka moninkertaistaa asiakkaita, hallitsee istuntoja ja resursseja), jota tpm2-tools suosittelee useimmissa tilanteissa.
Jos et ole varma, onko TPM:ää olemassa vai ei, voit tehdä sen käyttötestin. Jos /sys/class/tpm/ on tyhjä tai wiki-komento ei palauta mitään, TPM:ää ei ole näkyvissä: Sitä ei ehkä ole fyysisesti olemassa tai se on voitu poistaa käytöstä laiteohjelmistossa.
# ÂżHay TPM 2.0?
ls /sys/class/tpm/
cat /sys/class/tpm/tpm*/tpm_version_major
# Dispositivos
ls -l /dev/tpm*
Kun molemmat laitesolmut ovat läsnä, tpm2-tools yleensä tunnistaa /dev/tpmrm0:n ja käyttää sitä automaattisesti. Jos sinun täytyy pakottaa laite, useimmat työkalut hyväksyvät –tcti-ominaisuuden tai käytä TCTI-ympäristömuuttujia, mutta yleisissä tehtävissä se ei yleensä ole tarpeen.
TPM PCR:t: Miten ne toimivat ja mitä ne mittaavat
Alustan kokoonpanorekisterit ovat tietueita, jotka tallentavat kriittisten komponenttien tilan tiivisteitä (yleensä SHA-256) kussakin käynnistysvaiheessa. Ne alustetaan nollaan käynnistysjakson aikana ja niitä voidaan vain "pidentää".: älä koskaan kirjoita uudelleen tai poista (paitsi debug-tapauksissa, kuten PCR 16).
Perusoperaatio on laajennus: uusi_arvo = SHA256(nykyinen_arvo || SHA256(data))Näin mittaukset ketjutetaan yhteen sallimatta satunnaisia ​​nollauksia. Tätä mallia käytetään muun muassa laiteohjelmiston, kokoonpanon, suojatun käynnistyksen, ytimen, initrd:n ja ytimen parametrien mittaamiseen.
Nykyaikaisissa laitteissa näet 24 PCR:ää (0–23). Systemd:llä UEFI-käynnistyksessä olennaisimpia ovat:
– PCR 0: laiteohjelmistokoodi.
– PCR 1: laiteohjelmiston konfigurointi (UEFI-asetukset).
– PCR 7: Secure Bootin tila ja siihen luotetut varmenteet.
– PCR 9: ytimen mittaama(t) initrd(it).
– PCR 11: UKI (Unified Kernel Image) ja vaihemerkinnät systemd-stub/systemd-pcrphase-komennon kautta.
– PCR 12: ytimen komentorivi.
Lue ja pidennä PCR-reittejä tpm2-työkaluilla: tpm2_pcrread ja tpm2_pcr_extend
Tpm2-työkaluissa lukeminen tehdään seuraavasti: tpm2_pcrread ja laajennus, jossa on tpm2_pcrextendJoskus näet ”tpm2_pcr_extend”-funktion viittaavan laajennuksen käsitteelliseen operaatioon, mutta Varsinainen sviittikomento on tpm2_pcrextend.
Tarkistaaksesi PCR-reseptien nykyisen tilan SHA-256, se on yhtä yksinkertaista kuin:
# 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
PCR:n laajentamiseksi mielivaltaisen datan tiivisteellä (pedagogisena esimerkkinä /etc/passwd-tiedoston tiivisteellä) lasketaan SHA-256 ja laajenna sitä. Muista: TPM ei vastaanota jättimäistä dataa, mutta sen tiivisteen, rajoitusten ja suunnittelun mukaan.
# 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
Jos haluat toistaa laajennusmatematiikan TPM:n ulkopuolella, Yhdistät nykyisen PCR-arvon (binäärisen) uuteen hajautusarvoon ja käytät SHA-256:ta uudelleen tarkistaaksesi tuloksen.
Voiko PCR-testin nollata?
Normaalioloissa ei. Filosofia on, että PCR kasvaa vain laajennusten myötäYksi poikkeus on: PCR 16 on tyypillisesti varattu "virheenkorjaukseen" ja se voidaan nollata tietyissä työnkuluissa, mutta se ei ole hyödyllinen käytäntösi suojauspäätasona.
Mitattu käynnistys, LUKS ja systemd-cryptenroll: Palasten kokoaminen yhteen
Kun integroit TPM:n levysalaukseen, voit "sidota" avaimen lukituksen avaamisen PCR-joukkoon. Jos nykyisessä käynnistyksessä näillä PCR-koodeilla on samat arvot kuin avaimen rekisteröinnin yhteydessä, TPM-suojaus poistetaan ja LUKS-taltio avataan automaattisesti (käynnistystä edeltävällä PIN-koodilla tai ilman sitä kokoonpanostasi riippuen).
Tämä tehdään erittäin hyvin systemd-cryptenroll- ja systemd-cryptsetup-komennoilla. Ajatuksena on luoda oma taltio, rekisteröidä TPM-avain ja lisätä palautusavain. jotta et jää paitsi, jos mittaukset muuttuvat (esimerkiksi laiteohjelmiston tai ytimen päivityksen jälkeen).
# 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
Jos pakotat ristiriidan (esim. laajennat PCR 4:ää tarkoituksella), TPM ei enää vapauta avainta ja sinun on käytettävä palautusavainta. Voit myöhemmin rekisteröidä TPM:n uudelleen uusilla nykyisillä arvoilla käyttämällä –wipe-slot=tpm2 ja toinen systemd-cryptenroll-komennon suoritus.
Mitkä PCR-testit valita ja miksi
Mitä enemmän relevantteja PCR-reittejä linkität, sitä enemmän pinta-alaa pienennät, mutta sitä useammin joudut rekisteröimään uudelleen laillisten muutosten jälkeen. Joitakin käytännön kriteerejä:
– PCR 7 (Secure Boot): Pitäisi olla erittäin vakaa, jos avainsarjasi ei muutu.
– PCR 0/1 (laiteohjelmisto ja kokoonpano): Nämä muuttuvat harvoin; ne vaativat uudelleenrekisteröinnin laiteohjelmiston päivittämisen tai BIOSin/UEFI:n muuttamisen jälkeen.
– PCR 9/11/12 (ydin, initrd, UKI ja cmdline): Nämä muuttuvat usein, jos et käytä UKI:ta tai vakaata allekirjoitusta/käytäntöä.
Joissakin ympäristöissä on nähty linkittävän vain PCR 7:n, luottaen Secure Bootin varmistavan ytimen ja initrd:n, jos ne käynnistetään allekirjoitettuna UKI:na, ja käyttämällä systemd-boot-komentoa, joka ei salli ytimen parametrien muokkaamista, kun SB on aktiivinenSe toimii, mutta jos Secure Boot käyttää kolmannen osapuolen avaimia (kuten Microsoft 3rd Party), on helpompi järjestää vaihtoehtoinen käynnistys, joka säilyttää PCR 7:n ja siten Se ei ole rajoittavin vaihtoehto.
UKI:n ja PCR:n käytännöt allekirjoitettu: vakautta menettämättä turvallisuutta
Käytännöllinen ratkaisu välttää uudelleenrekisteröintiä joka kerta, kun päivität ytimen, on käyttää UKI (Unified Kernel Image) ja allekirjoitettu PCR-käytäntöLuot avainparin, sidot julkisen avaimen TPM:ään rekisteröitymisen yhteydessä ja allekirjoitat UKI:n jokaisen päivityksen jälkeen. TPM luottaa tähän allekirjoitukseen ja sallii lukituksen avaamisen, vaikka tietty ytimen tiiviste muuttuisi.
Systemd-measure-työkalu ja systemd-ukify-apuohjelma tekevät tästä helppoa: ukify pakkaa kernel-, initrd- ja cmdline-tiedostot UKI-muotoon (yleensä mitattuna PCR 11:ssä) ja systemd-measure allekirjoittaa käytännön. mkinitcpion avulla ukify voidaan integroida niin, että asennuksen jälkeen allekirjoitus suorittaa itsensä.
# 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ällä tavoin, Käytäntösi pysyy vakaana ytimen/initrd:n muutoksia vastaan ​​niin kauan kuin jatkat UKI:n allekirjoittamista avaimellasi.Jos uusit salasanasi tai muutat PCR-sarjaasi, sinun on rekisteröidyttävä uudelleen.
Esimerkkejä mittausketjuista systemd:n ​​avulla
Käynnistyksen aikana systemd-stub ja systemd-pcrphase pidentävät PCR:iä tiettyinä aikoina. Esimerkiksi ”enter-initrd” tallennetaan PCR 11:een, jolloin lukituksen avaaminen on voimassa vain initrd:n sisällä (vähentää vektoreita, joissa hyökkääjä yrittää käyttää avainta uudelleen myöhemmin).
UKI-järjestelmissä UKI-pitoisuus mitataan PCR 11:ssä; järjestelmissä ilman UKI:ta ydin mittaa initrd:t PCR 9:ssä ja käynnistyslataaja voi mitata cmdline-komennon PCR 12:ssa. Varmista, että käytäntösi kattaa initrdin ja cmdline-komennot, tai joku voi takaoven korva initrd tai käynnistys haitallisella cmdline-komennolla, kuten init=/bin/bash.
Todelliset riskit: kylmäkäynnistys, TPM-nuuskinta ja paljon muuta
Mikä voi mennä pieleen? Muutamia asioita, jotka on hyvä tietää uhkia mallinnettaessa. Kylmäkäynnistyshyökkäykset ovat edelleen käyttökelpoisia: jos lukituksen avaaminen on täysin automaattinen, hyökkääjä voi toistaa yrityksiä rajattomasti. Selkeä lievennys on vaatia käynnistystä edeltävä PIN-koodi (PBA), mikä vähentää yritykset yhteen virrankatkaisua kohden.
Toinen kategoria on nuuskimishyökkäykset TPM-väyläänCPU pyytää avainta, TPM lähettää sen; jos linkkiä napautetaan, avain voi vuotaa. Tätä varten systemd toteuttaa "parametrien salauksen", jotta tiedonvaihto salataan; vaihtoehtoisesti fTPM/Intel PTT:n tai salatun muistin käyttö vähentää altistumista. On olemassa suhteellisen edullisia julkisia demonstraatioita (jopa mikrokontrollereilla), jotka havainnollistavat toteutettavuutta tärkeimpien merkkien kannettavissa tietokoneissa.
On ollut myös akateemisia ja käytännön haavoittuvuuksia: TPM-virhe, vikaTPM (merkittävä vaikutus AMD:hen) ja tapaus bitpixie (CVE-2023-21563)Tämä ei tarkoita, että TPM olisi hyödytön, mutta sinun tulisi pitää laiteohjelmistosi ajan tasalla, ymmärtää uhkamallisi eikä sokeasti luottaa siihen.
BitLockerin tila näitä uhkia vastaan
Windows-ympäristössä yleisimmin käytetty levysalaus on BitLocker. Nyt on huomattu, että oletuskokoonpano (automaattinen lukituksen avaus vain TPM:n kanssa) Se jättää oven auki sekä kylmäkäynnistykselle että TPM-kanavien nuuskinnalle, koska se ei toteuta systemd-tyylistä parametrien salausta. Tämä tekee tietyistä yritystietokoneista alttiita hyökkäyksille muutamassa minuutissa.
Suositus on ottaa käyttöön käynnistystä edeltävä todennus käytäntöjen/rekisterin tai komentorivikäyttöliittymän kautta, mikä ei ole riittävästi saatavilla keskivertokäyttäjälle. Muista myös tarkistaa, missä palautusavain on tallennettu: se sijaitsee usein käyttäjän Microsoft-tilillä, joka Se on toinen riskin kulma jos sitä ei hallita.
Hyökkäys-/puolustustemppu: Korvaa LUKS-pääkäyttäjä pakottaaksesi salasanasi
Mielenkiintoinen vektori on olemassa, kun käynnistystä edeltävää todennusta ei ole. Hyökkääjä voi kloonata oikean LUKS-osion, korvaa se toisella LUKS:lla, jolla on sama UUID ja salasana, jonka hän tietääja käynnistä tietokone. Koska PCR-mittaukset täsmäävät, TPM vapauttaa avaimen, mutta se ei vastaa väärennettyä LUKS-avainta, joten initrd pyytää "palautusavainta". Antamalla hyökkääjän tietämän salasanan järjestelmäsi toimii root-käyttäjänä initrd:ssä, ja voit sitten järjestää alkuperäisen avaimen varastamisen (esimerkiksi liittämällä oikean kopion verkon kautta ja käyttämällä systemd-cryptsetup-komentoa).
Selkeät lievennykset: aktivoi käynnistystä edeltävä todennus, hyödynnä systemd-pcrphase-käskyä lukituksen avaamisen sitomiseksi tiukasti initrd-vaiheeseen ja harkitse myös kohde-LUKS-tilavuuden mittaamista/sitomista (vaatii huolellista suunnittelua noidankehän välttämiseksi).
Osioinnin ja toisen avaimen valinta: parhaat käytännöt
ylläpitää palautusavain Se on pakollista: jos TPM tai emolevy lakkaa toimimasta, TPM:ään sidottu avaimesi on hyödytön. LUKS sallii useita paikkoja (TPM käyttää yhtä, palautus toista). Lisäksi /- ja /home-osioiden erottamisella on etuja: voit käyttää tarkka mittaus TPM:n avulla ja käytä vahvaa avainta tai FIDO2/YubiKey-laitetta /home-osoitteelle, mikä vähentää yleistä luottamusta yhteen mekanismiin.
Mitä tapahtuu, kun päivität firmwaren tai ytimen?
Jos muutat laiteohjelmistoa tai kosketat UEFI-asetuksia, PCR:t, kuten 0/1, muuttuvat eikä TPM vapauta avainta ennen kuin rekisteröidyt uudelleen. Varten ydin ja initrd, muutokset ovat useinJos et käytä UKI-käyttöoikeutta allekirjoitetun käytännön kanssa, jokainen päivitys voi pakottaa sinut käyttämään palautusvaihtoehtoa ja rekisteröitymään uudelleen myöhemmin. Allekirjoitetun UKI-käyttöoikeuden kanssa sinun tarvitsee vain allekirjoittaa se, ja siinä kaikki.
Yhteisön muistiinpanoja ja havaintoja
Joissakin suosituissa tiettyjen jakelujen oppaissa on suositeltu sido vain PCR 7:ää aina, kun käytät UKI:ta ja systemd-bootia, luottaen Secure Bootin suojaustoimintoihin ja kyvyttömyyteen muokata cmdline-komentoa. Se toimii, mutta kolmansien osapuolten palveluihin luottamiseen liittyy riskejä. Aiemmin on myös dokumentoitu virhe, jossa Enterin painaminen toi esiin palautuskuoren lukituksen avaamisen jälkeen; on hyvä pitää versiot ajan tasalla yllätysten välttämiseksi.
Mielenkiintoisia kommentteja jaettiin vuonna 2025/06: TPM-vika vaikuttaa edelleen AMD:hen jossain määrin; wikit ovat lisänneet erityisiä osioita allekirjoitetuista PCR-käytännöistä; ja kokeellisena ominaisuutena FDE:tä ja TPM:ää tarjoavan jakelun asennusohjelmaa testattiin, ja siinä ilmeni joitakin käytännön ongelmia (palautuksen vaatiminen ensimmäisen käynnistyksen yhteydessä, riippuvuus napsautustiedostoista, kaksoislevyn salaus), mikä on ongelma, joka ansaitsee perusteellisemman tarkastuksen.
Windowsin levyjen salaukseen keskittynyt jatko-osa julkaistiin vuonna 2025/07. Yleinen johtopäätös vahvistaa PBA:n ja TPM-kanavan salaamisen tarvetta.sekä rajoittamalla kolmannen osapuolen avainten käyttöä Secure Bootissa.
Käyttövinkkejä tpm2-toolsin ja systemd:n ​​kanssa
Jokapäiväiseen käyttöön: Asenna tpm2-tools ja tpm2-tss. Käyttää oletuksena /dev/tpmrm0-tiedostoaja tpm2_pcrread/tpm2_pcrextend PCR-testaukseen ja -kokeisiin. Vältä tuotanto-PCR-reaktioiden laajentamista mielivaltaisilla tiedoilla: tee tämä laboratorioissa tai käytä PCR 16:ta testaukseen.
Kun rekisteröidyt systemd-cryptenrollin kautta: –tpm2-laite=automaattinen havaitsee TPM:n; –tpm2-pinnillä lisää PBA:n; –tpm2-pcrs=… valitse PCR-reseptorisi; –tpm2-public-key=… ja –tpm2-public-key-pcrs=… aktivoi allekirjoitettu PCR-käytäntö (esim. sidottu PCR 11:een UKI:ssa). Älä unohda –pyyhintäpaikka kun haluat puhdistaa edellisen paikan.
Jos sinulla ei ole TPM:ää ja systemd odottaa käynnistystä
Päivityksen jälkeen palvelu yrittää joskus käyttää TPM:ää, vaikka se ei olisi näkyvissä koneesi järjestelmässä, mikä aiheuttaa aikakatkaisuja käynnistyksen yhteydessä. Tarkista ensin, ettei /dev/tpm*-tiedostoa näy eikä merkintöjä tiedostossa /sys/class/tpm.
# Verificación rápida
ls /dev/tpm*
ls /sys/class/tpm/
Jos TPM:ää ei ole, tarkista tiedosto /etc/crypttab. ei ole vaihtoehtoja kuten tpm2-device=autoJos ne ovat olemassa, poista ne ja rakenna initrd uudelleen. Voit myös poistaa mittausvaiheen käytöstä tietokoneissa, joissa ei ole 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
Tämä poistaa tarpeettoman odottelun, jos laitteistossasi ei ole TPM:ää. Jos otat TPM:n myöhemmin käyttöön BIOSissa/UEFI:ssa, poista musta lista ja paljasta laitteen peite mittausten palauttamiseksi.
Hyvät käytännöt ja luottamuspäätökset
Jotkut ihmiset suhtautuvat TPM:ään varauksella, koska se on "musta laatikko", aivan kuten itsesalaavat levyt. Tämä on perusteltu epäilys. Arvioi uhkamallisi ja tasapainottaa käytettävyyden, yksityisyyden ja ylläpidon. Monille ihmisille TPM + PBA + allekirjoitettu UKI on valtava tietoturvaharppaus ilman liiallista kitkaa.
Lisää laitteistoon, joka sen sallii salattu muisti ja vältä kolmansien osapuolten avainten käyttöä Secure Bootissa; rajaa ketju omiin avaimiisi aina kun mahdollista. Pidä laiteohjelmisto ja ydin ajan tasalla, jotta ne sisältävät julkaistujen haavoittuvuuksien lieventämistoimenpiteet.
/dev/tpm0-, /dev/tpmrm0- ja tpm2_pcrread/tpm2_pcr_extend-toimintojen hallinta avaa oven mitatulle käynnistykselle ja vankalle levyjen salaukselle Linuxissa; UKI:n ja allekirjoitetun PCR-käytännön avulla saavutat toiminnallisen vakauden, ja käynnistystä edeltävän PIN-koodin lisääminen suojaa sinua myös käytännöllisemmiltä hyökkäyksiltä. Tärkeintä on valita palautusavaimet huolellisesti, allekirjoittaa usein muuttuvat tiedostot ja pitää aina hyvä palautusavainta..