Fájlrendszer-titkosítás, LUKS
a (→Konklúzió: gyakorlati sebességadatok) |
|||
(2 szerkesztő 15 közbeeső változata nincs mutatva) | |||
1. sor: | 1. sor: | ||
− | Írta: [[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 ] === |
||
+ | * 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: |
||
+ | :[[Fájl:Xts1.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á. |
||
+ | * 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. |
||
+ | |||
+ | == 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. |
||
== Hivatkozások == |
== Hivatkozások == |
||
135. sor: | 136. sor: | ||
# LUKS formátum: http://cryptsetup.googlecode.com/svn-history/r42/wiki/LUKS-standard/on-disk-format.pdf |
# 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 közösségi wiki: http://www.saout.de/tikiwiki/tiki-index.php?page=LUKS |
||
− | # Hivatalos honlap, ami most nem érhető el: http://luks.endorphin.org/ |
+ | # 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 |
# Clemens Fruhwirth. New methods in hard disk encryption. http://clemens.endorphin.org/nmihde/nmihde-A4-os.pdf, 2005 |
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
[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
[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
, 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.
[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.
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.
[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:
- 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
- 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