Pozor, od 6. 6. 2025 bude můj web přístupný již jen v rámci skutečného Internetu – v historickém vypínám.

Můj malý svět

Obrať obličej k slunci
a stíny budou padat za tebe
  • Eko náhrady
  • Stop Heuréce
  • Zkušenosti s firmami
  • Šifrování disku je základ

    Už více než před rokem jsem začal disk ve svém počítači šifrovat a nemůžu si to vynachválit. Počítal jsem s problémy, ale kromě těch počátečních vlastně ani žádné nejsou. Dokonce ani výkonnostní, co by člověk mohl postřehnout.

    Samotný postup je docela jednoduchý. Dopředu uvádím, že jsem šifrování dělal pro Gentoo Linux, a to na celém disku – někteří si nechávají nešifrovaný alespoň oddíl /boot, ale já nechtěl vystavovat MBR nebo tabulku oddílů, protože pak je zřejmé, že na tom disku něco je, jen se k tomu nikdo nemůže bez hesla dostat. Já zvolil cestu externího bootovacího média, bez kterého nikdo nepozná, že na disku vlastně něco je (byť podezření asi pojme).

    Než se začne disk používat, obvykle se zaplní náhodnými daty. Jsou v zásadě dvě možnosti, kdy to lze provést: před šifrováním a po šifrování. Já šel první cestou, ale druhá se mi jeví jako výhodnější, protože není třeba náhodných dat – stačí nulová data –, takže je proces rychlejší (šifrování zajistí, že z vnějšku se tato data budou jako náhodná jevit).

    První možnost – před šifrováním:

    # dd if=/dev/urandom of=/dev/sda

    U mě byla průměrná rychlost 2,3 MB/s, takže celý disk trvalo zaplnit hodně dlouho (řádově desítky hodin). I proto bych podruhé zvolil raději následující zaplnění až po zašifrování disku:

    # dd if=/dev/zero of=/dev/sda

    Tady rychlost bude záležet na dvou faktorech (resp. na tom slabším z nich) – na rychlosti šifrování procesorem a na rychlosti zapisování zašifrovaných nul na disk.

    Pro samotné zašifrování je potřeba si zvolit šifru a její parametry, nicméně to tu rozebírat nebudu, spíše odkáži na další užitečné zdroje, vypsané na konci článku.

    Já zvolil méně běžný Twofish. Hardwarovou akceleraci AES stejně nemám, tak proč volit pro útočníka pohodlnější cestu. Řekl jsem si, že mi to za potenciální snížení výkonu stojí. V praxi ale žádné nepociťuji, takže jsem se svou volbou spokojený.

    Zaprvé se musí zavést potřebné moduly (místo twofish_i586 bude na amd64 zřejmě twofish_x86_64), pokud nejsou přímo v jádru:

    # modprobe dm-mod
    # modprobe twofish_i586
    # modprobe xts
    # modprobe sha512

    A zadruhé provést samotné zašifrování:

    # cryptsetup -c twofish-xts-plain -s 512 -y -h sha512 luksFormat /dev/sda

    Pak již stačí jen nový disk otevřít, rozdělit (není od věci sáhnout po LVM), vytvořit souborové systémy a nainstalovat systém:

    # cryptsetup luksOpen /dev/sda encdisk
    ...
    # mount /dev/lvm0/root /mnt/gentoo

    Co je potřeba, je vytvoření bootovatelného externího média. Kromě toho, že je na něj potřeba nahrát bootloader (třeba GRUB či něco odlehčenějšího, například extlinux) a jádro, klíčový je initramdisk, který zajistí odemčení disku při bootu. Osobně jsem s ním docela zápasil, takže se podělím i o /init skript (dopředu říkám, že jsem se nesnažil o žádné mistrovské dílo, jen o co nejmenší skript, který by dělal, co jsem potřeboval, což se mi, myslím, i podařilo):

    #!/bin/busybox sh
    
    # Mount the /proc and /sys filesystems
    mount -t proc none /proc
    mount -t sysfs none /sys
    
    # Create /dev nodes
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    
    # dm-crypt
    cryptsetup luksOpen /dev/sda encdisk
    
    # Create LVM root node
    lvm vgscan --mknodes
    lvm lvchange -aly lvm0/root
    
    # Mount the root filesystem
    mount -t ext4 -o ro /dev/lvm0/root /mnt/root
    
    # Clean up
    umount /proc
    umount /sys
    
    # Boot the real thing
    exec switch_root /mnt/root /sbin/init

    Do adresářové struktury pak nakopírovat všechny potřebné binárky, případně i knihovny, na kterých závisí. V /dev stačí mít zařízení console, null a tty. Výsledek se jednoduše zabalí:

    # find . -print0 | cpio -ov -0 --format=newc | gzip -9 > initramfs

    A zbytek už jistě zvládne každý. :-)

    Na konec uvádím užitečné zdroje:

    Seriál Diskové šifrování pomocí dm-crypt/LUKS:

    1. https://www.root.cz/clanky/proc-a-jak-na-sifrovani-disku-v-linuxu/
    2. https://www.root.cz/clanky/jak-vytvorit-sifrovany-oddil-v-linuxu/
    3. https://www.root.cz/clanky/sprava-sifrovanych-oddilu-v-linuxu/

    https://blog.root.cz/jenda/sifrovani-v-archu/
    https://www.abclinuxu.cz/blog/m4r3k/2007/8/zadelavame-si-na-problemy-aneb-sifrujeme-root-oddil

    https://wiki.archlinux.org/index.php/LUKS_Encrypted_Root
    https://wiki.archlinux.org/index.php/LVM

    https://en.wikipedia.org/wiki/Comparison_of_disk_encryption_software

    A neodpustím si ještě poznámku, že poškození disku se v podstatě rovná ztrátě dat s mnohem nižší šancí na záchranu (pokud vůbec nějakou), takže zálohování je nutnost (podotýkám, že také šifrované, jinak byla celá snaha zbytečná ;-)). Od věci pak nemusí být zálohování LUKS hlavičky (pozor na to, že při změně hesla je nutné zničit staré zálohy):

    # cryptsetup luksHeaderBackup /dev/sda --header-backup-file luksheader.backup

    Zaškatulkováno v kategorii: GNU/Linux | 21. dubna 2012

    Komentáře

    Jak přidat komentář? E-mailem! :·) Na komentare -zavináč- mujmalysvet -tečka- cz – do předmětu „Komentář: Šifrování disku je základ“. Připojit můžete i svou přezdívku a domovskou stránku.