web-dev-qa-db-ja.com

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

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

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

14
Nithin

これを行うための最良の方法の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にあります。

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

実装上の注意:この機能には粗いエッジがあり、箱から出しても動作しないようです。YMMVです。最後に成功したときは、次のハックを追加する必要がありました。

  • systemdを無効にすると、/etc/crypttabから暗号化されたデバイスをセットアップするプロセス全体が破壊されますが、keyscriptについて何も知らないため、大きなFAILが発生します。幸いにも、Debianでは、systemdをオプトアウトできます。
  • このfixer-upperスクリプトを/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
    
11
Celada

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.keyには、luksパスワードが含まれています。

Tm90IHJlYWxseSBteSBwYXNzd29yZC4K

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

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

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

3
marcelm