私は同じことをしますが、完全にカスタムのInitramfsを使用したさまざまな理由により、私の答えは満足のいくものではないと思います。
代わりのGnuPG
中に含まれなければなら余分なバイナリである、initramfsの(との場合にはGnuPG-2
かなり複雑なもの、)、私は単純に既にある何を使用。そして、それは明らかにdm-crypt/LUKS
です。
それであなたが持っていると仮定しますkeyfile
。ランダムなデータを持つものが好ましい。
# dd if=/dev/urandom of=keyfile count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000189802 s, 2.7 MB/s
LUKSを使用して暗号化を追加します(選択した暗号設定を自由に追加してください)。
# truncate -s 2M keyfile.luks
# cryptsetup luksFormat keyfile --header keyfile.luks
WARNING!
========
This will overwrite data on keyfile.luks irrevocably.
Are you sure? (Type uppercase yes): YES
Enter passphrase: bananas
Verify passphrase: bananas
これで、keyfile(512バイト)とkeyfile.luks(2MB、何らかの理由でcryptsetupで192k LUKSヘッダーを書き込む必要がある)ができました。とにかくInitramfsは圧縮されるので、それほど悪くはありません(まだより小さいGnuPG
)。
これでキーファイルを復号化できます:
# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas
また、512バイトのランダムデータがあり/dev/mapper/lukskey
ます。(変更したい場合は書き込むことができるので、以前にゼロでファイルを初期化することができます。)
# blockdev --getsize64 /dev/mapper/lukskey
512
ではinitramfsを init
あなたはそれを持つ本物のLUKSのボリューム(あなたが最初のキーを追加したと仮定)を開くために行われる可能性があります。
cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up
このアプローチは、GnuPGを完全に不要にし、さらに、キーの複数のパスフレーズ、選択した暗号など、LUKSのすべての利点を得ることができます。言うまでもなく、複数回の再試行を伴う素晴らしい(ほとんどの場合は定期的な)パスワードプロンプト。
/usr/share/doc/cryptsetup/README.gnupg
。外部メディアからのキーファイルを使用するように変更する時間を見つけようと思います。