cryptsetup/LUKSによるフルディスク暗号化#
✓ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
✓ |
このガイドでは、`Nitrokey Pro <https://shop.nitrokey.com/shop/product/nk-pro-2-nitrokey-pro-2-3>`_または`Nitrokey Storage <https://shop.nitrokey.com/shop/product/nitrokey-storage-2-56>`_でブート時に認証するために、LUKSで暗号化されたボリュームを設定する方法を説明します。
背景を説明すると、cryptsetup-initramfsは、Nitrokey ProやNitrokey StorageのようなOpenPGPスマートカードを使用して、LUKSで暗号化されたボリュームを解除することをサポートしています。セットアップが完了すると、通常のディスク暗号化パスフレーズを入力する代わりに、起動時にNitrokeyを挿入してユーザーPINを入力するだけで済むようになります。
この手順は、Ubuntu 20.04とDebian 10でテストされています。
警告
以下のガイドは、あなたのコンピュータをロックアウトする可能性があります。このようなリスクを認識し、データを失う可能性があるため、以下のスクリプトはセカンダリのコンピュータで使用するか、完全にバックアップを取った後に使用することをお勧めします。
要求事項#
LUKSで暗号化されたボリュームが1つ以上あるUbuntuまたはDebianのコンピュータ。
どの方法が本ガイドに対応しているかは、以下の項目を参照してください。
Nitrokey Pro 2またはNitrokey Storage 2の`キーで初期化された<openpgp.html>`_。
既知の問題#
今のところ、このスクリプトは、暗号化されていない``/boot``パーティションと、暗号化されたルート``/``パーティションで構成された、手動で分割されたボリュームでのみ動作します。
このガイドでは、お使いのOSが提供する自動フルディスク暗号化を選択しないでください。UbuntuやDebianのインストールインターフェースを使用して、パーティション分割が自動的に行われると、繰り返しエラーが発生します。
使い方#
依存関係のインストール
$ sudo apt install scdaemon opensc gnupg2
smartcard-luksディレクトリの作成
$ mkdir smartcard-luks && cd smartcard-luks
smartcard-luks-scriptのダウンロード
$ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks $ sudo chmod +x smartcard-key-luks
公開鍵のエクスポート
GnuPGのキーリングから自分の公開鍵をエクスポートする。
$ gpg2 --armor --export KeyID > pubkey.asc
すでに公開鍵を鍵サーバにアップロードしている(またはどこかに保存している)場合は、自分の使いやすい方法で公開鍵を取得し、手順5に進んでください。
ルートパーティションの正しいLUKSデバイス名を決定し、確認します。
$ cat /etc/crypttab # if there is only one entry, you want the 1st column of this entry
ヒント
通常、これは nvme0n1p3_crypt (NitroPC の場合) または sda3_crypt (NitroPads の場合) のようなものになります。 /etc/crypttab` の中で参照されている UUID が指定されたパーティションであることは、/dev/disks/by-uuid/ の中のシンボリックリンクをチェックすることで確認できますし、そうすべきです。
luksのデバイス名(例:nvme0n1p3_crypt)と`pubkey.asc`を引数にして、スクリプトを実行します。
$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
OpenPGPの公開鍵を引数にスクリプトを実行すると、自動的に新しいLUKSの秘密が設定され、その公開鍵で暗号化され、crypttab、LUKS、initramfs、GRUBが設定されます。
最初に``User PIN``のプロンプトが表示されます。
Nitrokeyのロックを解除すると、``OLD passphrase``の入力を求められます。これは、インストール時にボリュームを暗号化するために入力したパスフレーズです。
注釈
これは、Nitrokeyを紛失した場合や、Nitrokeyが利用できない場合のフォールバックの代替手段です。今のところテストされていないので、ユーザーは、フォールバック方法が機能しない場合、コンピュータからロックアウトされるリスクに注意する必要があります。
パスフレーズを入力すると、スクリプトは約1分で設定を終了します。スクリプトを中断すると、再起動後にコンピュータからロックアウトされる可能性がありますのでご注意ください。
できました。
これで再起動すると、Nitrokeyを使って暗号化されたドライブのロックを解除できるはずです。
使用方法#
再起動すると、ユーザーPINの入力を求められます。
ユーザーPINを入力してドライブのロックを解除する
さらなるヒント#
パスフレーズの変更#
この設定が完了したら、(gnome) disks ユーティリティーを使って(予備の)パスフレーズを変更する必要はありません。適切な方法は、次のように cryptsetup を直接呼び出すことです。
$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3
ただし、`nvme0n1p3`はキーを設定したパーティションです。
複数のキーを使う#
複数の(ハードウェア)セキュリティキーを使用して、それぞれが独立してLUKSドライブのロックを解除できるようにするのは簡単です。複数の公開鍵をエクスポートし、以下のようにセットアップスクリプトに複数の鍵を*パス*するだけです。
$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc
カードホルダー名の設定#
LUKSルートパーティションの復号化のためのブート時のPIN入力の際に、カードホルダーがユーザーに提示されます。これを設定するには、$ gpg --edit-card
を使用し、プロンプトの中で ``admin<xid="189"></x>`と``name``を入力して、OpenPGPカード(Nitrokey Storage 2またはNitrokey Pro 2)のカードホルダーを設定します。
キーの交換/削除#
キーを直接追加/削除することはできません。そのため、一度古い設定を削除し、指定したキーで設定をやり直す必要があります。
luks-device (nvme0n1p3)からキーファイル(パス、上記スクリプトを使用した場合)を削除する。
$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg
キーファイル自体を削除します。
$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg
上記のセットアップを再実行します。
X509証明書によるLUKS2のロック解除#
SystemD は X509 証明書を使用した LUKS2 パーティションのロック解除をサポートしていますが、これを実現する方法については、Personal blog of Vladimir Timofeenko で紹介されています。