systemd-cryptenroll

提供: ArchWiki
2024年12月30日 (月) 21:27時点におけるHkiku482 (トーク | 投稿記録)による版 (同期)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

systemd-cryptenroll(1) から:

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

回復キー

systemd-cryptenroll(1) から:

回復キーはパスフレーズとほとんど同じですが、人間が選択するのではなくコンピューターによって生成されるため、高いエントロピーが保証されています。キーは入力しやすい文字セットを使用しており、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 は、ロック解除前にユーザ認証を要求するかどうかを定義します。
ノート:
  • トークンがこれらの機能をサポートしていない場合、これらのオプションは効力を持ちません。
  • 両者の違いについては、User Presence vs User Verification を参照してください。

Trusted Platform Module

この記事またはセクションは加筆を必要としています。
理由: Document --tpm2-public-key --tpm2-seal-key-handle --tpm2-device-key --tpm2-pcrlock (議論: トーク:Systemd-cryptenroll#)

systemd-cryptenroll はLUKSキーをTPMへ保存するためのネイティブサポートを備えています。次のものを用意してください。

はじめに、次のコマンドでインストール済みのTPMと使用中のドライバを表示してください。

systemd-cryptenroll --tpm2-device=list
ヒント: 複数のTPMがシステムにインストールされている場合は--tpm2-device=/path/to/tpm2_deviceで使用するデバイスを選択することができます。

キーは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 7にバインドするときは、セキュアブートがアクティブでユーザーモードになっていることを確認してください。そうしないと、許可されていないブートデバイスが暗号化されたボリュームのロックを解除する可能性があります。
  • PCR 7の状態はファームウェア証明書が変更されると変更される可能性があり、ユーザーがロックアウトされるリスクがあります。これはfwupd[1]によって暗黙的に行われるか、セキュアブートキーをローテーションすることによって明示的に行われます。
  • ブート前に測定された PCR (PCR 0-7) へのバインドのみが、不正なオペレーティング システムからの脆弱性を生じさせます。実際のルート ファイル システムからコピーされたメタデータ (パーティション UUID など) を持つ不正なパーティションは、元のパーティションを模倣できます。次に、initramfs は不正なパーティションをルート ファイル システムとしてマウントしようとします (復号化に失敗すると、パスワード入力にフォールバックします)。これにより、ブート前の PCR は変更されません。攻撃者が制御するファイルを持つ不正なルート ファイル システムは、実際のルート パーティションの復号化キーを引き続き受信できます。詳細については、Brave New Trusted Boot WorldおよびBitLocker documentationを参照してください。

バインドするPCRの組み合わせは使いやすさとロックダウンのバランスを取るために、ユースケースによって異なります。例えばセキュアブートに手動で介入せずに、UEFIのファームウェアの更新が必要な場合や異なるブートテバイスが必要な場合があります。その他の例として、WindowsのBitlockerはPCR7+11を優先しますが、他のPCRの組み合わせを使用する場合もあります。

ノート:
  • TPM 測定チェックに加えて、PIN の入力を要求することもできます。TPM デバイスの登録時にオプション --tpm2-with-pin=yes を追加し、要求されたら PIN を入力します。systemd-cryptenroll ではこれを PIN と呼びますが、任意の文字を使用できます。
  • systemd-cryptenroll は、PIN を要求する前に TPM 測定をチェックしません。そのため、環境が信頼できない可能性があるため、一意の PIN の使用を検討してください。

新しいキーが登録すされたことを確認するには次のコマンドを実行し、systemd-tpm2トークンエントリとKeyslotsセクションの追加エントリを探します。

cryptsetup luksDump /dev/sdX

キーが機能することをテストするには、LUKSボリュームがcloseしているときに次のコマンドを実行します。

systemd-cryptsetup attach mapping_name /dev/sdX none tpm2-device=none

起動時にボリュームのロックを解除するには、Dm-crypt/システム設定#crypttabDm-crypt/システム設定#Trusted Platform Module と FIDO2 鍵を参照してください。

ノート: /etc/crypttabのパス名の代わりにLUKSボリュームのUUIDを指定することができますが、systemd-cryptenrollコマンド自体はパス名のみをサポートしています。

詳細と例については、systemd-cryptenroll(1)crypttab(5)を参照してください。

参照