cryptsetup/LUKSによるフルディスク暗号化

Compatible Nitrokeys

3A/C/Mini

Passkey

HSM 2

Pro 2

FIDO2

Storage 2

Start

U2F

active

inactive

inactive

active

inactive

active

active

inactive

注釈

このガイドは現在非推奨。

This guide shows how to configure LUKS-encrypted volumes, to authenticate at boot with Nitrokey Pro or Nitrokey Storage.

背景を説明すると、cryptsetup-initramfsは、Nitrokey ProやNitrokey StorageのようなOpenPGPスマートカードを使用して、LUKSで暗号化されたボリュームを解除することをサポートしています。セットアップが完了すると、通常のディスク暗号化パスフレーズを入力する代わりに、起動時にNitrokeyを挿入してユーザーPINを入力するだけで済むようになります。

この手順は、Ubuntu 20.04とDebian 10でテストされています。

警告

以下のガイドは、あなたのコンピュータをロックアウトする可能性があります。このようなリスクを認識し、データを失う可能性があるため、以下のスクリプトはセカンダリのコンピュータで使用するか、完全にバックアップを取った後に使用することをお勧めします。

要求事項

  • LUKSで暗号化されたボリュームが1つ以上あるUbuntuまたはDebianのコンピュータ。

どの方法が本ガイドに対応しているかは、以下の項目を参照してください。

  • A Nitrokey Pro 2 or Nitrokey Storage 2 initialized with keys.

既知の問題

今のところ、このスクリプトは、暗号化されていない``/boot``パーティションと、暗号化されたルート``/``パーティションで構成された、手動で分割されたボリュームでのみ動作します。

このガイドでは、お使いのOSが提供する自動フルディスク暗号化を選択しないでください。UbuntuやDebianのインストールインターフェースを使用して、パーティション分割が自動的に行われると、繰り返しエラーが発生します。

使い方

  1. 依存関係のインストール

    $ sudo apt install scdaemon opensc gnupg2
    
  2. smartcard-luksディレクトリの作成

    $ mkdir smartcard-luks && cd smartcard-luks
    
  3. smartcard-luks-scriptのダウンロード

    $ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
    $ sudo chmod +x smartcard-key-luks
    
  4. 公開鍵のエクスポート

    To export your public key from GnuPG's keyring:

    $ gpg2 --armor --export KeyID > pubkey.asc
    

    すでに公開鍵を鍵サーバにアップロードしている(またはどこかに保存している)場合は、自分の使いやすい方法で公開鍵を取得し、手順5に進んでください。

  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/ の中のシンボリックリンクをチェックすることで確認できますし、そうすべきです。

  6. luksのデバイス名(例:nvme0n1p3_crypt)と`pubkey.asc`を引数にして、スクリプトを実行します。

    $ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc
    

OpenPGPの公開鍵を引数にスクリプトを実行すると、自動的に新しいLUKSの秘密が設定され、その公開鍵で暗号化され、crypttab、LUKS、initramfs、GRUBが設定されます。

最初に``User PIN``のプロンプトが表示されます。

img1

Nitrokeyのロックを解除すると、``OLD passphrase``の入力を求められます。これは、インストール時にボリュームを暗号化するために入力したパスフレーズです。

img2

注釈

This is a fall-back alternative in case you lose your Nitrokey, or if it's unavailable. So far, it was not tested, and users must be aware of the risk of getting locked out of their computer, if the fall-back method does not work.

パスフレーズを入力すると、スクリプトは約1分で設定を終了します。スクリプトを中断すると、再起動後にコンピュータからロックアウトされる可能性がありますのでご注意ください。

img3

できました。

これで再起動すると、Nitrokeyを使って暗号化されたドライブのロックを解除できるはずです。

使用方法

再起動すると、ユーザーPINの入力を求められます。

img5

ユーザーPINを入力してドライブのロックを解除する

img6

さらなるヒント

パスフレーズの変更

この設定が完了したら、(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 で紹介されています。