
W ostatnich latach moduły TPM 2.0 przestały być tajemnicą sprzętową i stały się powszechnie dostępnym elementem każdego nowoczesnego komputera z UEFI i funkcją Secure Boot. W tym artykule wyjaśniono, czym są /dev/tpm0 i /dev/tpmrm0 oraz jak używać tpm2_pcrread i tpm2_pcrextend. (oraz jego faktyczne polecenie w tpm2-tools), a także wyjaśnienie, w jaki sposób wpisują się one w zasady mierzonego rozruchu, szyfrowania dysku i podpisanego PCR w systemie Linux.
Przydatna dokumentacja istnieje, lecz jest rozproszona na stronach podręcznika systemd, wpisach wiki i bardzo gęstych postach; Tutaj zbieramy wszystkie najważniejsze informacje (PCR, praktyczne przykłady, ryzyka i obrony) dzięki czemu osoby techniczne, nawet jeśli nie są ekspertami w dziedzinie TPM, mogą korzystać z tych narzędzi, nie gubiąc się w niejasnych szczegółach.
Czym jest TPM 2.0 i dlaczego może Cię to zainteresować
Trusted Platform Module to układ zabezpieczający, który znajduje się na płycie głównej (lub wewnątrz procesora, jak fTPM/Intel PTT) i pełni funkcję bezpiecznego magazynu, generatora liczb losowych i źródła zaufania dla systemu. Jest pasywny: jeśli go nie używasz, nic nie robi., ale jeśli zintegrujesz go z procesem rozruchu i szyfrowaniem dysku, zapewni weryfikację integralności i klucze chronione sprzętowo.
W praktyce moduł TPM 2.0 umożliwia dwa główne tryby korzystania z szyfrowania dysku: a) generowanie/zapisywanie silnego klucza i zabezpieczanie jego użycia kodem PIN z blokadą antybrutalną; b) aktywowanie tzw. rozruchu mierzonego, w którym Każdy element buta jest mierzony w rekordach PCR, więc klucz jest „rozpakowywany” tylko wtedy, gdy system nie został naruszony (i opcjonalnie z kodem PIN wprowadzonym przed uruchomieniem).
/dev/tpm0 i /dev/tpmrm0: różnice i kiedy używać każdego z nich
W systemie Linux zobaczysz urządzenia dwuznakowe, jeśli dostępny jest moduł TPM 2.0. /dev/tpm0 to „surowy” interfejs modułu TPMPodczas /dev/tpmrm0 udostępnia dostęp przez Menedżera zasobów (menedżer, który mnoży klientów, zarządza sesjami i zasobami), rekomendowany przez tpm2-tools w większości scenariuszy.
Jeśli nie masz pewności, czy moduł TPM istnieje, możesz go przetestować pod kątem wysokiej temperatury. Jeśli /sys/class/tpm/ jest pusty lub polecenie wiki nie zwraca niczego, nie widać modułu TPM: może on nie istnieć fizycznie lub być wyłączony w oprogramowaniu sprzętowym.
# ¿Hay TPM 2.0?
ls /sys/class/tpm/
cat /sys/class/tpm/tpm*/tpm_version_major
# Dispositivos
ls -l /dev/tpm*
Gdy obecne są oba węzły urządzeń, tpm2-tools zazwyczaj wykrywa /dev/tpmrm0 i automatycznie go używa. Jeśli musisz wymusić działanie urządzenia, większość narzędzi akceptuje –tcti lub użyj zmiennych środowiskowych TCTI, ale przy typowych zadaniach zwykle nie jest to konieczne.
PCR TPM: Jak działają i co mierzą
Rejestry konfiguracji platformy to rekordy, w których przechowywane są skróty (zwykle SHA-256) stanu najważniejszych komponentów w każdej fazie rozruchu. Są one inicjowane do zera podczas cyklu włączania zasilania i można je jedynie „rozszerzyć”: nigdy nie przepisuj ani nie usuwaj (poza przypadkami debugowania, takimi jak PCR 16).
Podstawową operacją jest rozszerzenie: nowa_wartość = SHA256(bieżąca_wartość || SHA256(dane))W ten sposób pomiary są łączone ze sobą, co eliminuje ryzyko przypadkowego resetu. Ten wzorzec służy między innymi do pomiaru oprogramowania sprzętowego, konfiguracji, bezpiecznego rozruchu, jądra, initrd i parametrów jądra.
Na nowoczesnym sprzęcie można zobaczyć 24 PCR (0–23). Najbardziej istotne w przypadku rozruchu UEFI z systemd są::
– PCR 0: kod oprogramowania sprzętowego.
– PCR 1: konfiguracja oprogramowania sprzętowego (ustawienia UEFI).
– PCR 7: Status bezpiecznego rozruchu i zaufane certyfikaty.
– PCR 9: initrd(y) mierzone przez jądro.
– PCR 11: UKI (Unified Kernel Image) i znaczniki faz za pośrednictwem systemd-stub/systemd-pcrphase.
– PCR 12: wiersz poleceń jądra.
Odczyt i rozszerzanie reakcji PCR za pomocą narzędzi tpm2: tpm2_pcrread i tpm2_pcr_extend
W narzędziach tpm2 odczyt wykonuje się za pomocą tpm2_pcrread i rozszerzenie z tpm2_pcrextendCzasami można spotkać się z określeniem „tpm2_pcr_extend” jako z operacją koncepcyjną rozszerzania, ale Rzeczywiste polecenie pakietu to tpm2_pcrextend.
Aby sprawdzić aktualny status PCR-ów SHA-256jest to tak proste, jak:
# 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
Aby rozszerzyć PCR o skrót dowolnych danych (jako przykład edukacyjny: skrót /etc/passwd), oblicz SHA-256 i rozszerz go. Pamiętaj: moduł TPM nie otrzymuje ogromnych danych, lecz ich skrót, ze względu na ograniczenia i cel.
# 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
Jeśli chcesz odtworzyć matematykę rozszerzeń poza TPM, Łączysz bieżącą wartość PCR (binarną) z nowym hashem i ponownie stosujesz algorytm SHA-256, aby sprawdzić wynik.
Czy PCR można zresetować?
W normalnych warunkach - nie. Filozofia opiera się na założeniu, że PCR rośnie tylko wraz z rozszerzeniamiIstnieje jeden wyjątek: PCR 16 jest zwykle zarezerwowany do „debugowania” i można go zresetować w niektórych przepływach, ale nie nadaje się jako główny element zabezpieczeń polityki.
Measured Boot, LUKS i systemd-cryptenroll: łączenie elementów w całość
Po zintegrowaniu modułu TPM z szyfrowaniem dysku można „powiązać” klucz odblokowujący z zestawem PCR. Jeżeli w bieżącym rozruchu te PCR-y mają takie same wartości jak w momencie rejestracji klucza, moduł TPM zostaje odpieczętowany, a wolumin LUKS zostaje automatycznie otwarty (z lub bez kodu PIN przed uruchomieniem, zależnie od konfiguracji).
Można to zrobić bardzo sprawnie za pomocą systemd-cryptenroll i systemd-cryptsetup. Pomysł polega na utworzeniu woluminu, zarejestrowaniu klucza TPM i dodaniu klucza odzyskiwania. dzięki czemu nie zostaniesz pominięty, jeśli pomiary ulegną zmianie (np. po aktualizacji oprogramowania sprzętowego lub jądra).
# 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
Jeżeli wymusisz rozbieżność (np. celowo wydłużasz PCR 4), moduł TPM nie będzie już zwalniał klucza i konieczne będzie użycie klucza odzyskiwania. Później możesz ponownie zarejestrować moduł TPM z nowymi bieżącymi wartościami za pomocą –wipe-slot=tpm2 i kolejne wykonanie systemd-cryptenroll.
Które PCR wybrać i dlaczego
Im więcej odpowiednich PCR połączysz, tym większą powierzchnię zmniejszysz, ale tym częściej będziesz musiał dokonywać ponownej rejestracji po wprowadzeniu uzasadnionych zmian. Kilka praktycznych kryteriów:
– PCR 7 (Bezpieczny rozruch): Powinno być bardzo stabilne, jeśli zestaw kluczy się nie zmieni.
– PCR 0/1 (oprogramowanie sprzętowe i konfiguracja): Te informacje zmieniają się rzadko; wymagają ponownej rejestracji po aktualizacji oprogramowania sprzętowego lub zmianie BIOS-u/UEFI.
– PCR 9/11/12 (jądro, initrd, UKI i cmdline): Te informacje zmieniają się często, jeśli nie używasz UKI lub stabilnego podpisu/polityki.
W niektórych środowiskach zauważono łączenie tylko PCR 7, polegając na Secure Boot weryfikującym jądro i initrd, jeśli są uruchamiane jako podpisane UKI i używając systemd-boot, który nie pozwala na edycję parametrów jądra, gdy SB jest aktywnyTo działa, ale jeśli Twój Bezpieczny rozruch opiera się na kluczach stron trzecich (takich jak klucze firm trzecich firmy Microsoft), łatwiej jest zorganizować alternatywny rozruch, który zachowa klucz PCR 7, a zatem To nie jest najbardziej restrykcyjna opcja.
Podpisano polityki UKI i PCR: stabilność bez utraty bezpieczeństwa
Praktycznym rozwiązaniem pozwalającym uniknąć ponownej rejestracji przy każdej aktualizacji jądra jest użycie UKI (Unified Kernel Image) i podpisana polityka PCRGenerujesz parę kluczy, wiążesz klucz publiczny z modułem TPM podczas rejestracji i podpisujesz swój UKI po każdej aktualizacji. Moduł TPM ufa temu podpisowi i zezwala na odblokowanie nawet w przypadku zmiany konkretnego skrótu jądra.
Narzędzie systemd-measure i pomocnik systemd-ukify ułatwiają to zadanie: pakiety ukify kernel, initrd i cmdline do UKI (zwykle mierzone w PCR 11) i systemd-measure podpisuje politykę. Z mkinitcpio można zintegrować ukify, dzięki czemu po instalacji podpis wykonuje się sam.
# 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
W ten sposób Twoja polityka pozostanie stabilna w przypadku zmian jądra/initrd tak długo, jak będziesz podpisywać UKI swoim kluczem.Jeśli odnowisz hasło lub zmienisz zestaw PCR, będziesz musiał ponownie się zarejestrować.
Przykłady łańcuchów pomiarowych z systemd
Podczas rozruchu systemd-stub i systemd-pcrphase rozszerzają reakcje PCR w określonych momentach. Na przykład „enter-initrd” jest rejestrowany w PCR 11, co pozwala na odblokowanie wyłącznie w ramach initrd (zmniejszając liczbę wektorów, w których atakujący próbuje ponownie użyć klucza później).
W systemach z UKI zawartość UKI mierzy się w PCR 11; w systemach bez UKI, jądro mierzy initrds w PCR 9 a bootloader może zmierzyć linię cmd w PCR 12. Upewnij się, że uwzględniasz initrd i linię cmd w swojej polityce, w przeciwnym razie ktoś może tylne drzwi initrd lub uruchom za pomocą złośliwego wiersza poleceń, takiego jak init=/bin/bash.
Rzeczywiste zagrożenia: zimny rozruch, wykrywanie TPM i inne
Co może pójść nie tak? Kilka rzeczy, o których należy pamiętać podczas modelowania zagrożeń. Ataki zimnego rozruchu są nadal skuteczne: jeśli odblokowanie jest w pełni automatyczne, atakujący może powtarzać nieograniczoną liczbę prób. Oczywistym rozwiązaniem jest wymaganie podania kodu PIN przed uruchomieniem (PBA), co ogranicza liczbę prób do jednej na cykl zasilania.
Inną kategorią jest ataki podsłuchowe na magistralę TPMProcesor żąda klucza, moduł TPM go wysyła; jeśli połączenie zostanie naruszone, klucz może zostać ujawniony. W tym celu systemd implementuje „szyfrowanie parametrów”, dzięki czemu wymiana danych jest szyfrowana; alternatywnie, użycie fTPM/Intel PTT lub zaszyfrowanej pamięci zmniejsza ryzyko ujawnienia. Istnieją stosunkowo niedrogie demonstracje publiczne (nawet z mikrokontrolerami), które ilustrują wykonalność tego rozwiązania na laptopach wiodących marek.
Wystąpiły również luki natury akademickiej i praktycznej: TPM-Fail, usterka TPM (ze znaczącym wpływem na AMD) i sprawa bitpixie (CVE-2023-21563)Nie oznacza to, że moduł TPM jest bezużyteczny, ale należy dbać o aktualność oprogramowania sprzętowego, rozumieć model zagrożeń i nie ufać mu bezkrytycznie.
Status BitLockera w kontekście tych zagrożeń
W świecie Windows najpowszechniej stosowanym szyfrowaniem dysków jest BitLocker. Zauważono już, że domyślna konfiguracja (automatyczne odblokowywanie tylko z TPM) Otwiera to drogę zarówno do zimnego rozruchu, jak i podsłuchiwania kanałów TPM, ponieważ nie implementuje szyfrowania parametrów w stylu systemd. To sprawia, że niektóre komputery korporacyjne są podatne na ataki w ciągu kilku minut.
Zalecenie jest takie, aby umożliwić uwierzytelnianie przed uruchomieniem za pośrednictwem zasad/rejestru lub interfejsu wiersza poleceń, co nie jest wystarczająco widoczne dla przeciętnego użytkownika. Pamiętaj również o sprawdzeniu, gdzie przechowywany jest klucz odzyskiwania: często znajduje się on na koncie Microsoft użytkownika, które To jest inny kąt ryzyka jeśli nie jest kontrolowany.
Trik ofensywny/defensywny: Zastąp root LUKS, aby wymusić hasło
Istnieje interesujący wektor, gdy nie ma uwierzytelniania przed uruchomieniem. Atakujący może sklonować prawdziwą partycję LUKS, zastąp go innym LUKS-em z tym samym UUID i hasłem, które znai uruchom komputer. Ponieważ pomiary PCR są zgodne, moduł TPM zwalnia klucz, ale nie pasuje on do fałszywego klucza LUKS, więc initrd poprosi o klucz „odzyskiwania”. Po wprowadzeniu hasła znanego atakującemu, system uruchomi się jako root w initrd, co umożliwi Ci kradzież oryginalnego klucza (na przykład poprzez zamontowanie prawdziwej kopii przez sieć i użycie systemd-cryptsetup).
Wyraźne środki zaradcze: aktywuj uwierzytelnianie przed uruchomieniem, wykorzystaj systemd-pcrphase do ścisłego powiązania odblokowania z fazą initrd i rozważ również zmierzenie/powiązanie docelowej objętości LUKS (wymaga ostrożnego projektu, aby uniknąć błędnego koła).
Wybór partycjonowania i drugiego klucza: najlepsze praktyki
Trzymaj klucz odzyskiwania To obowiązkowe: jeśli moduł TPM lub płyta główna ulegną awarii, klucz powiązany z modułem TPM stanie się bezużyteczny. LUKS obsługuje wiele gniazd (moduł TPM używa jednego, a recovery innego). Dodatkowo, oddzielenie partycji / i /home ma swoje zalety: można zastosować ścisły pomiar z TPM a/ i użyj silnego klucza lub urządzenia FIDO2/YubiKey dla /home, co spowoduje zmniejszenie ogólnego zaufania do pojedynczego mechanizmu.
Co się dzieje po aktualizacji oprogramowania sprzętowego lub jądra?
Jeśli zmienisz oprogramowanie sprzętowe lub zmienisz opcje UEFI, kody PCR, takie jak 0/1, ulegną zmianie, a moduł TPM nie zwolni klucza do momentu ponownej rejestracji. Dla jądro i initrd, zmiany są częsteJeśli nie korzystasz z UKI z podpisaną polisą, każda aktualizacja może zmusić Cię do skorzystania z opcji odzyskiwania i ponownej rejestracji w późniejszym czasie. Z podpisaną polisą UKI po prostu ją podpisujesz i to wszystko.
Notatki i obserwacje społeczności
W niektórych popularnych przewodnikach niektórych dystrybucji zalecano powiąż tylko PCR 7, kiedykolwiek używasz UKI i systemd-boot, opierając się na zabezpieczeniach Secure Boot i braku możliwości edycji wiersza poleceń. Działa, ale istnieje ryzyko, jeśli polegasz na rozwiązaniach firm trzecich. W przeszłości odnotowano również błąd, który powodował, że naciśnięcie Enter powodowało wyświetlenie powłoki odzyskiwania po odblokowaniu; warto aktualizować swoje wersje, aby uniknąć niespodzianek.
W 2025/06 pojawiły się interesujące komentarze: Usterka modułu TPM nadal wpływa na AMD w pewnym stopniu; wiki dodały konkretne sekcje dotyczące podpisanych zasad PCR; przetestowano również instalator dystrybucji oferującej FDE z TPM jako funkcją eksperymentalną, mimo pewnych praktycznych problemów (wymaganie odzyskiwania przy pierwszym uruchomieniu, zależność od snapów, podwójne szyfrowanie dysku), co stanowiło problem zasługuje na bardziej dogłębny audyt.
W roku 2025/07 opublikowano kolejną pozycję poświęconą szyfrowaniu dysków w systemie Windows. Ogólny wniosek podkreśla potrzebę stosowania PBA i szyfrowania kanału TPM.oraz ograniczenie polegania na kluczach stron trzecich w przypadku bezpiecznego rozruchu.
Wskazówki operacyjne dotyczące narzędzi tpm2 i systemd
Do codziennego użytku: zainstaluj tpm2-tools i tpm2-tss. Domyślnie używa /dev/tpmrm0oraz tpm2_pcrread/tpm2_pcrextend do testowania i eksperymentowania z reakcjami PCR. Unikaj rozszerzania produkcyjnych reakcji PCR o dowolne dane: rób to w laboratoriach lub użyj PCR 16 do testowania.
Podczas rejestracji w systemd-cryptenroll: –tpm2-device=auto wykrywa TPM; –tpm2-z-pinem dodaje PBA; –tpm2-pcrs=… wybierz swoje PCR-y; –tpm2-public-key=… i –tpm2-public-key-pcrs=… Aktywuj podpisaną politykę PCR (np. powiązaną z PCR 11 dla UKI). Nie zapomnij –wyczyść-gniazdo gdy chcesz wyczyścić poprzedni slot.
Jeśli nie masz modułu TPM i systemd każe ci czekać na rozruch
Czasami po aktualizacji usługa próbuje użyć modułu TPM, nawet jeśli nie jest on widoczny na komputerze, co powoduje przekroczenie limitu czasu podczas rozruchu. Najpierw sprawdź, czy nie pojawia się /dev/tpm* ani wpisów w /sys/class/tpm.
# Verificación rápida
ls /dev/tpm*
ls /sys/class/tpm/
Jeśli nie ma modułu TPM, sprawdź plik /etc/crypttab nie ma opcji takich jak tpm2-device=autoJeśli istnieją, usuń je i odbuduj initrd. Możesz również wyłączyć fazę pomiaru na komputerach bez modułu 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
Dzięki temu nie ma konieczności zbędnego czekania, jeśli w sprzęcie nie zastosowano modułu TPM. Jeśli później włączysz moduł TPM w systemie BIOS/UEFI, usuń czarną listę i odmaskuj jednostkę, aby odzyskać pomiary.
Dobre praktyki i decyzje dotyczące zaufania
Niektórzy podchodzą z rezerwą do TPM, ponieważ jest to „czarna skrzynka”, podobnie jak dyski samoszyfrujące. To uzasadniona wątpliwość. Oceń swój model zagrożeń i równoważy użyteczność, prywatność i konserwację. Dla wielu osób TPM + PBA + podpisany UKI to ogromny krok naprzód w zakresie bezpieczeństwa bez nadmiernych tarć.
Na sprzęcie, który na to pozwala, dodaj zaszyfrowana pamięć Unikaj korzystania z kluczy stron trzecich w trybie Secure Boot; ogranicz łańcuch do własnych kluczy, kiedy tylko jest to możliwe. Aktualizuj oprogramowanie układowe i jądro, aby uwzględnić zabezpieczenia przed ujawnionymi lukami w zabezpieczeniach.
Opanowanie obsługi /dev/tpm0, /dev/tpmrm0 oraz operacji tpm2_pcrread/tpm2_pcr_extend otwiera drzwi do bezpiecznego rozruchu i solidnego szyfrowania dysku w systemie Linux; dzięki UKI i podpisanej polityce PCR można uzyskać stabilność operacyjną, a dodanie kodu PIN przed uruchomieniem chroni również przed bardziej praktycznymi atakami. Kluczem jest odpowiedni dobór protokołów PCR, częste podpisywanie zmian i stałe posiadanie dobrego klucza odzyskiwania..