Fájlrendszer-titkosítás, LUKS

A Unix/Linux szerverek üzemeltetése wikiből
A lap korábbi változatát látod, amilyen BiroMarci (vitalap | szerkesztései) 2009. november 15., 17:57-kor történt szerkesztése után volt.

Tartalomjegyzék

1 Bevezető

Adataink biztonságos kezelése mindig is nagyon fontos szerepet töltött be, mióta az informatika fejlődésnek indult. Háttértáron tárolt adatok biztonságát működés közben különféle jogosultság-beállításokkal szavatoljuk, 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 ezek ellen véd.

Biztonsági célok:

  • A rejtett adat legyen titkos.
  • Integritásvédelem, módosítás észrevehető legyen.
  • Elérhető legyen
  • Támadó ne tudjon vízjelezni, rejtett csatornát használni.
  • Egyéb: legyen hatékony, ne foglaljon extra tárhelyet.

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 úgyis 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 elenére felismerhetőek maradnak.

Képlet:

Értelmezés sikertelen (PNG-vé alakítás sikertelen; ellenőrizd, hogy a latex és dvipng (vagy dvips + gs + convert) helyesen van-e telepítve): C_i = E_K(P_i)

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: Ci = Ek(Pi + Ci-1)

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. 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álhatunk CTR ü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 ci = cj, valamint tudjuk, hogy ci = Ek(pi + ci-1) és cj = Ek(pi+cj-1), akkor a két egyenletet behelyettesítve és Ek-val egyszerűsítve pi + ci-1 = pj + cj-1. Ebből pi + pj = ci-1 + cj-1 adódik. Próbasejtést alkalmazva pj = 0, így megkapjuk pi-t. Egy alternatívát jelent, ha ci = cj, és ci+1 = cj+1. Ekkor a fenti gondolatmenetet alkalmazva pi+1 = pj+1 adódik. Lavina támadás (adatmódosítási támadás): Támadó célja, hogy megtalálja, hogy hova írt. Ezt úgy lehet megtenni, hogy másolatot készítünk a lemezről, majd kierőszakoljuk a változást az eredeti adatokon, aztán összehasonlítjuk a régi és az új adatot. Így megtaláljuk, honnan módosul a szektor.

3.2 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 ci,1 = cj,1 i. és j. szektorban, E(pi,1 + ci,0) = E(pj,1 + cj,0) pi,1 = pj,1 + IVi + IVj, ebből IV-k ismertek, így pi,1 és pj,1 közötti összefüggés ismert. Ha pedig pj,1-t a támadó állította elő, ezzel megtudja pi,1-t is A watermarking támadás különösen más támadásokkal ötvözve hasznos.

3.3 Cut and paste (vagy copy-paste) attack

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 mó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

  • AES algoritmust használja, 128-192-256 bites kulcsokkal
  • 2.0.x kernel verziótól működik.
  • 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 és v3: 64 különböző kulcsot használ, szektoronként különbözőt. MD5 IV-t használ, mely az inicializáló vektort titkosítja. Multi-key-v3 üzemmódban egy 65. kulcsot használ az MD5 IV bemeneteként.
  • érdekesség: 20 ! karakteres jelszót ajánlanak elég biztonságosnak

4.3 cryptoloop

  • a linux kernel része, nem szükséges patch-et használni
  • watermark támadás alkalmazható rajta, ezért nem ajánlott

4.4 dmcrypt

  • 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 által elérhető algoritmusokat használja
  • device mapperrel használható, így RAID, LVM, partíciók vagy akár fájlok titkosítására is alkalmazható
  • dmsetup és cryptsetup (inkább felhasználóbarát) programokkal használható
  • a cryptsetup ezeket a műveleteket támogatja: create, remove, status, reload, resize
  • dm-crypt adattábla, ilyen 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 menet közben is lehetséges a szerző szerint)

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émamentesen végbevihető
  • biztonságos keretek között kezel több felhasználóhoz tartozó jelszavakat/kulcsokat is
  • a LUKS csak egy formátumot ír le, a dm-crypt cryptsetup programjában megvalósított működése tekinthető referenciának (másik megvalósítás Windows alatt a FreeOTFE programban)
  • „entropy weak” felhasználói jelszavak védelme szótáralapú brute-force támadás 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 |

LUKS partíció fejrész információi: verziószám, használt titkosító algoritmus, blokktitkosító üzemmódja, kulcs hossza, hash függvény salt és iterációs paraméter, partíció id, master key ellenőrző összeg.

    • támogatott algoritmusok: aes , twofish , serpent, cast5, cast6
    • támogatott üzemmódok: ebc, cbc-plain, cbc-essiv (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 jelszavak által titkosítva. Metaadat-mező formátuma egy kulcsmezőre: aktív/passzív, iterációs paraméter, salt.

4.5.1 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
    • luksOpen <eszköz> <név> [ --key-file, –readonly ] – megnyit egy partíciót
    • luksClose <név> - ugyanaz, mint az eredeti remove
    • luksAddKey <eszköz> [<új kulcs fá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, ha a megadott eszköz LUKS partíció
    • 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. Bár egy adatromboló támadás egyszerűbben végrehatható a dd paranccsal.

5 Hivatkozások


http://cryptsetup.googlecode.com/svn-history/r42/wiki/LUKS-standard/on-disk-format.pdf http://www.saout.de/tikiwiki/tiki-index.php?page=LUKS Előző szerint és die.net-en talált hivatalos, de most nem érhető el: http://luks.endorphin.org/

Clemens Fruhwirth (2004. július 15.). „TKS1 – An anti-forensic, two level, and iterated key setup scheme http://clemens.endorphin.org/TKS1-draft.pdf Clemens Fruhwirth. New methods in hard disk encryption. http://clemens.endorphin.org/nmihde/nmihde-A4-os.pdf, 2005

Személyes eszközök