
Последњих година, TPM 2.0 модули су од хардверске мистерије постали уобичајени део сваког модерног рачунара са UEFI-јем и Secure Boot-ом. Овај чланак објашњава шта су /dev/tpm0 и /dev/tpmrm0 и како се користе tpm2_pcrread и tpm2_pcrextend. (као и његову стварну команду у tpm2-tools), као и објашњење како се оне уклапају у политике мереног покретања, шифровања диска и потписаног PCR-а у Линуксу.
Корисна документација постоји, али је раштркана по страницама упутства за систем (systemd man), уносима у вики и веома густим објавама; Овде прикупљамо све кључне информације (PCR, практичне примере, ризике и одбрану) тако да технички људи, чак и ако нису стручњаци за TPM, могу да раде са овим алатима без да се изгубе у нејасним детаљима.
Шта је TPM 2.0 и зашто би вас то могло занимати
Модул поуздане платформе (Trusted Platform Module) је безбедносни чип који се налази на вашој матичној плочи (или унутар процесора као што је fTPM/Intel PTT) и делује као безбедно складиште, генератор случајних бројева и корен поверења за систем. Пасивно је: ако га не користите, не ради ништа., али када га интегришете у ток покретања система и шифровање диска, он пружа верификацију интегритета и хардверски заштићене кључеве.
У пракси, TPM 2.0 вам омогућава два главна начина коришћења у шифровању диска: а) генерисање/чување јаког кључа и заштита његове употребе PIN-ом са закључавањем против грубе силе; б) активирање такозваног мереног покретања, где Свака компонента чизме се мери у ПЦР записима, тако да се кључ „отпакује“ само ако систем није био неовлашћено мењан (и опционо са ПИН-ом пре покретања).
/dev/tpm0 и /dev/tpmrm0: разлике и када их користити
На Линуксу ћете видети два карактерна уређаја када је доступан TPM 2.0. /dev/tpm0 је „сирови“ интерфејс TPM-аДок /dev/tpmrm0 омогућава приступ преко Управитеља ресурса (менаџер који умножава клијенте, управља сесијама и ресурсима), а tpm2-tools га препоручује у већини сценарија.
Ако нисте сигурни да ли TPM постоји или не, можете га тестирати „на топло“. Ако је /sys/class/tpm/ празно или вики команда не враћа ништа, TPM није видљив: Можда физички не постоји или је онемогућен у фирмверу.
# ¿Hay TPM 2.0?
ls /sys/class/tpm/
cat /sys/class/tpm/tpm*/tpm_version_major
# Dispositivos
ls -l /dev/tpm*
Када су оба чвора уређаја присутна, tpm2-tools ће нормално детектовати /dev/tpmrm0 и аутоматски га користити. Ако треба да присилите уређај, већина алата прихвата –tcti или користите TCTI променљиве окружења, али за уобичајене задатке то обично није потребно.
TPM PCR: Како функционишу и шта мере
Регистри конфигурације платформе су записи који чувају хешеве (обично SHA-256) стања критичних компоненти у свакој фази покретања. Иницијализују се на нулу при укључивању и могу се само „проширити“: никада не преписивати или брисати (осим у случајевима дебаговања као што је PCR 16).
Основна операција је проширење: нова_вредност = SHA256(тренутна_вредност || SHA256(подаци))Овако се мерења повезују без дозвољавања опортунистичких ресетовања. Овај образац се користи за мерење фирмвера, конфигурације, безбедног покретања, језгра, initrd-а и параметара језгра, између осталог.
На модерној опреми видећете 24 PCR-а (0–23). Најрелевантнији у UEFI покретању са systemd су:
– PCR 0: код фирмвера.
– PCR 1: конфигурација фирмвера (UEFI подешавања).
– PCR 7: Статус безбедног покретања и сертификати којима верује.
– PCR 9: initrd(s) мерено језгром.
– PCR 11: UKI (Unified Kernel Image) и фазне ознаке преко systemd-stub/systemd-pcrphase.
– PCR 12: командна линија језгра.
Читајте и проширујте PCR-ове помоћу tpm2-алата: tpm2_pcrread и tpm2_pcr_extend
У tpm2-tools-у читање се врши помоћу tpm2_pcrread и продужетак са tpm2_pcrextendПонекад ћете видети „tpm2_pcr_extend“ као концептуалну операцију проширивања, али Права команда пакета је tpm2_pcrextend.
Да се провери тренутни статус ПЦР-а СХА-КСНУМКС, једноставно је као:
# 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 са хешем произвољних података (као педагошки пример, хеш од /etc/passwd), израчунајте SHA-256 и проширите га. Запамтите: TPM не прима огромне податке, већ њихов хеш, по ограничењима и дизајну.
# 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
Ако желите да репродукујете математику проширења изван TPM-а, Спајате тренутну PCR вредност (бинарну) са новим хешем и поново примењујете SHA-256 да бисте проверили резултат.
Да ли се ПЦР може ресетовати?
Под нормалним условима, не. Филозофија је да ПЦР расте само са екстензијамаПостоји један изузетак: PCR 16 је обично резервисан за „отклањање грешака“ и може се ресетовати у одређеним токовима, али није користан као безбедносни корен ваше политике.
Измерено покретање, LUKS и systemd-cryptenroll: Склапање делова
Када интегришете TPM у шифровање диска, можете „везати“ откључавање кључа за скуп PCR-ова. Ако у тренутном покретању система ти PCR-ови имају исте вредности као када сте регистровали кључ, TPM се отпечатава и LUKS волумен се аутоматски отвара (са или без PIN-а пре покретања, у зависности од ваше конфигурације).
Ово се веома лепо ради са systemd-cryptenroll и systemd-cryptsetup. Идеја је да креирате свој волумен, региструјете TPM кључ и додате кључ за опоравак. тако да нећете бити изостављени ако се мерења промене (на пример, након ажурирања фирмвера или језгра).
# 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
Ако наметнете неслагање (на пример, намерно продужавате PCR 4), TPM више неће отпуштати кључ и мораћете да користите кључ за опоравак. Касније можете поново да региструјете TPM са новим тренутним вредностима користећи –wipe-slot=tpm2 и још једно извршавање команде systemd-cryptenroll.
Које ПЦР-ове одабрати и зашто
Што више релевантних ПЦР-ова повежете, то више површине смањујете, али ћете чешће морати да се поново региструјете након легитимних промена. Неки практични критеријуми:
– PCR 7 (Secure Boot): Требало би да буде веома стабилно ако се ваш скуп кључева не мења.
– PCR 0/1 (фирмвер и конфигурација): Ово се ретко мења; захтевају поновну регистрацију након ажурирања фирмвера или промене BIOS/UEFI.
– PCR 9/11/12 (кернел, initrd, UKI и cmdline): Ово се често мења ако не користите UKI или стабилан потпис/политику.
У неким окружењима је примећено повезивање само PCR 7, ослањајући се на Secure Boot који проверава језгро и initrd да ли су покренути као потписани UKI и користи systemd-boot који не дозвољава уређивање параметара језгра када је SB активанТо функционише, али ако ваше безбедно покретање (Secure Boot) зависи од кључева треће стране (као што је Microsoft 3rd Party), лакше је оркестрирати алтернативно покретање које чува PCR 7 и стога... То није најрестриктивнија опција.
Потписане политике UKI и PCR: стабилност без губитка безбедности
Практично решење да бисте избегли поновну регистрацију сваки пут када ажурирате кернел је коришћење UKI (Unified Kernel Image) и потписана PCR политикаГенеришете пар кључева, повезујете јавни кључ са TPM-ом приликом регистрације и потписујете свој UKI након сваког ажурирања. TPM верује том потпису и дозвољава откључавање чак и ако се промени специфични хеш језгра.
Алат systemd-measure и помоћник systemd-ukify ово олакшавају: ukify пакети kernel, initrd и cmdline у UKI (обично се мери у PCR 11) и systemd-measure потписује политику. Са mkinitcpio, ukify се може интегрисати тако да након инсталације потпис се сам извршава.
# 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
На овај начин, Ваша политика остаје стабилна у односу на промене језгра/initrd-а све док наставите да потписујете UKI својим кључем.Ако обновите лозинке или промените PCR сет, мораћете поново да се региструјете.
Примери ланаца мерења са systemd
Током покретања система, systemd-stub и systemd-pcrphase продужавају PCR-ове у одређеним временима. На пример, „enter-initrd“ је забележено у PCR 11, што омогућава да откључавање буде важеће само унутар initrd-а (смањење вектора где нападач покушава касније поново да употреби кључ).
У системима са UKI, садржај UKI се мери у PCR 11; у системима без UKI, Језгро мери initrd-ове у PCR 9 и покретачки програм може да мери командну линију у PCR 12. Уверите се да сте обухватили initrd и cmdline у својој политици, или би неко могао задња врата initrd или покретање помоћу злонамерне командне линије као што је инит=/бин/басх.
Прави ризици: хладно покретање, TPM њушкање и још много тога
Шта може поћи по злу? Неколико ствари које треба знати приликом моделирања претњи. Напади хладног покретања су и даље одрживи: ако је откључавање потпуно аутоматско, нападач може поновити неограничен број покушаја. Јасна мера ублажавања је захтевање ПИН-а пре покретања (PBA), смањујући покушаје на један по циклусу напајања.
Друга категорија је напади њушкања на TPM магистралиCPU захтева кључ, TPM га шаље; ако се линк прислушкује, кључ може бити откривен. У ту сврху, systemd имплементира „шифровање параметара“ тако да је размена шифрована; алтернативно, коришћење fTPM/Intel PTT или шифроване меморије смањује изложеност. Постоје релативно приступачне јавне демонстрације (чак и са микроконтролерима) које илуструју изводљивост на лаптоповима главних брендова.
Такође је било академских и практичних слабости: TPM-Fail, faultTPM (са значајним утицајем на AMD) и случај битпикси (CVE-2023-21563)То не значи да је TPM бескористан, али требало би да ажурирате свој фирмвер, разумете свој модел претњи и да му не верујете слепо.
Статус БитЛокера у односу на ове претње
У свету Windows-а, најраспрострањенија енкрипција диска је BitLocker. Сада је примећено да његова подразумевана конфигурација (аутоматско откључавање само са TPM-ом) Оставља врата отворена и за хладно покретање и за TPM њушкање канала, јер не имплементира шифровање параметара у стилу systemd. Због тога су одређене корпоративне рачунаре рањиве на нападе у року од неколико минута.
Препорука је да се омогући аутентификацију пре покретања путем политика/регистра или командне линије (CLI), што није довољно доступно просечном кориснику. Такође, не заборавите да проверите где се чува кључ за опоравак: често се налази на корисничком Microsoft налогу, који То је још један угао ризика ако се не контролише.
Офанзивни/дефанзивни трик: Замените LUKS root да бисте присилили своју лозинку
Постоји занимљив вектор када нема аутентификације пре покретања. Нападач може клонирати праву LUKS партицију, замени га другим LUKS-ом са истим UUID-ом и лозинком коју он зна, и покрените рачунар. Пошто се PCR мерења подударају, TPM отпушта кључ, али се не подудара са лажним LUKS-ом, па ће initrd затражити кључ за „опоравак“. Уношењем лозинке познате нападачу, ваш систем се покреће као root у initrd-у, а ви затим можете оркестрирати крађу оригиналног кључа (на пример, монтирањем праве копије преко мреже и коришћењем systemd-cryptsetup).
Јасне мере ублажавања: активирајте аутентификацију пре покретања, искористите systemd-pcrphase да бисте искључиво везали откључавање за initrd фазу и размотрите мерење/повезивање циљног LUKS волумена (захтева пажљив дизајн како би се избегли зачарани кругови).
Избор партиционисања и другог кључа: најбоља пракса
Задржи кључ за опоравак Обавезно је: ако TPM или матична плоча откажу, ваш кључ повезан са TPM-ом је бескористан. LUKS дозвољава више слотова (TPM користи један, опоравак користи други). Поред тога, одвајање партиција / и /home има предности: можете применити строго мерење са TPM-ом a/ и користите јак кључ или FIDO2/YubiKey уређај за /home, смањујући укупно поверење у један механизам.
Шта се дешава када ажурирате фирмвер или кернел?
Ако промените фирмвер или додирнете UEFI опције, PCR-ови попут 0/1 ће се променити и TPM неће отпустити кључ док се поново не региструјете. За језгро и initrd, промене су честеАко не користите UKI са потписаном полисом, свако ажурирање би вас могло приморати да користите опцију опоравка и поново се региструјете касније. Са потписаним UKI-јем, само га потпишете и то је то.
Белешке и запажања заједнице
У неким популарним водичима за одређене дистрибуције препоручује се повезује само PCR 7 кад год користи UKI и systemd-boot, ослањајући се на заштитне мере Secure Boot-а и немогућност уређивања командне линије. Ради, али постоје ризици ако се ослањате на треће стране. У прошлости је такође документована грешка где би притиском на Enter отворио љуску за опоравак након откључавања; добра је идеја да ажурирате своје верзије како бисте избегли изненађења.
Занимљиви коментари су подељени 2025/06: TPM грешка и даље утиче на AMD до извесне мере; викији су додали посебне одељке о потписаним PCR политикама; а инсталатер за дистрибуцију која нуди FDE са TPM-ом као експерименталну функцију је тестиран, са неким практичним проблемима (захтев за опоравак при првом покретању, зависност од снапова, двоструко шифровање диска), проблем који заслужује детаљнију ревизију.
Наставак рада усмерен на шифровање диска у оперативном систему Windows објављен је 2025/07. године. Општи закључак појачава потребу за PBA и шифровањем TPM канала., као и ограничавање ослањања на кључеве трећих страна у Secure Boot-у.
Савети за рад са tpm2-tools и systemd
За свакодневну употребу: Инсталирајте tpm2-tools и tpm2-tss. Подразумевано користи /dev/tpmrm0, и tpm2_pcrread/tpm2_pcrextend за тестирање и експериментисање са PCR-овима. Избегавајте проширивање продукцијских PCR-ова произвољним подацима: урадите то у лабораторијама или користите PCR 16 за тестирање.
Приликом регистрације са systemd-cryptenroll: –tpm2-device=auto детектује ТПМ; –tpm2-са-пином додаје ПБА; –tpm2-pcrs=… изаберите своје ПЦР-ове; –tpm2-public-key=… и –tpm2-public-key-pcrs=… активирајте потписану PCR полису (нпр. повезану са PCR 11 за UKI). Не заборавите – отвор за брисање када желите да очистите претходни слот.
Ако немате TPM и systemd вас тера да чекате при покретању система
Повремено, након ажурирања, сервис покушава да користи TPM иако ваш рачунар га не види, што доводи до истека времена при покретању. Прво проверите да се не појављује /dev/tpm* нити уносе у /sys/class/tpm.
# Verificación rápida
ls /dev/tpm*
ls /sys/class/tpm/
Ако нема TPM-а, проверите /etc/crypttab немају опције као што је tpm2-device=autoАко постоје, обришите их и поново изградите initrd. Такође можете онемогућити фазу мерења на рачунарима без 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
Ово елиминише непотребно чекање ако вашој опреми недостаје TPM. Ако касније омогућите TPM у BIOS-у/UEFI-ју, уклоните црну листу и демаскирајте јединицу да бисте повратили мерења.
Добре праксе и одлуке о поверењу
Неки људи су опрезни према TPM-у јер је то „црна кутија“, баш као и самошифрујући дискови. То је разумна сумња. Процените свој модел претње и балансира употребљивост, приватност и одржавање. За многе људе, TPM+PBA+потписани UKI представља огроман безбедносни скок без претераних проблема.
На хардверу који то дозвољава, додајте шифрована меморија и избегавајте ослањање на кључеве трећих страна у Secure Boot-у; ограничите ланац на сопствене кључеве кад год је то могуће. Редовно ажурирајте фирмвер и језгро како бисте укључили мере за ублажавање објављених рањивости.
Савладавање операција /dev/tpm0, /dev/tpmrm0 и tpm2_pcrread/tpm2_pcr_extend отвара врата ка мереном покретању и робусном шифровању диска у Линуксу; са UKI и потписаном PCR политиком, постижете оперативну стабилност, а додавање ПИН-а пре покретања такође вас штити од практичнијих напада. Кључ је у добром одабиру ПЦР-ова, честом потписивању промена и увек чувању доброг кључа за опоравак..