パスワードの代わりにキーファイルを使用してハードドライブを暗号化できますか?

パスワードの代わりにキーファイルを使用してハードドライブを暗号化できますか?

ハードドライブの暗号化を検討してください。解決策は、パスワードにdm-cryptとLUKSを使用するようです。読み取りには、ディスクプールに取り付けられた複数の独立したハードドライブを使用します。この場合、パスワードを複数回入力する必要があります。

キーファイルでハードドライブを暗号化したり、USBドライブに保存したり、必要に応じて接続したりする方法はありますか?

答え1

これを達成するための最良の方法の1つは、暗号化ブロックデバイスのキーをロック解除する暗号化キーを持つスマートカードを使用することです。パスワード(ツールではこれを「PIN」と呼びますが、実際にはパスワードです)を一度だけ入力すると、後でキャッシュされます。これは、あなたが持っているもの(秘密鍵を抽出できないスマートカード自体)と知っているもの(パスワード)を使用して暗号化されたデータを保護することができるという利点を提供します。

/etc/crypttab次のようにフォーマットします。

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

Debianとその派生製品では、initramfs-toolsはキースクリプトをチェックし、スマートカードにアクセスするために必要なすべてのツールとデーモンをinitramfsに自動的にコピーします。

スマートカードの設定と鍵の生成(および暗号化)に関する情報は、で確認できます/usr/share/doc/cryptsetup/README.opensc.gz

あなたはそれを使用することができますユビック4またはユビックネオ何よりも、この目的のために。

実装ノート:この機能はエッジが粗く、デフォルトでは機能しないため、YMMVです。前回正常に実装したときは、次のトリックを追加する必要がありました。

  • systemd暗号化されたデバイスを設定するプロセス全体を致命的に引き継ぎようとしましたが、/etc/crypttab重大なエラーの原因が何であるかがわからないため、無効になりました。keyscript幸いなことに、Debianではまだオプトアウトできますsystemd
  • /etc/initramfs-tools/hooks/yubipin組み込み機能がinitramfsでYubikeyを使用できるようにするのに十分な機能がないため、この修正の親スクリプトがインストールされます。これを調整する必要があるかもしれません。

    #!/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"
    
  • クリーンアップする別のスクリプトをインストールしてください/etc/initramfs-tools/scripts/local-bottom/killpcscd

    #!/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
    

答え2

単にluksのパスワードをファイルに保存することができます。

私はこれを私の家のコンピュータで使用します。ルートファイルシステムは、起動時にパスワードでロックを解除する通常のluksボリュームにあります。接続されたドライブには、生成されたパスワードを持つluksボリュームが含まれています。

関連付けられたボリュームは、暗号化されたルートファイルシステムにあるパスワードファイルによってロック解除されます。ルートファイルシステムがロック解除されると、起動中に自動的にロックが解除されます。

私の/etc/crypttab外観は次のとおりです。

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

none3番目のフィールドは、ルートファイルシステムには使用されますが/etc/crypt-data.keyデータファイルシステムには使用されないキーファイルです。/etc/crypt-data.keyluksパスワードが含まれています:

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

改行やその他のスペースはパスワードの一部と見なされます!このファイルを生成するときは、末尾の改行を生成しないように注意してください。また、厳格な権限があることを確認してください。

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

この方法を複数のボリュームに複製できる必要があります(他のパスワードまたは共有パスワードを使用)。

関連情報