「Systemd-cryptenroll」の版間の差分
(→FIDO2 トークン: typo) |
(同期) |
||
(他の1人の利用者による、間の1版が非表示) | |||
1行目: | 1行目: | ||
{{Template:Lowercase title}} |
{{Template:Lowercase title}} |
||
− | [[Category:デ |
+ | [[Category:保存データ暗号化]] |
[[en:systemd-cryptenroll]] |
[[en:systemd-cryptenroll]] |
||
{{Template:Related articles start}} |
{{Template:Related articles start}} |
||
94行目: | 94行目: | ||
* 両者の違いについては、[https://developers.yubico.com/WebAuthn/WebAuthn_Developer_Guide/User_Presence_vs_User_Verification.html User Presence vs User Verification] を参照してください。}} |
* 両者の違いについては、[https://developers.yubico.com/WebAuthn/WebAuthn_Developer_Guide/User_Presence_vs_User_Verification.html User Presence vs User Verification] を参照してください。}} |
||
+ | === Trusted Platform Module === |
||
− | === 信頼できるプラットフォームモジュール === |
||
− | {{Expansion|Document {{ic|--tpm2-public-key}}}} |
+ | {{Expansion|Document {{ic|--tpm2-public-key}} {{ic|--tpm2-seal-key-handle}} {{ic|--tpm2-device-key}} {{ic|--tpm2-pcrlock}}}} |
+ | ''systemd-cryptenroll'' はLUKSキーをTPMへ保存するためのネイティブサポートを備えています。次のものを用意してください。 |
||
− | # systemd-cryptenroll /dev/''disk'' --tpm2-device=''device'' |
||
+ | |||
+ | * {{Pkg|tpm2-tss}} (必須)。 |
||
+ | * LUKS2を設定したデバイス ([[cryptsetup]])。 |
||
+ | * {{ic|root}}パーティションを使用する場合は、[[initramfs]]も変更する必要があります。 |
||
+ | ** [[mkinitcpio]]: {{ic|systemd}}と{{ic|sd-encrypt}}[[Mkinitcpio#HOOKS|フック]]を有効にしてください。{{Note|フック内のエントリの順序は重要です。間違えると[[arch-chroot]]からinitrdを再構成する必要があります。順序の例については[[Dm-crypt/システム設定#例]]を参照してください。}} |
||
+ | ** [[dracut]]: {{ic|tpm2-tss}}[[Dracut#Dracut モジュール|モジュール]]を有効にしてください。 |
||
+ | |||
+ | はじめに、次のコマンドでインストール済みのTPMと使用中のドライバを表示してください。 |
||
+ | |||
+ | systemd-cryptenroll --tpm2-device=list |
||
+ | |||
+ | {{Tip|複数のTPMがシステムにインストールされている場合は{{ic|1=--tpm2-device=''/path/to/tpm2_device''}}で使用するデバイスを選択することができます。}} |
||
+ | |||
+ | キーは1つのコマンドでLUKSとTPMの両方に保存することができます。次の例ではランダムなキーを生成し、ボリュームへ追加して、既存のキーに加えてボリュームのロックを解除できるように新しいキーをPCR7([[セキュアブート]])へ登録します。 |
||
+ | |||
+ | systemd-cryptenroll --tpm2-device=auto ''/dev/sdX'' |
||
+ | |||
+ | ''/dev/sdX''は暗号化済みのLUKSデバイスです。LUKSボリュームがパスフレーズではなくキーファイルによってロックされている場合は{{ic|1=--unlock-key-file=''/path/to/keyfile''}}を使用します。 |
||
+ | |||
+ | systemd-cryptenroll --tpm2-device=auto ''/dev/sdX'' --unlock-key-file=''/path/to/keyfile'' |
||
デフォルトでは、TPM を登録するとキーが PCR7 にバインドされ、[[セキュアブート]] 状態が測定されます。{{ic|--tpm2-pcrs}} オプションを使用すると、キーがバインドされる PCR を変更できます。{{ic|+}} 記号で区切ることにより、複数の PCR を同時に使用できます。PCR とその測定内容の完全なリストは、[[Trusted Platform Module#Accessing PCR registers]] で入手できます。 |
デフォルトでは、TPM を登録するとキーが PCR7 にバインドされ、[[セキュアブート]] 状態が測定されます。{{ic|--tpm2-pcrs}} オプションを使用すると、キーがバインドされる PCR を変更できます。{{ic|+}} 記号で区切ることにより、複数の PCR を同時に使用できます。PCR とその測定内容の完全なリストは、[[Trusted Platform Module#Accessing PCR registers]] で入手できます。 |
||
+ | {{Warning| |
||
− | ==== PIN を使用して TPM を歌う ==== |
||
+ | * PCR 7にバインドするときは、[[セキュアブート]]がアクティブでユーザーモードになっていることを確認してください。そうしないと、許可されていないブートデバイスが暗号化されたボリュームのロックを解除する可能性があります。 |
||
+ | * PCR 7の状態はファームウェア証明書が変更されると変更される可能性があり、ユーザーがロックアウトされるリスクがあります。これは[[fwupd]][https://github.com/systemd/systemd/blob/ed272a9ff59a26beedaab508dd3c9d631de67165/TODO#L664-L673]によって暗黙的に行われるか、セキュアブートキーをローテーションすることによって明示的に行われます。 |
||
+ | * ブート前に測定された PCR (PCR 0-7) へのバインドのみが、不正なオペレーティング システムからの脆弱性を生じさせます。実際のルート ファイル システムからコピーされたメタデータ (パーティション UUID など) を持つ不正なパーティションは、元のパーティションを模倣できます。次に、initramfs は不正なパーティションをルート ファイル システムとしてマウントしようとします (復号化に失敗すると、パスワード入力にフォールバックします)。これにより、ブート前の PCR は変更されません。攻撃者が制御するファイルを持つ不正なルート ファイル システムは、実際のルート パーティションの復号化キーを引き続き受信できます。詳細については、[https://0pointer.net/blog/brave-new-trusted-boot-world.html Brave New Trusted Boot World]および[https://learn.microsoft.com/en-us/windows/security/operating-system-security/data-protection/bitlocker/countermeasures BitLocker documentation]を参照してください。 |
||
+ | }} |
||
+ | |||
+ | バインドするPCRの組み合わせは使いやすさとロックダウンのバランスを取るために、ユースケースによって異なります。例えば[[セキュアブート]]に手動で介入せずに、UEFIのファームウェアの更新が必要な場合や異なるブートテバイスが必要な場合があります。その他の例として、WindowsのBitlockerはPCR{{ic|7+11}}を優先しますが、他のPCRの組み合わせを使用する場合もあります。 |
||
+ | |||
+ | {{Note| |
||
+ | * TPM 測定チェックに加えて、PIN の入力を要求することもできます。TPM デバイスの登録時にオプション {{ic|1=--tpm2-with-pin=yes}} を追加し、要求されたら PIN を入力します。''systemd-cryptenroll'' ではこれを PIN と呼びますが、任意の文字を使用できます。 |
||
+ | * ''systemd-cryptenroll'' は、PIN を要求する前に TPM 測定をチェックしません。そのため、環境が信頼できない可能性があるため、一意の PIN の使用を検討してください。}} |
||
+ | |||
+ | 新しいキーが登録すされたことを確認するには次のコマンドを実行し、{{ic|systemd-tpm2}}トークンエントリと''Keyslots''セクションの追加エントリを探します。 |
||
+ | |||
+ | cryptsetup luksDump ''/dev/sdX'' |
||
+ | |||
+ | キーが機能することをテストするには、LUKSボリュームが{{ic|close}}しているときに次のコマンドを実行します。 |
||
+ | |||
+ | systemd-cryptsetup attach ''mapping_name'' ''/dev/sdX'' none tpm2-device=none |
||
+ | |||
+ | 起動時にボリュームのロックを解除するには、[[Dm-crypt/システム設定#crypttab]]と[[Dm-crypt/システム設定#Trusted Platform Module と FIDO2 鍵]]を参照してください。 |
||
+ | {{Note|{{ic|/etc/crypttab}}のパス名の代わりにLUKSボリュームのUUIDを指定することができますが、''systemd-cryptenroll''コマンド自体はパス名のみをサポートしています。}} |
||
− | TPM 測定チェックに加えて、PIN の入力を要求することもできます。TPM デバイスの登録時にオプション {{ic|1=--tpm2-with-pin=yes}} を追加し、要求されたら PIN を入力します。''systemd-cryptenroll'' ではこれを PIN と呼びますが、任意の文字を使用できます。 |
||
+ | 詳細と例については、{{man|1|systemd-cryptenroll}}と{{man|5|crypttab}}を参照してください。 |
||
− | {{Note|''systemd-cryptenroll'' は、PIN を要求する前に TPM 測定をチェックしません。そのため、環境が信頼できない可能性があるため、一意の PIN の使用を検討してください。}} |
||
== 参照 == |
== 参照 == |
2024年12月30日 (月) 21:27時点における最新版
関連記事
- systemd-cryptenroll は、ハードウェアセキュリティトークンとデバイスを LUKS2 暗号化ボリュームに登録するためのツールです。これは、ブート中にボリュームのロックを解除するために使用できます。
systemd-cryptenroll を使用すると、スマートカード、FIDO2 トークン、および Trusted Platform Module セキュリティチップを LUKS デバイスに登録できるだけでなく、通常のパスフレーズも登録できます。これらのデバイスは、登録されたトークンを使用して、後で systemd-cryptsetup@.service(8) によってロック解除されます。
目次
インストール
systemd-cryptenroll は、systemd の一部であり、パッケージ化されています。ただし、ハードウェアデバイスをキーとして使用するには、追加のパッケージが必要です。
- PKCS#11 トークンを使用するには、libp11-kit を インストール します。
- FIDO2 トークンを使用するには、libfido2 をインストールします。
- TPM2 デバイスを使用するには、tpm2-tss をインストールします。
キースロットのリスト
systemd-cryptenroll は、cryptsetup luksDump
と同様に、LUKS デバイス内のキースロットをリストできますが、よりユーザーフレンドリーな形式です。
# systemd-cryptenroll /dev/disk
SLOT TYPE 0 password 1 tpm2
キースロットの消去
# systemd-cryptenroll /dev/disk --wipe-slot=SLOT
SLOT には次の値を指定できます。
- キースロットのインデックス。
- そのタイプのキースロットはすべて消去されます。有効なタイプは
empty
,password
,recovery
,pkcs11
,fido2
,tpm2
です。 - カンマで区切られた上記のすべての組み合わせ
- 文字列
all
は、デバイス上のすべてのキースロットを消去します。このオプションは、別のデバイスまたはパスフレーズを同時に登録する場合にのみ使用できます。
--wipe-slot
操作はすべての登録オプションと組み合わせて使用でき、既存のデバイス登録を更新するのに役立ちます。
# systemd-cryptenroll /dev/disk --wipe-slot=fido2 --fido2-device=auto
パスフレーズの登録
通常のパスワード
これは、cryptsetup luksAddKey
と同等です。
# systemd-cryptenroll /dev/disk --password
回復キー
- 回復キーはパスフレーズとほとんど同じですが、人間が選択するのではなくコンピューターによって生成されるため、高いエントロピーが保証されています。キーは入力しやすい文字セットを使用しており、QR コードを介して画面外からスキャンすることもできます。
回復キーは、ハードウェアトークンが利用できない場合にフォールバックとして使用されるように設計されており、必要なときにいつでも通常のパスフレーズの代わりに使用できます。
# systemd-cryptenroll /dev/disk --recovery-key
ハードウェアデバイスの登録
--type-device
オプションは、それぞれのタイプの有効なデバイスパスを指定する必要があります。使用可能なデバイスのリストは、このオプションに list
引数を渡すことで取得できます。あるいは、目的のタイプのデバイスが 1 つだけ接続されている場合は、auto
オプションを使用してそれを自動的に選択できます。
ハードウェアトークンを LUKS ボリュームに登録した後、必要に応じてハードウェア トークンを使用するようにシステムを構成する必要があります。ルートファイルシステムなど、初期のユーザー空間でロックを解除する必要があるボリュームについては dm-crypt/システム設定#Trusted Platform Module と FIDO2 鍵 を参照し、その他のボリュームについては dm-crypt/システム設定#後期ユーザ空間でロックを解除する を参照してください。パーティション。
PKCS#11 トークンまたはスマートカード
トークンまたはスマートカードには、ボリュームのロックを解除するために使用される生成されたキーの暗号化に使用される RSA キーペアが含まれている必要があります。
# systemd-cryptenroll /dev/disk --pkcs11-token-uri=device
FIDO2 トークン
"hmac-secret" 拡張機能をサポートする FIDO2 トークンは、systemd-cryptenroll で使用できます。
# systemd-cryptenroll /dev/disk --fido2-device=device
さらに、systemd-cryptenroll は、トークンの組み込み検証機能の使用をサポートしています。
--fido2-with-client-pin
は、ロック解除前にPINを要求するかどうかを定義する。--fido2-with-user-presence
は、ロックを解除する前にユーザの存在を確認するかどうか (トークンをタップするなど) を定義する。--fido2-with-user-verification
は、ロック解除前にユーザ認証を要求するかどうかを定義します。
Trusted Platform Module
systemd-cryptenroll はLUKSキーをTPMへ保存するためのネイティブサポートを備えています。次のものを用意してください。
- tpm2-tss (必須)。
- LUKS2を設定したデバイス (cryptsetup)。
root
パーティションを使用する場合は、initramfsも変更する必要があります。- mkinitcpio:
systemd
とsd-encrypt
フックを有効にしてください。 - dracut:
tpm2-tss
モジュールを有効にしてください。
- mkinitcpio:
はじめに、次のコマンドでインストール済みのTPMと使用中のドライバを表示してください。
systemd-cryptenroll --tpm2-device=list
キーは1つのコマンドでLUKSとTPMの両方に保存することができます。次の例ではランダムなキーを生成し、ボリュームへ追加して、既存のキーに加えてボリュームのロックを解除できるように新しいキーをPCR7(セキュアブート)へ登録します。
systemd-cryptenroll --tpm2-device=auto /dev/sdX
/dev/sdXは暗号化済みのLUKSデバイスです。LUKSボリュームがパスフレーズではなくキーファイルによってロックされている場合は--unlock-key-file=/path/to/keyfile
を使用します。
systemd-cryptenroll --tpm2-device=auto /dev/sdX --unlock-key-file=/path/to/keyfile
デフォルトでは、TPM を登録するとキーが PCR7 にバインドされ、セキュアブート 状態が測定されます。--tpm2-pcrs
オプションを使用すると、キーがバインドされる PCR を変更できます。+
記号で区切ることにより、複数の PCR を同時に使用できます。PCR とその測定内容の完全なリストは、Trusted Platform Module#Accessing PCR registers で入手できます。
バインドするPCRの組み合わせは使いやすさとロックダウンのバランスを取るために、ユースケースによって異なります。例えばセキュアブートに手動で介入せずに、UEFIのファームウェアの更新が必要な場合や異なるブートテバイスが必要な場合があります。その他の例として、WindowsのBitlockerはPCR7+11
を優先しますが、他のPCRの組み合わせを使用する場合もあります。
新しいキーが登録すされたことを確認するには次のコマンドを実行し、systemd-tpm2
トークンエントリとKeyslotsセクションの追加エントリを探します。
cryptsetup luksDump /dev/sdX
キーが機能することをテストするには、LUKSボリュームがclose
しているときに次のコマンドを実行します。
systemd-cryptsetup attach mapping_name /dev/sdX none tpm2-device=none
起動時にボリュームのロックを解除するには、Dm-crypt/システム設定#crypttabとDm-crypt/システム設定#Trusted Platform Module と FIDO2 鍵を参照してください。
詳細と例については、systemd-cryptenroll(1)とcrypttab(5)を参照してください。