Šifrování celého disku pomocí cryptsetup/LUKS

Tato příručka ukazuje, jak nakonfigurovat svazky šifrované pomocí LUKS, aby se při spouštění ověřovaly pomocí Nitrokey Pro nebo Nitrokey Storage.

Abychom vám poskytli základní informace, nástroj cryptsetup-initramfs nyní podporuje použití čipových karet OpenPGP, jako jsou Nitrokey Pro a Nitrokey Storage, k odemykání svazků šifrovaných pomocí LUKS. Po dokončení nastavení stačí při spuštění systému vložit kartu Nitrokey a zadat uživatelský kód PIN namísto zadávání běžné přístupové fráze pro šifrování disku.

Tyto pokyny byly testovány v systémech Ubuntu 20.04 a Debian 10.

Varování

Následující průvodce vás může potenciálně zablokovat od počítače. Měli byste si být vědomi těchto rizik a doporučujeme použít níže uvedený skript na sekundárním počítači nebo po úplné záloze, protože byste mohli přijít o svá data.

Požadavky

  • Počítač s Ubuntu nebo Debianem s alespoň jedním svazkem šifrovaným pomocí LUKS.

V níže uvedeném oddíle zjistíte, která metoda je kompatibilní s touto příručkou.

Známé problémy

Skript zatím pracuje pouze s ručně rozdělenými svazky, které se skládají z nešifrovaného /boot oddílu a šifrovaného kořenového / oddílu.

V této příručce nezvolte automatické šifrování celého disku, které poskytuje operační systém, který používáte. Při automatickém rozdělení disku pomocí instalačního rozhraní v Ubuntu a Debianu se budete setkávat s opakujícími se chybami.

Pokyny

  1. Instalace závislostí

    $ sudo apt install scdaemon opensc gnupg2
    
  2. Vytvoření adresáře smartcard-luks

    $ mkdir smartcard-luks && cd smartcard-luks
    
  3. Stáhněte si skript smartcard-luks

    $ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
    $ sudo chmod +x smartcard-key-luks
    
  4. Export veřejného klíče

    Exportování veřejného klíče ze sady klíčů GnuPG:

    $ gpg2 --armor --export KeyID > pubkey.asc
    

    Pokud jste již veřejný klíč nahráli na server klíčů (nebo jej máte uložený někde jinde), měli byste jej načíst způsobem, který vám nejvíce vyhovuje, a přejít ke kroku 5.

  5. Určete a ověřte správný název zařízení LUKS pro kořenový oddíl:

    $ cat /etc/crypttab
    # if there is only one entry, you want the 1st column of this entry
    

    Rada

    Obvykle by to mělo být něco jako nvme0n1p3_crypt (pro NitroPC) nebo sda3_crypt (pro NitroPady). Můžete a měli byste zkontrolovat, zda UUID uvedené uvnitř /etc/crypttab je určený oddíl, a to kontrolou symbolického odkazu uvnitř /dev/disks/by-uuid/.

  6. Spusťte skript s názvem zařízení luks (např. nvme0n1p3_crypt) a pubkey.asc jako argumenty.

    $ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
    

Jakmile skript spustíte s veřejným klíčem OpenPGP jako argumentem, automaticky nastaví nový tajný klíč LUKS, zašifruje jej proti tomuto veřejnému klíči a nastaví crypttab, LUKS, initramfs a GRUB.

Nejprve budete vyzváni k zadání User PIN.

img1

Po odemknutí klíče Nitrokey budete vyzváni k zadání OLD passphrase. Jedná se o přístupovou frázi, kterou jste zadali při šifrování svazku při instalaci.

img2

Poznámka

Jedná se o náhradní řešení pro případ ztráty klíče Nitrokey nebo jeho nedostupnosti. Zatím nebyla testována a uživatelé si musí být vědomi rizika zablokování počítače v případě, že záložní metoda nebude fungovat.

Po zadání přístupové fráze skript dokončí nastavení přibližně za jednu minutu. Nepřerušujte skript, jinak by mohlo dojít k zablokování počítače po restartu.

img3

Hotovo!

Nyní musíte restartovat počítač a měli byste být schopni odemknout zašifrovaný disk pomocí klíče Nitrokey.

Použití

Po restartu byste měli být vyzváni k zadání uživatelského kódu PIN.

img5

Zadejte svůj uživatelský kód PIN a odemkněte jednotku

img6

Další tipy

Změna přístupové fráze

Po dokončení tohoto nastavení byste již neměli používat nástroj (gnome) disks ke změně (záložní) přístupové fráze. Správný způsob je zavolat cryptsetup přímo takto:

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

nvme0n1p3 je oddíl, pro který jste nastavili klíče.

Použití více kláves

Je snadné použít více (hardwarových) bezpečnostních klíčů, aby každý z nich mohl odemknout jednotku LUKS nezávisle na sobě. Stačí exportovat více veřejných klíčů a také předat více klíčů do instalačního skriptu takto:

$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc

Nastavit jméno držitele karty

Při zadávání kódu PIN při zavádění systému pro dešifrování kořenového oddílu LUKS se uživateli zobrazí držitel karty, pro jeho nastavení použijte $ gpg --edit-card a uvnitř výzvy zadejte admin a name pro nastavení držitele karty OpenPGP (Nitrokey Storage 2 nebo Nitrokey Pro 2).

Výměna/odstranění klíčů

Klíče není možné přidávat/odebírat přímo. Proto je třeba odstranit/odstranit staré nastavení a znovu spustit nastavení s určeným klíčem (klíči):

Odstraňte soubor s klíčem (cestu, pokud jste použili výše uvedený skript) z luks-device (nvme0n1p3):

$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg

Odstranění samotného souboru s klíčem:

$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg

Znovu proveďte výše uvedené nastavení.

Odemknutí LUKS2 pomocí certifikátu X509

SystemD podporuje odemknutí oddílu LUKS2 pomocí certifikátu X509, skvělý blogový zápis o tom, jak to realizovat, najdete na Osobní blog Vladimira Timofeenka.