Cryptconfig: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
K (Anwendung über die Kommandozeile)
(Zitat aus der Projektbeschreibung)
 
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{UnderConstruction}}--[[Benutzer:Gehrke|Gehrke]] ([[Benutzer Diskussion:Gehrke|Diskussion]]) 22:27, 21. Jan. 2015 (CET)
+
{{Review|Kompletter Artikel}}--[[Benutzer:Gehrke|Gehrke]] ([[Benutzer Diskussion:Gehrke|Diskussion]]) 21:11, 24. Jan. 2015 (CET)
  
 
cryptconfig ist ein Wrapper, welcher das Handling von [[LUKS]] vereinfachen soll. Es wurde von SUSE entwickelt für den Einsatz in [[YaST]]. Dort wird es dazu verwendet, verschlüsselte home-Verzeichnisse zu erstellen und zu löschen oder deren Größe zu verändern.
 
cryptconfig ist ein Wrapper, welcher das Handling von [[LUKS]] vereinfachen soll. Es wurde von SUSE entwickelt für den Einsatz in [[YaST]]. Dort wird es dazu verwendet, verschlüsselte home-Verzeichnisse zu erstellen und zu löschen oder deren Größe zu verändern.
 +
 +
Zitat aus der Projektbeschreibung:
 +
 +
<cite>
 +
This package contains a utility for configuring encrypted home directories and LUKS partitions. It also supports creating LUKS disk images, creating LUKS partitions, and enlarging disk images along with their file systems.  This package also contains a pam module that syncs a user's UNIX password with the password used to encrypt their home directory.
 +
</cite>
  
 
=Anwendung in YaST=
 
=Anwendung in YaST=
Zeile 16: Zeile 22:
 
Die Daten im gleichnamigen Verzeichnis werden nicht verschlüsselt.
 
Die Daten im gleichnamigen Verzeichnis werden nicht verschlüsselt.
  
Für den Anwender ist das Verfahren im Wesentlichen transparent. Im Laufe der üblichen Arbeiten mit dem System bemerkt er nichts von der Existenz des verschlüsselten Datenspeichers, insbesondere '''entfällt die sonst notwendige Eingabe eines zusätzlichen Passwortes'''.
+
Für den Anwender ist das Verfahren im Wesentlichen transparent. Im Laufe der üblichen Arbeiten mit dem System bemerkt er nichts von der Existenz des verschlüsselten Datenspeichers, insbesondere entfällt durch die Bindung an das Login-Passwort die sonst notwendige Eingabe einer '''zusätzlichen Passphrase'''.
  
 
=Anwendung über die Kommandozeile=
 
=Anwendung über die Kommandozeile=
In bestimmten Fällen kann es notwendig sein, auf die Daten innerhalb des LUKS-Containers direkt zuzugreifen. Dies kann auf zwei Wegen durchgeführt werden, wobei beide Wege voraussetzen, dass neben den beiden erzeugten Dateien (Image + Key) auch das Passwort des Users bekannt ist.
+
In bestimmten Fällen kann es notwendig sein, auf die Daten innerhalb des LUKS-Containers direkt zuzugreifen. Dies kann auf zwei Wegen durchgeführt werden, wobei beide Wege voraussetzen, dass neben den beiden erzeugten Dateien (Image + Key) auch das Login-Passwort des Users bekannt ist.
 
*Zugriff via cryptconfig
 
*Zugriff via cryptconfig
*Zugriff via [[dm-crypt]] (luksSetup)
+
*Zugriff via [[dm-crypt]] (cryptsetup)
 
Der Weg über ''cryptconfig'' ist möglicherweise etwas einfacher, aber spezifisch für die Distributionen von SUSE. Die zweite Variante ist allgemein anwendbar und kann somit mit jeder beliebigen Linux-Distribution durchgeführt werden, solange diese LUKS unterstützt.
 
Der Weg über ''cryptconfig'' ist möglicherweise etwas einfacher, aber spezifisch für die Distributionen von SUSE. Die zweite Variante ist allgemein anwendbar und kann somit mit jeder beliebigen Linux-Distribution durchgeführt werden, solange diese LUKS unterstützt.
  
==Funktionalität==
+
==Zugriff mit cryptconfig==
 +
Das Programm selbst gibt eine kurze Übersicht über die verfügbare Funktionalität:
 
<pre>usage: cryptconfig [COMMAND] [COMMAND-OPTIONS] arg1 arg2...
 
<pre>usage: cryptconfig [COMMAND] [COMMAND-OPTIONS] arg1 arg2...
  
Zeile 43: Zeile 50:
 
You can run cryptconfig [COMMAND] --help for more information on a command.
 
You can run cryptconfig [COMMAND] --help for more information on a command.
 
</pre>
 
</pre>
[[Kategorie:Security]] [[Kategorie:YaST]] [[Kategorie:Konsole‏‎]]
+
 
 +
Auf den Inhalt kann über die Kommandozeile mit einem Zweizeiler zugegriffen werden, entsprechende Berechtigungen vorausgesetzt. Zuerst wird der Container entschlüsselt und danach der Inhalt in das gewünschte Zielverzeichnis gemountet.
 +
<pre>
 +
j2:~ # cryptconfig open /home/cryptedhome-user.img --key-file /home/cryptedhome-user.key
 +
Enter the key file password:
 +
/home/cryptedhome-user.img is now available as device /dev/mapper/_home_cryptedhome-user.img
 +
 
 +
j2:~ # mount /dev/mapper/_home_cryptedhome-user.img /mnt
 +
</pre>
 +
In der umgekehrten Reihenfolge wird der Container wieder verschlossen:
 +
<pre>
 +
j2:~ # umount /mnt
 +
j2:~ # cryptconfig close /home/cryptedhome-user.img
 +
Done.
 +
</pre>
 +
 
 +
==Zugriff mit dm-crypt==
 +
Auch wenn der zuvor beschriebene Zugriff via ''cryptconfig'' sehr simpel umzusetzen ist, kann es lohnend sein, sich mit den Zugriffsmöglichkeiten via [[dm-crypt]] vertraut zu machen. Beispielsweise für die Verwendung in Umgebungen jenseits von SUSE (ohne Support dieses Wrappers) oder zur Erlangung detaillierter Informationen zu den eingesetzten Verfahren, möglicherweise um die gebotenen Security-Standard qualitativ bewerten zu können.
 +
 
 +
===Informationen zum Container===
 +
Detaillierte Informationen zu den eingesetzten Crypto-Merkmalen können aus dem LUKS-Header ausgelesen werden, ohne dass eine Entschlüsselung stattfindet:
 +
<pre>
 +
j2:~ # losetup --find
 +
/dev/loop0
 +
 
 +
j2:~ # losetup /dev/loop0 /home/cryptedhome-user.img
 +
losetup: /home/cryptedhome-user.img: warning: file does not fit into a 512-byte sector the end of the file will be ignored.
 +
 
 +
j2:~ # losetup --list
 +
NAME      SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
 +
/dev/loop0        0      0        0  0 /home/cryptedhome-user.img
 +
 
 +
j2:~ # cryptsetup luksDump /dev/loop0
 +
LUKS header information for /dev/loop0
 +
 
 +
Version:        1
 +
Cipher name:    aes
 +
Cipher mode:    xts-plain64
 +
Hash spec:      sha1
 +
Payload offset: 4096
 +
MK bits:        256
 +
MK digest:      ca 55 7c 0e 46 f7 97 60 a1 09 2d f2 b0 74 58 a1 19 72 fc b4
 +
MK salt:        83 89 19 c1 b4 3a 2a 79 24 bb 75 3d 7c c8 d9 4f
 +
                f8 3a 10 2c a0 48 72 c5 8d ee 04 63 4d 12 ad 6d
 +
MK iterations:  42875
 +
UUID:          e3a9e54d-fd22-495a-a584-ecc3eaff0659
 +
 
 +
Key Slot 0: ENABLED
 +
        Iterations:            173441
 +
        Salt:                  b5 69 44 0a 19 3e 17 e7 0b 2c 13 f3 44 48 59 dd
 +
                                cc 3c 81 33 bb c0 23 d3 8b a0 29 4f 34 df 04 c4
 +
        Key material offset:    8
 +
        AF stripes:            4000
 +
Key Slot 1: DISABLED
 +
Key Slot 2: DISABLED
 +
Key Slot 3: DISABLED
 +
Key Slot 4: DISABLED
 +
Key Slot 5: DISABLED
 +
Key Slot 6: DISABLED
 +
Key Slot 7: DISABLED
 +
</pre>
 +
 
 +
===Entschlüsselung des Keys===
 +
Der für den Zugriff auf den Container notwendige Schlüssel liegt direkt neben dem Container, ist aber selbst verschlüsselt:
 +
<pre>
 +
j2:~ # cat /home/cryptedhome-user.key
 +
Salted__8��yn��a���L��.��07�!谣�j��v<C8<���zas��n������▒%� *9tm�__B"ٙ\���[3��W��l��'Z(-�A�S      �����▒�o�W��W��5�?&i�qF�e�HRs#4̂wmk��`��)U��2ƚ����R`���S���F�R�� �Ց��
 +
                      ��
 +
                        �Ļ
 +
_XG�▒��h�=7�C▒A�M��-)�%�9�U���R��^����W1D���Fg▒S(�&�,�p�;��絍,��UÁ���_2�Ȕ|H�~<ht5�Z\)*
 +
</pre>
 +
Er wurde mit dem Login-Passwort des Users verschlüsselt. Ein Blick in den Sourcecode (cryptconfig-lib.c) zeigt diesen relevanten Code-Schnipsel:
 +
<pre>
 +
/*
 +
* Decrypt the encrypted key file using password. The key_data
 +
* field needs to be unlocked and freed by the caller.
 +
*/
 +
gboolean decrypt_key (const char *key_file, const char *password,
 +
                      char **key_data, int *key_data_size)
 +
{
 +
    const EVP_CIPHER *cipher = EVP_aes_256_cbc ();
 +
    const EVP_MD *md = EVP_md5 ();
 +
    size_t hk_sz, total_size = 0;
 +
    int fd, final_size, kd_size;
 +
    gboolean ret = FALSE;
 +
    struct stat info;
 +
    EVP_CIPHER_CTX ctx;
 +
    unsigned char iv[EVP_MAX_IV_LENGTH];
 +
    unsigned char hashed_key[EVP_MAX_KEY_LENGTH];
 +
    unsigned char salt[PKCS5_SALT_LEN];
 +
    unsigned char magic[8];
 +
 
 +
    fd = open (key_file, O_RDONLY | O_NOFOLLOW);
 +
[...]
 +
}
 +
</pre>
 +
 
 +
Zuerst wird der Schlüssel mit dem Login-Password via [[openssl]] entschlüsselt und unverschlüsselt abgelegt:
 +
<pre>
 +
j2:~ # openssl enc -d -aes-256-cbc -in /home/cryptedhome-user.key -out /home/cryptedhome-user-plaintext.key
 +
enter aes-256-cbc decryption password:
 +
</pre>
 +
Im nächsten Schritt wird mit diesem Klartext-Schlüssel (welcher sofort danach sicher entsorgt werden sollte) der LUKS-Container entschlüsselt und gemountet:
 +
<pre>
 +
j2:~ # cryptsetup luksOpen --key-file=/home/cryptedhome-user-plaintext.key /dev/loop0 cryptedhome
 +
j2:~ # shred /home/cryptedhome-user-plaintext.key; rm /home/cryptedhome-user-plaintext.key                                   
 +
j2:~ # mount /dev/mapper/cryptedhome /mnt
 +
</pre>
 +
An dieser Stelle ist das home-Verzeichnis unverschlüsselt unter /mnt eingehängt und kann bearbeitet werden.
 +
 
 +
Abschließend nach getaner Arbeit wie zuvor auch die Dekonstruktion der vorigen Schritte:
 +
<pre>
 +
j2:~ # umount /mnt
 +
j2:~ # cryptsetup luksClose cryptedhome
 +
j2:~ # losetup --detach /dev/loop0
 +
</pre>
 +
 
 +
=Links=
 +
*[http://kaa-ching.blogspot.de/2012/03/encrypted-home-directory-in-opensuse.html Encrypted home directory in Opensuse 12.1 (Klaas van Gend)] {{englisch}}
 +
*[https://build.opensuse.org/package/show/openSUSE:Factory/cryptconfig A Utility to Configure Encrypted Home Directories and LUKS Partitions (build.opensuse.org)] {{englisch}} - Source-Files
 +
 
 +
[[Kategorie:Security]] [[Kategorie:YaST]] [[Kategorie:Konsole‏‎]] [[Kategorie:HowTo]]

Aktuelle Version vom 25. Januar 2015, 08:17 Uhr

Höhe=24px Dieser Artikel oder Teile davon wurden mit 'Review' markiert. Das bedeutet, dass größere Arbeiten am Inhalt des Artikels abgeschlossen sind und der Autor eine Korrekturlesung durch andere User zur Qualitätssicherung für angebracht hält.

Zu sichtende Teile: Kompletter Artikel

Bitte hilf LinuxClubWiki, indem du den zu sichtenden Teil überprüfst und den Artikel gegebenenfalls überarbeitest!

--Gehrke (Diskussion) 21:11, 24. Jan. 2015 (CET)

cryptconfig ist ein Wrapper, welcher das Handling von LUKS vereinfachen soll. Es wurde von SUSE entwickelt für den Einsatz in YaST. Dort wird es dazu verwendet, verschlüsselte home-Verzeichnisse zu erstellen und zu löschen oder deren Größe zu verändern.

Zitat aus der Projektbeschreibung:

This package contains a utility for configuring encrypted home directories and LUKS partitions. It also supports creating LUKS disk images, creating LUKS partitions, and enlarging disk images along with their file systems. This package also contains a pam module that syncs a user's UNIX password with the password used to encrypt their home directory.

Anwendung in YaST

Konfiguration verschlüsseltes home-Verzeichnis in YaST

Im Konfigurationswerkzeug YaST ist es möglich, beim Anlegen von Benutzern oder Verändern von Eigenschaften die Verwendung eines verschlüsselten home-Verzeichnisses zu bestimmen. Als Resultat wird dabei ein LUKS-Container in der angegebenen Größe erzeugt. Die Größe dieses Containers kann an dieser Stelle auch verändert werden. Der Screenshot zeigt den entsprechenden Dialog.

Im wesentlichen wird dabei ein Image-File (der LUKS-Container) in der angegebenen Größe erzeugt. Dazu passend ein Key-File als Schlüssel, welches mit dem Login-Password des jeweiligen Users entschlüsselt werden muss:

# ls -l /home
drwxr-xr-x   7 cryptedhome-user users        4096 Jan 22 07:47 cryptedhome-user
-rw-------   1 cryptedhome-user root    104857601 Jan 22 07:47 cryptedhome-user.img
-rw-------   1 cryptedhome-user root          288 Jan 22 07:47 cryptedhome-user.key

Die Daten im gleichnamigen Verzeichnis werden nicht verschlüsselt.

Für den Anwender ist das Verfahren im Wesentlichen transparent. Im Laufe der üblichen Arbeiten mit dem System bemerkt er nichts von der Existenz des verschlüsselten Datenspeichers, insbesondere entfällt durch die Bindung an das Login-Passwort die sonst notwendige Eingabe einer zusätzlichen Passphrase.

Anwendung über die Kommandozeile

In bestimmten Fällen kann es notwendig sein, auf die Daten innerhalb des LUKS-Containers direkt zuzugreifen. Dies kann auf zwei Wegen durchgeführt werden, wobei beide Wege voraussetzen, dass neben den beiden erzeugten Dateien (Image + Key) auch das Login-Passwort des Users bekannt ist.

  • Zugriff via cryptconfig
  • Zugriff via dm-crypt (cryptsetup)

Der Weg über cryptconfig ist möglicherweise etwas einfacher, aber spezifisch für die Distributionen von SUSE. Die zweite Variante ist allgemein anwendbar und kann somit mit jeder beliebigen Linux-Distribution durchgeführt werden, solange diese LUKS unterstützt.

Zugriff mit cryptconfig

Das Programm selbst gibt eine kurze Übersicht über die verfügbare Funktionalität:

usage: cryptconfig [COMMAND] [COMMAND-OPTIONS] arg1 arg2...

COMMANDS
enlarge-image   Enlarge a disk image and it's file system
close           Close devices using a LUKS image
make-ehd        Create an encrypted home directory image and image key
create-image    Create an arbitrary LUKS image
passwd          Change the password used to encrypt/decrypt a key file
pd-add          Add public data
open            Open a LUKS image
format          Create a LUKS partition on a device
pd-remove       Remove public data
pm-disable      Disable pam_mount with encrypted home directories
create-key      Create a new key that can be added to a LUKS image
pm-enable       Enable pam_mount with encrypted home directories

You can run cryptconfig [COMMAND] --help for more information on a command.

Auf den Inhalt kann über die Kommandozeile mit einem Zweizeiler zugegriffen werden, entsprechende Berechtigungen vorausgesetzt. Zuerst wird der Container entschlüsselt und danach der Inhalt in das gewünschte Zielverzeichnis gemountet.

j2:~ # cryptconfig open /home/cryptedhome-user.img --key-file /home/cryptedhome-user.key 
Enter the key file password: 
/home/cryptedhome-user.img is now available as device /dev/mapper/_home_cryptedhome-user.img

j2:~ # mount /dev/mapper/_home_cryptedhome-user.img /mnt

In der umgekehrten Reihenfolge wird der Container wieder verschlossen:

j2:~ # umount /mnt
j2:~ # cryptconfig close /home/cryptedhome-user.img
Done.

Zugriff mit dm-crypt

Auch wenn der zuvor beschriebene Zugriff via cryptconfig sehr simpel umzusetzen ist, kann es lohnend sein, sich mit den Zugriffsmöglichkeiten via dm-crypt vertraut zu machen. Beispielsweise für die Verwendung in Umgebungen jenseits von SUSE (ohne Support dieses Wrappers) oder zur Erlangung detaillierter Informationen zu den eingesetzten Verfahren, möglicherweise um die gebotenen Security-Standard qualitativ bewerten zu können.

Informationen zum Container

Detaillierte Informationen zu den eingesetzten Crypto-Merkmalen können aus dem LUKS-Header ausgelesen werden, ohne dass eine Entschlüsselung stattfindet:

j2:~ # losetup --find
/dev/loop0

j2:~ # losetup /dev/loop0 /home/cryptedhome-user.img
losetup: /home/cryptedhome-user.img: warning: file does not fit into a 512-byte sector the end of the file will be ignored.

j2:~ # losetup --list
NAME       SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0         0      0         0  0 /home/cryptedhome-user.img

j2:~ # cryptsetup luksDump /dev/loop0
LUKS header information for /dev/loop0

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha1
Payload offset: 4096
MK bits:        256
MK digest:      ca 55 7c 0e 46 f7 97 60 a1 09 2d f2 b0 74 58 a1 19 72 fc b4 
MK salt:        83 89 19 c1 b4 3a 2a 79 24 bb 75 3d 7c c8 d9 4f 
                f8 3a 10 2c a0 48 72 c5 8d ee 04 63 4d 12 ad 6d 
MK iterations:  42875
UUID:           e3a9e54d-fd22-495a-a584-ecc3eaff0659

Key Slot 0: ENABLED
        Iterations:             173441
        Salt:                   b5 69 44 0a 19 3e 17 e7 0b 2c 13 f3 44 48 59 dd 
                                cc 3c 81 33 bb c0 23 d3 8b a0 29 4f 34 df 04 c4 
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Entschlüsselung des Keys

Der für den Zugriff auf den Container notwendige Schlüssel liegt direkt neben dem Container, ist aber selbst verschlüsselt:

j2:~ # cat /home/cryptedhome-user.key
Salted__8��yn��a���L��.��07�!谣�j��v<C8<���zas��n������▒%� *9tm�__B"ٙ\���[3��W��l��'Z(-�A�S      �����▒�o�W��W��5�?&i�qF�e�HRs#4̂wmk��`��)U��2ƚ����R`���S���F�R�� �Ց��
                       ��
                         �Ļ
_XG�▒��h�=7�C▒A�M��-)�%�9�U���R��^����W1D���Fg▒S(�&�,�p�;��絍,��UÁ���_2�Ȕ|H�~<ht5�Z\)*

Er wurde mit dem Login-Passwort des Users verschlüsselt. Ein Blick in den Sourcecode (cryptconfig-lib.c) zeigt diesen relevanten Code-Schnipsel:

/*
 * Decrypt the encrypted key file using password. The key_data
 * field needs to be unlocked and freed by the caller.
 */
gboolean decrypt_key (const char *key_file, const char *password,
                      char **key_data, int *key_data_size)
{
    const EVP_CIPHER *cipher = EVP_aes_256_cbc ();
    const EVP_MD *md = EVP_md5 ();
    size_t hk_sz, total_size = 0;
    int fd, final_size, kd_size;
    gboolean ret = FALSE;
    struct stat info;
    EVP_CIPHER_CTX ctx;
    unsigned char iv[EVP_MAX_IV_LENGTH];
    unsigned char hashed_key[EVP_MAX_KEY_LENGTH];
    unsigned char salt[PKCS5_SALT_LEN];
    unsigned char magic[8];

    fd = open (key_file, O_RDONLY | O_NOFOLLOW);
[...]
}

Zuerst wird der Schlüssel mit dem Login-Password via openssl entschlüsselt und unverschlüsselt abgelegt:

j2:~ # openssl enc -d -aes-256-cbc -in /home/cryptedhome-user.key -out /home/cryptedhome-user-plaintext.key
enter aes-256-cbc decryption password:

Im nächsten Schritt wird mit diesem Klartext-Schlüssel (welcher sofort danach sicher entsorgt werden sollte) der LUKS-Container entschlüsselt und gemountet:

j2:~ # cryptsetup luksOpen --key-file=/home/cryptedhome-user-plaintext.key /dev/loop0 cryptedhome
j2:~ # shred /home/cryptedhome-user-plaintext.key; rm /home/cryptedhome-user-plaintext.key                                     
j2:~ # mount /dev/mapper/cryptedhome /mnt

An dieser Stelle ist das home-Verzeichnis unverschlüsselt unter /mnt eingehängt und kann bearbeitet werden.

Abschließend nach getaner Arbeit wie zuvor auch die Dekonstruktion der vorigen Schritte:

j2:~ # umount /mnt
j2:~ # cryptsetup luksClose cryptedhome
j2:~ # losetup --detach /dev/loop0

Links