dm-crypt
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:
- A Linux kernel konfigurálása.
- 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.
[*] 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:
[*] 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:
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".
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).
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.
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
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:
# 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:
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
- Full Disk Encryption From Scratch — a guide which covers the process of configuring a drive to be encrypted using LUKS and btrfs.
- Dm-crypt full disk encryption — a guide which covers the process of configuring a drive to be encrypted using LUKS and btrfs.
- User:Sakaki/Sakaki's EFI Install Guide/Preparing the LUKS-LVM Filesystem and Boot USB Key
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.