USBスティックの最初のパーティションの前のスペースをluksキーとして使用します。

USBスティックの最初のパーティションの前のスペースをluksキーとして使用します。

私はArch Linuxと暗号化されたluksのルートパーティション(暗号化されていない起動)をパスワードで使用しています。これで、次のようにUSBスティックに書き込まれるキーファイル(3072バイト)があります。

sudo dd if=tempKeyFile.bin of=/dev/sdd bs=512 seek=1 count=6

追加パスで設定

sudo cryptsetup luksAddKey /dev/sdb6 tempKeyFile.bin

次のコマンドを使用してパーティションを手動で開く場合:

sudo cryptsetup --key-file tempKeyFile.bin open /dev/sdb6 luks_root

すべてがうまく機能し、パーティションがマップされマウント可能です。今私のカーネルパラメータラインはgrub.cfg次のようになります:

linux /vmlinuz-linux root=UUID=$UUID_OF_luks_root$ rw cryptdevice=UUID=$UUID_OF_sdb6$:luks_root cryptkey=/dev/sdd:1:6

ただし、起動時に次のエラーが発生します。

No key available with this passphrase. Invalid Keyfile. Reverting to passphrase.

1の代わりにオフセット2を試しましたが、結果は同じです。キーファイルが見つからないか読み取れないと言うのではなく、間違った内容であることがわかりました。

luksキーファイルを保存する方法に関するドキュメントはほとんどないようです。 Arch-wikiではこれについて言及していますが、非常に簡単に言及しており、私も同意するようですので、これが可能でなければならないと思います。

私のmkinitcpio.confモジュールでは、バイナリとファイルが空で、次のように設定しました。

HOOKS=(base udev autodetect keyboard modconf block encrypt filesystems fsck)

したがって、ブロックは暗号化の直前です。

ここで問題は何ですか?

ベストアンサー1

ArchLinux CryptoHooksで(/lib/initcpio/hooks/encrypt):

*)
    # Read raw data from the block device
    # ckarg1 is numeric: ckarg1=offset, ckarg2=length
    dd if="$resolved" of="$ckeyfile" bs=1 skip="$ckarg1" count="$ckarg2" >/dev/null 2>&1
    ;;

したがって、rawブロックデバイスはキー読み取りをサポートしますが、ブロックサイズは1(デフォルトは512ではなく)を使用するため、機能するには値に512を掛ける必要があります。

cryptkey=/dev/sdd:1:6だから努力する代わりにcryptkey=/dev/sdd:512:3072

おすすめ記事