Šifrovaná data a odemknutí USB klíčem

Pokud potřebujete zajistit data před krádeží stroje a nezáleží vám na jejich okamžité dostupnosti po restartu, je možné využít následující řešení. FreeBSD obsahuje dva interface pro šifrvání, geli a gbde. Osobně mi připadá geli příjemější, hlavně ale rychlejší.

1) Vybereme si disk, na kterém budou uložena šifrovaná data. Současná data je nutné zazálohovat, protože o ně přijdeme. Pro tuto konfiguraci je zvolen device /dev/ad1s1a (druhý disk, první partition, první slice). Zároveň si seženeme jeden USB klíč.

2) Nejprve upravíme konfigurační soubor pro startování systému /boot/loader.conf
geom_eli_load="YES"
geom_label_load="YES"


3) Dále vytvoříme záznamy pro ramdisk o velikosti mírně větší než bude velikost klíče a smažeme informace o stávajícím datovém disku. Tyto úpravy budou v souboru /etc/fstab
# MEMORY Devices
md /keys mfs rw,-s3m 0 0
# GELI Encrypted Devices /etc/efstab
#/dev/ad1s1a.eli /data ufs rw 0 0


4) Vytvoříme soubor /etc/efstab, který bude obsahovat záznamy o mount pointech pro šifrovaný disk (záznam, který přesunujeme z fstab) a záznam pro namontování USB disku.
# Device Mountpoint FStype Options Dump Pass#
# GELI Encrypted Devices
/dev/ad1s1a.eli /data ufs rw 0 0
# USB Devices
/dev/ad2s1c /check ufs rw 0 0


5) Upravíme soubor /etc/usbd.conf pro verzi 6.x, soubor /etc/devdd.conf pro verzi 7.x. Díky tomu se po zasunutí USB disku usb daemon sám postará o zbytek práce. Aktuální hodnoty Vendor ID a Product ID lze zjistit příkazem usbdevs -dv, kde u vybranáho zařízení lze najít nejprve číslo produktu a pak výrobce.

device "USB FlashDisk"
   devname "umass[0-9]+"
   vendor 0x1307
   product 0x0163
   attach "/bin/flash_key"


6) Nakonec vytvoříme soubor /bin/flash_key a přidělíme mu práva 700, vlastník root:wheel, aby se do něj nikdo moc nedíval.
#!/bin/sh
sleep 1
if [ -e "/keys/mounted" ];
then
   echo "Device already mounted"
   exit
fi
/sbin/mount -F /etc/efstab /check
cp /check/aes.key /keys
/sbin/umount /check
/bin/chmod -R 700 /keys
/bin/chmod -R 600 /keys/aes.key
/sbin/geli attach -p -k /keys/aes.key /dev/ad1s1a
sleep 1
/sbin/mount -F /etc/efstab /data


7) Pro kontrolu je možné ověřit, zda je USB daemon zapnutý. To lze zjistit v souboru /etc/rc.conf, kde musí být řetězec usbd_enable="YES"

8) Vlastní konfigurace začíná načtením interface geli.
kldload geom_label
kldload geom_eli

9) Dále je potřeba vytvořit dostatečně velký klíč. Protože bude na USB disku, není potřeba šetřit.
mount /keys
dd if=/dev/random of=/keys/ase.key bs=1024 count=2048

10) Nyní se připojí zařízení a vybere se vhodný algoritmus. Standardně je použit AES-128 v CBC módu, ale je možné použít i Blowfish a 3DES. Toto zařízení je následně nutné inicializovat. Postup je zápis metadat, připojení zařízení a vytvoření souborového systému.
geli init -s 4096 -P -K /keys/aes.key /dev/ad1s1a
geli attach -p -k /keys/aes.key /dev/ads1a
dd if=/dev/random of=/dev/ad1s1a.eli bs=65536
newfs -L Encrypted -U -O2 /dev/ad1s1a.eli


POZOR !!! Příkaz geli init provede znovuvygenerování Master Key (standardně 512 byte) pro šifrovací algoritmus. Pokud nemáte zálohu klíče, je prakticky nereálné se k datům dostat, jsou zašifrovaná jiným než aktuálním klíčem. V takovém okamžiku nezbývá než obnovit data ze zálohy !!!

11) Dalším krokem je vytvořit vhodnou konfiguraci na vybrané USB paměti. Script je možné upravit i pro FAT32, ale podle mého názoru je lepší moc neukazovat data. Proto je připraven pro konfiguraci, kde první je malý UFS2 oddíl, druhý je standardní FAT32. Pomocí nástroje sysinstall se na USB disku smaže partition table a vytvoří se jedna malá, která bude o režii větší než velikost klíče. Vytvoří se na ni UFS systém a nakopíruje klíč aes.key. Poté je možno například ve Windows vytvořit druhý oddíl, postavený například na standardní FAT32.

12) Pro jistotu vytvořte zálohu master klíče pomocí příkazu:
geli backup /dev/ad1s1a master.key

Pokud jste všecho provedli správně, disk se po restartu a vložení klíče sám namountuje. Pokud jste někde zapoměli klíč, tak protože byl na RAMDisku, máte smůlu. A pokud jste si šifrovaná data nezálohovali ... ehmm... doufám tedy, že vás alespoň potěší černý humor Maxe Canona na http://www.redmeat.com/redmeat/current/index.html

Pro inspiraci:
Místo USB klíče lze použít SSH. Při přihlášení se objeví odemykací "klíč pro klíč", šifrovaný klíč lze stáhnout například přes FTP a dekódovat. Výhodu je možnost scripty ověřit "oprávněnost" dotazu, IP adresy atd.


Podrobnější informace:
FreeBSD Handbook
AES
BlowFish
TripleDES
Modes of Operation

Powered by Drupal - Design by artinet