luksOpen は --key-file 引数が指定されない限り、復号化にキーファイルを使用しません。

luksOpen は --key-file 引数が指定されない限り、復号化にキーファイルを使用しません。

最初にインタラクティブにパスワードを設定した暗号化ボリュームがあり、パーティションのパスワードが正常に復号化されました。 2つの方法でキーファイルを使用してより多くのキーを追加しました。

cryptsetup --keyfile=passphrase luksAddKey /dev/sdax
cryptsetup --luksAddKey /dev/sdax passphrase

ここで、passphraseはキーを含むファイル、/ dev / sdaxは暗号化されたボリュームです。

次に、次を使用してパスワードが有効であることを確認します。

cat passphrase | cryptsetup --test-passphrase luksOpen /dev/sdax
dd if=passphrase bs=1 count=256 | cryptsetup --test-passphrase luksOpen /dev/sdax

ただし、すべて失敗します。「このパスワードに使用できるキーはありません。」 --key-file オプションを使用する次のコマンドが機能します。

cryptsetup --test-passphrase --key-file passphrase luksOpen /dev/sdax 

この時点で、パスワードの内容を送信する方法が固有の作業パスワード(対話型設定)で機能することを確認しようとしました。

echo "manually written working passphrase" > interactive_pass
cat interactive_pass | cryptsetup luksAddKey /dev/sdax

今回は見事に働きました。 2つの方法と2つのキーファイルの違いは何ですか?キーファイルで追加されたパスワードを使用できるように、ファイルの内容をパイプする最初の方法が必要です。これは、crypttabでスクリプトを使用するときに可能な唯一の方法のようです。可能ですか?

答え1

cryptsetupこれについてはマニュアルページで詳しく説明されていますNOTES ON PASSPHRASE PROCESSING FOR LUKS。改行を含めるかどうか、さまざまなサイズ制限(たとえば、インタラクティブなパスワードフレーズの場合は512バイト、チェックcryptsetup --help)など、いくつかの違いがあります。

この特別な面倒を避けるために、端末の対話型cryptsetupプロンプトに入力するときにも使用できるキーファイルを作成することをお勧めします。つまり、キーファイルはプレーンテキスト文字列でなければならず、最後に改行文字を含めないでください。 (echo -nまたはを使用してくださいprintf "%s"。)

たとえば、これを使用してpwgen64文字のパスワードを生成しkeyfile.txtたり、緊急時に手動で入力したりできます。

$ echo -n $(pwgen 64 1) | tee keyfile.txt
Aish6shaejongi9yug3quij7aijop7SieTh7ierahngaem8iov5isho5dae0pisu

これらのキーファイルの場合に渡す方法は重要ではありませんcryptsetup。無効なキーボードレイアウトで入力した場合は例外です。キーボードレイアウトに問題があると予想される場合、パスワードを2回追加できます。したがって、LUKSはそのうちのどれも受け入れるでしょう。

これはキーファイルを使用するときに特に重要です/dev/urandom。間違った方法で使用すると、処理が早く中断される可能性があり(任意の改行が表示され)、パスワードが思ったよりもはるかに短くなる可能性があります。

答え2

標準入力にパスワードを渡すと、cryptsetupは入力行を読み取り、行末と後続のすべての行にある改行文字を削除します。

ファイルからパスワードを渡すと、--key-fileそのファイルの内容全体が使用されます。ファイルに改行文字が含まれている場合、パスワードは標準入力に渡されたパスワードと同じにすることはできません。

答え3

このオプションを使用する必要があります-h。パスワードはキーファイルとして使用される前にハッシュされます。これにより、数文字から256ビットまたは512ビットに切り替えることができます。したがって、luksFormatで使用するオプションとロック解除方法に従って、-h plainまたは他のパラメータを指定する必要があります。

関連情報