Hlavní navigace

TrueCrypt: profesionální ochrana dat zdarma

16. 7. 2007
Doba čtení: 12 minut

Sdílet

TrueCrypt je open-source nástroj, který umožňuje vytvářet šifrované diskové oddíly na operačních systémech MS Windows a GNU/Linux. Kromě toho, že se jedná o velmi jednoduché a uživatelsky příjemné řešení, nabízí TrueCrypt také velmi bezpečné a silné šifrování. Jak přesne šifruje? Proč je tak bezpečný?

Vlastimil Klíma, kryptolog, v.klima (zavináč) volny.cz, cryptography.hyperlink.cz
Milan Zámostný, milan (zavináč) sdw.cz

Co nabídne tento článek?

Především toto je pouhá informace, „zprávička”, ani náhodou ne kompletní rozbor. Ta zpráva říká: používáme TrueCrypt v určitém modu a zdá se nám to kryptograficky skvělé a velmi bezpečné. Na rozdíl od předchozích informací k TrueCryptu na Rootu trochu více popisujeme způsob šifrování dat a máme dobrou zprávu o kontrole zdrojových kódů tohoto šifrování. Nic víc tahle zprávička není.

Nechceme rozebírat všechny vlastnosti nebo možnosti použití TrueCryptu v různých OS, kompatibilitu, uživatelské vlastnosti apod. Nicméně je to tak jednoduchý program, že nejasné věci stačí prostě vyzkoušet.

Co už se psalo

Na úvod zopakujeme výňatky z předchozích zpráv o TrueCryptu na Rootu. Doporučujeme přečíst i diskusi k nim nebo si na Rootu vyhledat vše s klíčovým slovem TrueCrypt.

Po téměř deseti měsících vývoje je dostupná čtvrtá verze open-source on-the-fly diskového šifrovacího programu TrueCrypt. )[…] Jednou z nejdůležitějších změn oproti předchozím verzím pak je dostupnost TrueCryptu nejen pro MS Windows, ale i pro operační systém Linux. TrueCrypt se tak stal jedním z mála on-the-fly šifrovacích programů (ne-li úplně jediným), které umožňují sdílet šifrované kontejnery/diskové oddíly mezi operačními systémy Linux a Windows. … TrueCrypt je on-the-fly diskový šifrovací software. Nešifrují se tedy jednotlivé soubory, ale celý souborový systém. Ten může být fyzicky uložen přímo na některém oddílu pevného disku jako běžný souborový systém, a nebo v tzv. kontejneru – běžném souboru uloženém v libovolném adresáři. Po připojení šifrovaného filesystému se pak se soubory pracuje jako se soubory na jakémkoli jiném souborovém systému. Veškerá data jsou však při čtení průběžně dešifrována a před zápisem na disk jsou naopak šifrována. Vše se děje automaticky a pro uživatele „neviditelně“. Na disku jsou při tom veškerá data neustále uložena v bezpečném zašifrovaném tvaru. …Výhodou pak je zejména snadné sdílení šifrovaných dat mezi Linuxem a MS Windows a některé další funkce, které TrueCrypt poskytuje. (Krom velkého množství šifrovacích a hashovacích algoritmů (včetně kaskády více šifer) také tzv. traveller mód, skryté oddíly apod.)…

Michal Růžička: TrueCrypt je nyní k dispozici i pro Linux

Nedávno vydaný TrueCrypt 4.2 kromě dalších novinek již umožňuje vytvářet šifrované svazky a upravovat svazky stávající i z operačního systému Linux. V budoucnu bychom se snad mohli dočkat i grafického rozhraní. V plánu to je.

Binární balíčky a zdrojové texty jsou ke stažení na domovské stránce programu, stejně tak i kvalitní dokumentace.

Michal Růžička: TrueCrypt již umí vytvářet šifrované svazky i na Linuxu

Současný stav (červenec 2007)

Pokud budeme v dalším textu hovořit o disku, máme tím na mysli disk vytvořený pomocí programu TrueCrypt (Standard True Crypt Volume).

Vzali jsme TrueCrypt verzi 4.3a a pod Windows XP na (4 GB) USB flash sticku vytvořili šifrovaný disk o velikosti 3 GB v rámci jednoho souboru (1 GB jsme nechali na otevřená data). Zkontrolovali jsme, že zdrojový kód TrueCrypt odráží to, co je pro tento případ popsáno v dokumentaci, a neobsahuje žádná zadní vrátka. Máme tak jistotu, že naše data, uložená na flash disku jsou opravdu dobře chráněná. Pro úplnost dodáváme, že na USB flash disku v pohodě zálohujeme veškerá cenná data archivní (15 let) i aktuální. Máme tak vyřešenu polovinu zálohování a ochranu, dokonce fyzickou, neboť USB flash disk nosíme na klíčence.

Poznámka: Určitě se vyplatí ještě druhá záloha dat, neboť už se nám také stalo, že konektor flash sticku odešel. Druhá záloha by měla být také geograficky oddělená, a to z důvodu, že můžete přijít současně o notebook i flashstick. To se snadno stane při požáru, krádeži, ztrátě, pokud je máte oboje pohromadě například v kufříku, v restauraci, doma apod.

Ověření proběhlo se zdrojovými kódy verze TrueCrypt 4.3a, dostupnými ke stažení na adrese www.truecrypt.org/downloads2.php. Ověřovalo se pouze šifrování dat v modu LRW, který je nastaveným režimem v této verzi TrueCrypt pro nově vytvářené disky.

Moderní šifrování dat v modu LRW [1][2]

TrueCrypt od roku 2005 (verze 4.1) používá k šifrování nejmodernější modus blokových šifer, LRW. K šifrování je možné si zvolit blokovou šifru AES-256, Twofish nebo Serpent nebo zřetězení dvou nebo tří z nich, viz tabulka.

Podporované algoritmy
Šifra (E) Délka Primárního klíče (K1) v bitech
AES 256
Blowfish 448
CAST5 (CAST-128) 128
Serpent 256
Triple DES 3×56
Twofish 256
AES+Twofish 256+256
AES+Twofish+Serpent 256+256+256
Serpent+AES 256+256
Serpent+Twofish+AES 256+256+256
Twofish+Serpent 256+256

Kvalita blokové šifry je velmi důležitá a je u nabízených blokových šifer zajištěna. Druhou otázkou je, jak je zvolená bloková šifra k šifrování použita, tj. její modus. Pokud data rozdělíme na (například 128 bitové) bloky a zašifrujeme je zvlášť, dostaneme modus ECB (elektronická kódová kniha). ECB se k šifrování dat moc nepoužívá, protože útočník může vyměnit dva bloky mezi sebou nebo zaměnit daný blok za jiný a uživatel to nijak nezjistí (to může udělat třeba v šifrované databázi platů příjemné i nepříjemné změny). Kromě toho stejné bloky jsou zašifrovány stejně, takže šifrovaná data mohou někdy překvapivě vyzařovat podstatnou utajovanou informaci o datech otevřených. (Mody jsou pěkně popsány na Wikipedii.)

Pro šifrování disků se proto používal a stále používá modus CBC (Cipher Block Chaning), který některé neduhy modu ECB odstraňuje. Přesto i u něj jde s bloky šifrového textu manipulovat.

Poznámka: Pro příklad viz Wikipedii, obrázek „Modification attack”. Promyslete si, jak změnou předchozího šifrového bloku lze docílit definované změny v následujícím bloku otevřeného textu. To může využít útočník například když chce změnit daný blok šifrované databáze, a přitom mu nevadí, že předchozí blok bude dešifrovat nesmysly.

V roce 2002 byl proto navržen nový modus Liskov-Rivest-Wagner, který k šifrování bloků na různých pozicích otevřeného textu (s různým indexem) používá sice stejnou blokovou šifru, ale různé klíče, tedy různé transformace. Záměna bloků jako v modu ECB nebo sofistikovanější manipulace s bloky jako v modu CBC pak způsobí, že data zašifrovaná klíči (transformací) pro danou pozici se rozšifrují klíči (transformací) pro zcela jinou pozici, takže se obdrží náhodné nesmysly. Útočník manipulací se šifrovým textem nyní nic nezíská. I když nešlo o velké riziko, ještě před několika lety se takové transformace nepoužívaly a útoky výměnou nebo manipulací šifrovaných bloků byly možné. LRW odstraňuje i toto riziko. Spousta programů a prostředků pro šifrování disků na tento způsob šifrování ještě nepřešla, některé již ano (TrueCrypt, dm-crypt, Scramdisk).

Označme E zvolenou blokovou šifru (jednoduchou nebo zřetězení dvou nebo tří) a její klíč K1. Klíč K1 nazýváme Primární klíč a jeho délku ukazuje tabulka. LRW používá navíc tzv. Sekundární klíč K2, který má 128 bitů. Právě klíč K2 se modifikuje podle pozice otevřeného textu. Otevřený text (pro blokové šifry s délkou bloku 128 bitů) si rozdělíme na 128 bitové bloky Pi, kde i je 128 bitový index bloku. Pro šifrování bloku otevřeného textu Pi se nepoužije K2, ale nějaká hodnota K2(i), která vznikne modifikací K2 indexem i. Právě hledání vhodné modifikační funkce, která by byla rychlá, vedlo k návrhu obecnější třídy blokových šifer, tzv. tweakable block ciphers, kde tweak – zde K2(i) – modifikuje blokovou šifru stejně kvalitně jako klíč, ale je mnohem snadněji měnitelný než klíč (má i další vlastnosti, ale to teď není důležité). Šifruje se jednoduše takto: Ci = EK1(Pi ^ K2(i)) ^ K2(i), kde Ci je vzniklý blok šifrového textu.

Jinými slovy, na blok otevřeného textu se přičte modifikovaný Sekundární klíč, výsledek se zašifruje blokovou šifrou s Primárním klíčem a na závěr se opět přičte modifikovaný Sekundární klíč. Dodejme, že modifikační funkce je násobení dvou 128 bitových hodnot (jakožto polynomů) v jistém Galoisově tělese GF(2128), stručně řečeno je to (jednoduchá) lineární funkce, závislá na klíči (viz funkce GF128Mul ve zdrojovém kódu).

Jakmile vytváříme nový disk a zvolíme si blokovou šifru E z nabídky, jsou klíče K1 a K2 vytvořeny generátorem náhodných znaků (RNG) TrueCryptu a uloženy do hlavičky disku. A hlavička je zašifrována pomocí náhodné soli a passwordu uživatele.

Hlavička disku a datové sektory

Každý disk vytvořený aplikací TrueCrypt má v prvním sektoru (512 bytů) hlavičku, za kterou následují šifrované datové sektory. Obsah těchto sektorů závisí na použitém souborovém systému. Poznamenejme, že je vcelku jedno, jaký operační systém tyto sektory vyrábí a co a jak do nich ukládá, TrueCrypt zajišťuje jejich transparentní šifrování/dešifrování, operační systém zajišťuje, aby se se soubory dalo pracovat.

Hlavička má následující strukturu:

Struktura hlavičky
Pozice Délka Popis
0 64 Náhodná Sůl
64 4 ASCII string ‚TRUE‘
68 2 Verze hlavičky
70 2 Vyžadovaná verze programu
72 4 CRC-32 checksum (odšifrovaných) bytů 256–511
76 8 Datum/čas vytvoření disku
4 8 Datum/čas vytvoření hlavičky
92 8 Velikost skrytého disku v bytech (0 = normální disk), skrytý disk viz dokumentace
100 156 Rezervováno (nastaveno na nuly)
256 32 Náhodný Sekundární klíč pro šifrování datových sektorů (LRW)
288 224 Náhodný Primární (master) klíč pro šifrování datových sektorů (LRW)

Tato hlavička je od bajtu 64 do bajtu 512 šifrovaná. Je šifrována pomocí Primárního a Sekundárního klíče pro šifrování hlavičky, které jsou odvozeny z passwordu uživatele. Blokovou šifru pro šifrování dat (jak hlavičky, tak sektorů, obojí v modu LRW) a hashovací algoritmus pro zpracování passwordu si vybírá uživatel při vytváření disku. Po jeho vytvoření nejsou informace o vybraných algoritmech nikde uloženy. Jejich rekonstrukce probíhá při otevírání disku vyzkoušením všech kombinací algoritmů (není jich mnoho). Pro každou kombinaci algoritmů a uživatelského hesla aplikace odšifruje hlavičku a zkontroluje, jestli odšifrovaní proběhlo úspěšně (nejprve podle hodnoty ‚TRUE‘ na pozici 64, pokud tato souhlasí, je ještě zkontrolován CRC32 pro oblast 256–511). Pokud je dešifrování hlavičky úspěšné, jsou zjištěné algoritmy a klíče z dešifrované hlavičky použity pro další práci programu. Pokud ne, je to detekováno jako nesprávný password.

Základem bezpečnosti je password

Protože použité blokové šifry jsou kvalitní a jejich klíče náhodné a dostatečně dlouhé, nezbývá žádný jiný útok, než útok hrubou silou na nejslabší místo – password. Proti útoku hrubou silou jsou password a sůl zpracovány složitou funkcí PBKDF2 podle normy PKCS#5 v.2.0, která použije (1000× nebo 2000×) opakované hashování soli s passwordem za sebou, aby se případné zkoušení passwordů hodně protáhlo. Navíc je tu možnost zvolit si tzv. klíčový soubor, což je jakýkoliv soubor (nebo několik), který se nachází na disku, nebo si ho necháme naplnit náhodnými znaky od Truecryptu. Tento soubor navíc modifikuje password. Případný útok na password musí vždy kromě soli a passwordu zpracovat ještě tento přídavný soubor. Jediná vada Truecryptu je, že tento soubor zpracovává jednoduchoučkou funkcí, která je ve srovnání s tisícinásobným hashováním velmi legrační. Pokud máte kvalitní password, nemusíte tento klíčový soubor používat. Pokud nemáte kvalitní password, klíčový soubor prodlouží útok hrubou silou maximálně o zlomek vteřiny. Proto toto opatření považujeme spíše za kosmetické a silně doporučujeme používat kvalitní password bez této berličky. Navíc doporučujeme si na USB flash disku nechat nějaký nešifrovaný prostor. Ten využijete pro ukládání dat v případech, kdy nemůžete zadávat cenný password (například jsou kolem další osoby apod.) a přitom potřebujete uložit nebo předat nějaká data.

Hashovací funkce

Z hashovacích algoritmů je možné vybrat RIPEMD-160, SHA-1 nebo Whirpool. Doporučujeme používat Whirlpool.

Ověření šifrování hlavičky

Šifrování/dešifrování hlavičky a s ní související odvození klíče lze nalézt v souboru truecrypt/common/volumes.c ve funkcích VolumeWriteHeader/VolumeReadHeader. Zde byly ověřeny tyto skutečnosti:

  • Primární a sekundární klíč pro šifrování dat v sektorech jsou při vytváření disku generovány náhodným generátorem. Funkce provádí otestování, zda se nepodařilo vygenerovat slabý klíč, pokud ano, celá funkce končí s chybou. V případě změny hesla jsou primární a sekundární klíč přečteny z hlavičky disku, jsou předány jako parametr funkci VolumeWriteHeader a nejsou znovu náhodně generovány. V případě změny hesla se hlavička zapisuje 36 krát. Pokaždé je zašifrována stejným postupem, ale pokaždé s jinou solí. Tím by se mělo zamezit obnově dat původní hlavičky.
  • Podle typu hashovací funkce, která má být použita pro odvození klíčů pro šifrování hlavičky, je pomocí funkce get_pkcs5_iteration_count zjištěn počet iterací, které mají proběhnout s hashovací funkcí. Je to 2000 pro SHA1 a RIPEMD-160 a 1000 pro Whirlpool.
  • Sůl je generována náhodným generátorem.
  • Klíče pro šifrování hlavičky jsou odvozeny pomocí jedné z metod derive_key_sha1, derive_key_ripemd160 a derive_key_whirlpool. Tyto tři funkce provádějí správné odvození klíčů podle algoritmu PKCS5 se správným počtem iterací, se správnou hodnotou soli a uživatelského passwordu. Těmito klíči a zvoleným algoritmem je hlavička zašifrována od pozice 64 do pozice 511.
  • Rekonstrukce informací o algoritmech použitých pro práci se šifrovanými daty je prováděna při otevírání disku a informace zde zjištěné jsou použity pro dešifrování hlavičky a jako nastavení celého procesu šifrování/dešifrování.

Ověření šifrování datových sektorů

Bylo ověřeno, že šifrování dat v sektoru probíhá v modu LRW podle dodané dokumentace. Zdrojový kód šifrování sektorů lze nalézt v souboru truecrypt/common/crypto.c ve funkci EncryptSectors a samotné zpracování bloku dat v LRW režimu ve funkci EncryptBufferLRW128.

Generátor náhodných čísel

Ve zdrojových souborech jsme hledali, jak se provádí generování nahodných čísel. Veškeré funkce, které slouží pro obsluhu RNG jsou ve zdrojovém souboru truecrypt/common/random.c. Ve verzi pro Windows do výpočtu RNG vstupují pseudonáhodné události které jsou zpracovávány vybranou hašovací funkcí. Pseudonáhodné události jsou rozděleny do dvou skupin označovaných jako FastPool a SlowPool. Události ze SlowPool jsou použity pro generování Primárního a Sekundárního klíče pro šifrování datových sektorů a obsah klíčových souborů. Události z FastPool jsou použity v ostatních případech. Hrubý přehled toho co vstupuje jako zdroj pseudonáhodných dat do FastPool: handle aktivního okna, handle okna s aktivní myší, handle týkající se clipboardu, handle aktivního procesu, id aktivního threadu, čas od startu systému, handle desktop okna, handle okna, které má focus, informace z poslední zprávy ve frontě zpráv, aktuální pozice myši, informace o momentálním stavu operační paměti, statistické informace o aktuálním threadu a procesu, data z vnitřního RNG. Ve SlowPool jsou k těmto informacím připojeny ještě statistické informace z disků a síťových interfaců. Ve verzi pro Linux vstupují do výpočtu RNG jako pseudonáhodná data čtená ze zařízení /dev/urandom resp.  /dev/random.

UX DAy - tip 2

Závěr

TrueCrypt je mimořádný software pro šifrování dat na discích. Používá nejmodernější kryptografické techniky, má otevřené zdrojové kódy a popis, je uživatelský přítulný a zcela zdarma [4]. Ověřili jsme, že ve zvoleném modu neobsahuje zadní vrátka, a proto jsme mu svěřili ochranu svých dat.

Poznámka: Poznamenejme, že programů na šifrování disků je více, přehled viz [3].

Literatura

[1] Vlastimil Klíma, Tomáš Rosa: Kryptologie pro praxi (48) – Šifrování USB Flash disků zdarma, Sdělovací technika, 8/2007, dostupné na cryptography.hyperlink.cz [2] Vlastimil Klíma, Tomáš Rosa: Kryptologie pro praxi (47) – Šifrování datových úložišť, Sdělovací technika, 7/2007, str. 18 [3] Porovnání programů pro šifrování disků [4] Domácí stránka projektu TrueCrypt

Šifrujete obvykle disky?

Byl pro vás článek přínosný?