Portál AbcLinuxu, 20. dubna 2024 02:49

Šifrované filesystémy - II

11. 7. 2003 | Petr Novický
Články - Šifrované filesystémy - II  

V minulém díle jsme si vše připravili na vytvoření a použití šifrovaných filesystémů. Ostatní se dozvíte dnes.

Pustíme se tedy do toho.

Použití

Nyní, když už máme připraveny všechny potřebné moduly, můžeme se pustit přímo do vytvoření našeho skvělého šifrovaného filesystému. Rozhodněme se například, že zašifrujeme veškerá data v adresáři /home. Již jsme se zmínili, jak CryptoAPI podporuje šifrování filesystému pomocí loopback zařízení, nyní si řekneme, jak to vlastne funguje.

Pokud připojujeme filesystém tradičním způsobem, tedy příkazem mount, jako zde:

mount -t ext2 /dev/hda3 /home ,

říkáme tím vlastně kernelu, že všechny požadavky týkající se adresáře /home a všech dat v něm uložených přísluší danému diskovému oddílu. Pokud však použijeme loopback zařízení, bude toto přiřazení nepřímé. Nejdříve připojíme loopback zařízení na /dev/hda3 a poté adresář /home přiřadíme tomuto zařízení. Výsledným efektem je fakt, že požadavky na soubory v /home nejdou k zařízení přímo, nýbrž přes loopback zařízení. Situaci znázovňuje následující obrázek.

Pripojeni media pres loopback zarizeni

Práve v něm je ono "jádro pudla". Příkazy diskovému oddílu zde mohou být zachycovány a po příslušných změnách posílány dále přímo diskovému zařízení. V našem případě se změny samozřejmě rovnají šifrování (zápis) nebo dešifrování (čtení) z disku. Viz obrázek:

Pouziti filtru Cryptoloop

Existují dva druhy šifrování dat na našem stroji. Buď k šifrování použijeme nějaké zařízení, které máme k dispozici (disk, obraz CDROM), nebo vytvoříme filesystém v souboru někde v adresářové struktuře. První případ je jednodušší, my se blíže seznámíme zejména s druhým z nich.

Zde musíme vytvořit soubor, ve kterém bude náš filesystém obsazen. Čím větší ho vytvoříme, tím více dat do něj budeme moci uložit. Po vytvoření již jeho velikost nemůžeme měnit, jinak bychom přišli o všechna uložená data. Soubor musíme zaplnit daty, aby zabral příslušné místo na disku. Zde máme dvě možnosti jak místo zaplnit. Buď použijeme nuly z /dev/zero nebo náhodné byty z /dev/urandom. Druhá z obou variant je pomalejší, ale poněkud bezpečnější, útočník totiž nevidí přesně místo v souboru, kde se uložená data nacházejí. V případě použití /dev/zero je může jasně odlišit zjištěním, kde se nenacházejí nuly.

Dalším nezbytným krokem je nahrání potřebných modulů do kernelu. Tento krok odpadá, jestliže jsme podporu CryptoAPI a Crypto Devices zakompilovali přímo do kernelu. Jsou potřeba 4 hlavní moduly:

První tři moduly bychom měli, pokud máme správně nastavené závislosti, nahrát příkazem:

modprobe cryptoloop

Správné nahrátí všech potřebných modulů si můžeme ověřit příkazem lsmod, jehož výstup (nebo spíš jeho část) by měla vypadat následovně:

Module                  Size  Used by    Not tainted
cryptoloop              1884     0      (unused)
loop                    7664     0      [cryptoloop]
cryptoapi               3204     0      [cryptoloop]

Dalším krokem je vytvoření souboru, ve kterém bude náš filesystém uložen. Pro tento úkol použijeme příkaz dd. Zařízení /dev/urandom generuje pseudo náhodná data a používá k tomu zařízení /dev/random. Poskytuje konstantní tok dat, jejichž náhodnost (entropie) se snižuje se snižováním entropie dat poskytovaných zařízením /dev/random. Nejlepších výsledků dosáhneme, pokud má tento tok dat k dispozici zdroj náhodných událostí jako je pohyb myší atd. Z toho vyplývá, že po spuštění následujícího příkazu se doporučuje co nejvíce psát na klávesnici a hýbat myší. Obojím způsobem míru náhodnosti dat produkovaných /dev/urandom podporujeme. Zmíněný příkaz může vypadat následovně:

dd if=/dev/urandom of=/cryptofile bs=1M count=500

Máme tímto vytvořen 500MB soubor s názvem cryptofile v kořenovém adresáři. Pokud jsme již nenahráli modul s šifrou do kernelu, uděláme to nyní příkazem:

modprobe cipher-twofish

Nyní můžeme vytvořený soubor připojit jako klasické zařízení pomocí příkazu

losetup -e twofish /dev/loop0 /cryptofile

Jak jistě předpokládáte, parametrem -e určujeme použitou šifru, /dev/loop0 je je použité loop zařízení a /cryptofile námi vytvořený soubor. Program se nás zeptá na velikost klíče a na heslo. Pro náš příklad mužeme zvolit třeba 128 bitový klíč. Samozřejmě čím větší klíč zvolíme, tím bude těžší pro neoprávněnou osobu uložená data dešifrovat (záleží ovšem i na použité šifře).

Zadané, libovolně dlouhé heslo je použito hashovací funkcí pro vygenerování klíče. Dalším úkolem, který bude nutné provést, je vytvoření filesystému v našem zařízení. Pro tento účel použijeme klasický příkaz mkfs.

mkfs -t ext2 /dev/loop0

Samozřejmě nemusíme použít zrovna Ext2; volba filesystému závisí čistě jen na nás. Teď již máme na zařízení vytvořený souborový systém a můžeme ho připojit.

mount -t ext2 /dev/loop0 /mnt/crypto

Nyní můžeme filesystém používat jako jakýkoliv jiný. Co se týče šifrovaného hlavního diskového oddílu, tak na stránkách projektu se dovídáme, že je to sice možné, ale nedoporučuje se. Z části kvůli výkonu a také proto, že při bootování vyžaduje naši pozornost. Lepší je šifrovat pouze menší množství důležitých dat. Dává nám to i větší smysl: na co šifrovat programy a části systému, které jsou naprosto běžné na každém počítači, kde je používán Linux.

Pokud odpojujeme šifrovaný diskový oddíl, je nutné použít kromě příkazu umount i losetup, kterým odpojíme loop zařízení. Pokud bychom použili jen příkaz umount, může další uživatel přípojit tento diskový oddíl bez znalosti hesla! Použijeme tedy například následující sekvenci příkazů:

umount /mnt/crypto
losetup -d /dev/loop0

Zavěr

Doufejme, že tento seriál všem zájemcům pomohl dostat se do problematiky šifrovaných filesystému, jen bych ještě měl jednou připomenout, že CrytoAPI je pouze jakési rozhraní a jeho možnosti použití jsou daleko širší.

CryptoAPI vypadá velmi slibně. a v budoucnosti se to ještě zlepší. Tým vyvíjejíci CryptoAPI má v plánu zpřehlednit a normalizovat styl implementace jednotlivých šifer, jelikož některé implementace byly přebrány odjinud. Dále má v plánu implementovat šifry přímo v assembleru pro jednotlivé architektury. Ovšem to vše nejspíš závisí na dostatku pracovních sil. Pokud by do toho někdo měl chuť, jistě by vaši pomoc jen uvítali.

Související články

Šifrované filesystémy - I
Seriál: Moderní souborové systémy
Seriál: Zálohování v Linuxu

Odkazy a zdroje

The GNU/Linux CryptoAPI site
Porovnání rychlostí populárních šifrovacích algoritmů

Další články z této rubriky

Úvod do Dockeru (1)
Paralelizace běžných činností v konzoli pomocí GNU Parallel
Unixové nástroje – 26 (triky pro práci v Bashi)
Unixové nástroje – 25 ((s,c)fdisk, gdisk, parted a findmnt)
Linux: systémové volání splice()

Diskuse k tomuto článku

11.7.2003 08:23 Peter Bodnar
Rozbalit Rozbalit vše crypto disk
Odpovědět | Sbalit | Link | Blokovat | Admin
ako by sa teda robilo cryptovanie priamo na particii, a nie na subore?
11.7.2003 11:07 pedro
Rozbalit Rozbalit vše crypto disk
losetup -e twofish /dev/loop0 /dev/hda3
11.7.2003 08:45 pele
Rozbalit Rozbalit vše Scramdisk pro Linux
Odpovědět | Sbalit | Link | Blokovat | Admin
Kdo zna Scramdisk pro win9x, a nebo DriveCrypt (ten bohuzel uz neni free, mozna ho bude zajimat Scramdisk pro linux, blizsi viz : http://www.scramdisklinux.n-club.de/
Pavel Dobeš avatar 11.7.2003 11:23 Pavel Dobeš | skóre: 21 | Praha
Rozbalit Rozbalit vše hmm...
Odpovědět | Sbalit | Link | Blokovat | Admin
To je hezky. Akorat, ze na ovladani losetup musi byt root. A na mount z prikaove radky taky. To uz je potom bezpecnejsi udelat script a ten spoustet pres sudo s pravy roota, ktery mountuje/odmountovava a ovlada losetup. Pak se zajisti i nemoznost samostatneho odmontovani (kdyz na to nebude mit prava ve fstab). Tim se zajisti, ze bez hesla se k disku nikdo nedostane... Treba i pro to, ze nebude ve 'spravne' skupine. PaD PS: Pokud neco z toho je spatne, tak me prosim opravte...
Windows? A kdo to ještě používá?
11.7.2003 22:32 Ondrej Skutka
Rozbalit Rozbalit vše hmm...

Obejiti nutnosti roota lze vyresit pridanim sifrovaneho systemu do fstabu (alespon v Mandraku):

/cryptofile  /mnt/crypto  ext2  defaults,noauto,loop,encryption=AES256,nodev,users,exec 0 0

19.7.2003 21:31 kix
Rozbalit Rozbalit vše hmm...
heslo se v tomto případě zadává interaktivně při bootu?
21.7.2003 19:20 Petr Mach
Rozbalit Rozbalit vše hmm...
Protoze je jako parametr zadano i noauto, tak se disk pri bootu automaticky nepripoji. Ale diky parametru user ho muze pripojit v pripade potreby i obycejny uzivatel, je to nemlich to same, jako u jinych disku, disket atd. Protoze tam jsou uz uvedeny i ostatni parametry, nemusi je uzivatel ani znat a zadavat rucne. Opravdu klasika.
11.7.2003 14:31 GiX
Rozbalit Rozbalit vše bobtnání
Odpovědět | Sbalit | Link | Blokovat | Admin
Nelze nejak vytvorit "rostouci" kryptovany filesystem( tedy rostouci loopback device ) , misto abych musel na zacatku natvrdo definovat velikost toho souboru? Asi to vyzduje i jinej souborovej system, nez "obycejne" ext2 a spol... Nejake tipy? Take bych uvital nejaky kratsi clanek o kvalitach jednotlivych algoritmu..
14.7.2003 11:59 fikus
Rozbalit Rozbalit vše bobtnání
zarizeni /dev/hda1 taky nemuze bobtnat, kdyz uz je jednou harddisk rozdeleny.
10.8.2005 23:49 Petr Holik
Rozbalit Rozbalit vše Re: bobtnání
Zariyeni samoyrejme bobtnat muze(napr raid pole...). Pro rozsireni EXT2/3 slouzi utility e2online resp. e2resize nebo resize2fs. zrovna tak si myslim ze jde menit i velikost sifrovaneho oddilu. POkud sifrovani funguje trnasparentne melo by stacit pridat na konec souboru nuly cat /dev/zero >> /cryptofile a pak dat e2resize pripadne ho pripojit a dat e2online zalezi podle kernelu. Doporucuji vyzkouset na nejaky odpadnich datech :)
11.7.2003 15:34 PSIkappa
Rozbalit Rozbalit vše bcrypt
Odpovědět | Sbalit | Link | Blokovat | Admin
Akosi som tu nikde nevidel spomenuty bcrypt, to skutocne nikto nepozna alebo nepouziva ? http://bcrypt.sourceforge.net/
11.7.2003 20:10 kix
Rozbalit Rozbalit vše zabezpečení
Odpovědět | Sbalit | Link | Blokovat | Admin
Nepochopil jsem způsob zabezpečenení. Kde je uložen šifrovací klíč, jakým způsobem se při přístupu k filesystému autentizuji apod.
11.7.2003 22:23 Ondrej Skutka
Rozbalit Rozbalit vše zabezpečení
No - ono to tak bezpecne neni, protoze se heslo uklada 'jen tak' v pameti a tudiz i na swapu. Jedina moznost je mit zasifrovany i swap (lze sifrovat pri kazdem bootu automaticky nahodnym retezcem), coz ovsem znacne snizi vykon systemu.
12.7.2003 05:47 Michal B.
Rozbalit Rozbalit vše zabezpečení
predpokladam, ze heslo zadane k pripojeni sifrovaneho oddilu - po jeho odpojeni je vymazano jak z pameti, tak ze svapu. a pri rebootu uz tam neni vubec. (jinak by to sifrovani ztracelo smysl)
12.7.2003 09:08 kix
Rozbalit Rozbalit vše zabezpečení
Ano, o to také mi šlo - pokud už je klíč na disku, musí být někde vyžadováno heslo před přístupem na šifrovaný disk. Kde to místo je. Pokud chci připojit dříve vytvořený šifrovaný oddíl(soubor), musím použít znovu losetup -e twofish /dev/loop0 /cryptofile? (a tento program se ptá na heslo?) A pak teprve mount -t ext2 /dev/loop0 /mnt/crypto?
12.7.2003 23:50 Honza
Rozbalit Rozbalit vše RH9
Mam RH9, vse funguje bez problemu akorat jako sifru zadavam DES. Zepta se mne na heslo, zadam, pak napise Init(az 16 sestnactkovych cisel) a at mu ty cisla zadam v jakemkoli tvaru0xA,0x1F atd. napise ioctl: LOOP_SET_STATUS: Nepripustny argument Nevite nekdo v cem delam chybu? Diky za pomoc
15.7.2003 20:02 Petr Novický | skóre: 27
Rozbalit Rozbalit vše RH9
No zaprve je chyba pouziti DES, to fakt neni dobry napad. Jsou rychlejsi a hlavne daleko BEZPECNEJSI algoritmy, vetsina lidi to vi ;), autory CryptoAPI nevyjimaje => uz se o DES dal urcite starat nebudou. No k tomu problemu... ja nejsem zadny kryptoanalytik, takze ted mne berte s rezervou... vypada to, ze ten klic musi mit spravne nastavene paritni bity... kdyz spravne nastavene nejsou zahlasi to tuhle chybu pro 3DES to se to pocita samo, ale jak rikam z duvodu, ze samotny algoritmus je zastaraly se pochopitelne nikdo nenamahal se sepisovanim kodu, ktery by automaticky pocital paritni bity klice i u DES. Snad jsem vam pomohl tim, ze pouzijete nejaky jiny algoritmus AES napr.. no a kdyz ne... tak hura do studia literatury o DES
17.7.2003 10:39 Josif
Rozbalit Rozbalit vše RH9
Tohle se mi delo taky kdyz kernel z nejakeho duvodu nemohl nacist modul loop_twofish (zlyhal nebo sem zapomen depmod -a po instalaco modulu). Zkus predtim dat modprobe loop_twofish nebo co za sifru vlastne pouzivas.
13.7.2003 22:51 Ondrej Skutka
Rozbalit Rozbalit vše zabezpečení

No - behem behu systemu, kdyz je to primountovane je to v pameti, po odmountovani (rebootu) to je pouze ve Vasi hlave. Kriticke je, kdyz se nekdo dostane fyzicky k Vasemu pocitaci. To pak napriklad (pokud je namountovany sifrovany system) muze vytrhnout kabel ze site a pak prohlidnout harddisk (swap) z jineho pocitace. S trochou stesti bude heslo prave ve swapu.

Ale i po rebootovani ho lze teoreticky dostat. Slysel jsem, ze lze z harddisku precist az 6 vrstev zpatky (po prepsani)!

Tzn. pro paranoiky: Sifrovat i swap!

14.7.2003 07:51 LK
Rozbalit Rozbalit vše zabezpečení
> Slysel jsem, ze lze z harddisku precist az 6 > vrstev zpatky (po prepsani)! No vida, mne obcas nejde precist ani ta posledni :-)))
17.7.2003 12:06 ivan
Rozbalit Rozbalit vše zabezpečení
6 vrstev? Teoreticky, po rozebrání disku, speciálním zařízením. Tušíte někdo, kdo to má a co to stojí? Ale ten swap to by mohla být smůla.
17.7.2003 21:03 ACMik
Rozbalit Rozbalit vše zabezpečení
NSA, strasne moc, zakazkove nedelaji :)
18.7.2003 10:01 ivan
Rozbalit Rozbalit vše zabezpečení
ano, pre paranoikov sifrovat aj swap a pri kazdom shutdowne ho 7krat prepisat ;)
28.7.2003 13:22 trupik
Rozbalit Rozbalit vše zabezpečení
paranoici by swap nemali pouzivat vobec ...
14.3.2005 19:50 Krakonoš | skóre: 17 | Nová Ves v Horách
Rozbalit Rozbalit vše Re: zabezpečení
Moje slova :)...Kdyz jednou delam sifrovanej fs, tak proboha nepouziwam swap, to je blbost...Jenom to chce co nejvic pameti, ale beham bez swapu porad a pohoda...
30.3.2005 17:10 Krakonoš | skóre: 17 | Nová Ves v Horách
Rozbalit Rozbalit vše Par dotazku
Odpovědět | Sbalit | Link | Blokovat | Admin
Ted sem se rozhod ze na novym systemu si udelam sifrovanej fs...Ale mam par dotazku, snad nekdo bude umet poradit.

Jedna vec co me trapi je, ze budu muset zadavat heslo dvakrat. Jednou do crypta, jednou do systemu...A uprimne se mi to zrovna dvakrat nechce (sem clovek linej od prirody :]). Napadlo me, ze by se mohlo jako heslo pouzit heslo uzivatele co se prihlasi, otazkou je, jestli by slo takhle pouzit hesla vsech uzivatelu v systemu. Popripade i jeden by stacil - porad je to pohodicka a je to automat.

Mno a druha vec je,zda se neda udelat CD, na kterem bude klic a pro pripojeni fs bude zapotrebi tohle medium i heslo (nebo se pouzije to heslo prihlaseneho uzivatele).

A jeste detail na konec - mozna by se siklo rict, jaka sifra je nejbezpecnejsi :]...Jedna veta nikoho nezabije a hledat se mi to taky dvakrat nechce...Ale kdyz autor pouziva twofish (myslim), tak to asi bude bezpecne dost :]

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.