LUKS:どのキーウェイがどの暗号文と一致するかを確認する

LUKS:どのキーウェイがどの暗号文と一致するかを確認する

LUKS暗号化ディスクがあります。 3つのキーホームがあり、そのうちの2つの転送ステップを知っています。

どのキーウェイのパスワードを知っているかどうかを確認するには?

答え1

簡単な方法は、--debugデバイスのロックを解除するときに使用したいキーウェイを印刷することです。したがって、2つのパスワードを使用して、luksOpenどのパスワードがどのキーウェイに「属しているか」を確認するために2回だけ実行します。

3番目のキーホームのパスワードを提供する例:

$ sudo cryptsetup open /dev/sde a --debug
...
# Trying to open LUKS2 keyslot 0.
...
# Verifying key from keyslot 0, digest 0.
# Digest 0 (pbkdf2) verify failed with -1.
# Trying to open LUKS2 keyslot 1.
...
# Digest 0 (pbkdf2) verify failed with -1.
# Trying to open LUKS2 keyslot 2.
...
Key slot 2 unlocked.

スクリプトでこれを確認するには、知っている各パスワードフレーズの各キースロットに対してwithとループを使用できます。無効な--key-slot <num>パスワードluksOpenフレーズで無効なキースロットをロック解除すると失敗します。--test-passphrase正確または実際にデバイスのロックを解除せずに)。これは、同じパスワードを持つ2つのキースロットがある場合にも役立ちますが、--debug上記の例ではこれはわかりません。

したがって、次のようなトリックを実行する必要があります。

for i in {0..2}; do
   for pass in "a" "b" "c"; do
      echo $pass | cryptsetup open /dev/sde a -q --test-passphrase --key-slot $i >/dev/null 2>&1
      ret=$?
      [ $ret -eq 0 ] && echo "$pass is passphrase for keyslot $i" && break
      done
done
a is passphrase for keyslot 0
b is passphrase for keyslot 1
c is passphrase for keyslot 2

関連情報