web-dev-qa-db-fra.com

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

Lorsque vous utilisez le chiffrement intégral du disque avec Ubuntu (par opposition au chiffrement homedir), dm-crypt avec LUKS est utilisé pour chiffrer le volume. Dans l'installateur (au moins sur la version 12.04 alternative), vous pouvez choisir de l'installer à l'aide d'un mot de passe composé o un fichier de clés. J'aimerais utiliser une combinaison des deux; non plus, mais exigent les deux.

Pourquoi? Parce que cela améliore la sécurité (deux facteurs); vous aurez besoin de avoir quelque chose et vous aurez besoin de savoir quelque chose pour le déverrouiller. Ensuite, je veux placer le fichier de clés sur un petit périphérique de stockage amovible (clé USB) et le brancher uniquement au moment du démarrage. Le résultat devrait être qu'il est nécessaire de mettre dans le bon lecteur flash et fournir le mot de passe composé correct pour déverrouiller la partition racine.

Donc, en d'autres termes, je veux être invité au démarrage pour la phrase secrète à laquelle le fichier de clés sur un lecteur externe est crypté.

Je vois un script d'assistance /usr/share/initramfs-tools/hooks/cryptgnupg qui peut aider à l'accomplir, mais je ne sais pas comment l'utiliser.

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

9
gertvdijk

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

Au lieu de GnuPG, qui est un binaire supplémentaire devant être inclus dans le Initramfs (et dans le cas de GnuPG-2, assez complexe), j’ai simplement utilisé ce qui est déjà Là. Et c'est évidemment dm-crypt/LUKS.

Supposons donc que vous avez 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 un chiffrement pour cela 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 keyfile.luks (2 Mo, qui cryptsetup nécessite pour une raison quelconque d'écrire l'en-tête 192k LUKS). Comme les Initramfs seront compressés de toute façon, ce n’est pas si mal (toujours plus petits que GnuPG).

Maintenant, vous pouvez déchiffrer le fichier de clé:

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

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

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

Dans Initramfsinit, vous pouvez ensuite ouvrir le volume réel LUKS avec celui-ci (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 superflue. En outre, vous bénéficiez de tous les avantages de LUKS, tels que plusieurs phrases secrètes pour la clé, le chiffre de votre choix, etc. Sans oublier un mot de passe Nice (la plupart du temps régulier) avec plusieurs tentatives.

5
frostschutz