パスワードの代わりにキーファイルを使用してハードディスクを暗号化することは可能ですか?

パスワードの代わりにキーファイルを使用してハードディスクを暗号化することは可能ですか?

ハードディスクの暗号化について調べています。解決策としては、パスワードを使用した LUKS による dm-crypt が考えられます。私は、読み取り用にディスク プールにマウントされた複数の独立したハードディスクを使用しています。この場合、パスワードを複数回入力する必要があります。

キー ファイルを使用してハード ディスクを暗号化する方法はありますか? キー ファイルを USB ドライブに保存して、必要なときに差し込むだけでよいのでしょうか?

答え1

これを行う最良の方法の 1 つは、暗号化キーが入ったスマート カードを使用して、暗号化されたブロック デバイスのキーのロックを解除することです。パスフレーズ (ツールでは「PIN」と呼ばれますが、実際にはパスフレーズです) は 1 回入力するだけで、その後はキャッシュされます。この方法には、暗号化されたデータを、ユーザーが持っているもの (スマート カード自体。そこから秘密キーを抽出できません) とユーザーが知っているもの (パスフレーズ) で保護できるという利点もあります。

次のようにフォーマットします/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またはユビキイネオこの目的のために、他にもいろいろあります。

実装に関する注意事項: この機能には粗削りな部分があり、明らかにそのままでは動作しないので、結果は人によって異なります。前回これを正常に達成したときは、次のハックを追加する必要がありました。

  • 無効にしてください。systemdこれは、暗号化されたデバイスをセットアップするプロセス全体を乗っ取ろうとします/etc/crypttabが、それについて何も知らず、keyscript大きな失敗につながります。幸いなことに、Debian では、 をオプトアウトすることができますsystemd
  • /etc/initramfs-tools/hooks/yubipin組み込み機能では、Yubikey を initramfs から使用できるようにするための十分なサポートがインストールされなかったため、この修正スクリプトをインストールします。これを調整する必要がある可能性があります。

    #!/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データ ファイルシステム用のキーファイルです。luks/etc/crypt-data.keyパスワードが含まれます。

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

改行文字やその他の空白文字はパスワードの一部として扱われることに注意してください。このファイルは末尾に改行文字を付けずに生成するように注意してください。また、厳密な権限が設定されていることを確認してください。

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

このアプローチを複数のボリュームに複製できるはずです (個別のパスワードを使用するか、1 つの共有パスワードを使用するかは任意です)。

関連情報