Fájlrendszer-titkosítás, LUKS

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
a (ECB (Electronic Codebook): typo)
a (Konklúzió: gyakorlati sebességadatok)
 
(egy szerkesztő 2 közbeeső változata nincs mutatva)
66. sor: 66. sor:
 
: [[Fájl:10.jpg]]
 
: [[Fájl:10.jpg]]
 
adódik.
 
adódik.
=== Lavina támadás (adatmódosítási támadás) ===
+
=== 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.
+
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.
  +
 
=== Watermarking támadás ===
 
=== 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.
 
: 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.
79. sor: 79. sor:
 
=== Cut and paste (vagy copy-paste) támadás ===
 
=== 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.
 
: 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.
== Titkosító szoftverek ==
+
== Titkosítószoftverek ==
 
=== [http://www.pgpi.org/products/pgpdisk/ PGPdisk] ===
 
=== [http://www.pgpi.org/products/pgpdisk/ PGPdisk] ===
 
* windows-os titkosító, fizetős és ingyenes változata is létezik.
 
* windows-os titkosító, fizetős és ingyenes változata is létezik.
 
=== [http://loop-aes.sourceforge.net/loop-AES.README loop-AES] ===
 
=== [http://loop-aes.sourceforge.net/loop-AES.README loop-AES] ===
* AES algoritmust használja, 128-192-256 bites kulcsokkal
+
* Az AES algoritmust használja, 128-192-256 bites kulcsokkal.
* 2.0.x kernel verziótól működik.
+
* A 2.0.x kernelverziótól érhető el.
* CBC módot használ, 512 byte-os chain egységekkel
+
* CBC módot használ, 512 byte-os chain-egységekkel
 
* három működési mód van:
 
* három működési mód van:
 
** single-key: egy kulcsot használ titkosításra, egyszerűen szektor IV-vel.
 
** 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. [http://www.kleinschmidt.com/edi/md5.htm MD5] IV-t használ, mely 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.
+
** multi-key-v2: 64 különböző kulcsot használ, szektoronként különbözőt. [http://www.kleinschmidt.com/edi/md5.htm MD5] IV-t használ, amely az inicializáló vektort titkosítja.
* érdekesség: 20 (!) karakteres jelszót ajánlanak elég biztonságosnak
+
** 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.
 
=== [http://tldp.org/HOWTO/Cryptoloop-HOWTO/ cryptoloop] ===
 
=== [http://tldp.org/HOWTO/Cryptoloop-HOWTO/ cryptoloop] ===
* a linux kernel része, nem szükséges patch-et használni
+
* A Linux kernel része, nem szükséges patch-et használni.
* Crypto API-ban felkínált titkosításokat tudja 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)
+
* 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
+
* Watermarking támadás alkalmazható rajta, ezért nem ajánlott.
 
=== [http://www.saout.de/misc/dm-crypt/ dm-crypt] ===
 
=== [http://www.saout.de/misc/dm-crypt/ dm-crypt] ===
* a hivatalos kernel része
+
* A hivatalos kernel része.
* a 2.6.4-es kernel óta ez az alapértelmezett titkosítási mechanizmus
+
* 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
+
* Ugyanúgy, mint a cryptoloop, a Crypto API révén 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ó
+
* A device mapper része; [[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 dmsetup és a cryptsetup (ez utóbbi inkább felhasználóbarát) programmal állítható be.
* a cryptsetup ezeket a műveleteket támogatja: create, remove, status, reload, resize
+
* A cryptsetup a következő műveleteket támogatja: create, remove, status, reload, resize.
* dm-crypt adattábla, ilyen formában tárol metaadatokat a titkosított adatokról:
+
* A dm-crypt adattábla az alábbi formában tárol metaadatokat a titkosított adatokról:
 
<pre>
 
<pre>
 
0 <sector count> crypt <sector format> <key> <IV offset> <real device> <sector offset>
 
0 <sector count> crypt <sector format> <key> <IV offset> <real device> <sector offset>
 
</pre>
 
</pre>
* 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)
+
* 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).
 
=== [http://cryptsetup.googlecode.com/svn-history/r42/wiki/LUKS-standard/on-disk-format.pdf LUKS] (Linux Unified Key Setup) platformfüggetlen formátum ===
 
=== [http://cryptsetup.googlecode.com/svn-history/r42/wiki/LUKS-standard/on-disk-format.pdf 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
+
* 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
+
* 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ő
+
* Az adatok mozgatása, más rendszerbe integrálása problémamentes.
* biztonságos keretek között kezel több felhasználóhoz tartozó jelszavakat/kulcsokat is
+
* Biztonságosan 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 [http://www.freeotfe.org/ FreeOTFE] programban)
+
* A LUKS csak egy formátumot ír le; a dm-crypt cryptsetup programja tekinthető referenciaimplementációnak (windowsos implementáció is létezik: [http://www.freeotfe.org/ FreeOTFE]).
* „entropy weak” felhasználói jelszavak védelme szótáralapú brute-force támadás ellen
+
* 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 [http://clemens.endorphin.org/TKS1-draft.pdf TKS1] biztonságos kulcskezelési eljárás-ajánlást
+
* Megvalósítja a [http://clemens.endorphin.org/TKS1-draft.pdf TKS1] biztonságos kulcskezelési eljárás-ajánlást.
* adatformátum:
+
* Adatformátum:
 
<pre>
 
<pre>
|LUKS partíció fejrész |KM1 | KM2 |… | KM8 | nagy mennyiségű titkosított adat |
+
|LUKS-partíció-fejrész |KM1 | KM2 |… | KM8 | nagy mennyiségű titkosított adat |
 
</pre>
 
</pre>
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.
+
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: [http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf aes] , [www.schneier.com/paper-twofish-paper.pdf twofish] , [http://www.cl.cam.ac.uk/~rja14/Papers/serpent.pdf serpent], cast5, [http://www.ime.usp.br/~rt/cast256/CAST-256.pdf cast6]
 
** támogatott algoritmusok: [http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf aes] , [www.schneier.com/paper-twofish-paper.pdf twofish] , [http://www.cl.cam.ac.uk/~rja14/Papers/serpent.pdf serpent], cast5, [http://www.ime.usp.br/~rt/cast256/CAST-256.pdf cast6]
 
** támogatott üzemmódok: ebc, cbc-plain, cbc-[http://article.gmane.org/gmane.linux.kernel.device-mapper.dm-crypt/472 essiv] (Encrypted Sector Salt Initialization Vector, sha-256-ot használ az IV-k előállítására)
 
** támogatott üzemmódok: ebc, cbc-plain, cbc-[http://article.gmane.org/gmane.linux.kernel.device-mapper.dm-crypt/472 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: [http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf sha-1], [http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf sha-256], [http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf sha-512], [http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html ripemd160]
+
** támogatott hash-függvények: [http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf sha-1], [http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf sha-256], [http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf sha-512], [http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html 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.
+
** 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.
==== LUKS használata [http://code.google.com/p/cryptsetup cryptsetup] programmal ====
+
==== A LUKS használata [http://code.google.com/p/cryptsetup cryptsetup] programmal ====
* A cryptsetup LUKS kiegészítéssel ellátva a következő akciókat képes még végrehajtani:
+
* 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
+
** 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
+
** 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
+
** luksClose <név> - ugyanaz, mint az eredeti remove (megszünteti a plaintextet tartalmazó virtuális eszközt).
** luksAddKey <eszköz> [<új kulcs fájl>] – új jelszót ad hozzá
+
** luksAddKey <eszköz> [<új kulcsfájl>] – új jelszót ad hozzá.
** luksDelKey <szám> - töröl egy jelszót
+
** luksDelKey <szám> - töröl egy jelszót.
 
** luksUUID <eszköz> - kiírja az id-t.
 
** luksUUID <eszköz> - kiírja az id-t.
** isLuks <eszköz> - igaz, ha a megadott eszköz LUKS partíció
+
** 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
+
** 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.
+
* É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).
 
=== [http://www.truecrypt.org/ TrueCrypt ] ===
 
=== [http://www.truecrypt.org/ TrueCrypt ] ===
* Nyílt forráskódú, Linux, Mac és Windows platformokra
+
* Nyílt forráskódú, Linux, Mac és Windows platformokra.
* titkosítás és adatrejtés funkciók
+
* 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.
 
* 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 ezt elvileg lehetetlen detektálni
+
* 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.
 
** 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.
** Ez elkerülhető az operációs rendszer rejtésével.
+
** 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.
* támogatott titkosító algoritmusok: aes, serpent, twofish, és ezek kombinációi
+
** Az adatszivárgás részben elkerülhető az operációs rendszer rejtésével.
* támogatott hash algoritmusok: ripemd160, sha-512, whirlpool
+
* Támogatott titkosító algoritmusok: aes, serpent, twofish, és ezek kombinációi.
* partíció fejrész: salt, ASCII string TRUE, fejrész verziószám, minimum program-verzió, checksum, rejtett partíció méret, partíció méret, … , master key, secondary master key, rejtett partíció fejrésze, adat
+
* Támogatott hash-algoritmusok: ripemd160, sha-512, whirlpool.
* 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 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
* a salt-on kívül minden adat titkosítva van a fejrészben
+
* 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 titkosítás XTS módot használja, ez nagyobb erőforrás-igényű, mint az említett egyszerű üzemmódok:
+
* 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:
 
:[[Fájl:Xts1.jpg]]
 
:[[Fájl:Xts1.jpg]]
 
:[[Fájl:Xts2.jpg]]
 
:[[Fájl: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á.
 
* 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
 
* 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 (pipelining-re és párhuzamosításra hivatkozik, de én kételkedem).
+
* 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.
* Jelszó változtatás, más algoritmus választása menet közben lehetséges
+
** 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.
  +
 
== Konklúzió ==
 
== 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.
 
* 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)
 
* 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.
 
* 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.
  +
 
== Hivatkozások ==
 
== Hivatkozások ==
   

A lap jelenlegi, 2009. december 9., 04:26-kori változata

Írta: Biró Marci, 2009. 11. 16.

Tartalomjegyzék

[szerkesztés] 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.

[szerkesztés] 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.

[szerkesztés] 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)

[szerkesztés] 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:

[szerkesztés] 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

[szerkesztés] 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

[szerkesztés] 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.

[szerkesztés] 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ó.

[szerkesztés] 3 Elméleti támadások

[szerkesztés] 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.

[szerkesztés] 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.

[szerkesztés] 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.

[szerkesztés] 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.

[szerkesztés] 4 Titkosítószoftverek

[szerkesztés] 4.1 PGPdisk

  • windows-os titkosító, fizetős és ingyenes változata is létezik.

[szerkesztés] 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.

[szerkesztés] 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.

[szerkesztés] 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).

[szerkesztés] 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.

[szerkesztés] 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).

[szerkesztés] 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.

[szerkesztés] 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.

[szerkesztés] 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