Fájlrendszer-titkosítás, LUKS
Írta: Biró Marci, 2009. 11. 16.
Tartalomjegyzék |
1 Bevezető
A áttértáron tárolt adatok biztonságát működés közben ugyan különféle jogosultság-beállításokkal szavatoljuk, de ez a módszer nem elégséges, ha az adatokhoz valaki fizikailag hozzáfér. Ekkor a merevlemez (vagy más adattároló eszköz) tartalmát védő szoftvereket könnyű kikapcsolni (például egy másik gépbe helyezéssel), így a tartalom hozzáférhetővé válik. A merevlemez-titkosítás feladata az, hogy ilyen esetekben is megvédje bizalmas adatainkat.
Biztonsági célok:
- A rejtett adat legyen titkos.
- Integritásvédelem: esetleges módosítások észrevehetők legyenek.
- Elérhető legyen.
- Támadó ne tudjon vízjelezni, rejtett csatornát használni.
- Egyéb -- legyen hatékony: ne foglaljon extra tárhelyet, ne igényeljen nagy CPU-teljesítményt.
2 A megvalósítás módja
Szimmetrikus kulcsú titkosítást használunk, mert sokkal gyorsabb, mint az aszimmetrikus, ráadásul nincs szükség külön kódoláshoz használt és dekódoláshoz használt kulcsra, hanem elég egy kulcs.
2.1 Jelölések
- Kulcs: K
- Titkosítandó adat: P
- Titkosított adat: C.
- Kódoló függvény:
- C = E(P,K)
- Dekódoló függvény:
- P = D(C,K)
2.2 Blokktitkosító és üzemmódjai
A titkosításhoz blokktitkosítót használhatunk, mivel a merevlemezen blokkokban tárolódik az adat. A blokktitkosító egy blokknyi adatot vár bemenetként, és ezt a kulcs segítségével kódolja. Ezek az üzemmódok fontosak az alább tárgyalt kérdések tárgyalásakor:
2.2.1 ECB (Electronic Codebook)
A legegyszerűbb változat, mely egy blokknyi adatot vár bemenetként, és ezt a kulcs segítségével kódolja. Minden blokkhoz ugyanazt a kulcsot használja. Hátránya, hogy homogén adatok (például egy kép, melyen nagy egybefüggő területek vannak) a kódolás ellenére felismerhetőek maradnak.
Képlet
2.2.2 CBC (Cipher Block Chaining)
A kódolt kimenetet hozzáadja a következő blokkhoz annak kódolása előtt, ezzel egy láncot hozva létre. Az első blokkhoz egy IV (inicializáló vektor) értéket adunk hozzá.
Képlet
2.2.3 Counter
- IV helyett egy számlálót használunk bemenetként, ezt titkosítjuk a kulccsal, majd XOR-oljuk a titkosítandó adattal. Blokkonként léptetjük a számlálót.
2.3 Blokktitkosító-üzemmódok a merevlemeztitkosítás szolgálatában
- A blokktitkosítókat a merevlemez-titkosítás speciális esetére használva használhatjuk mindhárom említett üzemmódot. A CBC üzemmódhoz szükséges IV értékét származtathatjuk például szektorazonosítóból, vagy tehetjük minden szektor első blokkjába az IV értéket. Ezen kívül használhatjuk a Counter üzemmódot, ahol a szektoron belüli blokkazonosító lehet a szükséges számláló.
3 Elméleti támadások
3.1 Content leak attack
A nagy ciphertext-ből (több TB is lehet) következik, hogy valószínűleg vannak azonos értékek. Ha
, valamint tudjuk, hogy
, akkor a két egyenletet behelyettesítve és Ek-val egyszerűsítve
. Ebből
adódik. Próbasejtést alkalmazva
így megkapjuk
Ekkor a fenti gondolatmenetet alkalmazva
adódik.
3.2 Lavina-támadás (adatmódosítási támadás)
A támadó célja az, hogy megtalálja, hova írt. Ezt úgy teheti meg, hogy másolatot készít a lemezről, majd kierőszakol egy változást az eredeti adatokon, aztán összehasonlítja a régi és az új adatot. Így megtalálja, melyik pozíciótól kezdődően módosul a szektor.
3.3 Watermarking támadás
- Feltételezés: CBC módot használó titkosítás, IV minden szektor 0. blokkjában, IV generáló algoritmus ismert a támadó előtt.
ebből IV-k ismertek, így és
közötti összefüggés ismert. Ha pedig
-t a támadó állította elő, ezzel megtudja
-t is.
- A watermarking támadás különösen más támadásokkal ötvözve hasznos.
3.4 Cut and paste (vagy copy-paste) támadás
- Néhány blokk átrendezésével lehetséges olyan támadást intézni a titkosítás ellen, hogy a visszafejtés során a helyes adatokat kapjuk, a blokkok kicserélésének megfelelő sorrendben. Fontos adatot tartalmazó blokkokat helyettesít a támadó előkészített blokkjaival, így egyrészt felülírhatja a fontos adatokat általa megadottal, másrészt az eredeti adatokat átmásolva elérhető helyre (például /etc/shadow fájlt a home könyvtárába) elérhetővé teheti a védett adatokat. A támadás CBC vagy EBC üzemmódú titkosítás esetén működhet.
4 Titkosítószoftverek
4.1 PGPdisk
- windows-os titkosító, fizetős és ingyenes változata is létezik.
4.2 loop-AES
- Az AES algoritmust használja, 128-192-256 bites kulcsokkal.
- A 2.0.x kernelverziótól érhető el.
- CBC módot használ, 512 byte-os chain-egységekkel
- három működési mód van:
- single-key: egy kulcsot használ titkosításra, egyszerűen szektor IV-vel.
- multi-key-v2: 64 különböző kulcsot használ, szektoronként különbözőt. MD5 IV-t használ, amely az inicializáló vektort titkosítja.
- multi-key-v3: hasonlít a v2-höz, ráadásként egy 65. kulcsot használ az MD5 IV bemeneteként.
- Érdekesség: 20 (!) karakteres jelszót ajánlanak, hogy elég biztonságos legyen.
4.3 cryptoloop
- A Linux kernel része, nem szükséges patch-et használni.
- A Crypto API-ban felkínált titkosításokat tudja használni.
- Nincs karbantartója, régóta nem fejlesztik, ezért hamarosan kikerül a hivatalos kernelből (vagy már ki is vették).
- Watermarking támadás alkalmazható rajta, ezért nem ajánlott.
4.4 dm-crypt
- A hivatalos kernel része.
- A 2.6.4-es kernel óta ez az alapértelmezett titkosítási mechanizmus.
- Ugyanúgy, mint a cryptoloop, a Crypto API révén elérhető algoritmusokat használja.
- A device mapper része; RAID, LVM, partíciók vagy akár fájlok titkosítására is alkalmazható.
- A dmsetup és a cryptsetup (ez utóbbi inkább felhasználóbarát) programmal állítható be.
- A cryptsetup a következő műveleteket támogatja: create, remove, status, reload, resize.
- A dm-crypt adattábla az alábbi formában tárol metaadatokat a titkosított adatokról:
0 <sector count> crypt <sector format> <key> <IV offset> <real device> <sector offset>
- Nagy hiányosság: felhasználói jelszó cseréje csak a TELJES tartalom dekódolásával és az új jelszóval való kódolással lehetséges (enyhíti a fájdalmat, hogy ez a szerző szerintmenet közben is lehetséges).
4.5 LUKS (Linux Unified Key Setup) platformfüggetlen formátum
- Létrejöttét az azonos algoritmusokon alapuló, de különféle titkosítóprogramok (vagy programok különböző verzióinak) inkompatibilitása motiválta.
- Segítségével szabványos, platformfüggetlen leírást adhatunk meg a partíció fejrészében.
- Az adatok mozgatása, más rendszerbe integrálása problémamentes.
- Biztonságosan kezel több felhasználóhoz tartozó jelszavakat/kulcsokat is.
- A LUKS csak egy formátumot ír le; a dm-crypt cryptsetup programja tekinthető referenciaimplementációnak (windowsos implementáció is létezik: FreeOTFE).
- A kevés entrópiát tartalmazó („entropy weak”) felhasználói jelszavakat védi a szótáralapú brute-force támadások ellen.
- Megvalósítja a TKS1 biztonságos kulcskezelési eljárás-ajánlást.
- Adatformátum:
|LUKS-partíció-fejrész |KM1 | KM2 |… | KM8 | nagy mennyiségű titkosított adat |
A LUKS partíció fejrészében tárolt információk: verziószám, használt titkosítóalgoritmus, blokktitkosító üzemmódja, kulcs hossza, hash-függvény salt-ja és iterációs paraméterei, partícióazonosító, master key ellenőrző összege.
- támogatott algoritmusok: aes , [www.schneier.com/paper-twofish-paper.pdf twofish] , serpent, cast5, cast6
- támogatott üzemmódok: ebc, cbc-plain, cbc-essiv (Encrypted Sector Salt Initialization Vector, sha-256-ot használ az IV-k előállítására)
- támogatott hash-függvények: sha-1, sha-256, sha-512, ripemd160
- A KMx kulcsmezők a master key-t tartalmazzák különböző felhasználói jelszavakkal titkosítva. Metaadat-mező formátuma egy kulcsmezőre: aktív/passzív, iterációs paraméter, salt.
4.5.1 A LUKS használata cryptsetup programmal
- A cryptsetup LUKS-kiegészítéssel ellátva a következő akciókat képes még végrehajtani:
- luksFormat <eszköz> <kulcs-fájl> – inicializál egy LUKS-partíciót (vagyis elhelyezi benne a fejlécet).
- luksOpen <eszköz> <név> [ --key-file, –readonly ] – megnyit egy partíciót (létrehozza a device mapperben a plaintextet tartalmazó virtuális eszközt).
- luksClose <név> - ugyanaz, mint az eredeti remove (megszünteti a plaintextet tartalmazó virtuális eszközt).
- luksAddKey <eszköz> [<új kulcsfájl>] – új jelszót ad hozzá.
- luksDelKey <szám> - töröl egy jelszót.
- luksUUID <eszköz> - kiírja az id-t.
- isLuks <eszköz> - igaz (sikeres visszatérési értékkel tér vissza), ha a megadott eszköz LUKS-partíciónak tűnik (érvényes fejléce van).
- luksDump <eszköz> - lementi a teljes fejrészt.
- Érdekes probléma a luksDelKey használata. Ha ugyanis kitöröljük az összes kulcsot, nem férhetünk hozzá többet az adatokhoz (egy adatromboló támadás egyszerűbben is végrehajtható a dd paranccsal).
4.6 TrueCrypt
- Nyílt forráskódú, Linux, Mac és Windows platformokra.
- Titkosítási és adatrejtési funkciója is van.
- TrueCrypt partíció létrehozható partíción és fájlban, ezen belül hozható létre FAT, NTFS, ext2-3 vagy bármi más, a rendszer által támogatott fájlrendszer.
- Adatrejtés lehetséges úgy, hogy azt elvileg lehetetlen detektálni vagy bizonyítani.
- Sajnos a Data Leak nevű jelenség ezt megakadályozhatja, azaz más programok által a titkosítatlan részre írt metaadatok, hivakozások, ideiglenes fájlok jelenléte elárulja a rejtett partíciót.
- Az is elárulhatja a rejtett partíciót, ha a nemrejtett partíció gyanúsan kevés adatot tartalmaz a teljes eszköz méretéhez képest, vagy a rajta levő fájlok gyanúsan régiek. A rejtett partíció létezése matematikailag ugyan nem bizonyítható, de a puszta gyanú felmerülése is nemkívánatos lehet.
- Az adatszivárgás részben elkerülhető az operációs rendszer rejtésével.
- Támogatott titkosító algoritmusok: aes, serpent, twofish, és ezek kombinációi.
- Támogatott hash-algoritmusok: ripemd160, sha-512, whirlpool.
- A partíció fejrészének tartalma: salt, ASCII string TRUE, fejrész-verziószám, használathoz szükséges minimális program-verzió, ellenőrző összeg, rejtett partíció mérete, partíció mérete, … , master key, secondary master key, rejtett partíció fejrésze, adat
- Rejtett partíció keresésekor a megadott jelszóval elkezdi dekódolni a lemezt a 65536 – 131071 byte-ok között, mivel létrehozáskor ide írja a rejtett partíció fejrészét.
- A salt-on kívül minden adat titkosítva van a fejrészben.
- A titkosítás az XTS módot használja, ez nagyobb erőforrás-igényű, mint az említett egyszerű üzemmódok:
- Amint a képletből látható, nem alkalmaz láncolást, ezért egy bithiba csak az adott cipherblokk (128 bit) értékét teszi olvashatatlanná.
- PKCS-11 kulcskezelési eljárást használ
- Azt állítja a FAQ, hogy az adatok írása és olvasása ugyanolyan gyorsan történik, mint amikor nincs titkosítva a lemez.
- Az állítás azért nem teljesen hihetetlen, mert általában úgyis a merevlemez a szűk keresztmetszet - a CPU tudja valós időben dekódolni ill. kódolni az adatokat, ami csak csekély fix késleltetést jelent, az átviteli sebesség csökkenését nem.
- Jelszóváltoztatás, más algoritmus választása menet közben is lehetséges.
5 Konklúzió
- Teljesítményvizsgálat hiányában nem lehet beszélni a különböző programok egymáshoz viszonyított sebességéről.
- Abszolút sebességről viszont lehet beszélni: a LUKS alapbeállításokkal csak egyjegyű százaléknyi CPU-terhelést okoz egy 2009-es átlagos PC-n, még négy SATA-diszkből álló RAID5-tömbre való szekvenciális íráskor is.
- Biztonsági szempontból mindkét modern (dm-crypt/LUKS és TrueCrypt) titkosítóprogram megbízható (jelenleg nincs ismert gyenge pontjuk)
- A LUKS több-kulcsos hozzáférése és a TrueCrypt cross-platform elérhetősége, mint jó tulajdonságok között nem lehet objektíven ítélni, ezért mindenki használja azt, amelyik neki jobban tetszik.
6 Hivatkozások
- LUKS formátum: http://cryptsetup.googlecode.com/svn-history/r42/wiki/LUKS-standard/on-disk-format.pdf
- LUKS közösségi wiki: http://www.saout.de/tikiwiki/tiki-index.php?page=LUKS
- LUKS hivatalos honlapja, ami most nem érhető el: http://luks.endorphin.org/
- Clemens Fruhwirth. New methods in hard disk encryption. http://clemens.endorphin.org/nmihde/nmihde-A4-os.pdf, 2005