## - urls
## -
http://wiki.ubuntuusers.de/System_verschl%C3%BCsseln
http://de.gentoo-wiki.com/DM-Crypt

## --------------------------------------------------------- ##
## - In welchem Slot befindet sich der Key mit Passwort... - ##
## --------------------------------------------------------- ##

# - bsp.: cryptsetup --verbose open --test-passphrase /dev/sda5
# -
cryptsetup --verbose open --test-passphrase <device>


## ------------------------------------------------------------- #
## -                                                           - #
## -                 cryptodevice einrichten                   - #
## -                                                           - #
## ------------------------------------------------------------- #

## -------------------------- ##
## - Cryptodevice erstellen - ##
## -------------------------- ##
## -
cryptsetup luksFormat <device i.e. "/dev/sda1">
## - oder  
cryptsetup -c aes-lrw-benbi -y -s 384 luksFormat <device>
#
#cryptsetup -c aes-xts-plain -y -s 512 luksFormat <device>
cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y <device>

## - cryptodevice erstellen mit password im keyfile
## -
## - keyfile (1024 bit groß) erstellen
head -c1024 /dev/urandom > <keyfile i.e. "/etc/.key/hostname.key">
## - crytodevice erstellen
cryptsetup -c aes-lrw-benbi -s 384 luksFormat <device> <keyfile>
# - oder (etwas neuer)
#cryptsetup -c aes-xts-plain -s 512 luksFormat <device> <keyfile>
cryptsetup -c aes-xts-plain64 -s 512 -h sha512 luksFormat <device> <keyfile>

## - cryptodevice mit einem abgeleiteten Schlüssel eines bestehenden LUKS
## - device erstellen
## -
## -    /lib/cryptsetup/scripts/decrypt_derived <Name_des_Ursprungsgeräts> | cryptsetup -c aes-xts-plain -s 512 luksFormat <Gerät>
## - wobei mit <Name des Ursprungsgeräts> ist im Folgenden der Mapper-Name
## - gemeint ist, der unter /dev/mapper/ angezeigt wird - z.Bsp. root
## -
/lib/cryptsetup/scripts/decrypt_derived root |  cryptsetup -c aes-xts-plain -s 512 luksFormat /dev/sda3





## ------------------------ ##
## - Cryptodevice oeffnen - ##        
## ------------------------ ##
## -
cryptsetup luksOpen <device> <cryptodevice i.e. "data">
## - bzw. mit keyfileangabe
cryptsetup luksOpen <device> <cryptodevice i.e. "data"> --key-file <keyfile>

## - dateisystem erstellen
## -
## - Die "-m" Option reserviert soviel Prozent (hier: 0 Prozent) des Speichers
## - für den Superuser. Vergisst man die Option anzugeben, werden standardmäßig 5%
## - des Speicherplatzers für den Superuser reserviert.
## -
#mkfs.ext4 -m0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/mapper/<cryptodevice>
mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 /dev/mapper/<cryptodevice>

## - neue crytopartition mounten
## -
mount /dev/mapper/<cryptodevice> <mountpoint i.e. "/data">

## - öffnen eines mit einem abgeleiteten Schlüssel erstellten
## - LUKS Devices
## -
## -    /lib/cryptsetup/scripts/decrypt_derived <Name Des Ursprungsgeräts> | cryptsetup luksOpen <Gerät> <Name>
/lib/cryptsetup/scripts/decrypt_derived root | cryptsetup luksOpen /dev/sda3 data


## ----------------- ##
## - /etc/crypttab - ##
## ----------------- ##
## -
## - Paswortgeschütztes Device
#<Name>  UUID=<UUID>                                none  <options>
root    UUID=9d323be6-7aad-4813-a0d2-8db4947c48d9  none  luks
## -
## - Keyfile gechütztes Device
#<Name>  UUID=<UUID>                                <key file>          <options
home    UUID=866d09f2-1b18-a00a-8d45-b2407260864c   /etc/.key/luna.key luks,aes-xts-plain
## -
## - mit abgeleitetem Schlüssel erstelltes Device
#<Name>  UUID=<UUID>                               <Ursprungsgeräts> luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived
data    UUID=5f106e59-829f-4186-95b7-a0c84bb0adbd  root  luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived

## - Hinweis!
## - die UUID eines Gerätedevice kann mittels "blkid" ermittelt werden
## -
blkid /dev/sda2

## - Neuere Versionen von cryptsetup können die UUID auch selbst ermitteln:
## -
cryptsetup luksUUID /dev/sdxY



## - Luks ermöglicht, mit verschiedenen Schlüsseln auf die 
## - Partition zuzugreifen. Folgender Befehl fügst einen 
## - weiteren hinzu:
## -    ein passwort hinzufügen
## -
cryptsetup luksAddKey /dev/$DEVICE
## -
## -    ein passwort hinzufügen falls eine schlüsseldatei benutzt wird
## -
cryptsetup luksAddKey -d /pfad/zur/datei /dev/$DEVICE
## -
## -    ein passwort hinzufügen falls eine abgeleiteter Schlüssel benutzt wird
## -
mkdir /mnt/ram && mount -t ramfs -o size=1m ramfs /mnt/ram && chmod 600 /mnt/ram
/lib/cryptsetup/scripts/decrypt_derived <Ursprungsgerät z.Bsp. root> > /mnt/ram/tmp.key
cryptsetup luksAddKey -d /mnt/ram/tmp.key /dev/$DEVICE
umount /mnt/ram && rmdir /mnt/ram
## -
## -    einen abgeleiteten Schlüssel hinzufügen, falls ein Passwort benutzt wurde
## -
mkdir /mnt/ram && mount -t ramfs -o size=1m ramfs /mnt/ram && chmod 600 /mnt/ram
/lib/cryptsetup/scripts/decrypt_derived <Ursprungsgerät z.Bsp. root> > /mnt/ram/tmp.key
cryptsetup luksAddKey /dev/$DEVICE /mnt/ram/tmp.key
umount /mnt/ram && rmdir /mnt/ram
## - 
## -    eine Schlüsseldatei hinzufügen
## -
cryptsetup luksAddKey /dev/$DEVICE <keydatei>
## -
## -    eine Schlüsseldatei hinzufügen falls eine schlüsseldatei benutzt wird
## -
cryptsetup luksAddKey -d /pfad/zur/datei /dev/$DEVICE <keydatei>


## - Analog dazu kann mit luksKillSlot ein Schlüssel wieder entfernen.
## -
cryptsetup luksKillSlot <cryptodevice> <SlotNr>



## - Täglicher Gebrauch
## - ==================

    * Trage deine Cryptopartition in /etc/crypttab ein, bspw:

      # <target device>  <source device>  <key file>  <options>
      $CRYPTODEVICE      /dev/$DEVICE     none        luks,check=ext2,retry=5
      # oder
      <cryptodevice>    <device>          none       luks,retry=1,cipher=aes-lrw-benbi
      <cryptodevice>    <device>          <keykile>  luks,cipher=aes-lrw-benbi

    * Trage in /etc/fstab das Device (/dev/mapper/$CRYPTODEVICE $MOUNT) 
      mit deinen Dateisystemoptionen ein:

      /dev/mapper/$CRYPTDEVICE     $MOUNT      auto        defaults    0   0

    * /etc/init.d/cryptdisks kümmert sich nun um die Initialisierung beim Booten. 
      Bei Falscheingabe, wirst du mehrmals (siehe retry in der /etc/crypttab) 
      erneut gefragt. Falls es weiterhin fehlschlägt, wird der Bootvorgang 
      ohne mounten fortgesetzt.

    * Luks ermöglicht es dir, mit verschiedenen Schlüsseln auf die Partition 
      zuzugreifen. Mit folgendem Befehl fügst du einen weiteren hinzu:

      cryptsetup luksAddKey /dev/$DEVICE

      Dazu musst du das Passwort eines schon vorhandenen Schlüssels eingeben. Analog 
      dazu kannst du mit luksDelKey ein Schlüssel wieder entfernen.



Paranoia
========

Mit dmsetup info lassen sich benutzte devicemappings anzeigen. 
Taucht hier ein Teil als ACTIVE auf, so hat jedermensch darauf 
Zugriff (auch wenn es nicht gemountet ist, könnte - wer die 
nötigen Rechte hat - das Teil ohne passendes Cryptokennwort 
mounten) - es ist in diesem Zustand quasi entschlüsselt!

Deswegen immer nach dem unmounten, das mapping entfernen 
(sonst gibt's (erfahrene Beamte vorausgesetzt) evtl. Stress bei 
der Hausdurchsuchung):

umount $MOUNT
cryptsetup luksClose $CRYPTODEVICE

Du kannst alle mappings gleichzeitig entfernen mit:

dmsetup remove_all

! Denk dran: cryptsetup luksClose niemals nicht vergessen oder aber 
Stecker ziehen (bzw. den Rechner herunterfahren) ;) !

