(CentOS 6)
Cílem je vytvořit šifrovaný oddíl pro uchovávání záloh.
LUKS je standardem pro šifrování pevných disků v Linuxu. Zajišťuje kompatibilitu mezi linuxovými distribucemi a poskytuje dvouúrovňové šifrování, funkci pro posílení hesla i bezpečnou správu více uživatelských hesel/klíčů. LUKS ukládá všechna potřebná nastavení v hlavičce oddílu a umožňuje tak uživateli snadno kopírovat nebo migrovat data. Linuxová (referenční) implementace používá dm-crypt.
Výhody:
- kompatibilita díky standardizaci
- posílení hesla (PBKDF2) proti slovníkovým útokům
- podpora více klíčů (8 slotů)
- efektivní revokace hesla
- je zdarma
Balíky a jejich instalace
RPM balíky: cryptsetup-luks cryptsetup-luks-libs
Zjištění, zda jsou nainstalovány:
rpm -qa cryptsetup-luks*
Instalace balíků (minimální instalace CentOS 6 je neobsahuje):
yum install cryptsetup-luks cryptsetup-luks-libs
Příprava diskového oddílu
Před vytvořením šifrovaného oddílu je vhodné zaplnit oddíl náhodnými daty, aby potenciální útočník nemohl snadno obnovit původní data nebo určit bloky s šifrovaným obsahem. Zde jsou uvedeny 3 často používané způsoby:
Upozornění: V příkazech je použito zařízení /dev/sdf1. Písmeno disku a číslo oddílu je třeba nastavit dle potřeby.
a) Příkaz dd kopíruje na diskový oddíl náhodná data (/dev/urandom), ale generování dat je pomalé. Průměrný zápis byl 7.3 MB/s (procesor Intel Xeon X3440).
dd if=/dev/urandom of=/dev/sdf1 bs=1M
b) Příkaz badblocks provede kontrolu bloků diskového oddílu a zároveň do nich zapíše náhodná data. Operace probíhá výrazně rychleji cca 86 MB/s, ale náhodná data jsou primitivní a pro tento účel nejsou doporučována.
badblocks -c 10240 -t random -s -w -v /dev/sdf1
c) cryptsetup FAQ zmiňuje níže uvedenou proceduru, která funguje jako jednoduchý generátor pseudonáhodných čísel.
Popis: Inicializuje se dočasný šifrovaný oddíl, který je po otevření zaplněn a přepíše tak základní blokové zařízení náhodnými daty. Následně se přepíše LUKS hlavička a úložiště klíče (keyslot).
Inicializace dočasného šifrovaného oddílu:
cryptsetup luksFormat /dev/sdf1
Otevření šifrovaného resp. mapování dešifrovaného oddílu:
cryptsetup luksOpen /dev/sdf1 decrypted
Zaplnění dešifrovaného oddílu nulami (průměrný zápis 73.1 MB/s):
dd if=/dev/zero of=/dev/mapper/decrypted bs=1M
Odstranění namapovaného dešifrovaného oddílu:
cryptsetup luksClose /dev/mapper/decrypted
Přepsání LUKS hlavičky a "keyslotu".
Ve výchozím nastavení má hlavička s jedním "keyslotem" velikost 2048 KB (šifra aes-cbc-essiv:sha256 + 256-bitový klíč). Je doporučeno přepsat také první 4 KB zapsané pomocí dm-crypt, celkem tedy 2052 KB.
Ověření počtu bloků, které zabírá hlavička + keyslot příkazem luksDump viz hodnota Payload offset:
cryptsetup luksDump /dev/sdf1
Přepsání 4104 bloků oddílu sdf1 (4096 bloků = hlavička/keyslot, 8 bloků = první 4 KB zapsané pomocí dm-crypt):
dd if=/dev/urandom of=/dev/sdf1 bs=512 count=4104
Inicializace šifrovaného oddílu
Příkaz inicializuje LUKS oddíl a oproti výchozí konfiguraci nastavuje šifrovací mód XTS a dvojnásobnou délku klíče. Protože se jedná o finální oddíl určený pro naše data, je vhodné zadat silné heslo.
(parametry: -c šifrovací algoritmus, mód a inicializační vektor, -s délka klíče, -y potvrzení hesla)
cryptsetup -c aes-xts-plain64 -s 512 -y luksFormat /dev/sdf1
Otevření šifrovaného oddílu
Otevření šifrovaného resp. mapování dešifrovaného oddílu:
cryptsetup luksOpen /dev/sdf1 decrypted
Vytvoření a připojení souborového systému
Vytvoření souborového systému na dešifrovaném oddílu:
(parametr -m určuje kolik procent bloků bude rezervováno pro uživatele root)
mkfs.ext4 -m 0 /dev/mapper/decrypted
Vytvoření přípojného bodu (adresáře):
mkdir /mnt/decrypted
Připojení souborového systému dešifrovaného oddílu:
mount /dev/mapper/decrypted /mnt/decrypted
Ukončení práce s dešifrovaným oddílem
Nejprve odpojení souborového systému:
umount /mnt/decrypted
Odstranění namapovaného dešifrovaného oddílu:
cryptsetup luksClose /dev/mapper/decrypted
Operace s klíči
Přidání klíče (hesla):
(Před zadáním nového hesla je vyžádáno některé z existujících hesel.)
cryptsetup luksAddKey /dev/sdf1
Odstranění klíče (hesla):
cryptsetup luksRemoveKey /dev/sdf1
Klíčový soubor
Místo hesla lze použít jakýkoliv soubor. Ukázka vytvoření klíčového souboru s náhodnými daty o velikosti 2 KB:
dd if=/dev/urandom of=/root/luks-keyfile bs=1k count=2
Přidání klíče (klíčového souboru):
cryptsetup luksAddKey /dev/sdf1 /root/luks-keyfile
Odstranění klíče (klíčového souboru):
cryptsetup luksRemoveKey /dev/sdf1 /root/luks-keyfile
Otevření šifrovaného oddílu pomocí klíčového souboru:
cryptsetup --key-file /root/luks-keyfile luksOpen /dev/sdf1 decrypted