パスワードの代わりにキーファイルでハードディスクを暗号化することはできますか?


14

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

キーファイルでハードディスクを暗号化する方法はありますか、それをUSBドライブに入れて必要なときに差し込むだけですか?

回答:


11

これを行う最良の方法の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

この目的のために、Yubibike 4またはYubikey NEOを使用できます。

実装に関する注意事項:この機能には荒いエッジがあり、明らかにそのままでは機能しないのでYMMV 最後に成功したとき、次のハックを追加する必要がありました。

  • systemd暗号化されたデバイスをセットアップするプロセス全体を壊滅的に引き継ごうとしますが、大きなFAILにつながる/etc/crypttabものについては何も知らないため、無効にしkeyscriptます。幸いなことに、Debianでは、まだオプトアウトできますsystemd
  • /etc/initramfs-tools/hooks/yubipinビルトイン機能では、initramfsからYubikeyを使用できるようにするための十分なサポートがインストールされていなかったため、このfixer -upperスクリプトをインストールします。これを調整する必要がある場合があります。

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

1
それを達成するためにスマートカードと称賛を使用する非常に良いインセンティブですが、読み取り不能なパスを持つシステムディレクトリに押し込まれたinitシステムとサードパーティのハックスクリプトを変更するディストリビューション固有の方法は、どのように答えとみなすことはできませんパスキーファイルの質問を使用するには。これらのソフトウェアが信じられないほど混乱していることを強調しています。
dbanet

@dbanet、私は完全に同意し、他の誰かが一緒に来て、これを他の簡単な方法で行う方法を説明する答えを追加することを願っています。その後、OPはお気に入りを選択できます。
セラダ

dbanetと@Celada、まさに私の考え。これは非常に複雑であり、たとえそれをなんとかして行ったとしても、その所有権は別のベンダーが別の方法を持っていることを意味します。:(
ニシン

3

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

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

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

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

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

複数のボリュームに対してこのアプローチを複製できる必要があります(個別のパスワードまたは1つの共有パスワードを選択)。


パスワードの代わりにキーファイルを使用するようにLUKSを構成する方法についても言及できますか?
ニシン

@Nithinこの例のキーファイルは3番目のフィールド/etc/crypttabです。それを明確にするために、少し余分なテキストを追加しました。
-marcelm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.