dm-crypt

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Dm-crypt and the translation is 100% complete.


Resources

A dm-crypt egy lemeztitkosítási-rendszer, amely a Linux kernel crypto API keretrendszerét és az eszköz feltérképező alrendszert (device mapper subsystem-et) használja. A dm-crypt segítségével az rendszergazdák teljes lemezeket, logikai köteteket, partíciókat, de egyetlen fájlokat is titkosíthatnak.

A dm-crypt alrendszer támogatja a Linux Unified Key Setup (LUKS) struktúráját, amely lehetővé teszi több kulcs segítségén keresztül a titkosított adatokhoz való hozzátérést. Valamint lehetőség van a kulcsok manipulálására (például a kulcsok megváltoztatása, a további jelszavak hozzáadása stb.) Bár a dm-crypt támogatja a nem-LUKS beállításokat is, ez a cikk a LUKS funkcionalitására összpontosít, elsősorban annak rugalmasságának, kezelhetőségének, valamint a közösség széles körű támogatásának köszönhetően.

Konfigurálás

A dm-crypt használatának két előfeltétele van:

  1. A Linux kernel konfigurálása.
  2. A sys-fs/cryptsetup programcsomag telepítése.

Linux kernel konfigurálása

A dm-crypt használatához számos konfigurációs bejegyzés szükséges.

Mindenekelőtt az eszközfeltérképező infrastruktúra támogatását, valamint a kriptográfiai célt kell tartalmaznia. a dm_crypt modul automatikusan betöltődik, nincs szükség konfigurációra az ezen az oldalon leírtakon kívül.

KERNEL Az eszköz feltérképező és a kriptográfiai cél bekapcsolása
[*] Enable loadable module support Search for <code>CONFIG_MODULES</code> to find this item. --->
Device Drivers --->
  [*] Multiple devices driver support (RAID and LVM) Search for <code>CONFIG_MD</code> to find this item. --->
    <*> Device mapper support Search for <code>CONFIG_BLK_DEV_DM</code> to find this item.
    <*> Crypt target support Search for <code>CONFIG_DM_CRYPT</code> to find this item.

Ezután a Linux kernelnek támogatnia kell a kriptográfiai API-k készletét, amelyet a rendszergazda titkosításhoz szeretne használni. Ezek a Cryptographic APIszakaszban találhatók:

KERNEL A kriptográfiai API funkciók bekapcsolása
[*] Cryptographic API Search for <code>CONFIG_CRYPTO</code> to find this item. --->
  Block ciphers --->
    <*> AES (Advanced Encryption Standard) Search for <code>CONFIG_CRYPTO_AES</code> to find this item.
    <*> AES cipher algorithms (x86_64)
  Length-preserving ciphers and modes --->
    <*> XTS (XOR Encrypt XOR with ciphertext stealing) Search for <code>CONFIG_CRYPTO_XTS</code> to find this item.
  Hashes, digests, and MACS --->
    <*> SHA-224 and SHA-256 Search for <code>CONFIG_CRYPTO_SHA256</code> to find this item.
  Userspace interface --->
    <*> Hash algorithms Search for <code>CONFIG_CRYPT_USER_API_HASH</code> to find this item.
    <*> Symmetric key cipher algorithms Search for <code>CONFIG_CRYPTO_USER_API_SKCIPHER</code> to find this item.

Ha a gyökér fájlrendszer is titkosítva lesz, akkor létre kell hozni egy kezdeti ram fájlrendszert, amelyben a gyökér fájlrendszer visszafejtésre kerül, mielőtt felcsatolódna. Tehát ehhez az initramfs támogatás is szükséges:

KERNEL Az initramfs támogatás bekapcsolása
General setup  --->
  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support Search for <code>CONFIG_BLK_DEV_INITRD</code> to find this item.

Ha a tcrypt titkosítási opciót használja (TrueCrypt/tcplay/VeraCrypt kompatibilitási mód), akkor a következő elemeket is hozzá kell adni a kernelhez. Ellenkező esetben a cryptsetup a következő hibákat fogja jelezni: "Eszközfeltérképező: Az ioctl újratöltése sikertelen: Érvénytelen argumentum", és "A kernel nem támogatja a TCRYPT-kompatibilis feltérképezést".

KERNEL A tcrypt (TrueCrypt/tcplay/VeraCrypt kompatibilitási mód) támogatás bekapcsolása
Device Drivers --->
  [*] Block Devices Search for <code>CONFIG_BLK_DEV</code> to find this item. --->
    <*> Loopback device support Search for <code>CONFIG_BLK_DEV_LOOP</code> to find this item.
File systems --->
  <*> FUSE (Filesystem in Userspace) support Search for <code>CONFIG_FUSE_FS</code> to find this item.
[*] Cryptographic API Search for <code>CONFIG_CRYPTO</code> to find this item. --->
  Hashes, digests, and MACs --->
    <*> RIPEMD-160 Search for <code>CONFIG_CRYPTO_RMD160</code> to find this item.
    <*> SHA-384 and SHA-512 Search for <code>CONFIG_CRYPTO_SHA512</code> to find this item.
    <*> Whirlpool Search for <code>CONFIG_CRYPTO_WP512</code> to find this item.
  Length-preserving ciphers and modes --->
    <*> LRW (Liskov Rivest Wagner) Search for <code>CONFIG_CRYPTO_LRW</code> to find this item.
  Block ciphers --->
    <*> Serpent Search for <code>CONFIG_CRYPTO_SERPENT</code> to find this item.
    <*> Twofish Search for <code>CONFIG_CRYPTO_TWOFISH</code> to find this item.

A cryptsetup telepítése

A sys-fs/cryptsetup programcsomag szolgáltatja a cryptsetup parancsot, amely a titkosított adattároló megnyitására, vissza a bezárására, valamint a hozzá tartozó jelszavak vagy kulcsok kezelésére szolgál.

root #emerge --ask sys-fs/cryptsetup

Titkosított adathordozó

Benchmark

A cryptsetup tartalmaz egy benchmarking eszközt, amely segít eldönteni, hogy melyik beállítás legyen választva. A kimenet függ a kernelnek a beállításaitól, az USE jelölőzászlóktól és a cél adattároló eszköztől (HDD, SSD stb.).

root #cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1      3622024 iterations per second for 256-bit key
PBKDF2-sha256    7410431 iterations per second for 256-bit key
PBKDF2-sha512    3216490 iterations per second for 256-bit key
PBKDF2-ripemd160 1157368 iterations per second for 256-bit key
PBKDF2-whirlpool 1069975 iterations per second for 256-bit key
argon2i      14 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
argon2id     15 iterations, 1048576 memory, 4 parallel threads (CPUs) for 256-bit key (requested 2000 ms time)
#     Algorithm |       Key |      Encryption |      Decryption
        aes-cbc        128b      1520.5 MiB/s      4400.1 MiB/s
    serpent-cbc        128b       159.6 MiB/s      1061.9 MiB/s
    twofish-cbc        128b       310.8 MiB/s       662.1 MiB/s
        aes-cbc        256b      1175.8 MiB/s      4025.0 MiB/s
    serpent-cbc        256b       160.0 MiB/s      1054.8 MiB/s
    twofish-cbc        256b       312.6 MiB/s       655.5 MiB/s
        aes-xts        256b      4081.0 MiB/s      4073.5 MiB/s
    serpent-xts        256b       953.7 MiB/s       946.3 MiB/s
    twofish-xts        256b       597.5 MiB/s       616.8 MiB/s
        aes-xts        512b      3733.8 MiB/s      3743.3 MiB/s
    serpent-xts        512b       970.9 MiB/s       964.5 MiB/s
    twofish-xts        512b       598.1 MiB/s       611.3 MiB/s

Kulcsfájl vagy jelszó

A titkosított adattárolás megkezdése előtt a rendszergazdának el kell döntenie, hogy melyik módszert fogja használni a titkosítási kulcshoz. A cryptsetup esetén választható a jelszó vagy a kulcsfájl. Kulcsfájl esetén ez lehet bármilyen fájl, de ajánlatos véletlenszerű adatokat tartalmazó fájlt használni, amely megfelelően védett (tekintettel arra, hogy ehhez a kulcsfájlhoz való hozzáférés lényegében a titkosított adatokhoz való hozzáférést eredményezi).

Kulcsfájl létrehozásához használható a dd parancs:

root #dd if=/dev/urandom of=/etc/keys/enc.key bs=1 count=4096

A következő szakaszokban minden parancsot bemutatunk mindkét helyzetben, tehát a jelszóhasználat, és a kulcsfájlhasználat esetét is bemutatjuk. Természetesen, egy valós helyzetben csak az egyik módszerre van szükségünk a kettő közül.

Titkosított adattárolási platform létrehozása

Titkosított tárolási platform (amely lehet lemez, partíció, fájl stb.) létrehozásához használja a cryptsetup parancsot a luksFormat művelettel.

Például azért, hogy a /dev/vdb2 legyen a titkosított adatok tárolóeszköze:

root #cryptsetup -c aes-xts-plain64 -s 512 -y luksFormat /dev/vdb2
This will overwrite data on /dev/vdb2 irrevocably.
  
Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: ...
Verify passphrase: ...

Kulcsfájl használata a jelszó helyett:

root #cryptsetup -c aes-xts-plain64 -s 512 -y luksFormat /dev/vdb2 /etc/keys/enc.key
This will overwrite data on /dev/vdb2 irrevocably.
  
Are you sure? (Type uppercase yes): YES

A -c aes-xts-plain64 megmondja a cryptsetup alkalmazásunknak a lemez titkosításához használt rejtjelet (a cat /proc/crypto parancs az összes lehetőséget megmutatja a számunkra). Az -s 512 megmondja a cryptsetup alkalmazásunknak, hogy milyen hosszúságú legyen a titkosítási kulcs (ellentétben a jelszóval vagy a kulcsfájllal, amelyek ehhez a valódi titkosítási kulcs eléréséhez használatosak). Végül az -y arra kényszerít, hogy kétszer írjuk be ugyan azt jelszót (az esetleges félregépelések kiszűrése miatt).

Note
Az XTS két részre osztja a kulcsot, és csak az egyiket használják a tényleges titkosításhoz. Ez azt jelenti, hogy az 512 bites kulccsal rendelkező "aes-xts" valójában 256 bitet használ az AES részhez.
Important
Ha a LUKS fejléc megsérül, akkor az Ön titkosított adatai örökre elvesznek, még abban az esetben is, ha Ön rendelkezik a GPG-kulcs és a jelszó biztonsági másolatával! Ezért érdemes megfontolni a LUKS fejléc biztonsági mentését egy külön eszközre, és erősen ajánlott annak biztonságos tárolása! Tekintse meg a LUKS GYIK leírást, ha további részleteket akar megtudni ennek kapcsán.
root #cryptsetup luksHeaderBackup /dev/sdXn --header-backup-file /tmp/efiboot/luks-header.img
Ügyeljen arra, hogy ha ilyen módon megőrzi a LUKS fejléc biztonsági mentését, és ezt követően visszavonja valamelyik kulcsnyílást (keyslot), a régi kulcsok továbbra is használhatóak lesznek a LUKS partíció zárolásának feloldására azok számára, akik hozzáférnek a LUKS fejléc biztonsági mentési fájljához!

Teljes lemeztitkosítású rendszerindítás

Teljesen titkosított eszköznél (beleértve a titkosított /boot könyvtárat is), amikor a GRUB használatával történik a rendszerindítás kérjük, hogy a luks1 használatával titkosítson, mivel a luks2 még nem támogatott teljes mértékben. Példa parancs:

root #cryptsetup -c aes-xts-plain64 -s 512 -y luksFormat --type luks1 /dev/vdb2

Titkosított tároló megnyitása

A titkosított adattároló megnyitásához (vagyis annak biztosítása, hogy az valódi adataink hozzáférhetőek legyenek transzparens visszafejtésével) használjuk a luksOpen műveletet.

root #cryptsetup luksOpen /dev/vdb2 myname
Enter passphrase for /dev/vdb2: ...

Ha kulcsfájlt használunk, akkor a megnyitáshoz szükséges parancs így néz ki:

root #cryptsetup luksOpen -d /etc/keys/enc.key /dev/vdb2 myname

Amikor a parancs sikeresen lefut, akkor elérhetővé válik egy új /dev/mapper/myname nevű eszközfájl a számunkra (et kell majd később felcsatolni).

Ha ez az első alkalom, hogy ezt a titkosított eszközt használjuk, akkor azt formázni kell (mint amikor létrehozunk egy közönséges partíciót és utána formázzuk is azt). A következő példa a Btrfs fájlrendszert használja a formázásra, de természetesen bármely más fájlrendszert is használni lehet:

root #mkfs.btrfs /dev/mapper/myname

Amikor a mostani formázás befejeződött (vagy a formázás már megtörtént a múltban), akkor az luxOpen segítségével "kinyitott" eszközfájlt fel lehet csatolni a fájlrendszerünkbe:

root #mount /dev/mapper/myname /home

Titkosított tároló bezárása

A titkosított tároló bezárásához (vagyis annak biztosítása, hogy az valódi adataink ne legyenek hozzáférhetőek transzparens visszafejtéssel), használja a luksClose műveletet:

root #cryptsetup luksClose myname

Természetesen győződjön meg arról, hogy a készülék már nincs használatban.

LUKS kulcsok manipulálása

LUKS kulcsok vannak használva a valódi titkosítási kulcs eléréséhez. A kulcsok a (titkosított) partíció, lemez, fájl fejlécében található slotok-ban (résekben, nyílásokban) tárolódnak.

Kulcsnyílások (slotok) felsorolása

A luksDump művelettel megjeleníthetők a titkosított partícióról, lemezről, fájlról szóló információk. Ide tartoznak a slotok is:

root #cryptsetup luksDump /dev/vdb2
LUKS header information for /dev/vdb2
  
Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha1
Payload offset: 4096
MK bits:        512
MK digest:      34 3b ec ac 10 af 19 e7 e2 d4 c8 90 eb a8 da 3c e4 4f 2e ce
MK salt:        ff 7c 7f 53 db 53 48 02 a4 32 dc e0 22 fc a3 51
                06 ba b3 48 b3 28 13 a8 7a 68 43 d6 46 79 14 fe
MK iterations:  59375
UUID:           2921a7c9-7ccb-4300-92f4-38160804e08c
  
Key Slot 0: ENABLED
        Iterations:             241053
        Salt:                   90 0f 0f db cf 66 ea a9 6c 7c 0c 0d b0 28 05 2f
                                8a 5c 14 54 98 62 1a 29 f3 08 25 0c ec c2 b1 68
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: ENABLED
        Iterations:             273211
        Salt:                   01 4c 26 ed ff 18 75 31 b9 89 5d a6 e0 b5 f4 14
                                48 d0 23 47 a9 85 78 fb 76 c4 a9 d0 cd 63 fb d7
        Key material offset:    512
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

A fenti példában kettő slot (kulcsrés, kulcsnyílás) van használva. Vegye figyelembe, hogy a luksDump nem ad ki semmilyen érzékeny információt – csupán a LUKS fejlécnek a tartalmát jeleníti meg. A luksDump futtatásához nem kell visszafejtő kulcsot megadni.

Kulcsfájl vagy jelszó hozzáadása

Annak érdekében, hogy egy további kulcsfájlt vagy jelszót készítsünk (adjunk hozzá a header-hez) a titkosított tárhely eléréséhez, használjuk a luksAddKey műveletet:

root #cryptsetup luksAddKey /dev/vdb2
Enter any passphrase: (Enter a valid, previously used passphrase to unlock the key)
Enter new passphrase for key slot: ... 
Verify passphrase: ...

Kulcsfájl használata a kulcs feloldásához (de továbbra is jelszó hozzáadása):

root #cryptsetup luksAddKey -d /etc/keys/enc.key /dev/vdb2
Enter new passphrase for key slot: ...
Verify passphrase: ...

Ha kulcsfájlt kell hozzáadni (mondjuk /etc/keys/backup.key):

root #cryptsetup luksAddKey /dev/vdb2 /etc/keys/backup.key

Vagy az első kulcsfájl használatával a fő kulcs feloldásához:

root #cryptsetup luksAddKey -d /etc/keys/enc.key /dev/vdb2 /etc/keys/backup.key

Kulcsfájl vagy jelszó eltávolítása

A luksRemoveKey művelettel a kulcsfájl vagy a jelszó eltávolítható (így már nem lesznek azok használhatóak az adattároló visszafejtésére):

root #cryptsetup luksRemoveKey /dev/vdb2
Enter LUKS passphrase to be deleted: ...

Vagy a kulcsfájl eltávolításához:

root #cryptsetup luksRemoveKey -d /etc/keys/backup.key /dev/vdb2

Győződjön meg arról, hogy az adatokhoz való hozzáférésnek legalább egy módszere továbbra is elérhető az Ön számára. Ugyanis miután a jelszó vagy a kulcsfájl el lett távolítva, azt többé már nem lehet helyreállítani.

A slot kiürítése

Tegyük fel, hogy a jelszó vagy a kulcsfájl már nem ismert, akkor a slot megszabadítható. Természetesen ehhez előzetes ismeretre van szükség arról, hogy melyik nyílásban (slot-ban) van a jelszó vagy az adott kulcsfájl.

Például a 2-es számú slot kiürítéséhez (amely a 3.-ik slot sorrendben, mivel a slotok 0-tól vannak számozva):

root #cryptsetup luksKillSlot /dev/vdb2 2

Ez a parancs érvényes jelszót kér a folytatás előtt, vagy megadhatja a kulcsfájlt, hogy felhasználhassa a jelszó helyett:

root #cryptsetup luksKillSlot -d /etc/keys/enc.key /dev/vdb2 2

Titkosított fájlrendszerek csatlakoztatásának az automatizálása

Mostanáig a cikk a kézi úton történő beállításra, és a titkosított fájlrendszerek kézi úton történő felcsatlakoztatására/lecsatlakoztatására összpontosított. Azonban létezik egy init dmcrypt szolgáltatás is, amely automatizálja (elvégzi helyettünk) a titkosított fájlrendszerek visszafejtését és felcsatlakoztatását a fájlrendszerünkbe.

A dm-crypt beállítása

Szerkessze az /etc/conf.d/dmcrypt fájlt, és adja hozzá az egyes fájlrendszerek bejegyzéseit. A támogatott bejegyzések jól dokumentáltak a fájlban. Az alábbi csak egy példa:

FILE /etc/conf.d/dmcryptKettő elkódolt fájlrendszer automatikus bekapcsolása
# Definition for /dev/mapper/home (for /home)
target=home
source=UUID="abcdef12-321a-a324-a88c-cac412befd98"
key=/etc/keys/home.key
# If trim is desired, it can be enabled as below.
# Keep in mind that trim is not enabled by default for a security reason.
# This configuration is optional, otherwise default options apply.
options="--allow-discards"
 
# Definition for /dev/mapper/local (for /usr/local)
target=local
source=UUID="fedcba34-4823-b423-a94c-cadbefda2943"
key=/etc/keys/local.key
 
# Using an encrypted partition as key source.
target=other
source=UUID="ff24303e-49e1-4d13-b8ad-fc6b7e1d8174"
key=/keys/other.key                                # Relative to the root of the encrypted partition.
remdev=/dev/mapper/home                            # The recently decrypted partition.
 
# An empty line is important at the end of the file

Ha Ön a kulcsfájl helyett jelszót használ, akkor rendszerindítás alkalmával meg fog jelenni a jelszóbekérés. (az egyszerű cél, és forráskonfiguráció alapján).

Az fstab-fájl konfigurálása

A következő lépés az /etc/fstab fájl konfigurálása a (dekódolt) fájlrendszerek automatikus felcsatlakoztatásához, amikor azok már elérhetővé válnak (ki vannak nyitva). Javasoljuk, hogy először szerezze be a dekódolt (felcsatolt) fájlrendszer UUID azonosítóját:

root #blkid /dev/mapper/home
/dev/mapper/home: UUID="4321421a-4321-a6c9-de52-ba6421efab76" TYPE="ext4"

Majd ennek megfelelően frissítse az /etc/fstab fájlt:

FILE /etc/fstabAutomounting the decrypted file systems
UUID="4321421a-4321-a6c9-de52-ba6421efab76"   /home        ext4   defaults   0   0
UUID="bdef2432-3bd1-4ab4-523d-badcf234a342"   /usr/local   ext4   defaults   0   0

Init szkript hozzáadása a rendszerindítási szinthez

Ne felejtse el elindítani a dmcrypt init szolgáltatást rendszerindításkor:

root #rc-update add dmcrypt boot


Láthatóvá teszi a visszafejtett eszközcsomópontokat

Ha dekódolt/feloldott egy eszközt a szolgáltatások elindítása előtt, például a gyökérlemezt egy initramfs-szel, akkor lehetséges, hogy a feltérképezett eszköz nem látható. Ebben az esetben a következő futtatásával hozhatja létre újra.

root #dmsetup mknodes

A TrueCrypt/tcplay/VeraCrypt kötetek felcsatolása a fájlrendszerünkbe

root #cryptsetup --type tcrypt open container-to-mount konténer-neve

Cserélje ki a container-to-mount (felcsatolni kívánt adattárolót) az /dev alatti eszközfájlra vagy a megnyitni kívánt fájl elérési útjára. A sikeres megnyitás után a eszköz /dev/mapper/konténer-neve-ként jelenik meg, amelyet úgy lehet felcsatlakoztatni a fájlrendszerünkbe, mint bármely másik normál külső/belső adattároló eszköz.

Ha kulcsfájlokat használ, akkor adja meg őket a --key-file opció használatával. A rejtett kötet megnyitásához használja a --tcrypt-hidden opciót. A partíció vagy a teljes meghajtó számára, amely rendszermódban van titkosítva, használja a --tcrypt-system opciót.

Ha Ön készen van a munkával, akkor adja ki a szokásos unmount parancs, amely lecsatlakoztatja a kötetet a fájlrendszerről. Ezt követően zárja be az adattárolót a következő parancs futtatásával:

root #cryptsetup close konténer-neve

További olvasnivaló a témában

Külső források

  • A GitLab oldalán tárolt cryptsetup GYIK a felmerülő kérdések széles skáláját lefedi.