Table of Contents

Hier gibts alles zur Crypto-Schnittstelle des Linux-Device-Mappers, welcher mittels derer nicht nur Software-Raid, sondern auch Crypto-Filesystems verwalten kann.

Vorraussetzungen

Kernel-Config

Natürlich muss Support für den Device Mapper und das darunterliegende Crypt Target aktiv sein:

Device Drivers  --->
   Multi-device support (RAID and LVM)  --->
      <*>  Device mapper support
         <*>  Crypt target support

Zudem muss Support für (zumindest) den gewünschten Cipher-Algorithmus aktiv sein. Die vom aktuellen Kernel unterstützten Ciphers erfährt man mit: cat /proc/crypto Falls die gelieferte Ausgabe nicht befriedigt, nachbessern:

Cryptographic options  --->
   [...]
   <*>  Blowfish cipher algorithm
   [...]
   <*>  AES cipher algorithms
   [...]

Bringt es Vorteile, für den gewünschten Digest-Algorithmus ebenfalls Support im Kernel einzubinden? Schlecht ist es sicher nicht, aber wieso funktioniert es auch ohne?

Software

Generell muss cryptsetup installiert werden, allerdings ist es sehr zu empfehlen die Erweiterung LUKS (Linux Unified Key Setup) zu benutzen, da diese enorme Sicherheitsvorteile mit sich bringt. Zudem können mehrere Passwörter verwendet werden, da das Passwort selbst vom eigentlichen Schlüssel zur Kodierung 'nicht' abhängt. Klar, dass dadurch ungeahnte Möglichkeiten entstehen. Unter Gentoo kann cryptsetup mit der LUKS-Erweiterung simpel aus dem Portage installiert werden:

emerge -av cryptsetup-luks

Einrichtung

Exemplarisches Vorgehen:

  1. Crypto-FS erzeugen mit create bzw. luksFormat
  2. Mapping erzeugen mit create bzw. luksOpen
  3. Formatieren des Mappings mit einem Dateisystem
  4. Mounten des Mappings, schreiben der Daten, Unmounten des Mappings
  5. Mapping schließen mit remove bzw. luksClose
  6. GOTO 2.

ESSIV

Richtig geil secure wird das ganze erst mit der essiv-Erweiterung, allerdings ist diese nur in Kombination mit LUKS möglich. Dazu muss ein spezieller Cipher-String beim Erzeugen des Crypto-FS angegeben werden, z.B.:

cryptsetup -c "aes-cbc-essiv:sha256" luksFormat /dev/hda5 crypto_fs

Beispiele

Meist sagt ein Beispiel mehr als tausend Worte ;-)

Crypto-Loop

Das geht auch mit:

CONFIG_BLK_DEV_CRYPTOLOOP=y

allerdings ist DM-Crypt einiges sicherer als sein Vorgänger.

Das folgende kleine Beispiel sagt eigentlich alles nötige zum Thema Einrichten:

dd if=/dev/zero of=verysecret.loop bs=52428800 count=1 # erzeugt 50MB Datei

losetup /dev/loop0 verysecret.loop                     # erzeugt das Loop-Device
cryptsetup -c blowfish -y -s 256 luksFormat /dev/loop0 # erzeugt das Crypto-FS
 -> enter new key
 -> verify new key
cryptsetup luksOpen /dev/loop0 verysecret              # öffnet das Crypto-FS
 -> enter key
mkfs.xfs /dev/mapper/verysecret                        # erzeugt Dateisystem innerhalb des Crypto-FS
mount /dev/mapper/verysecret /mnt                      # Crypto-FS mounten
[...]
umount /mnt                                            # Crypto-FS unmounten
cryptsetup luksClose verysecret                        # Tür zu!

Crypto-Partition

Hier ein Beispiel zum Erzeugen einer verschlüsselten Partition mit LUKS, essiv, blowfish und einem 256bit langen key.

cryptsetup -y -c "blowfish-cbc-essiv:sha256" -s 256 luksFormat /dev/sda3
-> enter new key
-> verify new key
cryptsetup luksOpen /dev/sda3 crypt-fs
-> enter key
=> generates the mapping /dev/mapper/crypt-fs
mkfs.xfs -f /dev/mapper/crypt-fs
mount /dev/mapper/crypt-fs /mnt/crypt-fs
[...]
umount /mnt/crypt-fs
cryptsetup luksClose crypt-fs

Wartung

Key hinzufügen

Dank LUKS werden alle Keys auf dem verschlüsselten Device selbst abgelegt. Daher benötigt luksAddKey das 'Physikalische Device' als Parameter:

cryptsetup luksAddKey <device>

Dann wird das Device geöffnet, dazu muss 'irgendeiner der bestehenden Keys' eingegeben werden.

Key entfernen

Genauso simpel wie das Hinzufügen eines Keys:

cryptsetup luksDelKey <device> <Slot_Nr>

Die 'Slot_Nr' wird beim hinzufügen eines Keys angezeigt, der erste Slot hat die Nummer 0.

Device-Informationen anzeigen

Für Informationen über Verschlüsselung, registrierte Keys, freie Slots, etc.:

cryptsetup luksDump <device>

Devicegröße ändern

Perfekt für den Servereinsatz: 'die Änderung kann online durchgeführt werden'. Dieses Feature geht wunderbar Hand in Hand mit lvresize und xfs_growfs.

vergrößern

Nach dem Vergrößern des unterliegenden LVM's kann das crypto-fs vergrößert werden, hierzu ist zunächst die neue Größe des Datenträgers in Sektoren von Interesse:

fdisk -ul <devicepath>

von dem beim fdisk-Aufruf zurückgelieferten Absolutwert muss dann der Offset des crypto-fs abgezogen werden. Diesen kann man mit den cryptsetup-Aktionen status oder luksDump erfahren. Die Vergrößerung erfolgt dann so:

cryptsetup --size <size_in_sectors> resize <mapping_name>

Danach kann das im crypto-fs enthaltene Dateisystem vergrößert werden.

verkleinern

Um das crypto-fs zu verkleinern, muss zunächst das enthaltene Dateisystem verkleinert werden.

Danach kann die Größenänderung wie in vergrößern erfolgen.

Links

Wiki des dm-crypt - Autors
Site des LUKS - Autors
http://gentoo-wiki.com/SECURITY_Encrypting_Root_Filesystem_with_DM-Crypt_with_LUKS