Comment utiliser dm-crypt (LUKS) avec GnuPG pour utiliser deux facteurs pour FDE?

9

Lorsque vous utilisez le chiffrement complet du disque avec Ubuntu (contrairement au chiffrement homedir), dm-crypt avec LUKS est utilisé pour chiffrer le volume. Dans l'installateur (au moins sur 12.04 alternatif), vous pouvez choisir entre le configurer à l'aide d'une phrase de passe ou d' un fichier de clés. Je voudrais utiliser une combinaison des deux; non plus, mais nécessitent les deux.

Pourquoi? Parce que cela améliore la sécurité (à deux facteurs); vous aurez besoin d' avoir quelque chose et vous devez savoir quelque chose pour le déverrouiller. Ensuite, je veux mettre le fichier de clés sur un petit périphérique de stockage amovible (clé USB) et le brancher uniquement pendant le démarrage. Le résultat devrait être qu'il est nécessaire d'insérer le bon lecteur flash et de fournir la bonne phrase secrète pour déverrouiller la partition racine.

Donc, en d'autres termes, je veux qu'on me demande pendant le démarrage la phrase secrète dans laquelle le fichier de clés sur un disque externe est crypté.

Je vois un /usr/share/initramfs-tools/hooks/cryptgnupgscript d'aide qui peut aider à l'accomplir, mais je n'ai aucune idée de comment l'utiliser.

Juste pour éviter toute confusion: je ne demande pas un moyen d'ajouter une clé supplémentaire au volume pour le déverrouiller.

gertvdijk
la source
J'ai moi-même trouvé une partie de la réponse en ... lisant les documents . Lisez comment l'utiliser dans /usr/share/doc/cryptsetup/README.gnupg. J'essaierai de trouver un peu de temps pour le changer pour lui faire utiliser un fichier de clés à partir d'un média externe.
gertvdijk

Réponses:

5

Je fais la même chose, mais je crains que ma réponse ne soit pas satisfaisante, car pour diverses raisons, je suis allé avec un Initramfs complètement personnalisé .

Au lieu de GnuPG, qui est un binaire supplémentaire qui doit être inclus dans les Initramfs (et en cas de GnuPG-2, plutôt complexe), j'ai simplement utilisé ce qui est déjà là. Et c'est évidemment dm-crypt/LUKS.

Supposons donc que vous en ayez un keyfile. De préférence un avec des données aléatoires.

# dd if=/dev/urandom of=keyfile count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000189802 s, 2.7 MB/s

Ajoutez le cryptage avec LUKS (n'hésitez pas à ajouter les paramètres de chiffrement de votre choix).

# truncate -s 2M keyfile.luks
# cryptsetup luksFormat keyfile --header keyfile.luks

WARNING!
========
This will overwrite data on keyfile.luks irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: bananas
Verify passphrase: bananas

Vous avez maintenant un fichier de clés (512 octets) et un fichier de clés.lu (2 Mo, dont cryptsetup a besoin pour une raison quelconque d'écrire l'en-tête LUKS 192k). Puisque les Initramfs seront compressés de toute façon, ce n'est pas trop mal (toujours plus petit que GnuPG).

Vous pouvez maintenant décrypter le fichier de clés:

# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas

Et vous avez 512 octets de données aléatoires /dev/mapper/lukskey. (Vous pouvez y écrire si vous voulez le changer, donc nous aurions pu initialiser le fichier avec des zéros plus tôt.)

# blockdev --getsize64 /dev/mapper/lukskey
512

Dans Initramfs, init vous pouvez ensuite ouvrir le vrai volume LUKS avec lui (en supposant que vous ayez ajouté la clé en premier).

cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up

Cette approche rend GnuPG entièrement superflu, et vous obtenez tous les avantages de LUKS, tels que plusieurs phrases de passe pour la clé, le chiffre de votre choix, etc. Sans parler d'une belle invite de mot de passe (généralement régulière) avec plusieurs tentatives.

frostschutz
la source
2
Solution sympa, mais comment puis-je l'intégrer exactement dans mes initramfs? Vous déclarez que vous utilisez un initramfs complètement personnalisé, mais cela ne serait-il pas possible simplement en utilisant un hook?
gertvdijk du
Certainement. Peut-être même sans crochet si vous pouvez penser à un moyen de forcer crypttab à trouver et à ouvrir la clé en quelque sorte en premier. Par exemple, il ne doit pas nécessairement s'agir d'un fichier, vous pouvez en créer une partition séparée sur la clé USB. Cependant, comme je ne fais pas cela, je ne peux pas y répondre concrètement ... désolé: - /
frostschutz
1
Aucun problème - contourner GnuPG et réutiliser LUKS est certainement une option supérieure. Dans le cas où j'ai besoin de réécrire les crochets pour l'approche GnuPG, je ferais mieux de le réécrire sans l'utiliser du tout de toute façon. Et oui, je suis conscient que cela ne doit pas être un fichier.
gertvdijk
@gertvdijk si vous obtenez cela, je serais intéressé par votre réponse pour référence future
frostschutz