Trusted Platform Module (Polski)
Powiązane artykuły
This article or section needs expansion.
Trusted Platform Module (TPM) to międzynarodowy standard bezpiecznego kryptoprocesora, który jest dedykowanym mikroprocesorem zaprojektowanym do zabezpieczania sprzętu poprzez integrację kluczy kryptograficznych w urządzeniach.
W praktyce TPM może być wykorzystywany do różnych zastosowań związanych z bezpieczeństwem, takich jak secure boot, przechowywanie kluczy i generowanie liczb losowych.
TPM jest oczywiście obsługiwany tylko na urządzeniach, które mają sprzętową obsługę TPM. Jeśli twój sprzęt obsługuje TPM, ale nie jest wyświetlany, może być konieczne włączenie go w ustawieniach BIOS-u.
Wersje
Istnieją dwie bardzo różne specyfikacje TPM: 2.0 i 1.2, które również używają różnych stosów oprogramowania. Ten artykuł opisuje tylko TPM 2.0, dla starszego TPM 1.2 zobacz /1.2 (Polski).
TPM 2.0 umożliwia bezpośredni dostęp przez /dev/tpm0 (jeden klient na raz), dostęp zarządzany przez jądro przez /dev/tpmrm0 lub dostęp zarządzany przez demona zarządzającego zasobami tpm2-abrmd . Według członka projektu systemd, używanie tpm2-abrmd nie jest już zalecane. Istnieją dwie opcje narzędzi przestrzeni użytkownika, tpm2-tools firmy Intel i ibm-tss AUR firmy IBM.
TPM 2.0 wymaga rozruchu UEFI; systemy rozruchowe BIOS lub Legacy mogą korzystać tylko z TPM 1.2.
Niektóre układy TPM można przełączać między wersjami 2.0 i 1.2 poprzez aktualizację oprogramowania układowego (którą można wykonać tylko ograniczoną liczbę razy).
Użycie
This article or section needs expansion.
Wiele zasobów informacyjnych na temat konfigurowania i korzystania z usług TPM 2.0 w codziennych zastosowaniach jest dostępnych na stronie społeczności tpm2-software.
Sprawdzanie wsparcia
Układ TPM 2.0 jest wymagany dla komputerów certyfikowanych do uruchamiania systemu Windows 10 od 2016年07月28日.[1]. Linux obsługuje TPM 2.0 od wersji 3.20[2] i nie powinien wymagać żadnych innych kroków do włączenia w domyślnej instalacji Arch.
Dwa sposoby sprawdzenia, czy TPM 2.0 jest skonfigurowany bez specjalnego oprogramowania:
- sprawdzenie logów, np. poprzez uruchomienie
journalctl -k --grep=tpmjako root - odczytanie wartości
/sys/class/tpm/tpm0/device/description[3] lub/sys/class/tpm/tpm0/tpm_version_major
Szyfrowanie danych w spoczynku (at-rest) za pomocą LUKS
Istnieją dwie metody odblokowania woluminu LUKS przy użyciu modułu TPM. Można użyć Clevis lub #systemd-cryptenroll.
Korzystając z obu metod, zaszyfrowany wolumin lub woluminy można odblokować za pomocą kluczy przechowywanych w module TPM, automatycznie podczas rozruchu lub ręcznie w późniejszym czasie. Użycie TPM do tego celu gwarantuje, że dyski nie zostaną odblokowane, chyba że spełnione zostaną określone warunki, takie jak brak modyfikacji oprogramowania układowego i brak wyłączenia Secure Boot (patrz #Dostęp do rejestrów PCR).
- Oznacza to, że dostęp do danych jest chroniony w przypadku kradzieży tylko zaszyfrowanego dysku, ale nie w przypadku kradzieży całego komputera.
- Należy pamiętać, że ta metoda zwiększa podatność na ataki zimnego rozruchu, ponieważ nawet jeśli komputer był wyłączony przez długi czas (zapewniając całkowite wyczyszczenie pamięci), atakujący może po prostu włączyć go i poczekać, aż moduł TPM automatycznie załaduje klucz. Może to stanowić zagrożenie dla celów o wysokiej wartości.
systemd-cryptenroll
Zobacz systemd-cryptenroll#Trusted Platform Module.
SSH
W przypadku kluczy SSH zabezpieczonych TPM dostępne są dwie opcje:
- ssh-tpm-agent — Agent kompatybilny z ssh-agent używający kluczy wspieranych przez TPM.
- tpm2-pkcs11 — Interfejs PKCS#11 dla sprzętu Trusted Platform Module 2.0.
- https://github.com/tpm2-software/tpm2-pkcs11 || tpm2-pkcs11
- Zobacz Konfiguracja SSH i Używanie TPM do uwierzytelniania SSH (2020-01).
GnuPG
This article or section needs expansion.
GnuPG, od wersji 2.3, obsługuje przenoszenie kompatybilnych kluczy do TPM. Instrukcje można znaleźć na stronie Używanie TPM z GnuPG 2.3.
Inne dobre przykłady wykorzystania TPM 2.0
- Konfiguracja bezpiecznego rozruchu + TPM 2 [dead link 2025年03月15日—HTTP 404] (2018-06, Debian)
- Using the TPM - It's Not Rocket Science (Anymore) - Johannes Holland & Peter Huewe (2020-11, Youtube): przykłady dla OpenSSL z tpm2-tss-engine .
Dostęp do rejestrów PCR
Rejestry konfiguracji platformy (PCR) zawierają skróty, które można odczytać w dowolnym momencie, ale można je zapisać tylko za pomocą operacji rozszerzenia, która zależy od poprzedniej wartości skrótu, tworząc w ten sposób rodzaj łańcucha bloków. Są one przeznaczone do sprawdzania integralności sprzętu i oprogramowania platformy między uruchomieniami (np. ochrona przed atakiem Evil Maid). Mogą być używane do odblokowywania kluczy szyfrujących i udowadniania, że uruchomiono prawidłowy system operacyjny.
Specyfikacja TCG PC Client Specific Platform Firmware Profile Specification definiuje używane rejestry, a rejestr Linux TPM PCR przypisuje używające ich komponenty systemu Linux.
Rejestry są następujące:
| PCR | Użycie | Uwagi |
|---|---|---|
| PCR0 | Kod wykonywalny oprogramowania układowego systemu głównego (inaczej oprogramowanie układowe) | Może ulec zmianie po aktualizacji UEFI |
| PCR1 | Dane oprogramowania układowego systemu podstawowego (inaczej ustawienia UEFI) | |
| PCR2 | Rozszerzony lub rozszerzalny kod wykonywalny | |
| PCR3 | Rozszerzone lub podłączane dane oprogramowania układowego | Ustawienie podczas fazy rozruchu Boot Device Select UEFI |
| PCR4 | Kod menedżera rozruchu i próby rozruchu | Mierzy menedżera rozruchu i urządzenia, z których oprogramowanie sprzętowe próbowało uruchomić komputer. |
| PCR5 | Konfiguracja i dane menedżera rozruchu | Może mierzyć konfigurację programów ładujących; zawiera tabelę partycji GPT |
| PCR6 | Wznowienie od zdarzeń stanu zasilania S4 i S5 | |
| PCR7 | Stan bezpiecznego rozruchu | Zawiera pełną zawartość PK/KEK/db, a także określone certyfikaty używane do walidacji każdej aplikacji rozruchowej[4]. |
| PCR81 | Hash wiersza poleceń jądra | Obsługiwane przez grub i systemd-boot. |
| PCR91 | Hash opcji ładowania initrd i EFI | Linux mierzy opcje ładowania initrd i EFI, zasadniczo opcje cmdline jądra. |
| PCR101 | Zarezerwowane do wykorzystania w przyszłości | |
| PCR111 | Hash zunifikowanego obrazu jądra. | zobacz systemd-stub(7) |
| PCR121 | Nadpisany wiersz poleceń jądra, Poświadczenia | zobacz systemd-stub(7) |
| PCR131 | Rozszerzenia systemowe | zobacz systemd-stub(7) |
| PCR141 | shim - MokList, MokListX i MokSBState. | [5] |
| PCR151 | Nieużywany | |
| PCR161 | Debug | Może być używany i resetowany w dowolnym momencie. Może nie występować w oficjalnej wersji oprogramowania sprzętowego. |
| PCR23 | Obsługa aplikacji | System operacyjny może ustawić i zresetować ten PCR. |
- Przypadek użycia zdefiniowany przez system operacyjny i może się różnić w zależności od różnych dystrybucji Linuksa i urządzeń z systemem Windows.
W systemie Windows BitLocker używa PCR8-11 (Legacy) lub PCR11-14 (UEFI) do własnych celów. Dokumentacja od tianocore[6].
tpm2-totp ułatwia tę kontrolę za pomocą ludzkiego obserwatora i dedykowanego zaufanego urządzenia.
Bieżące wartości PCR można wyświetlić za pomocą systemd-analyze(1) :
$ systemd-analyze pcrs
Lub alternatywnie z tpm2_pcrread(1) z tpm2-tools :
# tpm2_pcrread
Rozwiązywanie problemów
Odblokowanie TPM2 LUKS2 nadal wymaga podania hasła
Jeśli postępowałeś zgodnie z instrukcja opisana powyżej w celu automatycznego odblokowania urządzeń luks2 z zarejestrowanymi kluczami w module sprzętowym TPM2, ale nadal otrzymujesz monit o wprowadzenie hasła podczas etapu rozruchu initramfs. Konieczne może być wczesne załadowanie modułu jądra (jego nazwę można uzyskać za pomocą systemd-cryptenroll --tpm2-device=list), który jest odpowiedzialny za obsługę konkretnego modułu TPM2.
Zobacz także
- Gentoo:Trusted Platform Module
- Narzędzie do testowania TPM-JS: kod źródłowy - wersja internetowa.