Šifrovaný diskový oddíl v linuxu

Tak jsem se rozhodl, že si rozjedu šifrovaný diskový oddíl na svém harddisku. Mám tu pár set mega dat, které bych nerad ukazoval na veřejnosti (žádné nelegální věci, jen nějaké firemní dokumenty a podobně).

Inspiroval jsem se článkem na www.abclinuxu.cz kde autor použil CryptoAPI. Já jsem si vybral Loop-AES, protože loop-aes patch pro util-linux verze 2.12pre, takže nemusím používat nějakou prehistorickou verzi (používám jádro 2.4.22, které už má CryptoAPI implementované, ale nějak se mi líbí loop-aes, hlavně kvůli té verzi util-linux).

Začínáme…

Jako první si stáhněte z adresy http://loop-aes.sourceforge.net/ soubor loop-AES-latest.tar.bz2 a z adresy ftp://ftp.kernel.org/pub/linux/utils/util-linux/ soubor util-linux-2.12pre.tar.bz2. Teď máme vše co budeme potřebovat stažené a můžeme zažít s instalací.

Instalace

Musíte překompilovat jádro s podporou modulů a vypnout modul loop:

CONFIG_MODULES=y
CONFIG_BLK_DEV_LOOP=n

volba CONFIG_KMOD=y se doporučuje ale není nezbytně nutná.
(CONFIG_BLK_DEV_LOOP=y nebo CONFIG_BLK_DEV_LOOP=m nesmí být, protože by se pak nedalo používat šifrování.)

Loop-AES se překládá samostatně, takže při změně Loop-AES se nemusí rekompilovat jádro.
Zdrojové kódy Loop-AES si rozbalíme, přesuneme se do adresáře a spustíme make:

tar -cjf loop-AES-latest.tar.bz2
cd loop-AES-v1.7e
make

tím si vyrobíme modul loop.o, který si nakopírujeme do adresáře s modulama a spustíme depomod

cp loop.o /lib/modules/`uname -r`/kernel/
depmod -a

Instalace util-linux se dela presne podle tohoto postupu:
(předpokládám, že máte adresář loop-AES-v1.7e ve stejném adresáři jako zdrojové kódy k util-linux)

bzip2 -d -c util-linux-2.12pre.tar.bz2 | tar xvf -
cd util-linux-2.12pre
patch -p1 <../loop-AES-v1.7e/util-linux-2.12pre.diff
CFLAGS=-O2 ./configure
make SUBDIRS="lib mount"
cd mount
install -m 4755 -o root mount umount /bin
install -m 755 losetup swapon /sbin
rm -f /sbin/swapoff && ( cd /sbin && ln -s swapon swapoff )
rm -f /usr/share/man/man8/{mount,umount,losetup,swapon,swapoff}.8.gz
install -m 644 mount.8 umount.8 losetup.8 /usr/share/man/man8
install -m 644 swapon.8 swapoff.8 /usr/share/man/man8
rm -f /usr/share/man/man5/fstab.5.gz
install -m 644 fstab.5 /usr/share/man/man5
cd ..

Pro vyzkoušení funkčnosti spustíme přikaz make tests v adresáři loop-AES-v1.7e, když na konci vypadne *** Test results ok *** tak je vše v naprostém pořádku a můžem pokračovat dál.

Loop-AES + GnuPG

Protože používám GnuPG tak jsem se rozhodl pro zkombinování Loop-AES a s gpg klíčem. Postup je pěkně popsaný v README k Loop-AES (to co jsem vlastně doteď napsal je jen výtah a počeštění z README), taky se mi moc nechtělo zadávat minimálně 20ti místné heslo.

Vytvoření klíče pro šifrování:

head -c 45 /dev/random | uuencode -m - | head -n 2 | tail -n 1 \
| gpg -e -a -r "zdenda@zdenda.com" > /namountovany_usb_flash_disk/keyfile.gpg

Místo zdenda@zdenda.com si tam napište svůj identifikátor klíče (hlavně se nespleťte v gpg klíči!). /namountovany_usb_flash_disk/ je adresář s flash diskem, je doporučené skladovat keyfile.gpg mimo počítač se zašifrovaným diskem.
Do /etc/fstab přidejte záznam(vše na jednom řádku):


/dev/hda4 /mnt/crypt ext3 user,defaults,noauto,loop=/dev/loop3,encryption=AES128,\
gpgkey=/namountovany_usb_flash_disk/keyfile.gpg,gpghome=/home/tsunami/.gnupg/ 0 0

Cesty si změnte podle svého.
/home/tsunami/.gnupg/ je adresář s gpg klíčema.
/dev/hda4 je prázdný diskový oddíl, který budeme šifrovat.

Vytvoření souborového systému na šifrovaném oddílu:

losetup -F /dev/loop3
mkfs -t ext3 /dev/loop3
losetup -d /dev/loop3
mkdir /mnt/crypt

Teď už můžete přimountovat šifrovaný diskový oddíl:
mount /mnt/crypt

Loop-AES + normální heslo

Heslo musí být miniálně 20 znaků (kdo si ho má pamatovat? 🙂 Ať žije paranoia.

losetup -e AES128 -T /dev/loop0 /dev/hda4
mkfs -t ext3 /dev/loop0
losetup -d /dev/loop0
mkdir /mnt/crypt

do /etc/fstab přidejte:

/dev/hda4 /mnt/crypt ext3 defaults,user,noauto,loop=/dev/loop0,encryption=AES128 0 0

Šifrovaný “virtuální” disk

Virtuální disk vytvoříme příkazem
dd if=/dev/zero of=mujsifrovanejdisk bs=1M count=50
kde mujsifrovanejdisk je nazev souboru, který bude vytvořený a count=50 znamená, že bude mít 50MiB. zašifrování provádíme stejně jako v případě normální partition, ale do vsech příkazů pířeme cestu k souboru… (v mém případě místo /dev/hda4)

Šifrované CD

Zatím jsem ho neřešil. Teoreticky by to mělo být možné. Zřejmě by šlo vyrobit zašifrovaný “virtuální” disk (soubor) a ten přímo vypálit na CD. Běžně tak vyrábím CD s FS ext2.