「Trusted Platform Module」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://lwn.net/」を「https://lwn.net/」に置換) |
Kusanaginoturugi (トーク | 投稿記録) (→PCR レジスタへのアクセス: ユニファイドカーネルイメージに変更) |
||
(2人の利用者による、間の21版が非表示) | |||
1行目: | 1行目: | ||
[[Category:セキュリティ]] |
[[Category:セキュリティ]] |
||
− | [[Category: |
+ | [[Category:ハードウェア]] |
[[en:Trusted Platform Module]] |
[[en:Trusted Platform Module]] |
||
+ | [[pl:Trusted Platform Module]] |
||
− | Trusted Platform Module (TPM) はセキュアな暗号プロセッサの国際規格です。暗号鍵をデバイスに統合することによりハードウェアを保護する専用のマイクロプロセッサとして設計されています。 |
||
+ | {{Related articles start}} |
||
+ | {{Related|Rng-tools}} |
||
+ | {{Related|自己暗号化ドライブ}} |
||
+ | {{Related|スマートカード}} |
||
+ | {{Related|Trusted Platform Module/1.2}} |
||
+ | {{Related articles end}} |
||
+ | Trusted Platform Module (TPM) は安全な暗号プロセッサの国際規格です。これは暗号鍵をデバイスに統合することによりハードウェアを保護する専用のマイクロプロセッサです。 |
||
− | 実際に TPM |
+ | 実際には TPMはセキュアブート、キーストレージ、乱数生成など様々なセキュリティアプリケーションで使うことができます。 |
− | + | TPM が使えるのは TPM ハードウェアに対応しているデバイスだけです。あなたのハードウェアが TPM をサポートしているのに認識されない場合、BIOS の設定で TPM を有効にする必要があります。 |
|
== バージョン == |
== バージョン == |
||
+ | TPM 仕様には 2.0 と 1.2 という 2 つの非常に異なるものがあり、これらも異なるソフトウェアスタックを使用します。この記事では TPM 2.0 についてのみ説明します。古い TPM 1.2 については、[[Trusted Platform Module/1.2|/1.2]] を参照してください。 |
||
− | {{Note|TPM 2.0 のサポートは不完全です (カーネルとユーザー空間の両方)。現時点では TPM2 を動作させる方法は見つかっていません。}} |
||
+ | TPM 2.0 では、{{ic|/dev/tpm0}} による直接アクセスが可能である。(一度に1クライアント)、{{ic|/dev/tpmrm0}} 経由のカーネル管理アクセス、{{Pkg|tpm2-abrmd}} リソースマネージャーデーモンによる管理アクセスが可能です。[https://groups.google.com/g/linux.debian.bugs.dist/c/OWBHw40g6Vk/m/rnwwkVapDAAJ systemd プロジェクトメンバーによると]、{{Pkg|tpm2-abrmd}} の使用はもはや推奨されていません。ユーザ空間ツールには Intel の {{Pkg|tpm2-tools}} と IBM の {{AUR|ibm-tss}} の2つの選択肢があります。 |
||
− | TPM 2.0 が搭載されたシステムで {{ic|tcsd}} を実行すると以下のようになります: |
||
+ | TPM 2.0 には [[UEFI]] ブートが必要です。BIOS またはレガシーブートシステムは TPM 1.2 のみを使用できます。 |
||
− | # cat /sys/class/tpm/tpm0/device/description |
||
− | TPM 2.0 Device |
||
+ | 一部の TPM チップは、ファームウェアアップグレードを通じて 2.0 と 1.2 の間で切り替えることができます (限られた回数のみ実行可能) |
||
− | # tcsd -f |
||
− | TCSD TDDL ioctl: (25) Inappropriate ioctl for device |
||
− | TCSD TDDL Falling back to Read/Write device support. |
||
− | TCSD TCS ERROR: TCS GetCapability failed with result = 0x1e |
||
+ | == 使い方 == |
||
− | この記事では主に TPM 1.2 を扱っています。 |
||
+ | 日常のアプリケーションで TPM 2.0 サービスを設定および利用する方法を学習するための多くの有益なリソースが、[https://tpm2-software.github.io/tpm2-software コミュニティ] から入手できます。 |
||
− | ==ドライバー== |
||
− | TPM ドライバーは新しいカーネルならネイティブで含まれていますが、ロードする必要があります: |
||
+ | === サポートの確認 === |
||
− | # modprobe tpm |
||
+ | TPM 2.0 チップは、2016 年 7 月 28 日以降、Windows 10 を実行することが認定されたコンピューターの要件となっています。[https://www.computerworld.com/article/3101427/microsoft-mandates-windows-10-hardware-change-for-pc-security.html] Linux はバージョン 3.20 以降 TPM 2.0 をサポートしています [https://www.phoronix.com/scan.php?page=news_item&px=Linux-3.20-TPM-2.0-Security] 他の手順は、デフォルトの Arch インストールで有効になります。 |
||
− | さらに、使用しているチップセットにあわせて、以下のモジュールのどれかをロードしてください: |
||
+ | 特定のソフトウェアを使用せずに TPM 2.0 がセットアップされているかどうかを確認する 2 つの方法: |
||
− | # modprobe tpm_{atmel,bios,infineon,nsc,tis,crb} |
||
+ | * ログを確認します。たとえば、root として {{ic|1=journalctl -k --grep=tpm}} を実行します。 |
||
− | == 使用方法 == |
||
+ | * {{ic|/sys/class/tpm/tpm0/device/description}} [https://github.com/tpm2-software/tpm2-tools/issues/604#issuecomment-342784674] または {{ic|/sys/class/tpm/tpm0/tpm_version_major}} の値を読み取ります。 |
||
+ | === LUKS による保存データの暗号化 === |
||
− | TPM は {{ic|tcsd}} によって管理します。Trusted Computing リソースを管理するユーザー空間のデーモンで、(TSS の仕様によれば) TPM デバイスドライバーの唯一の表玄関です。{{ic|tcsd}} は AUR パッケージの {{AUR|trousers}} に含まれています。IBM によって開発・リリースされており、{{ic|/etc/tcsd.conf}} で設定することが可能です。 |
||
+ | TPM を使用して LUKS ボリュームのロックを解除するには、2 つの方法があります。[[Clevis]] または [[Trusted Platform Module#systemd-cryptenroll|systemd-cryptenroll]] を使用できます。 |
||
− | tcsd を起動して出力を監視するには、次を実行: |
||
+ | どちらの方法を使用しても、TPM に保存されているキーを使用して、起動時に自動的に、または後で手動で、暗号化されたボリュームのロックを解除できます。この目的で TPM を使用すると、ファームウェアが変更されていない、[[セキュアブート]] が無効になっていないなど、特定の条件が満たされない限り、ドライブのロックが解除されなくなります ([[Trusted Platform Module#PCR レジスタへのアクセス|PCR レジスタへのアクセス]] を参照) |
||
− | # tcsd -f |
||
+ | {{Warning|この方法をルートボリュームで使用すると、先に述べた一定の条件が満たされている限り、暗号化パスワードを入力することなく、コンピュータの起動時に ''自動的にロックが解除される'' ことを意味します。 |
||
− | もしくは {{ic|tcsd.service}} を起動・有効化してください。 |
||
+ | * つまり、暗号化されたディスクだけが盗まれてもデータへのアクセスは保護されますが、PC全体が盗まれた場合保護されません。 |
||
+ | * なぜなら、たとえコンピュータの電源が長い間オフになっていたとしても(メモリが完全にクリアされていることを保証するために)、攻撃者は単に電源を入れ、TPMが自動的にキーをロードするのを待つことができるからです。これは、価値の高いターゲットにとっては懸念事項になります。 |
||
+ | }} |
||
+ | ==== systemd-cryptenroll ==== |
||
− | {{ic|tcsd}} を実行したら、{{AUR|tpm-tools}} もインストールすると良いでしょう。TPM を管理するためのコマンドラインツールが多数入っています。 |
||
+ | [[systemd-cryptenroll#Trusted Platform Module]] を参照してください。 |
||
− | 他の便利なツール: |
||
+ | === SSH === |
||
− | * {{App|tpmmanager|tpm-tools の Qt フロントエンド。|https://sourceforge.net/projects/tpmmanager|{{AUR|tpmmanager}}}} |
||
− | * {{App|openssl_tpm_engine|TSS API と対話する OpenSSL エンジン。|https://sourceforge.net/projects/trousers|{{AUR|openssl_tpm_engine}}{{Broken package link|{{aur-mirror|openssl_tpm_engine}}}}}} |
||
− | * {{App|tpm_keyring2|TPM ベースの eCryptfs 鍵を管理するキーマネージャ。|https://sourceforge.net/projects/trousers|{{AUR|tpm_keyring2}}{{Broken package link|{{aur-mirror|tpm_keyring2}}}}}} |
||
− | * {{App|opencryptoki|Linux の PKCS#11 実装。IBM の暗号ハードウェアを使用するためのドライバーやライブラリ、テスト用のソフトウェアトークンが含まれています。|https://sourceforge.net/projects/opencryptoki|{{AUR|opencryptoki}}}} |
||
+ | TPM でシールされた SSH キーには、次の 2 つのオプションがあります: |
||
− | === 基本 === |
||
+ | * {{App|ssh-tpm-agent|TPM でサポートされたキーを使用する ssh-agent 互換エージェント。|https://github.com/Foxboron/ssh-tpm-agent|{{AUR|ssh-tpm-agent-git}}}} |
||
− | まずは基本的なバージョン情報を確認してください: |
||
+ | :参照 [https://linderud.dev/blog/store-ssh-keys-inside-the-tpm-ssh-tpm-agent/ SSH キーを TPM 内に保存します: ssh-tpm-agent] |
||
− | $ tpm_version |
||
+ | * {{App|tpm2-pkcs11|Trusted Platform Module 2.0 ハードウェア用の PKCS#11 インターフェイス。|https://github.com/tpm2-software/tpm2-pkcs11|{{Pkg|tpm2-pkcs11}}}} |
||
− | そしてセルフテストを実行: |
||
+ | :参照 [https://github.com/tpm2-software/tpm2-pkcs11/blob/master/docs/SSH.md SSH 設定] それと [https://incenp.org/notes/2020/tpm-based-ssh-key.html SSH 認証に TPM を使用する] (2020-01) |
||
+ | === GnuPG === |
||
− | $ tpm_selftest -l info |
||
− | TPM Test Results: 00000000 ... |
||
− | tpm_selftest succeeded |
||
+ | [[GnuPG]] はバージョン 2.3 以降、互換性のあるキーの TPM への移動をサポートしています。手順については、[https://gnupg.org/blog/20210315-using-tpm-with-gnupg-2.3.html GnuPG 2.3 での TPM の使用] を参照してください。 |
||
− | === SSH 鍵のセキュア化 === |
||
+ | === TPM 2.0 のその他の使用例 === |
||
− | TPM を使って鍵を保護する方法は複数存在しますが、以下では {{aur|simple-tpm-pk11-git}} を使用する簡単な方法を説明します。 |
||
+ | * [https://threat.tevora.com/secure-boot-tpm-2/ セキュアブート + TPM 2 の設定] (2018-06, Debian) |
||
− | まず、新しいディレクトリを作成して鍵を生成してください: |
||
+ | * [https://www.youtube.com/watch?v=XwaSyHJIos8 Using the TPM - It's Not Rocket Science (Anymore)] - Johannes Holland & Peter Huewe (2020-11、Youtube): {{Pkg|tpm2-tss-engine}} を使用した OpenSSL の例 |
||
+ | == PCR レジスタへのアクセス == |
||
− | $ mkdir ~/.simple-tpm-pk11 |
||
− | $ stpm-keygen -o ~/.simple-tpm-pk11/my.key |
||
+ | Platform Configuration Registers (PCR) には、いつでも読み取ることができるハッシュが含まれていますが、以前のハッシュ値に依存する拡張操作を介してのみ書き込むことができるため、一種のブロックチェーンが形成されます。これらは、ブート間のプラットフォームのハードウェアおよびソフトウェアの整合性チェックに使用することを目的としています (たとえば、[[Wikipedia:ja:悪意あるメイド攻撃|悪意のある Maid 攻撃]] に対する保護) これらは、暗号化キーのロックを解除し、正しい OS が起動されたことを証明するために使用できます。 |
||
− | 鍵を設定: |
||
+ | [https://trustedcomputinggroup.org/resource/pc-client-specific-platform-firmware-profile-specification/ TCG PC クライアント固有プラットフォームファームウェアプロファイル仕様] では、使用中のレジスタが定義されており、[https://uapi-group.org/specifications/specs/linux_tpm_pcr_registry/ Linux TPM PCR レジストリ] は、これらを使用して Linux システムコンポーネントを割り当てます。 |
||
− | {{hc|~/.simple-tpm-pk11/config| |
||
− | key my.key |
||
− | }} |
||
+ | レジスタは次のとおりです: |
||
− | SSH を設定して適切な PKCS11 プロバイダを使用する: |
||
+ | : |
||
+ | {| class="wikitable" |
||
− | {{hc|~/.ssh/config| |
||
+ | |- |
||
− | Host * |
||
+ | ! scope="col"| PCR |
||
− | PKCS11Provider /usr/lib/libsimple-tpm-pk11.so |
||
+ | ! scope="col"| 使用 |
||
− | }} |
||
+ | ! scope="col"| ノート |
||
+ | |- |
||
+ | |PCR0 |
||
+ | |コアシステムファームウェアの実行可能コード (別名ファームウェア) |
||
+ | |UEFIをアップグレードすると変更される可能性があります |
||
+ | |- |
||
+ | |PCR1 |
||
+ | |コアシステムファームウェア データ (別名 UEFI 設定) |
||
+ | | |
||
+ | |- |
||
+ | |PCR2 |
||
+ | |拡張またはプラグイン可能な実行可能コード |
||
+ | | |
||
+ | |- |
||
+ | |PCR3 |
||
+ | |拡張またはプラグイン可能なファームウェアデータ |
||
+ | |ブートデバイス選択 UEFI ブートフェーズ中に設定 |
||
+ | |- |
||
+ | |PCR4 |
||
+ | |ブートマネージャーコードとブート試行 |
||
+ | |ブートマネージャーとファームウェアがブートしようとしたデバイスを測定します。 |
||
+ | |- |
||
+ | |PCR5 |
||
+ | |ブートマネージャーの設定とデータ |
||
+ | |ブートローダーの設定を測定できます。GPT パーティションテーブルが含まれます |
||
+ | |- |
||
+ | |PCR6 |
||
+ | |S4 および S5 の電源状態イベントから再開 |
||
+ | | |
||
+ | |- |
||
+ | |PCR7 |
||
+ | |セキュアブート状態 |
||
+ | |PK/KEK/db の完全な内容と、各ブートアプリケーションの検証に使用される特定の証明書が含まれます。 [https://superuser.com/questions/1640985/how-to-enable-bitlocker-when-booting-windows-10-from-a-non-microsoft-boot-manage] |
||
+ | |- |
||
+ | |PCR8<sup>1</sup> |
||
+ | |カーネルコマンドラインのハッシュ |
||
+ | |[https://lists.gnu.org/archive/html/grub-devel/2017-07/msg00003.html grub] それと [https://github.com/systemd/systemd/pull/2587 systemd-boot] によってサポートされています |
||
+ | |- |
||
+ | |PCR9<sup>1</sup> |
||
+ | |initrd および EFI ロードオプションのハッシュ |
||
+ | |Linux は、initrd および EFI ロードオプション、つまりカーネルコマンドラインオプションを測定します。 |
||
+ | |- |
||
+ | |PCR10<sup>1</sup> |
||
+ | |将来の使用のために予約されています |
||
+ | | |
||
+ | |- |
||
+ | |PCR11<sup>1</sup> |
||
+ | |[[ユニファイドカーネルイメージ]]のハッシュ |
||
+ | |{{man|7|systemd-stub}} を参照してください。 |
||
+ | |- |
||
+ | |PCR12<sup>1</sup> |
||
+ | |オーバーライドされたカーネルコマンドライン、資格情報 |
||
+ | |{{man|7|systemd-stub}} を参照してください。 |
||
+ | |- |
||
+ | |PCR13<sup>1</sup> |
||
+ | |システム拡張機能 |
||
+ | |{{man|7|systemd-stub}} を参照してください。 |
||
+ | |- |
||
+ | |PCR14<sup>1</sup> |
||
+ | |shim の MokList、MokListX、および MokSBState。 |
||
+ | |[https://github.com/rhboot/shim/blob/main/README.tpm] |
||
+ | |- |
||
+ | |PCR15<sup>1</sup> |
||
+ | | |
||
+ | |未使用 |
||
+ | |- |
||
+ | |PCR16<sup>1</sup> |
||
+ | |デバッグ |
||
+ | |いつでも使用およびリセットできます。公式ファームウェアのリリースには含まれていない可能性があります。 |
||
+ | |- |
||
+ | |PCR23 |
||
+ | |アプリケーションのサポート |
||
+ | |OS はこの PCR を設定およびリセットできます。 |
||
+ | |} |
||
+ | |||
+ | # ユースケースは OS によって定義されており、さまざまな Linux ディストリビューションと Windows デバイス間で異なる場合があります。 |
||
+ | |||
+ | Windows では、BitLocker は独自の目的で PCR8-11 (レガシー) または PCR11-14 (UEFI) を使用します。 |
||
+ | tianocore のドキュメント [https://github.com/tianocore-docs/edk2-TrustedBootChain/blob/main/4_Other_Trusted_Boot_Chains.md] |
||
+ | |||
+ | {{Pkg|tpm2-totp}} は、オブザーバーと専用の信頼できるデバイスを使用してこのチェックを容易にします。 |
||
+ | |||
+ | 現在の PCR 値は、{{man|1|systemd-analyze}} で一覧表示できます: |
||
+ | $ systemd-analyze pcrs |
||
− | これで PKCS11 プロバイダで鍵を生成することができます: |
||
+ | または、{{Pkg|tpm2-tools}} の {{man|1|tpm2_pcrread}} を使用します: |
||
− | $ ssh-keygen -D /usr/lib/libsimple-tpm-pk11.so |
||
+ | # tpm2_pcrread |
||
− | {{Note|上記の方法では複数の鍵を生成・使用することはできません。}} |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
+ | === TPM2 LUKS2 のロック解除でパスワードを要求される === |
||
− | === tcsd.service が起動しない === |
||
+ | TPM2 ハードウェアモジュールに登録された鍵で luks2 デバイスのロックを自動的に解除する [[Trusted Platform Module# LUKS による保存データの暗号化|上記の指示]] に従ったにもかかわらず、initramfs のブートステージでパスワードを入力するプロンプトが表示される場合。特定の TPM2 モジュールを扱うカーネルモジュール ({{ic|1= systemd-cryptenroll --tpm2-device=list}} でその名前を取得できます) を [[カーネルモジュール#モジュールの早期ロード|早期ロード]] する必要があるかもしれません。 |
||
− | パーミッションの問題が原因で {{ic|tcsd.service}} サービスが起動できないのかもしれません [https://bugs.launchpad.net/ubuntu/+source/trousers/+bug/963587/comments/3]。以下のコマンドで解決できる可能性があります: |
||
+ | == 参照 == |
||
− | # chown tss:tss /dev/tpm* |
||
− | # chown -R tss:tss /var/lib/tpm |
||
+ | * [[Gentoo:Trusted Platform Module]] |
||
− | ==参照== |
||
+ | * TPM-JS テストツール:: [https://github.com/google/tpm-js source] - [https://google.github.io/tpm-js/ live web version]. |
||
− | * [[wikipedia:ja:Trusted_Platform_Module|TPM on Wikipedia]] |
||
− | * [https://lwn.net/Articles/674751/ Protecting systems with the TPM] |
||
− | * [https://www.thinkwiki.org/wiki/Embedded_Security_Subsystem Embedded Security Subsystem on Thinkwiki] |
||
− | * [http://www.cs.unh.edu/~it666/reading_list/Hardware/tpm_fundamentals.pdf TPM Fundamentals (PDF)] |
2024年4月24日 (水) 20:26時点における最新版
Trusted Platform Module (TPM) は安全な暗号プロセッサの国際規格です。これは暗号鍵をデバイスに統合することによりハードウェアを保護する専用のマイクロプロセッサです。
実際には TPMはセキュアブート、キーストレージ、乱数生成など様々なセキュリティアプリケーションで使うことができます。
TPM が使えるのは TPM ハードウェアに対応しているデバイスだけです。あなたのハードウェアが TPM をサポートしているのに認識されない場合、BIOS の設定で TPM を有効にする必要があります。
目次
バージョン
TPM 仕様には 2.0 と 1.2 という 2 つの非常に異なるものがあり、これらも異なるソフトウェアスタックを使用します。この記事では TPM 2.0 についてのみ説明します。古い TPM 1.2 については、/1.2 を参照してください。
TPM 2.0 では、/dev/tpm0
による直接アクセスが可能である。(一度に1クライアント)、/dev/tpmrm0
経由のカーネル管理アクセス、tpm2-abrmd リソースマネージャーデーモンによる管理アクセスが可能です。systemd プロジェクトメンバーによると、tpm2-abrmd の使用はもはや推奨されていません。ユーザ空間ツールには Intel の tpm2-tools と IBM の ibm-tssAUR の2つの選択肢があります。
TPM 2.0 には UEFI ブートが必要です。BIOS またはレガシーブートシステムは TPM 1.2 のみを使用できます。
一部の TPM チップは、ファームウェアアップグレードを通じて 2.0 と 1.2 の間で切り替えることができます (限られた回数のみ実行可能)
使い方
日常のアプリケーションで TPM 2.0 サービスを設定および利用する方法を学習するための多くの有益なリソースが、コミュニティ から入手できます。
サポートの確認
TPM 2.0 チップは、2016 年 7 月 28 日以降、Windows 10 を実行することが認定されたコンピューターの要件となっています。[1] Linux はバージョン 3.20 以降 TPM 2.0 をサポートしています [2] 他の手順は、デフォルトの Arch インストールで有効になります。
特定のソフトウェアを使用せずに TPM 2.0 がセットアップされているかどうかを確認する 2 つの方法:
- ログを確認します。たとえば、root として
journalctl -k --grep=tpm
を実行します。 /sys/class/tpm/tpm0/device/description
[3] または/sys/class/tpm/tpm0/tpm_version_major
の値を読み取ります。
LUKS による保存データの暗号化
TPM を使用して LUKS ボリュームのロックを解除するには、2 つの方法があります。Clevis または systemd-cryptenroll を使用できます。
どちらの方法を使用しても、TPM に保存されているキーを使用して、起動時に自動的に、または後で手動で、暗号化されたボリュームのロックを解除できます。この目的で TPM を使用すると、ファームウェアが変更されていない、セキュアブート が無効になっていないなど、特定の条件が満たされない限り、ドライブのロックが解除されなくなります (PCR レジスタへのアクセス を参照)
systemd-cryptenroll
systemd-cryptenroll#Trusted Platform Module を参照してください。
SSH
TPM でシールされた SSH キーには、次の 2 つのオプションがあります:
- ssh-tpm-agent — TPM でサポートされたキーを使用する ssh-agent 互換エージェント。
- tpm2-pkcs11 — Trusted Platform Module 2.0 ハードウェア用の PKCS#11 インターフェイス。
- https://github.com/tpm2-software/tpm2-pkcs11 || tpm2-pkcs11
- 参照 SSH 設定 それと SSH 認証に TPM を使用する (2020-01)
GnuPG
GnuPG はバージョン 2.3 以降、互換性のあるキーの TPM への移動をサポートしています。手順については、GnuPG 2.3 での TPM の使用 を参照してください。
TPM 2.0 のその他の使用例
- セキュアブート + TPM 2 の設定 (2018-06, Debian)
- Using the TPM - It's Not Rocket Science (Anymore) - Johannes Holland & Peter Huewe (2020-11、Youtube): tpm2-tss-engine を使用した OpenSSL の例
PCR レジスタへのアクセス
Platform Configuration Registers (PCR) には、いつでも読み取ることができるハッシュが含まれていますが、以前のハッシュ値に依存する拡張操作を介してのみ書き込むことができるため、一種のブロックチェーンが形成されます。これらは、ブート間のプラットフォームのハードウェアおよびソフトウェアの整合性チェックに使用することを目的としています (たとえば、悪意のある Maid 攻撃 に対する保護) これらは、暗号化キーのロックを解除し、正しい OS が起動されたことを証明するために使用できます。
TCG PC クライアント固有プラットフォームファームウェアプロファイル仕様 では、使用中のレジスタが定義されており、Linux TPM PCR レジストリ は、これらを使用して Linux システムコンポーネントを割り当てます。
レジスタは次のとおりです:
PCR | 使用 | ノート |
---|---|---|
PCR0 | コアシステムファームウェアの実行可能コード (別名ファームウェア) | UEFIをアップグレードすると変更される可能性があります |
PCR1 | コアシステムファームウェア データ (別名 UEFI 設定) | |
PCR2 | 拡張またはプラグイン可能な実行可能コード | |
PCR3 | 拡張またはプラグイン可能なファームウェアデータ | ブートデバイス選択 UEFI ブートフェーズ中に設定 |
PCR4 | ブートマネージャーコードとブート試行 | ブートマネージャーとファームウェアがブートしようとしたデバイスを測定します。 |
PCR5 | ブートマネージャーの設定とデータ | ブートローダーの設定を測定できます。GPT パーティションテーブルが含まれます |
PCR6 | S4 および S5 の電源状態イベントから再開 | |
PCR7 | セキュアブート状態 | PK/KEK/db の完全な内容と、各ブートアプリケーションの検証に使用される特定の証明書が含まれます。 [4] |
PCR81 | カーネルコマンドラインのハッシュ | grub それと systemd-boot によってサポートされています |
PCR91 | initrd および EFI ロードオプションのハッシュ | Linux は、initrd および EFI ロードオプション、つまりカーネルコマンドラインオプションを測定します。 |
PCR101 | 将来の使用のために予約されています | |
PCR111 | ユニファイドカーネルイメージのハッシュ | systemd-stub(7) を参照してください。 |
PCR121 | オーバーライドされたカーネルコマンドライン、資格情報 | systemd-stub(7) を参照してください。 |
PCR131 | システム拡張機能 | systemd-stub(7) を参照してください。 |
PCR141 | shim の MokList、MokListX、および MokSBState。 | [5] |
PCR151 | 未使用 | |
PCR161 | デバッグ | いつでも使用およびリセットできます。公式ファームウェアのリリースには含まれていない可能性があります。 |
PCR23 | アプリケーションのサポート | OS はこの PCR を設定およびリセットできます。 |
- ユースケースは OS によって定義されており、さまざまな Linux ディストリビューションと Windows デバイス間で異なる場合があります。
Windows では、BitLocker は独自の目的で PCR8-11 (レガシー) または PCR11-14 (UEFI) を使用します。 tianocore のドキュメント [6]
tpm2-totp は、オブザーバーと専用の信頼できるデバイスを使用してこのチェックを容易にします。
現在の PCR 値は、systemd-analyze(1) で一覧表示できます:
$ systemd-analyze pcrs
または、tpm2-tools の tpm2_pcrread(1) を使用します:
# tpm2_pcrread
トラブルシューティング
TPM2 LUKS2 のロック解除でパスワードを要求される
TPM2 ハードウェアモジュールに登録された鍵で luks2 デバイスのロックを自動的に解除する 上記の指示 に従ったにもかかわらず、initramfs のブートステージでパスワードを入力するプロンプトが表示される場合。特定の TPM2 モジュールを扱うカーネルモジュール (systemd-cryptenroll --tpm2-device=list
でその名前を取得できます) を 早期ロード する必要があるかもしれません。
参照
- Gentoo:Trusted Platform Module
- TPM-JS テストツール:: source - live web version.