Contenu | Rechercher | Menus

Volume chiffré avec cryptsetup

Afin de protéger au mieux vos données personnelles, il peut vous être nécessaire de chiffrer vos données. Depuis Dapper, Ubuntu propose en standard les outils pour y parvenir. Cryptsetup propose de créer un conteneur chiffré qui, une fois déverrouillé, sera vu comme un volume (un fichier de blocs) et pourra accueillir votre système de fichier, un LVM, etc.

Dans article, nous verrons comment créer un conteneur chiffré au sein d'un environnement existant en utilisant soit une partition spécialement réservée soit en créant un fichier dans le système de fichier existant. En seconde partie, nous verrons comment installer un système sur un volume chiffré dans une configuration dite quasi-intégrale. Comme Truecrypt, cryptsetup propose la création de volume cachée qui permettent d'invoquer le déni plausible ; nous n'abordons pas cette fonctionnalité pour le moment.

Pré-requis

  • Disposer d'un volume ou de place sur votre système de fichier
  • Disposer de ressources calculatoires suffisantes. Même si le coût est négligeable, celui-ci peut avoir un impact important sur de petits systèmes. Un NAS animé par un ARM 266MHz délivra par exemple 2,66Mio/s (en) source

Préparation du support

Pour fonctionner, cryptsetup utilise un fichier de périphériques de blocs ; il s'agit de notre support. Un fichier régulier est un fichier qui se trouve dans votre système de fichier. Un fichier de périphérique de blocs se présente comme un fichier dans votre système de fichier. En réalité, il s'agit d'un à un périphérique de stockage réel (/dev/sdX, /dev/cdrom) ou virtuel (/dev/random). Pour être respectueux de l'état de l'art, un support doit présenter certaines propriétés pour être cryptographiquement sûr. Dans cette section nous verrons comment vous pourrez créer un fichier de périphérique de bloc virtuel (au cas où vous n'en n'aurez pas de réel qui soit disponible). Nous verrons ensuite comment rendre un fichier de blocs cryptographiquement sûr. Pour finir, nous verrons comment formater le support pour qu'il accueil un container chiffré.

Créer un fichier de bloc virtuel

Si vous n'avez pas prévu un périphérique de stockage (clef USB, partitions de votre disque-dur interne etc), vous pouvez toujours créer un bloc de fichier virtuel. Cette méthode offre un maximum de flexibilité, toutefois elle entraîne une diminution de performance qui peut être de négligeable à importante (par exemple, en cas de défaut d'alignement ou de nombreuses sur-couches). Contrairement à Truecrypt, la taille de ce fichier n'augmente pas en fonction de son utilisation. Les défauts cryptographiques introduit par de tels mécanismes sont en effet trop grand. Par conséquent, vous devez connaitre à l'avance la taille que vous allez allouer.

Dans un premier temps, on crée un fichier régulier dans votre système de fichier grâce à l'instruction dd. Dans un second temps, vous demanderez à Linux de créer un fichier de blocs pour accéder à ce fichier régulier. Ajustez la taille en Mio en modifiant la valeur count.

# Création d'un fichier 10Mio (bs x count)
dd if=/dev/urandom bs=1M count=10 of=/chemin/du/fichier_regulier

# Création d'un fichier de blocs
losetup /dev/mapper/loop0 /chemin/du/fichier_regulier

Nettoyer cryptographiquement le support

Cette section à pour but de supprimer, de manière irréversible, toutes les données d'un support.

Il est nécessaire de nettoyer cryptographiquement un support pour deux raisons:

  1. Pour supprimer toutes les données, sensibles ou non, du support
  2. Pour empêcher un attaquant extérieur de distinguer l'espace libre de l'espace occupé.

Nous utiliserons la commande spécialisée shred qui fonctionne sur les fichiers de blocs et qui permet de réaliser plusieurs passes de nettoyage. Notez que les les fichiers de blocs créés avec la méthode présenté précédemment profitent déjà d'une passe de nettoyage. Adaptez le nombre de passe de nettoyage en fonction de la confidentialité de vos données mais sachez que une passe est suffisant.

# Nettoyage en une passe d'un fichier de bloc
shred --iterations=N --verbose /dev/volume/a/nettoyer

Formater un support en container chiffré

Comme pour tout formatage, cette opération peut entraîner la perte de vos données.

Le formatage prépare un support à être utilisé comme container chiffré. C'est lors de cette opération que vous décidez de tout les paramètres cryptographiques. Conformément à l'état de l'art, l'auteur recommande d'utiliser :

  • AES comme méthode de chiffrement pour son très bon niveau de sécurité et surtout, pour sa rapidité en plus des optimisations matérielles et logicielles dont il profite,
  • XTS comme mode d'opération pour sa conception spécifiquement pensé pour le chiffrement de disque et par sa capacité à se passer de vecteur d'initialisation cryptographiquement sûr (1, 2).
  • plain64 comme vecteur d'initialisation
  • une taille de bloc inférieure à 16Mio (4Kio par défaut) (1)
  • une clé d'une longueur supérieure ou égale à 128 bits. Une clé plus grande améliore la sécurité au détriment de la rapidité mais sachez que 128 bits et qu'un bon mot de passe est plus important que la taille de votre clé.

Pour formater une partition ou un fichier de bloc sans autres particularité, utilisez cette commande (une phrase de passe vous sera demandée).

cryptsetup luksFormat --cipher=aes-xts-plain64 --hash=sha256 --key-size=256 /dev/fichier_de_bloc_a_utiliser

Relecture : Il y a beaucoup d'infos ici. Un débat récent sur la ML montre une question à ce sujet : cours en ligne ou tutoriel ? Si c'est du tuto, il y a trop d'info. Si c'est du cours en ligne, la doc ubuntu n'a pas vocation a accueillir des cours qui ne concernent pas spécifiquement ubuntu. Cela fait débat (je te donnerai mon avis perso sur la ML ou par mail pour ne pas troller), mais pour ce paragraphe, je te conseille de mettre toute la première partie, très dense en informations, dans une note explicative après les commandes. Il faudrait par contre donner un peu plus de concret : comment trouver les valeurs à passer à –cipher si on ne veut pas du serpent, donner un exemple d'usage de align-payload… Enfin, tu ne précise pas ce qui se passe lors de l'initialisation. Je me mets à la place d'un utilisateur qui suit tes conseils : OK il veut chiffre son volume complet, il choisit /dev/sda2, son /home séparé. Il a bien lu la note concernant le nettoyage, donc il ne shred pas car il a des données. Hop, il arrive à l'initialisation, que se passe-t-il ?… (Bon OK, cryptsetup va le prévenir, mais quand même…)

Utiliser son container chiffré

Cette section suppose que vous disposez d'un container chiffré. Dans un premier temps, nous observerons les opérations courantes associées à un container chiffré. Nous verrons ensuite comment automatiser certaines étapes pour rendre l'utilisation de votre container plus agréable.

Déverrouiller et verrouiller

Nous avons vu que cryptsetup utilise comme support des fichiers spéciaux appelés fichier de blocs. Lorsque l'on déverrouille un conteneur chiffré, cryptsetup crée un nouveau fichier de bloc (virtuel) mais au contenu déchiffré. Les conteneurs déverrouillés sont placés dans /dev/mapper/nom_du_container_deverrouille. Le verrouillage d'un container consiste simplement à faire disparaître le fichier de blocs en clair.

# Deverouille le container
cryptsetup luksOpen /dev/fichier_bloc_chiffre nom_du_fichier_bloc_dechiffre

# Fait disparaître le fichier de bloc déchiffré (verrouille)
cryptsetup luksClose nom_du_fichier_bloc_dechiffre

Gérer les clefs supplémentaires

Un container chiffré peut avoir jusque 8 clefs de déchiffrement. Voici les commandes qui permettent respectivement de connaitre le nombre de clefs utilisé, d'ajouter une clef et de retirer une clef.

sudo cryptsetup luksDump /dev/volume_securise
sudo cryptsetup luksAddKey /dev/volume_securise
sudo cryptsetup luksRemoveKey /dev/volume_securise

Je chipotte, mais tu peux préciser ici comment doit se faire le choix du "nom_du_volume_déverouillé". Comme c'est la première fois qu'on le rencontre dans ton tuto, peut-être est-il utilse de dire si il y a des impératifs… Perso la première fois, j'ai cherché longtemps à quoi ça correspondait. Enfin, puisque ton tuto prend fin sur la partie "standard" de cryptsetup, il manque à mon avis une précision importante : dire que le volume accessible par /dev/maper/ sera le contenu "déchiffré", utilisable, formatable, montable, LVMisable etc… comme n'importe quel autre blocdevice.

Déverrouiller automatiquement un container chiffré au démarrage

Cette partie n'est pas encore correctement rédigée. La configuration des paramètres du volume chiffré est dans le fichier /etc/crypttab et le montage du volume est de manière classique dans /etc/fstab. Vous pouvez trouver le UUID de votre partition chiffrée avec la commande blkid.

/etc/crypttab
# <target name>                <source device>                  <key file>      <options>
nom_du_volume_deverrouille     UUID=uuid-du-volume-securise     none            luks
/etc/fstab
# <file system>                             <mount point>          <type>     <options>     <dump>     <pass>
/dev/mapper/nom_du_volume_deverrouille      /point/de/montage      ext4       defaults      0          1

Aller plus loin

Démarrer un système entièrement chiffré

Si vous voulez installer Ubuntu sur un disque chiffré, quelques manipulations supplémentaire à la partie précédente sont necessaires. Il faut demander d'ajouter des modules à l'initramfs et le configurer pour nous demander de saisir un mot de passe et de déverrouiller le disque avant de lancer init. Pour cela nous allons ajouter un hooker pour y saisir notre mot de passe et un script de génération de configuration (pour dire ce qu'on déverrouille) à la configuration du générateur de l'initram-fs.

Commencez par vous chrooter dans votre d'installation :

mount /dev/volume/dinstallation /target
mount --bind /dev /target/dev
mount -t proc /proc /target/proc
mount -t sysfs /sys /target/sys
chroot /target/

Ajoutez les modules :

/etc/initramfs-tools/modules
dm-crypt
dm-mod
serpent
sha256
xts
sd_mod
blkcipher

Ajoutez les scripts :

ln --symbolic /usr/share/initramfs-tools/hooks/cryptroot /etc/initramfs-tools/hooks/
ln --symbolic /usr/share/initramfs-tools/scripts/local-top/cryptroot /etc/initramfs-tools/scripts/local-top/
touch /etc/initramfs-tools/conf.d/cryptroot

Le script de génération a quelques défauts :

  1. Il n'écrit pas la configuration si le fichier cryptroot n'est pas présent (d'où le touch).
  2. A chaque update-initramfs, il dupplique les entrées de configuration ; c'est pas très propre.

Maintenant qu'on a bien détaillé au système la procédure de démarrage, on va appliquer nos modifications :

update-initramfs -k all -c

Qu'en est-il de grub et de ta partition /boot ? Es-tu sur que cela suffise à booter sur un système entièrement chiffré ? Ne faut-il pas soit sortir /boot de la partition chiffrée, soit passer des options particulières à grub pour qu'il puisse gérer le chiffrage en amont ? Dans tous les cas de figure, après l'update-initramfs, ne faut-il pas updater aussi grub ? Enfin, je ne trouve pas cette partie très explicite concernant le chroot, et pas très propre concernant sa sortie… (du chroot)

Ouverture automatique du conteneur chiffré au démarrage à l'aide d'un support amovible

On peut grâce à LUKS monter automatiquement les partitions chiffrées au démarrage sans mots de passe à taper. Ceci est possible par l'intermédiaire d'une clé USB ou d'une carte SD ou MS : http://petaramesh.org/post/2007/11/29/Une-cle-de-contact-pour-votre-portable-chiffre FIXME

Suivre la procédure indiquée plus haut, mais modifier le fichier /etc/crypttab :

# <target name> <source device> <key file>          <options>
  home          /dev/hda7       /dev/sda:/keyfile:1 luks,keyscript=/lib/cryptsetup/scripts/passdev
  home          /dev/hda7       none                luks

De cette manière, le système va tenter de déchiffrer la partition /dev/hda7 au moyen du fichier clé "keyfile" se trouvant sur le périphérique /dev/sda (en FAT par exemple). Le "1" représente le temps d'attente avant de demander le mot de passe si le fichier clé n'est pas trouvé.

Le lien petaramesh est mort… et cela nécessite mise à jour : les device en /dev/hda c'est un peu obsolète. Je n'ai pas essayé, es-tu sûr que pour la carte c'est /dev/sda (le device), et non /dev/sda1 (la partition) ? Enfin, je pense que l'on peut adapter avec les UUID… et "1" représente le temps d'attente avant de passer à la ligne suivante, pour être plus précis (on peut donc envisager plusieurs supports à mon avis…)

Ouverture et montage automatique de la partition chiffrée à l'ouverture de session, sans support amovible ni pass-phrase

Relecture : cette partie, beaucoup trop longue, fait doublon pour toute la partie tutoriel cryptsetup. Il faut synthétiser. Par contre certaines parties du tuto me paraissent plus claires ici pour un débutant que dans le tien… à adapter… Bref, ne conserver que la partie spécifique à PAM. Virer aussi la "Remarque" concernant 10.04 en bas, et clarifier le point "inutile depuis Jaunty"

Les techniques exposées plus haut offrent un haut niveau de sécurité pour peu que la phrase-pass de LUKS ait été bien choisie. Cependant, elles sont également assez lourdes, dans la mesure où elles nécessitent que l'utilisateur rentrent à chaque démarrage sa pass-phrase (ou qu'il porte sur lui en permanence le support amovible permettant l'ouverture du conteneur chiffré). La méthode proposée ici va permettre d'ouvrir automatiquement le conteneur chiffré et de monter la partition chiffrée au démarrage de la session, sans que la pass-phrase ne soit saisie. La partition chiffrée n'est donc plus protégée que par le mot de passe d'ouverture de session.

La pass-phrase de la partition chiffrée et le mot de passe associé au compte doivent être les mêmes (PAM ne fait que "passer" le mot de passe de session pour le montage de la partition), cela a donc des implications lorsque le mot de passe de l'utilisateur doit être changé : il faut au préalable rajouter une pass-phrase (identique au nouveau mot de passe) dans un nouveau "slot" et une fois que cela est validé, supprimer l'ancienne passphrase.

Le niveau de sécurité est donc plus bas, mais le chiffrement devient parfaitement transparent pour l'utilisateur. Cette solution convient donc bien si vous souhaitez simplement protéger vos données personnelles en cas de vol de votre machine par un quidam quelconque, mais peut-être pas si vous avez des documents vraiment confidentiels à protéger.

Nous allons utiliser PAM, utilitaire habituellement utilisé pour le montage automatique de partitions sur des postes multi-utilisateurs.

La situation est la suivante: la partition /dev/sda2 est notre partition chiffrée. Elle doit être montée automatiquement au point /mnt/cryptodisk. Les opérations suivantes ont donc été effectuées au préalable:

#Création du containeur chiffré. Attention, la partition ne doit pas être montée. De plus, toute donnée présente sur cette partition sera perdue:
sudo cryptsetup luksFormat /dev/sda2

#Ouverture du conteneur nouvellement créé, à qui on donne le nom de "cryptodisk":
sudo cryptsetup luksOpen /dev/sda2 cryptodisk

#Création du système de fichier ext3 sur cette partition chiffrée:
sudo mkfs.ext3 /dev/mapper/cryptodisk

#Création du point de montage:
sudo mkdir /mnt/cryptodisk

#Définition du point de montage: Dans le fichier /etc/fstab, notez l'option
#"noauto" qui permet de faire apparaître la partition dans le fichier fstab
#sans pour autant la monter automatiquement au démarrage
/dev/mapper/cryptodisk /mnt/cryptodisk           ext3    defaults,noauto        0       0

#Et on s'arrête là. Ne RIEN ajouter dans le fichier /etc/cryptab

Notre partition chiffrée est à présent créée, formatée, et un point de montage a été défini. Il ne reste plus qu'à indiquer à PAM de la monter automatiquement à chaque ouverture de session (sans demande de la pass-phrase donc).

#Installation de la librairie:
sudo apt-get install libpam-mount

Indication à PAM de la partition à monter : éditer le fichier /etc/security/pam_mount.conf.xml. Au début du fichier, après la première balise <pam-mount>, ajouter la ligne suivante:

<volume user="*" mountpoint="/mnt/cryptodisk" path="/dev/sda2" fstype="crypt" />

La partition /dev/sda2 de type "crypt" (partition chiffrée) sera montée à l'ouverture de session sans demande de la phrase-pass sur le point de montage /mnt/cryptodisk, et ce quelque soit l'utilisateur qui se connecte.

Et pour finir, il suffit d'indiquer à gdm (dans le cas de Gnome) ou kdm (pour KDE) d'appeler PAM. Ouvrir ainsi dans le cas de Gnome le fichier /etc/pam.d/gdm, et ajouter à la fin de ce fichier la ligne

@include common-pammount

Remarque : ceci n'est plus utile depuis Jauty.

Et voilà! Il ne vous reste plus qu'à redémarrer votre machine, et à l'ouverture de session la partition chiffrée sera ouverte et montée automatiquement, sans que la pass-phrase ne vous soit demandée. Bien entendu, si vous avez au préalable désactivé l'authentification pour l'ouverture de la session, cela ne sert pas à grand chose d'avoir une partition chiffrée (car alors l'authentification étant désactivée, la session est ouverte automatiquement à chaque démarrage et la partition chiffrée est également ouverte et montée automatiquement et sans pass-phrase à chaque démarrage).

Remarque: méthode testée et approuvée sous ubuntu 10.04

Réglage de la priorité d'exécution

Par défaut le niveau de priorité du démon de chiffrage est trop élevé et peu induire des ralentissements gênants. Vous pouvez modifier cette priorité à l'aide de la commande renice :

 sudo renice 10 `pgrep kcryptd` 

Pour exécuter cette commande à chaque démarrage, il faut la placer dans le fichier /etc/rc.local avant la ligne exit 0 sans sudo car c'est le système avec les droits administrateur qui l'exécutera.

#!/bin/sh -e
#
renice 10 `pgrep kcryptd`
exit 0

Relecture : paragraphe complètement abscon et déroutant qui n'est pas assez explicite. À préciser, d'autant que l'on passe de notions associées au démarrage et/ou montage automatique, à un chapitre plus point sur l'usage au quotidien

Spécificité Edgy

Le fait de chiffrer votre dossier /home (par exemple) nécessite de taper la clef d'ouverture du volume chiffré lors de la séquence de démarrage de l'ordinateur, mais sous Edgy le système de boot n'est plus séquentiel comme sur Dapper, ce qui entraîne pour l'heure que le lancement de Xorg (le serveur graphique) n'attendra pas que vous ayez tapé votre clef d'ouverture du volume.

Une des solutions pour l'heure est d'installer sysvinit avec Synaptic au lieu d'Upstart (le nouveau système de démarrage, intégré dans Edgy).

Depuis le début du tuto, Il y a des mentions pour Dapper. Dapper-server est maintenue jusqu'en avril 2011 (bientôt, quoi…) par contre, Edgy, on a plus de raison d'en entendre parler depuis 2008, ce n'est pas une LTS. Je pense qu'il faut virer ce paragraphe qui apporte en plus de la confusion inutile.

Sous Windows

Grâce au logiciel FreeOTFE, il est possible de monter de façon non permanente une partition luks encryptée par Cryptsetup sous Linux à partir de votre système Windows.

Pour monter et utiliser le même type de partition que celle décrite dans ce wiki, voici les étapes :

  1. Télécharger FreeOTFE ici
  2. Extraire les fichiers de l'archive dans un dossier et ouvrir FreeOTFE.exe
  3. Lorsqu'on vous demande si vous voulez démarrer FreeOTFE en portable mode, dites oui. Si vous voulez utiliser FreeOTFE régulièrement afin de monter des volumes cryptés sous Windows, vous pouvez cliquer sur non et activer de façon permanente tous les pilotes de cryptage un par un.
  4. Cliquez ensuite sur File / Linux volume / Mount partition
  5. Choisissez la partition qui est encryptée sur votre disque dur
  6. Dans la grande case, entrez votre clé secrète, puis cliquez sur Ok
  7. Si vous avez choisi la bonne partition et la bonne clé, le programme détectera l'encryptage correspondant et vous offrira une liste des pilotes pouvant monter le volume. Faites votre choix.
  8. Si tout s'est bien passé, vous avez un nouveau lecteur dans votre poste de travail !

Ce volume ne survivra pas à un redémarrage, il faudra tout reprendre de zéro à chaque fois. Si vous fermez FreeOTFE alors qu'il est en mode portable, vous devez lui spécifier de ne pas désactiver les pilotes d'encryptage afin de ne pas perdre l'usage de votre partition. Avant de fermer votre ordinateur, il est recommandé de démonter la partition à l'aide de FreeOTFE et de lui permettre de désactiver tous les pilotes à sa fermeture. Si votre système de fichier est ext2 ou ext3, Windows ne sera pas capable de lire le contenu de votre partition, sauf si vous installez le Ext2 IFS For Windows. Attention toutefois, ce pilote pour Windows ne prend pas en charge les droits d'accès et la journalisation. Pour du partage entre Windows et Linux, le Fat32 est plus conseillée.

Relecture : Je suis d'avis que ce paragraphe n'a rien à faire dans une doc ubuntu. À la rigueur quelques liens vers des pages où l'on trouve ces explications, considérant que certains utilisateurs peuvent avoir un dualboot et vouloir accéder à leur volume chiffré ponctuellement. C'est un peu extrême peut-être, mais je m'exprimerai aussi à ce sujet en privé si tu veux. Par ailleurs, cette méthode est dangereuse et entraîne un risque lourd de perte de données. ENfin, il faudrait y remplacer (si conservé) toutes les mentions "cryptage" par "chiffrage".

Référence


utilisateurs/lildadou/cryptsetup.txt · Dernière modification: Le 26/02/2014, 00:44 par lildadou
Le contenu de ce wiki est sous licence : CC BY-SA v3.0