Fájlrendszer-titkosítás, LUKS

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
a (Konklúzió: gyakorlati sebességadatok)
 
(2 szerkesztő 7 közbeeső változata nincs mutatva)
1. sor: 1. sor:
Írta: [https://unixlinux.tmit.bme.hu/Szerkeszt%C5%91:BiroMarci Biró Marci]
+
Írta: [https://unixlinux.tmit.bme.hu/Szerkeszt%C5%91:BiroMarci Biró Marci], 2009. 11. 16.
 
== Bevezető ==
 
== 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.
+
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:
 
Biztonsági célok:
 
* A rejtett adat legyen titkos.
 
* A rejtett adat legyen titkos.
* Integritásvédelem, módosítás észrevehető legyen.
+
* Integritásvédelem: esetleges módosítások észrevehetők legyenek.
* Elérhető legyen
+
* Elérhető legyen.
 
* Támadó ne tudjon vízjelezni, rejtett csatornát használni.
 
* Támadó ne tudjon vízjelezni, rejtett csatornát használni.
* Egyéb: legyen hatékony, ne foglaljon extra tárhelyet.
+
* Egyéb -- legyen hatékony: ne foglaljon extra tárhelyet, ne igényeljen nagy CPU-teljesítményt.
  +
 
== A megvalósítás módja ==
 
== 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.
 
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.
21. sor: 21. sor:
 
: '''P = D(C,K)'''
 
: '''P = D(C,K)'''
 
=== Blokktitkosító és üzemmódjai ===
 
=== 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:
+
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:
 
==== ECB (Electronic Codebook) ====
 
==== 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.
+
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
 
Képlet
 
:[[Fájl:1.jpg]]
 
:[[Fájl:1.jpg]]
  +
 
==== CBC (Cipher Block Chaining) ====
 
==== 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á.
 
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á.
34. sor: 35. sor:
 
==== Counter ====
 
==== 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.
 
: 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ó.
+
  +
=== 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ó.
  +
 
== Elméleti támadások ==
 
== Elméleti támadások ==
 
===Content leak attack ===
 
===Content leak attack ===
61. sor: 62. 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.
74. sor: 75. 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