Portál AbcLinuxu, 26. dubna 2024 23:11

Šifrované filesystémy - I

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

Jak vytvořit bezpečný úložný prostor přímo na vašem harddisku. Ve dvou dílech se dozvíte, jak systém připravit, konfigurovat a účelně využívat.

Úvod a motivace

Mnoho problémů s bezpečností linuxových strojů může být připisováno chabému zabezpečení, pokud má útočník fyzický přístup k počítači. Tehdy si s ním může dělat co si jen zamane (včetně získání všech dat na počítači uložených). Napadne nás jistě pousta scénářů, kdy k něčemu podobnému může dojít a kdy zneužití (prozrazení) může náš život přinejmenším zkomplikovat.

Je tedy jistě vhodné tomu nějak zabránit. Jednou z nepříliš rozumných možností by bylo před naším počítačem hlídkovat nebo jej uložit někde do trezoru. Tento postup je jistě vhodný, ale musíme být dostatečne silní, aby se našeho harddisku stejně nikdo nezmocnil.

Daleko elegantnější bude, když obsah našeho disku zašifrujeme a případný útočník pak dostane pro něj naprosto nepoužitelnou hromádku dat. Postup jak šifrovaný filesystém vytvořit si právě zde vysvětlíme.

Linux CryptoAPI

Úvod

Než se pustíme do vytvoření šifrovaného filesystému, je potřeba začít poněkud zeširoka. V dnešní době můžeme pomocí externích patchů linuxového jádra zašifrovat disk, síťové spojení atd. V tomto článku se zaměříme hlavně na Linux CryptoAPI.

Nemusíme si zde jistě dlouze vysvětlovat, o co to vlastně v šifrování jde. Pokud si v této oblasti někdo není příliš jistý, na internetu se jistě dá objevit spousta materiálů, které pomohou nejasnosti eliminovat.

Tím, že jsme přidali podporu šifrování do "kernel space", jsme získali spoustu nových možností jak důležité informace více zabezpečit. Od šifrování disků po IPsec a jiné druhy šifrování komunikace.

V současné době jsou k dispozici dvě možnosti podpory šifrování na úrovni kernelu. Je jím loop-AES a CryptoAPI, kterým se budeme zabývat dále. Obě z těchto variant umožňují použití bez nutnosti kompilace nového kernelu (stačí pouze zkompilovat příslušné moduly), a dokonce bez nutnosti restartu stroje. Oba způsoby tedy umožňují podporu šifrování v kernelu formou modulů. V našem seriálu si ukážeme jak zprovoznit CryptoAPI při kompilaci kernelu.

Loop-AES je navržen pouze pro šifrování filesystému. Pro šifrování používá Advanced Encryption Standard (AES). Jeho implementace je rychlá a pro Intel x86 procesory je dokonce přímo v assembleru (pro ostatní platformy musíme použít implementaci v jazyce C). Další informace najdeme na domovské stránce tohoto projektu http://loop-aes.sourceforge.net/.

Naopak CryptoAPI poskytuje daleko rozsáhlejší možnosti použití. Obsahuje v sobě rozhraní, které umožňuje ostatním modulům využít možnosti šifrování dat. Šifrování filesystému je pouze jednou z aplikací. Další výhodou je možnost využití 12 různých šifrovacích technik a podpora použití filesystémů šifrovaných pomocí loop-AES.

Instalace

Budeme se zde zabývat instalací s kernelem řady 2.4, v případě 2.5 je problém jednodušší, jelikož podpora je přímo součástí jádra. K instalaci CryptoAPI tedy budeme potřebovat zdrojový kód kernelu (je také dobré vědět, o jaký kernel se jedná), dále pak zdrojové kódy CryptoAPI. Zde je nutno říci, že díky lehce zavádějícím informacím na domovských stránkách projektu CryptoAPI. instalace není úplně triviální záležitostí, Možností, jak CryptoAPI nainstalovat je více. My si zde povíme o jedné z nich, která by měla fungovat.

Předpokládejme kernel 2.4.20, jistě jej spousta z nás používá. Je nutné si stahnout zdrojové kódy tohoto kernelu (pokud je na svém stroji již nemáme). Dále získáme patch z adresy: http://www.kernel.org/pub/linux/kernel/people/hvr/testing/. Pro náš příklad se bude jednat o soubor patch-int-2.4.20.1.gz. Následující postup není jedinou možností, nicméně v praxi fungoval. Tedy vzhůru do práce!

Nejprve musíma patch rozbalit a poté aplikovat na zdrojové kódy připraveného kernelu. Čili zkopírujeme jej do adresáře se zdrojovými kódy kernelu a aplikujeme následujícím příkazem:

patch -p1 < patch-int-2.4.20.1

Nyní musíme nastavit konfigurační soubor kernelu, abychom poté mohli získat potřebné moduly (nebo jádro s přímou podporou CryptoAPI). Po aplikování patche nám přibude ve výběru (jádro nejlépe nastavíme utilitou spuštěnou příkazem make menuconfig případně xconfig) další položka v menu s názvem Cryptography support (CryptoAPI). V ní je nutné zaškrtnout položky CryptoAPI support a v Crypto Devices položku Loop Crypto support. Dále si vybíráme z několika možných šifer a tzv. one-way (jednocestné) funkce. Je vhodné vybrat alespoň jednu šifru, jelikož bychom pak neměli čím šifrovat. Při výběru té správné nám částečně pomůže následující kapitola. Také nesmíme zapomenout zaškrtnout podporu Loopback device v sekci Block devices! Je to jediná položka, kterou potřebujeme a která je mimo sekci Cryptography support. Proto je celkem jednoduché ji vynechat.

Předpokládejme, že již máme vybrány všechny nutné volby. Můžeme se tedy pustit do kompilace kernelu. Postup se od tohoto okamžiku neliší od běžné praxe, proto jím nebudeme zdržovat a půjdeme dále.

Dalším nezbytným krokem je stahnutí a nainstalování programu losetup, který je součástí balíčku util-linux. Ukážeme si tedy, jak jej správně nainstalovat.

Nejdříve si musíme balíček stáhnout. Najdeme jej například na serveru ftp.kernel.org nebo na dalších mirrorech se zdrojovými kódy kernelu. Pro správný chod tohoto softwaru ještě potřebujeme patch, který najdeme například zde.

Jelikož není k dispozici patch pro nejnovější verzi util-linux, použijeme verzi 2.11r. Stáhneme tedy util-linux-2.11r.tar.gz a odpovídající patch util-linux-2.11r.patch.gz. Rozbalíme util-linux i patch a patch na nej aplikujeme běžným způsobem:

patch -p1 < util-linux-2.11r.patch

Dále postupujeme podle přiloženého souboru INSTALL, obvykle klasickou kombinací příkazů:

./configure
make
make install

Nyní máme vše připraveno a můžeme začít používat šifrované filesystémy.

Srovnání šifer z hlediska rychlosti

Výběr šifry, kterou použijeme pro náš filesystém, je jistě také důležitou volbou. Nebudeme si zde uvádět fakta o bezpečnosti jednotlivých šifer, zaprvé se to na tento server tolik nehodí a navíc by to bylo moc obsáhlé. Všem zájemcům doporučuji použít vyhledávače a najít si potřebné informace na internetu, určitě neco najdou.

Kromě bezpečnosti nás však bude zajímat i rychlost jednotlivých šifer, jelikož nikdo si nechce svůj počítač příliš zpomalovat. Hodnoty uvedené v tabulce nesouvisí přímo s CryptoAPI a dokonce nebyly získány na operačním systému Linux. Nám však mohou posloužit k porovnání jednotlivých šifer mezi sebou, o což nám jde.

U každé šifry je uveden počet zašifrovaných bytů dat za sekundu. Test byl proveden z dnešního hlediska již na zastaralém počítači (s procesorem Intel Celeron 450MHz). V dnešní době dosáhneme hodnot výrazně vyšších.

Sifra B/s
AES (Rijndael) 11751322
Blowfish 9013043
CAST5 (CAST-128) 9019403
DES 7372170
GOST 5216999
IDEA 6388278
MARS 16690115
RC5 26025058
RC6 20230270
Serpent 6982324
Twofish 10168780
3DES 2457390

Zavěr

To je pro dnešek vše. Příště si povíme něco o vytváření a používání šifrovaných filesystémů.

Související články

Šifrované filesystémy - II
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()

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