EncFS: šifrování souborů jinak a bez problémů

30. 10. 2012
Doba čtení: 8 minut

Sdílet

Šifrovat potřebuje každý. Všichni máme na disku nějaká data, která bychom nechtěli prozradit komukoliv jinému. Hesla k webům, privátní klíče, lechtivé fotky nebo kopie dokladů a smluv. Řešení existuje nepřeberné množství, liší se především v tom, jak a kam šifrovaná data ukládají. EncFS ovšem vystupuje z řady.

Každý máme někde data, která potřebujeme zašifrovat. V dnešní „době cloudové“ je to potřebnější než dřív. Data se nám toulají kdesi po světě a my nad nimi ztrácíme kontrolu. Jediným řešením je pořádné šifrování. Naštěstí je nástrojů celá řada.

Pokud potřebujete zašifrovat data na pevném disku, flash disku, zálohu na domácím poli (NAS) nebo třeba soubory v cloudovém úložišti, můžete zvolit třeba dm-crypt/LUKS přímo v jádře nebo populární a multiplatformní TrueCrypt. Vytvoříte si kontejner v souboru, do kterého pak budete ukládat citlivá data.

Tento postup má ovšem nevýhodu právě v onom kontejneru. Je statický, zabírá jedno velké místo na disku a musíte ho dimenzovat na kapacitu, které chcete v budoucnu dosáhnout. Manipulace s ním je obtížná a vytvořit takový kontejner na dálku není žádná legrace. Pokud je na druhé straně jen hloupé úložiště (třeba na USB disku), budete takový kontejner vytvářet půl dne.

Poznámka autora: Přesně takhle jsem donedávna fungoval. Na poli jsem měl 100GB soubor, ve kterém jsem měl zálohy. Stejně tak v Dropboxu. Pak jsem objevil EncFS, na který jsem rychle přešel a koncept velkého souboru zrušil.

EncFS šifruje soubory, ne disky

EncFS podobně jako ostatní šifrovací nástroje vytváří transparentní on-the-fly šifrovaný prostor, který se jeví jako běžný disk. Na rozdíl od jiných technologií však nešifruje celé blokové zařízení, ale jednotlivé soubory zvlášť. Ty jsou pak jedna ku jedné uložené ve svém adresáři, mají ale šifrovaný obsah i jméno.

To sice zvědavcům dovoluje zjistit počet a velikost souborů (ano, mám v Dropboxu ukrytých 22 souborů ve třech adresářích), ale nijak jim to nepomůže v odhalení jejich názvů či dokonce obsahu. To ve spojení s velmi silným šifrováním (použít lze libovolnou šifru z OpenSSL) dělá z EncFS velmi dobrý nástroj.

Jeho výhodou samozřejmě je, že není třeba předem vytvářet žádný kontejner. Šifrované soubory se ukládají do jednoho zvoleného adresáře přesně do té struktury, v jaké je pak vidíme v dešifrované podobě. Zakládají se adresáře, vytvářejí se sym linky a hard linky, vznikají a mažou se jednotlivé soubory.

Jdeme šifrovat

EncFS potřebuje ke své funkci především knihovnu OpenSSL a rozhraní FUSE (viz článek o FUSE). Oficiální software je tedy dostupný jen pro Linux, ale existují i porty pro další platformy (viz další text). Všechny potřebné balíčky najdete ve své distribuci, stačí nainstalovat balík  encfs.

Pro použití budeme potřebovat dva adresáře. Jeden bude sloužit jako skutečné úložiště šifrovaných dat (souborů) a ten druhý bude mountpoint, tedy adresář, ve kterém se nám objeví nešifrovaný obsah. Do obou musíme mít samozřejmě právo zapisovat. Dejme tomu, že použijeme adresáře ~/.zasifrovano a ~/odsifrovano. Můžeme rovnou připojovat pomocí příkazu encfs, zadat musíme absolutní cestu:

$ encfs /home/petr/.zasifrovano/ /home/petr/odsifrovano/

Program okamžitě zjistí, že adresář ~/.zasifrovano neobsahuje žádná EncFS data a dovolí jej interaktivně založit.

Vytvářím nový zašifrovaný svazek.
Vyberte prosím jednu z následujících voleb:
"x" pro expertní režim konfigurace,
"p" pro přednastavený režim "paranoia",
cokoliv jiného (včetně prázdné řádky) zvolí standardní režim.
?>

Zvolena standardní konfigurace

Configuration finished.  The filesystem to be created has
the following properties:
Filesystem cipher: "ssl/aes", version 3:0:2
Filename encoding: "nameio/block", version 3:0:1
Key Size: 192 bits
Délka bloku: 1024 bajtů
Každý soubor obsahuje 8-bajtovou hlavičku s jedinečným inicializačním vektorem.
Jména souborů zakódována řetězením inicializačních vektorů.
File holes passed through to ciphertext.

Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism.  However, the password can be changed
later using encfsctl.

Nové heslo pro EncFS:
Zopakujte heslo pro EncFS:

Nebylo to nic těžkého, stačilo stisknout enter a pak zadat dvakrát heslo. Samozřejmě můžete přejít do expertního módu a zvolit si spoustu parametrů od použité šifry přes délky klíčů až po to, jakým způsobem budou šifrována jména souborů. Standardní režim je ale dostatečně bezpečný, takže pokud nevíte nebo nechcete, prostě stiskněte enter.

V tuhle chvíli se staly dvě věci: v šifrovaném adresáři se založil soubor .encfs6.xml a svazek se rovnou připojil. Můžeme ho tedy začít používat, ale ještě se chvíli zdržíme u zmíněného souboru. Ten obsahuje navolené parametry našeho šifrovaného svazku a především také šifrovací klíč, který je sám zašifrován námi zvoleným heslem. To nám například umožňuje jednoduše změnit heslo (prostě se přešifruje klíč bez nutnosti přešifrovat všechna data), ale zároveň to znamená, že pokud o tento soubor přijdeme, nemůžeme už dešifrovat jednotlivé soubory. Správný paranoik může udržovat soubor odděleně a tím zcela zamezit pokusy o rozšifrování samotných dat.

Teď už můžeme do adresáře ~/odsifrovano nahrávat tajné soubory a ty se budou ihned objevovat v zašifrované podobě v adresáři ~/.zasifrovano. Můžeme si to hned vyzkoušet:

$ ls -l /home/petr/odsifrovano/
celkem 3072
-rw-r--r-- 1 petr petr   10556 zář 25 13:53 Hesla.txt
-rw-r--r-- 1 petr petr 3131511 zář 25 13:52 Kdo_zabil_JFK.pdf

$ ls -l /home/petr/.zasifrovano/
celkem 3072
-rw-r--r-- 1 petr petr 3131519 zář 25 13:52 FCH1r79GG0CQE,G0yW7FwQgI5DQE8uY75YbQp4li6Whp5-
-rw-r--r-- 1 petr petr   10564 zář 25 13:53 yK01HCGgvK2pc7n2sF2R,CLx

Vidíte šifrovanou reprezentaci našich tajných dat. Samotné soubory jsou o osm bajtů větší, protože na začátku každého souboru je pro zvýšení bezpečnosti uložen osmibajtový inicializační vektor (dá se vypnout v pokročilé konfiguraci). Teď už stačí jen zapisovat a data do adresáře ~/odsifrovano a ona se budou transparentně šifrovat a ukládat.

Až nás to přestane bavit, stačí zavolat následující příkaz a svazek bezpečně odpojit a tím uzamknout.

$ fusermount -u /home/petr/odsifrovano/

Úpravy šifrovaného svazku

K ovládání a dodatečné konfiguraci šifrovaného prostoru slouží utilita encfsctl, která je součástí balíčku s EncFS. Umožňuje především měnit heslo na již existujícím svazku, ale má i další možnosti. Ukážeme si je.

Jako parametry uvádíme příkaz k vykonání následovaný cestou ke svazku. Pokud žádný příkaz neuvedeme, provede se příkaz info. Zobrazí nám podrobné informace o svazku včetně použitého šifrovacího algoritmu, délce klíče, verzi EncFS, metodu šifrování názvů souborů a podobně.

$ encfsctl /home/petr/.zasifrovano/

Version 6 configuration; created by EncFS 1.7.4 (revision 20100713)
Filesystem cipher: "ssl/aes", version 3:0:0 (používá 3:0:2)
Filename encoding: "nameio/block", version 3:0:0 (používá 3:0:1)
Key Size: 192 bits
Using PBKDF2, with 81856 iterations
Salt Size: 160 bits
Délka bloku: 1024 bajtů
Každý soubor obsahuje 8-bajtovou hlavičku s jedinečným inicializačním vektorem.
Jména souborů zakódována řetězením inicializačních vektorů.
File holes passed through to ciphertext.

Dále máme pomocí příkazu passwd možnost změnit heslo. Jak už jsem psal, nedojde k přešifrování všech dat, ale jen klíče v řídicím souboru.

$ encfsctl passwd /home/petr/.zasifrovano/

Enter current Encfs password
Heslo pro EncFS:
Enter new Encfs password
Nové heslo pro EncFS:
Zopakujte heslo pro EncFS:
Klíč svazku úspěšně aktualizován.

Dalším příkazem je možné ověřit, že jsou všechny soubory v zašifrovaném prostoru dešifrovatelné klíčem v řídicím souboru. Zajímavé je, že právě tento soubor není programem ignorován a je vypsán (správně) jako chybný. Není samozřejmě zašifrovaný.

$ encfsctl showcruft /home/petr/.zasifrovano/
Heslo pro EncFS:
In directory /:
/tmp/zasifrovano//.encfs6.xml
Nalezen 1 chybný soubor.

Příkazy decode a encode umožňují nechat rozšifrovat respektive zašifrovat zadané názvy souborů. To se hodí, pokud hledáte informace v debugovacích výstupech, ve kterých se názvy souborů objevují jen v šifrované podobě. Obrácený postup využijete třeba ve chvíli, kdy chcete ze záloh získat jen konkrétní soubory a potřebujete vědět, jak se jmenují v zašifrovaném tvaru.

Po spuštění tohoto příkazu jste samozřejmě dotázáni na heslo a pak program čeká na vstupu na zadání jména souboru. Poté provede konverzi. Ukončení provedete pomocí ctrl+c. Následující příklad ukazuje obě možnosti.

$ encfsctl decode /home/petr/.zasifrovano/
Heslo pro EncFS:
yK01HCGgvK2pc7n2sF2R,CLx
Hesla.txt
^C

$ encfsctl encode /home/petr/.zasifrovano/
Heslo pro EncFS:
Hesla.txt
yK01HCGgvK2pc7n2sF2R,CLx
^C

Grafické rozhraní

Pokud vás nebaví psát příkazy na řádku nebo byste rádi nabídli výhody EncFS i klikacímu uživateli, můžete využít některou z grafických nadstaveb. Ta vám umožní jedním kliknutím připojit či odpojit šifrovaný svazek a vůbec tak nebudete muset umět pracovat s řádkou.

Prvním z podobných programů je Cryptkeeper, který je napsaný v GTK a hodí se tak do Gnome, Xfce a dalších příbuzných prostředí. Usadí se v oznamovací oblasti a po rozkliknutí ukáže menu, ve kterém můžete zapínat a vypínat jednotlivé svazky.

Cryptkeeper

Pokud jste spíše příznivci KDE, můžete vyzkoušet projekt K-EncFS. Ten funguje velmi podobně, umožňuje jednoduše vytvořit, upravit či připojit šifrovaný svazek.

K-EncFS

Žádný z těchto projektů jsem nezkoušel, netuším v jakém jsou stavu. Zvláště K-EncFS je už několik let bez aktivity, takže nemůžu zaručit, že bude bez problémů fungovat. Vyzkoušejte a podělte se o zkušenosti v diskusi.

Použití na jiných platformách (včetně Androidu)

Část uživatelů potřebuje, aby podobná šifrovací technologie fungovala i na jiných platformách. Zvláště v případě použití na cloudovém úložišti je třeba přistupovat k souborům z různých platforem. Primárně je EncFS určen pro Linux, existují ale různé porty na další platformy.

Existuje například port fusefs-encfs, který je určen pro FreeBSD. Stejně tak je možné rozchodit FUSE i na Mac OS. Pokud si podle návodu nainstalujete nejprve FUSE a pak EncFS, mělo by vše hladce fungovat.

Pokud potřebujete otevřít šifrovaný svazek ve Windows, můžete sáhnout po portu encfs4win. Podle popisu je možné jej ovládat z řádky jako na Linuxu nebo si můžete spustit GUI aplikaci, která se usídlí v oznamovací oblasti a umožní vám vše pohodlně naklikat.

Ve spojení s cloudovými úložišti, kde je EncFS jako doma, je zajímavá možnost otevřít šifrované soubory i v telefonu. Pokud máte Android či iOS, nainstalujte si aplikaci BoxCryptor. Ta se umí napojit na Dropbox, Google Drive a Microsoft SkyDrive a umí opět transparentně dešifrovat obsah zvoleného adresáře. Pokud používáte některou ze zmíněných služeb, můžete mít data vždy sebou.

BoxCryptor

EncFS to dělá jinak

Hlavní výhodou EncFS je, že šifruje jednotlivé soubory, takže se vyhnete obřím kontejnerům na běžných discích. Je tak mnohem jednodušší kombinovat na různých médiích šifrované a nešifrované části. Dokáže navíc využít vlastností souborového systému, takže krásně funguje tvorba hard linků i symbolických linků nebo práce s právy (pokud to souborový systém umožňuje).

bitcoin školení listopad 24

Příjemné také je, že na rozdíl od většiny kontejnerů s ním na SSD discích funguje podpora TRIM a uživatel si tak zbytečně nedegraduje výkon. Jsou to jednoduše soubory, jako každé jiné. Jen jsou pro uživatele nečitelné.

Já osobně používám EncFS na dvou místech: v Dropboxu pro uložení citlivých dat, která nesmí nikam uniknout v otevřené podobě, a také při tvorbě záloh na externí disk. Zálohy jsou automaticky šifrovány a nepovolaná osoba z nich nic nevyčte. Další využití je na vás.

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.