Chiffrement complet du disque avec authentification à deux facteurs pour Ubuntu: comment?

9

Informations d'arrière-plan

Je suis un débutant Linux récemment sevré de Windows. J'utilise actuellement Ubuntu 11.04 sans chiffrement complet du disque. Seul mon répertoire personnel est crypté, et avec eCryptFS. Dernièrement, j'ai commencé à remarquer que le cryptage n'est pas aussi transparent qu'il devrait l'être. VMWare, par exemple, rencontre parfois des problèmes pour les machines virtuelles stockées dans mon répertoire personnel chiffré, j'ai donc simplement déplacé les machines virtuelles vers un emplacement non chiffré et y ai été lié à partir de mon répertoire personnel chiffré. Mais c'est d'ailleurs le point: j'ai réalisé qu'il n'est en fait pas très sûr de laisser le système non crypté, car un système d'exploitation open source comme Ubuntu est très facile à modifier pour divulguer des informations qu'il est censé garder secret.


Objectif

J'aimerais pouvoir faire fonctionner le chiffrement complet du disque en conjonction avec un périphérique clé et un mot de passe pour l'authentification avant le démarrage.


Exigences / Détails

  1. Le disque entier doit être crypté. Au minimum, le disque se compose de partitions individuelles qui sont toutes cryptées. S'il est possible de cacher même les partitions avec cryptage, je vais y aller. Plus le cryptage est transparent, mieux c'est; Je ne devrais pas avoir à utiliser mon ordinateur différemment ni à configurer quoi que ce soit d'autre.
  2. L'appareil utilisé pour déverrouiller et démarrer la partition chiffrée doit être un petit appareil portable externe. Cela sert à deux fins: le chargeur de démarrage est beaucoup moins susceptible d'être modifié à des fins malveillantes car il restera avec moi lorsqu'il ne sera pas utilisé; et les fichiers clés pour déchiffrer le disque ne seront trouvés nulle part sur le disque chiffré lui-même sous quelque forme que ce soit.
  3. Les fichiers de clés doivent être cryptés avec un mot de passe. Si je perds à la fois mon ordinateur et mon périphérique USB, les données et le système d'exploitation seront toujours en sécurité. Si je perds la clé USB ou qu'elle est compromise, je peux en créer une autre propre à partir d'une sauvegarde. Aucune information n'est divulguée dans les deux cas. Bien sûr, si je perds mon ordinateur, c'est sans conséquence.

Oui, j'ai consulté des guides de nombreux endroits, mais le problème est qu'ils ne répondent pas à toutes les exigences (en particulier le numéro 3). Je suis presque sûr que mes exigences sont suffisamment courantes pour que quelqu'un ait déjà essayé et mis en œuvre avec succès une telle configuration. Je serais reconnaissant à tout pro Linux de partager une solution.

Kevin Li
la source
2
Re "puisqu'un système d'exploitation open source comme Ubuntu est très facile à modifier pour divulguer des informations qu'il est censé garder secret." - Vous seriez étonné de voir à quel point il est facile de convaincre les systèmes d'exploitation à source fermée de faire de même. Le fait qu'un programme soit open-source ne signifie rien pour sa sécurité ou son insécurité contre les attaques locales.
user1686

Réponses:

2

Il existe un moyen simple d'avoir un chiffrement complet du disque qui nécessite la présence d'une clé USB ET de votre mot de passe pour démarrer.

Ce que vous faites est de détacher l'en-tête LUKS de votre disque dur entièrement chiffré et de le stocker sur votre clé USB.

Je suppose que vous disposez déjà de la configuration suivante:

# /dev/sda1 is the boot partition (100MB)
# /dev/sda2 is the encrypted partition
parted /dev/sda mklabel msdos
parted /dev/sda -- mkpart primary ext2 1M 200M
parted /dev/sda -- mkpart primary ext4 200M -100M
cryptsetup luksFormat /dev/sda2

Créez une copie de l'en-tête luks et supprimez-la du périphérique local:

mkdir /media/ramdisk && mount -t tmpfs -osize=20m,rw tmpfs /media/ramdisk
cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file /media/ramdisk/header.img
dd if=/dev/urandom of=/dev/sda2 bs=1M count=2

Exécutez la dernière étape plusieurs fois si vous êtes la cible d'une agence à budget élevé. J'ai également créé un disque virtuel pour contenir temporairement l'en-tête afin qu'il ne s'attarde pas après.

Avec votre périphérique USB dans / dev / sdb, créez une partition de 2 Mo et chargez l'en-tête dessus:

parted /dev/sdb -- mklabel MSDOS
parted /dev/sdb -- mkpart primary 1M 3M
dd if=/media/ramdisk/header.img of=/dev/sdb1

À l'heure actuelle, tout dans / dev / sda2 ressemble à des données aléatoires, et vous avez votre en-tête dans / dev / sdb1. Pour accéder manuellement au lecteur chiffré, vous utilisez:

cryptsetup luksOpen --header /dev/sdb1 /dev/sda2 rootfs
mount /dev/mapper/rootfs /target

L'étape suivante consiste à demander à votre processus de démarrage d'insérer la clé USB au démarrage. J'ai trouvé plus facile de simplement supposer qu'il sera là et échouera autrement. Tout d'abord, découvrez l'ID et l'UUID de vos appareils:

find -L /dev/disk/by-id/ -samefile /dev/sdb1
/dev/disk/by-id/usb-Generic-_Compact_Flash-part1
find -L /dev/disk/by-id/ -samefile /dev/sda2
/dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2

blkid /dev/sdb1
/dev/sdb1: UUID="63347546-2db3-4bc1-9414-1142739a4c9f" TYPE="crypto_LUKS"

Modifiez ensuite votre /etc/crypttabligne pour qu'elle ressemble à ceci:

root /dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2 none luks,header=/dev/disk/by-id/usb-Generic-_Compact_Flash-part1

(Vous aurez peut-être besoin de ce correctif pour obtenir le support de l' headeroption dans crypttab)

Enfin, mettez à jour votre initram:

update-initramfs -u

Vous pouvez aller un peu plus loin et charger la partition de démarrage entière sur le lecteur USB . L'auteur de cet article était sur ce site en train de faire un suivi .

Il existe de nombreuses approches différentes que vous pouvez prendre , avec des degrés de sécurité et convinience.

Une remarque particulière sur la sécurité: si votre phrase secrète est compromise, toute personne possédant une copie de l'en-tête pourra décrypter les données, même si vous changez la phrase secrète ultérieurement.

GnP
la source
1

Je sais que TrueCrypt est disponible pour OSX, Windows et Linux. Vous pouvez effectuer deux niveaux de cryptage pour l'ensemble du lecteur. Je l'ai utilisé sur Debian avec le chiffrement complet du disque AES. Il nécessite le mot de passe au démarrage pour accéder aux données sur le disque dur.

kobaltz
la source
3
Je pensais que le chiffrement complet du disque TrueCrypt ne fonctionnait qu'avec Windows.
Kevin Li
two levels of encryption for the whole drive! =two factor auth
GnP