Est-il possible de crypter un disque dur avec un fichier clé au lieu d'un mot de passe?


14

Étude du chiffrement du disque dur. la solution go to semble être dm-crypt avec LUKS utilisant un mot de passe. Je travaille avec plusieurs disques durs indépendants montés dans un pool de disques pour la lecture. Dans ce cas, je dois taper un mot de passe plusieurs fois.

Existe-t-il un moyen pour moi de crypter les disques durs avec un fichier clé, peut-être de le mettre sur une clé USB et de le brancher si nécessaire ??

Réponses:


11

L'une des meilleures façons de le faire est d'utiliser une carte à puce avec une clé de chiffrement pour déverrouiller les clés de vos appareils bloc cryptés. Vous n'aurez qu'à saisir la phrase secrète (appelée "PIN" par les outils mais c'est vraiment une phrase secrète) une fois, après quoi elle sera mise en cache. Cela a l'avantage supplémentaire de protéger les données chiffrées avec quelque chose que vous avez (la carte à puce elle-même, dont la clé privée ne peut pas être extraite) et quelque chose que vous connaissez (la phrase secrète).

Formatez votre /etc/crypttabcomme ceci:

mapper-name /dev/disk/raw-device /var/lib/filename-containing-encrypted-key \
    luks,keyscript=/lib/cryptsetup/scripts/decrypt_opensc

Dans Debian et ses dérivés, les outils initramfs remarqueront le script de clé et copieront automatiquement tous les outils et démons nécessaires pour accéder à la carte à puce dans les initramfs.

Informations sur la mise en place de la carte à puce et la création (et chiffrer) les clés se trouve dans /usr/share/doc/cryptsetup/README.opensc.gz.

Vous pouvez utiliser un Yubikey 4 ou Yubikey NEO entre autres à cet effet.

Notes d'implémentation : Cette fonctionnalité a des bords rugueux et ne fonctionne apparemment pas prête à l'emploi, donc YMMV. La dernière fois que j'ai réussi, j'ai dû ajouter les hacks suivants:

  • Désactivez-le systemdcar il essaie désastreusement de prendre en charge l'ensemble du processus de configuration des appareils cryptés, /etc/crypttabmais il ne sait rien de keyscriptce qui conduit à un gros échec. Heureusement, dans Debian, vous pouvez toujours vous désinscrire systemd.
  • Installez ce script fixateur supérieur /etc/initramfs-tools/hooks/yubipincar la fonction intégrée n'a pas installé assez de support pour que le Yubikey soit utilisable à partir des initramfs. Vous devrez peut-être régler cela.

    #!/bin/sh
    
    PREREQ=cryptroot
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
    esac
    
    # /scripts/local-top/cryptopensc calls pcscd with the wrong path
    ln -s ../usr/sbin/pcscd ${DESTDIR}/sbin/pcscd
    mkdir -p "${DESTDIR}/usr/lib/x86_64-linux-gnu"
    # opensc-tool wants this dynamically, copy_exec doesn't know that
    cp -pL /usr/lib/x86_64-linux-gnu/libpcsclite.so.1 "${DESTDIR}/usr/lib/x86_64-linux-gnu/libpcsclite.so.1"
    mkdir -p "${DESTDIR}/lib/x86_64-linux-gnu"
    # without this, pcscd aborts with a pthread_cancel error
    cp -pL /lib/x86_64-linux-gnu/libgcc_s.so.1 "${DESTDIR}/lib/x86_64-linux-gnu/libgcc_s.so.1"
    # this gets copied as a dangling symlink, fix it
    rm "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    cp -pL /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist"
    # pcscd needs this to open the reader once it has found it
    cp -pL /lib/x86_64-linux-gnu/libusb-1.0.so.0 "${DESTDIR}/lib/x86_64-linux-gnu/libusb-1.0.so.0"
    
  • Installez un autre script /etc/initramfs-tools/scripts/local-bottom/killpcscdpour nettoyer:

    #!/bin/sh
    
    set -e
    
    PREREQ=cryptopensc
    
    prereqs()
    {
        echo "$PREREQ"
    }
    
    case $1 in
        prereqs)
            prereqs
            exit 0
            ;;
    esac
    
    # because cryptopensc does not do it properly
    killall pcscd
    

1
Très belle incitation à utiliser des cartes à puce et des compliments pour y parvenir, mais je dirais qu'une méthode spécifique à la distribution qui implique de modifier le système init et les scripts de piratage tiers insérés dans les répertoires système avec des chemins illisibles ne peut pas être considérée comme une réponse à la façon dont pour utiliser la question des fichiers de clé. Souligne l'incroyable désordre de ces logiciels.
dbanet

@dbanet, je suis entièrement d'accord et j'espère que quelqu'un d'autre viendra et ajoutera une réponse décrivant comment faire cela d'une autre manière plus simple. Ensuite, l'OP peut choisir son favori.
Celada

dbanet et @Celada, exactement mes pensées. C'est beaucoup trop compliqué et même si j'arrive à le faire, son propriétaire, ce qui signifie qu'un autre fournisseur aurait une autre méthode. :(
Nithin

3

Il est possible de simplement stocker le mot de passe luks dans un fichier.

J'utilise ceci sur mon ordinateur personnel; Le système de fichiers racine vit sur un volume luks régulier que je déverrouille avec ma phrase secrète au démarrage. Un lecteur supplémentaire contient un volume luks avec un mot de passe généré.

Ce volume supplémentaire est déverrouillé par un fichier de mots de passe qui réside sur le système de fichiers racine chiffré. Il est automatiquement déverrouillé lors du démarrage si le système de fichiers racine est déverrouillé.

Mon /etc/crypttabressemble à ceci:

crypt-root UUID=c5a2cf25-0aae-457e-874f-fca7ea3d5742 none luks
crypt-data UUID=96d79323-246d-49e0-9149-ec3a4cfc1c1e /etc/crypt-data.key luks

Le troisième champ est le fichier de clés, nonepour le système de fichiers racine, mais /etc/crypt-data.keypour le système de fichiers de données. /etc/crypt-data.keycontient le mot de passe luks:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

Remarque, une nouvelle ligne ou tout autre espace blanc sera pris comme partie du mot de passe! Prenez soin de générer ce fichier sans retour à la ligne. Assurez-vous également qu'il dispose d'autorisations strictes:

-rw------- 1 root root 59 Sep 14 23:57 /etc/crypt-data.key

Vous devriez pouvoir dupliquer cette approche pour plusieurs volumes (avec des mots de passe distincts ou un mot de passe partagé, votre choix).


pouvez-vous également indiquer comment configurer LUKS pour utiliser le fichier de clés au lieu du mot de passe?
Nithin

@Nithin Le fichier clé est le troisième champ de mon exemple /etc/crypttab. J'ai ajouté un petit texte supplémentaire pour rendre cela plus clair.
marcelm
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.