web-dev-qa-db-ja.com

GnuPGでdm-crypt(LUKS)を使用してFDEに2要素を使用するにはどうすればよいですか?

Ubuntuでフルディスク暗号化(homedir暗号化とは反対)を使用する場合、LUKSを使用したdm-cryptがボリュームの暗号化に使用されます。インストーラー(少なくとも12.04以降)では、パスフレーズまたはキーファイルを使用してセットアップすることを選択できます。この2つの組み合わせを使用したいと思います。どちらでもありませんが、両方が必要です。

どうして?これによりセキュリティが強化されるため(2要素)。 have何かをする必要があり、know何かをアンロックする必要があります。次に、キーファイルを小さなリムーバブルストレージデバイス(USBフラッシュドライブ)に配置し、ブート時にのみプラグインします。結果として、正しいフラッシュドライブに入れる必要がありますおよびルートパーティションのロックを解除するための正しいパスフレーズを提供します。

つまり、言い換えると、外部ドライブのキーファイルが暗号化されているパスフレーズをブート中に求められるようにしたいのです。

それを達成するのに役立つ/usr/share/initramfs-tools/hooks/cryptgnupgヘルパースクリプトがありますが、使用方法がわかりません。

混乱を避けるために:私はnotボリュームにロックを解除するために追加キーを追加する方法を求めています。

9
gertvdijk

私は同じことをしますが、さまざまな理由で完全にカスタムInitramfsを使用したため、答えが満足のいくものではないことを恐れています。

Initramfs(およびGnuPG-2の場合、かなり複雑なもの)に含まれる必要がある追加のバイナリであるGnuPGの代わりに、私は単に既にあるものを使用しましたそこ。そして、それは明らかに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

これで、キーファイル(512バイト)とkeyfile.luks(何らかの理由でcryptsetupが192k LUKSヘッダーを書き込む必要がある2MB)ができました。とにかくInitramfsは圧縮されるので、それほど悪くはありません(GnuPGよりも小さいです)。

これで、キーファイルを復号化できます。

# cryptsetup luksOpen keyfile --header keyfile.luks lukskey
Enter passphrase for keyfile: bananas

/dev/mapper/lukskeyには512バイトのランダムデータがあります。 (変更したい場合は、ファイルに書き込むことができます。そのため、以前にゼロでファイルを初期化できました。)

# blockdev --getsize64 /dev/mapper/lukskey
512

Initramfsinitでは、それを使用して実際のLUKSボリュームを開くことができます(最初にキーを追加した場合)。

cryptsetup --key-file=/dev/mapper/lukskey luksOpen /dev/yourdisk luksyourdisk
cryptsetup luksClose lukskey # clean up

このアプローチにより、GnuPGは完全に不要になり、さらに、キーの複数のパスフレーズ、選択した暗号など、LUKSのすべての利点が得られます。複数の再試行を伴うニース(ほとんどの場合は通常)パスワードプロンプトは言うまでもありません。

5
frostschutz