LUKS2 a TPM2 v roce 2026: Šifrování disku Linuxu s automatickým odemčením
Praktický průvodce, jak zapojit TPM2 do LUKS2 keyslotu pomocí systemd-cryptenroll, zvolit správné PCR registry a připravit spolehlivé recovery scénáře.
LUKS2 s TPM2 umožňuje šifrování disku Linuxu s automatickým odemčením bez zadávání hesla. Klíč se zapečetí do TPM čipu základní desky a uvolní se jenom tehdy, když PCR registry potvrdí neporušený stav firmwaru, Secure Boot a bootloaderu. Ve spojení s cryptsetup 2.7 a systemd-cryptenroll je tohle dnes standardem pro moderní linuxové notebooky, servery i edge zařízení. Tuhle konfiguraci jsem během posledního roku nasazoval na desítce notebooků pro tým, a v tomhle průvodci si projdeme celý postup: od inicializace LUKS2 přes zapojení TPM2, konfiguraci PCR policy až po recovery scénáře (kdy TPM selže, což se stane častěji, než byste čekali).
LUKS2 s TPM2 poskytuje bezobslužné šifrování disku Linuxu. Po nabootování se klíč automaticky uvolní z TPM čipu bez zadávání hesla.
Nástroj systemd-cryptenroll (systemd 254+) je oficiální cesta k zapojení TPM2 do LUKS2 keyslotu; příkaz clevis je alternativou pro network-bound scénáře.
PCR registry 0, 2, 4, 7 a 14 chrání proti manipulaci s firmwarem, Secure Boot databází a bootloaderem; jakákoli změna zablokuje odemčení.
Vždy si zálohujte LUKS hlavičku (cryptsetup luksHeaderBackup) a udržujte funkční recovery keyslot s heslem. Bez něj hrozí trvalá ztráta dat při výměně základní desky.
Cryptsetup 2.7 přináší nativní podporu PIN kódu pro TPM2, hardware-accelerated Argon2id a lepší integraci se Secure Boot řetězcem.
Pro produkční nasazení kombinujte TPM2 s PIN kódem (dvoufaktorová autentizace). Chrání proti fyzickému útoku typu cold-boot i DMA.
Jak LUKS2 s TPM2 funguje
LUKS2 (Linux Unified Key Setup, verze 2) je standardní formát pro šifrování blokových zařízení v Linuxu. Používá master key odvozený z Argon2id key derivation function a ukládá jej v keyslot. Klasicky se keyslot odemyká heslem, jenže LUKS2 umí až 32 keyslotů. A kterýkoli z nich může být svázán s externím zdrojem klíče, například s TPM2 čipem.
Když do LUKS2 zapojíte TPM2, systemd-cryptenroll vygeneruje náhodný klíč, zapečetí (seal) ho pomocí TPM2 do policy vázané na aktuální hodnoty vybraných PCR registrů a výslednou zapečetěnou hodnotu uloží do LUKS2 tokenu. Při dalším bootu se initramfs pokusí klíč unseal. TPM čip klíč uvolní jenom tehdy, pokud jsou PCR registry ve stejném stavu jako v okamžiku zapečetění. Pokud útočník vymění firmware, zavaděč nebo bootovací obraz, PCR se změní a TPM klíč neuvolní. Data zůstávají chráněná.
Tenhle model funguje jako measured boot. Každá komponenta v boot řetězci hashuje následující komponentu do PCR před tím, než jí předá řízení. TPM tak zaznamenává celou boot historii a šifrovací klíč je závislý na její integritě.
Požadavky a instalace
Pro plnohodnotné nasazení LUKS2 s TPM2 v roce 2026 potřebujete:
TPM 2.0 čip. U moderních základních desek discrete TPM (dTPM) nebo firmware TPM (fTPM, u AMD PSP nebo Intel PTT). Ověřte pomocí ls /sys/class/tpm/.
UEFI Secure Boot zapnutý v BIOSu, aby PCR 7 mohla ochránit klíč proti výměně bootloaderu.
Linux jádro 6.6+ s CONFIG_TCG_TPM2 a CONFIG_TRUSTED_KEYS.
cryptsetup 2.7 nebo novější. Přináší nativní podporu PIN kódu, hardware-accelerated Argon2id a lepší diagnostiku PCR chyb.
systemd 254+ s systemd-cryptenroll, systemd-cryptsetup-generator a případně systemd-boot.
tpm2-tools 5.6+ pro ruční operace a diagnostiku.
Na Fedoře 41, Debianu 13 (Trixie) a Ubuntu 26.04 LTS získáte celý stack jedním příkazem:
Následující postup předpokládá nový, nešifrovaný oddíl /dev/nvme0n1p3. Pro konverzi existujícího systému doporučujeme čistou reinstalaci. Konverze cryptsetup reencrypt je sice možná, ale rizikovější a mimo rámec tohoto průvodce (osobně jsem si na tom už jednou ošklivě spálil prsty).
# Vytvoření LUKS2 svazku se silnými parametry
sudo cryptsetup luksFormat \
--type luks2 \
--cipher aes-xts-plain64 \
--key-size 512 \
--hash sha512 \
--pbkdf argon2id \
--pbkdf-memory 1048576 \
--pbkdf-parallel 4 \
--pbkdf-force-iterations 10 \
--use-random \
--sector-size 4096 \
--label CRYPTROOT \
/dev/nvme0n1p3
# Otevření a mapování
sudo cryptsetup open /dev/nvme0n1p3 cryptroot
# Vytvoření filesystému (Btrfs je doporučen pro snapshoty)
sudo mkfs.btrfs -L root /dev/mapper/cryptroot
Volba --pbkdf-memory 1048576 (1 GB) a argon2id činí brute-force útok proti heslu extrémně náročným i pro GPU farmy. Volba --sector-size 4096 zlepšuje výkon na moderních NVMe SSD; ověřte, že to podporuje váš filesystém.
Získejte UUID svazku, budete jej potřebovat v /etc/crypttab:
sudo blkid -o value -s UUID /dev/nvme0n1p3
# Například: 3a7f2c9b-4e8d-4a12-b3c0-9f8e7d6c5b4a
Zapojení TPM2 pomocí systemd-cryptenroll
Teď přidáme TPM2 keyslot. Systemd-cryptenroll komunikuje s TPM přes /dev/tpmrm0 a zvládne vše na jeden příkaz. Vygeneruje klíč, zapečetí ho do zvolené PCR policy a zaregistruje do LUKS2 tokenu.
# Zapojení TPM2 s PCR 7 (Secure Boot policy)
sudo systemd-cryptenroll /dev/nvme0n1p3 \
--tpm2-device=auto \
--tpm2-pcrs=7
# Ověření: měl by být přidán nový keyslot a token
sudo cryptsetup luksDump /dev/nvme0n1p3 | grep -E "Keyslots:|systemd-tpm2|Tokens:"
Výstup ukazuje, že Token 0 nyní obsahuje typ systemd-tpm2 odkazující na nový keyslot. Nastavíme, aby systemd tenhle token při bootu použil. Přidejte řádek do /etc/crypttab:
Restartujte systém. Pokud vše proběhne správně, LUKS2 se odemkne bez zásahu uživatele během ~200 ms. Podrobnosti o průběhu najdete v journalctl -b -u [email protected].
PCR policy: co chrání a jak je zvolit
Platform Configuration Registers (PCR) jsou 24 hardwarových registrů v TPM, do kterých firmware, bootloader a jádro postupně hashují své komponenty. Klíčové PCR pro měření bootu:
PCR
Co měří
Kdy se změní
Doporučení
0
Firmware CRTM (UEFI BIOS)
Update BIOSu
Volitelně, silná ochrana proti firmware útokům
1
Konfigurace firmwaru
Změna BIOS nastavení
Nepoužívat, mění se často
2, 3
Option ROM (rozšiřující karty)
Výměna karty, GPU update
Volitelně
4, 5
MBR/GPT a bootloader binárka
Update GRUB/systemd-boot
Ano, silná ochrana
7
Secure Boot policy a klíče
Vypnutí Secure Boot, změna klíčů
Doporučeno, dobrá rovnováha
8, 9
Konfigurace bootloaderu a kernel command line
Změna bootovací konfigurace
Volitelně u systemd-boot
14
MOK (Machine Owner Keys)
Přidání shim/MOK klíče
Doporučeno, pokud používáte MOK
Nejběžnější kombinace pro produkční nasazení je tpm2-pcrs=7+14. Chrání celý Secure Boot řetězec včetně MOK klíčů, ale zůstává odolná vůči rutinním firmware updatům. Pro paranoidní režim použijte tpm2-pcrs=0+2+4+7+14, jenom počítejte s tím, že po každém BIOS updatu musíte znovu zapojit TPM keyslot pomocí systemd-cryptenroll --wipe-slot=tpm2.
TPM2 s PIN kódem pro dvoufaktorovou ochranu
Samotný TPM chrání proti výměně komponent, ale nechrání proti fyzické krádeži celého zařízení. Útočník zapne notebook a TPM klíč rád uvolní. Řešením je přidat PIN kód, který se zadává při bootu:
# Odstranění stávajícího TPM slotu a zapojení nového s PIN kódem
sudo systemd-cryptenroll /dev/nvme0n1p3 --wipe-slot=tpm2
sudo systemd-cryptenroll /dev/nvme0n1p3 \
--tpm2-device=auto \
--tpm2-pcrs=7+14 \
--tpm2-with-pin=yes
# Přidejte parametr do crypttab
# cryptroot UUID=... none tpm2-device=auto,tpm2-pcrs=7+14,discard
TPM 2.0 má vestavěnou dictionary attack lockout. Po několika neúspěšných pokusech se čip uzamkne na desítky minut až hodiny. Díky tomu je PIN kód extrémně odolný proti brute-force i s krátkou délkou (6 až 8 číslic), na rozdíl od klasického LUKS hesla, kde je nutná 20+ znaková passphrase.
Integrace s initramfs a boot procesem
Aby LUKS2 s TPM2 fungoval při bootu, musí initramfs obsahovat moduly TPM a nástroje pro unseal operaci. Distribuce používají různé generátory.
echo "tpm_tis" | sudo tee -a /etc/initramfs-tools/modules
echo "tpm_crb" | sudo tee -a /etc/initramfs-tools/modules
sudo update-initramfs -u -k all
Po regeneraci initramfs restartujte. Pokud vidíte prompt na heslo místo automatického odemčení, zkontrolujte journalctl -b. Nejčastější příčinou bývá chybějící modul tpm_crb (u fTPM na AMD) nebo neshoda PCR (třeba po BIOS updatu). Přesně tohle mě jednou zdrželo hodinu při noční aktualizaci Fedory.
Záloha hlavičky a recovery scénáře
LUKS hlavička je kritická. Obsahuje zašifrované keysloty a metadata. Její ztráta se rovná ztrátě dat. Vždy si ji zálohujte hned po vytvoření svazku a po každé změně keyslotu:
Kromě TPM keyslotu udržujte vždy alespoň jeden recovery keyslot s heslem nebo FIDO2 klíčem. Bez něj hrozí, že po výměně základní desky (nebo dTPM čipu) přijdete o data. Zapojení FIDO2 recovery:
Pokud se plánuje BIOS update nebo výměna hardwaru, nejprve odstraňte TPM keyslot, proveďte změnu, a pak ho zapojte znovu na nový stav PCR:
# Před hardwarovou změnou
sudo systemd-cryptenroll /dev/nvme0n1p3 --wipe-slot=tpm2
# Po změně (systém odemknete recovery heslem)
sudo systemd-cryptenroll /dev/nvme0n1p3 --tpm2-device=auto --tpm2-pcrs=7+14
Rozdíl mezi LUKS1 a LUKS2
LUKS1 existoval 15+ let a stále je funkční, ale pro nová nasazení v roce 2026 už není doporučen. LUKS2 přinesl několik zásadních vylepšení:
JSON metadata namísto binárního formátu. Snazší diagnostika a rozšiřitelnost.
Argon2id KDF místo PBKDF2. Memory-hard funkce odolná proti GPU/ASIC útokům.
Až 32 keyslotů (LUKS1 měl pouze 8). Dostatek prostoru pro TPM2, FIDO2, více uživatelů a recovery klíče.
Tokens API. Mechanismus, kterým se integruje TPM2 a FIDO2 bez zásahu do LUKS master klíče.
Online reencrypt. Změna master klíče za běhu bez odpojení svazku.
Integrity protection. Volitelný AEAD režim s HMAC/AES-GCM chrání proti tampering útokům (za cenu výkonu).
Konverze LUKS1 na LUKS2 je možná příkazem cryptsetup convert --type luks2 /dev/nvme0n1p3, ale keyslot Argon2id upgrade vyžaduje samostatný krok cryptsetup luksConvertKey --pbkdf argon2id.
TPM2 vs Clevis/Tang: kdy použít který přístup
Vedle systemd-cryptenroll existuje alternativa: Clevis se serverem Tang. Cílí na jiný scénář. Klíč se neuvolní z lokálního TPM, ale získá se ze síťového Tang serveru pomocí McCallum-Relyea protokolu. Disk se odemkne pouze v důvěryhodné síti.
Kritérium
systemd-cryptenroll (TPM2)
Clevis + Tang
Závislost na síti
Ne, funguje offline
Ano, vyžaduje Tang server
Ochrana proti krádeži zařízení
Ano (s PIN)
Ano (mimo síť)
Vhodné pro
Notebooky, edge zařízení, single-server
Datacentra, servery ve fyzicky chráněné zóně
Odolnost vůči výměně HW
Nízká (klíč vázán na TPM)
Vysoká (klíč u Tang)
Kombinace s dalšími faktory
Ano (SSS policy pod Clevis)
Nativní SSS shamir sharing
Doporučení pro 2026
Primární volba pro endpoint
Primární volba pro serverové farmy
Pro hybridní scénář (třeba server, který se má odemknout buď TPM policy nebo Tang serverem) lze použít Clevis se SSS (Shamir Secret Sharing) pinem. Podrobný návod poskytuje projekt Clevis na GitHubu. A pokud potřebujete i výběr TPM2 nástrojů, koukněte na oficiální stránku tpm2-software.github.io, kde najdete referenční implementaci celého stacku.
Nejčastější problémy a řešení
TPM keyslot neuvolní klíč po BIOS updatu
Nejčastější příčina: PCR 0, 2 nebo 7 se změnily. Řešení: nabootujte s recovery heslem, odstraňte a znovu zapojte TPM keyslot. Do budoucna zvažte podepsanou PCR policy (viz sekce PCR policy).
Chyba Failed to load TPM2 PCR value
V initramfs chybí modul tpm_crb nebo tpm_tis. Přidejte je do konfigurace initramfs generátoru a regenerujte obraz.
Extrémně pomalé odemčení (nad 5 s)
Zkontrolujte, že máte --pbkdf-force-iterations nastavené na rozumnou hodnotu (10 pro Argon2id je dostatečné pro TPM2 keyslot, protože klíč z TPM je náhodný a nepotřebuje pomalý KDF). Vysoká hodnota memory (nad 2 GB) může způsobit potíže na embedded systémech.
Systém požaduje heslo přesto, že TPM je nakonfigurován
Zkontrolujte /etc/crypttab, jestli obsahuje tpm2-device=auto jako volbu, a že systemd-cryptsetup-generator tuhle volbu čte. V journalu hledejte řádek TPM2 unlock successful. Pokud chybí, initramfs pravděpodobně neobsahuje TPM podporu.
Je bezpečné použití TPM2 pro odemčení LUKS bez hesla?
Ano, pokud používáte PCR 7 (Secure Boot policy) a případně 14 (MOK). TPM klíč se uvolní pouze při neporušeném boot řetězci. Pro plnou ochranu proti fyzické krádeži přidejte PIN kód pomocí --tpm2-with-pin=yes. Dictionary attack lockout v TPM činí i krátký PIN velmi odolný.
Co dělat, když TPM čip selže nebo vyměním základní desku?
LUKS2 keyslot vázaný na starý TPM se stane nefunkčním. Musíte mít recovery keyslot s heslem nebo FIDO2, přes který systém odemknete, TPM keyslot smažete (systemd-cryptenroll --wipe-slot=tpm2) a zapojíte nový vůči novému TPM. Bez recovery slotu jsou data trvale ztracena.
Jaký je rozdíl mezi LUKS1 a LUKS2?
LUKS2 používá Argon2id místo PBKDF2 (odolnost proti GPU), JSON metadata, až 32 keyslotů, Tokens API pro TPM2/FIDO2 integraci a volitelnou AEAD integrity ochranu. Pro nová nasazení v 2026 vždy volte LUKS2. Konverze z LUKS1 je jednořádkový příkaz cryptsetup convert.
Které PCR registry mám pro LUKS2 TPM2 zvolit?
Pro většinu nasazení je optimální kombinace 7+14. Chrání Secure Boot policy i MOK klíče a je odolná vůči běžným OS updatům. Kombinace 0+2+4+7+14 je bezpečnější, ale vyžaduje re-enroll po každém BIOS updatu. Vyhněte se PCR 1 (mění se často) a PCR 8/9 (mění se při každé změně kernel command line).
Jak zálohovat LUKS2 hlavičku a proč je to důležité?
Použijte příkaz cryptsetup luksHeaderBackup /dev/nvmeXnYpZ --header-backup-file soubor.img. LUKS hlavička obsahuje všechny šifrované keysloty. Pokud se poškodí (bad sector, chybný dd, pokažený update), data jsou trvale nedostupná i s heslem. Zálohu udržujte offline (šifrovanou GPG) a aktualizujte ji po každé změně keyslotu.
Podporuje LUKS2 s TPM2 také dual-boot s Windows?
Ano, ale s omezením. Windows BitLocker používá stejný TPM čip a při každém přepnutí OS se mění PCR 4 (bootloader). Řešením je použít pouze PCR 7 (Secure Boot policy zůstává stejná napříč OS) a přijmout mírně slabší ochranu, nebo použít samostatný TPM slot pro každý OS. Pro produkci raději oddělte OS na různá zařízení.
OpenBao 2.3 je open-source fork HashiCorp Vault pod Linux Foundation. Kompletní průvodce instalací, Raft HA, dynamickými credentials, PKI, Kubernetes integrací a migrací z Vaultu na Linuxu v roce 2026.