Fájlrendszer-titkosítás, LUKS

A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen KornAndras (vitalap | szerkesztései) 2009. december 9., 03:26-kor történt szerkesztése után volt.

(eltér) ←Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Í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

1.jpg

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.jpg

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

3.jpg

, valamint tudjuk, hogy

4.jpg
5.jpg

, akkor a két egyenletet behelyettesítve és Ek-val egyszerűsítve

6.jpg

. Ebből

7.jpg

adódik. Próbasejtést alkalmazva

8.jpg ,

így megkapjuk

14.JPG -t.
Egy alternatívát jelent, ha
9.jpg.

Ekkor a fenti gondolatmenetet alkalmazva

10.jpg

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.

Ha 11.jpg i. és j. szektorban,

12.jpg
13.jpg,

ebből IV-k ismertek, így 15.jpg és 16.jpg közötti összefüggés ismert. Ha pedig 16.jpg -t a támadó állította elő, ezzel megtudja 15.jpg -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:
Xts1.jpg
Xts2.jpg
  • 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

  1. LUKS formátum: http://cryptsetup.googlecode.com/svn-history/r42/wiki/LUKS-standard/on-disk-format.pdf
  2. LUKS közösségi wiki: http://www.saout.de/tikiwiki/tiki-index.php?page=LUKS
  3. LUKS hivatalos honlapja, ami most nem érhető el: http://luks.endorphin.org/
  4. Clemens Fruhwirth. New methods in hard disk encryption. http://clemens.endorphin.org/nmihde/nmihde-A4-os.pdf, 2005
Személyes eszközök