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 + TPM2: šifrování disku Linuxu (2026)

Aktualizováno: 6. září 2026

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:

# Fedora / RHEL 10
sudo dnf install cryptsetup tpm2-tools systemd-cryptsetup

# Debian / Ubuntu
sudo apt install cryptsetup tpm2-tools systemd-cryptsetup

# Verifikace
cryptsetup --version
systemd-cryptenroll --version
tpm2_getcap properties-fixed | grep TPM2_PT_MANUFACTURER

Inicializace LUKS2 svazku s cryptsetup 2.7

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:

cryptroot UUID=3a7f2c9b-4e8d-4a12-b3c0-9f8e7d6c5b4a none tpm2-device=auto,tpm2-pcrs=7,discard

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:

PCRCo měříKdy se změníDoporučení
0Firmware CRTM (UEFI BIOS)Update BIOSuVolitelně, silná ochrana proti firmware útokům
1Konfigurace firmwaruZměna BIOS nastaveníNepoužívat, mění se často
2, 3Option ROM (rozšiřující karty)Výměna karty, GPU updateVolitelně
4, 5MBR/GPT a bootloader binárkaUpdate GRUB/systemd-bootAno, silná ochrana
7Secure Boot policy a klíčeVypnutí Secure Boot, změna klíčůDoporučeno, dobrá rovnováha
8, 9Konfigurace bootloaderu a kernel command lineZměna bootovací konfiguraceVolitelně u systemd-boot
14MOK (Machine Owner Keys)Přidání shim/MOK klíčeDoporuč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.

Dracut (Fedora, RHEL, openSUSE)

# /etc/dracut.conf.d/tpm2.conf
add_dracutmodules+=" tpm2-tss crypt "
install_items+=" /usr/lib/systemd/systemd-cryptsetup "

sudo dracut -f

mkinitcpio (Arch Linux)

# /etc/mkinitcpio.conf
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole \
       block sd-encrypt filesystems fsck)

sudo mkinitcpio -P

initramfs-tools (Debian, Ubuntu)

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:

# Záloha hlavičky
sudo cryptsetup luksHeaderBackup /dev/nvme0n1p3 \
    --header-backup-file /media/usb/luks-header-$(hostname)-$(date +%F).img

# Šifrovaná záloha na jiném systému
gpg -c --cipher-algo AES256 luks-header-*.img

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:

sudo systemd-cryptenroll /dev/nvme0n1p3 \
    --fido2-device=auto \
    --fido2-with-client-pin=yes \
    --fido2-with-user-verification=yes

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ériumsystemd-cryptenroll (TPM2)Clevis + Tang
Závislost na sítiNe, funguje offlineAno, vyžaduje Tang server
Ochrana proti krádeži zařízeníAno (s PIN)Ano (mimo síť)
Vhodné proNotebooky, edge zařízení, single-serverDatacentra, servery ve fyzicky chráněné zóně
Odolnost vůči výměně HWNízká (klíč vázán na TPM)Vysoká (klíč u Tang)
Kombinace s dalšími faktoryAno (SSS policy pod Clevis)Nativní SSS shamir sharing
Doporučení pro 2026Primární volba pro endpointPrimá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.

Pro srovnání s alternativními hardening přístupy doporučujeme také náš průvodce zabezpečením OpenSSH 10.x, který pokrývá FIDO2 a post-kvantovou kryptografii, a přehled AppArmor vs SELinux pro ochranu procesů nad úrovní disku. Kompletní specifikaci LUKS2 formátu najdete v oficiální LUKS2 dokumentaci projektu cryptsetup.

Časté dotazy

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í.

O Autorovi Editorial Team

Our team of expert writers and editors.