「Trusted Platform Module」の版間の差分
(→TPM 2.0 の使用: 情報を更新) |
Kusanaginoturugi (トーク | 投稿記録) (→PCR レジスタへのアクセス: ユニファイドカーネルイメージに変更) |
||
(他の1人の利用者による、間の5版が非表示) | |||
2行目: | 2行目: | ||
[[Category:ハードウェア]] |
[[Category:ハードウェア]] |
||
[[en:Trusted Platform Module]] |
[[en:Trusted Platform Module]] |
||
+ | [[pl:Trusted Platform Module]] |
||
+ | {{Related articles start}} |
||
+ | {{Related|Rng-tools}} |
||
+ | {{Related|自己暗号化ドライブ}} |
||
+ | {{Related|スマートカード}} |
||
+ | {{Related|Trusted Platform Module/1.2}} |
||
+ | {{Related articles end}} |
||
Trusted Platform Module (TPM) は安全な暗号プロセッサの国際規格です。これは暗号鍵をデバイスに統合することによりハードウェアを保護する専用のマイクロプロセッサです。 |
Trusted Platform Module (TPM) は安全な暗号プロセッサの国際規格です。これは暗号鍵をデバイスに統合することによりハードウェアを保護する専用のマイクロプロセッサです。 |
||
10行目: | 17行目: | ||
== バージョン == |
== バージョン == |
||
− | TPM |
+ | TPM 仕様には 2.0 と 1.2 という 2 つの非常に異なるものがあり、これらも異なるソフトウェアスタックを使用します。この記事では TPM 2.0 についてのみ説明します。古い TPM 1.2 については、[[Trusted Platform Module/1.2|/1.2]] を参照してください。 |
+ | 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 1.2 は IBM の "TrouSerS" TSS (TCG ソフトウェアスタック) を使用しており、{{AUR|trousers}} (''tcsd'') と {{AUR|tpm-tools}} (ユーザースペース) としてパッケージ化されている。すべてのソフトウェアは、''tcsd'' デーモンを介して TPM にアクセスする。 |
||
+ | TPM 2.0 には [[UEFI]] ブートが必要です。BIOS またはレガシーブートシステムは TPM 1.2 のみを使用できます。 |
||
− | * TPM 2.0 では、{{ic|/dev/tpm0}} を介した直接アクセス (一度に 1 クライアント)、{{Pkg|tpm2-abrmd}} リソースマネージャデーモンを介したマネージドアクセス、または {{ic|/dev/tpmrm0}} を介したカーネルマネージドアクセスが可能です。ユーザースペースツールには Intel の {{Pkg|tpm2-tools}} と IBM の {{AUR|ibm-tss}} の2種類があります。 |
||
+ | 一部の TPM チップは、ファームウェアアップグレードを通じて 2.0 と 1.2 の間で切り替えることができます (限られた回数のみ実行可能) |
||
− | TPM 2.0 は [[UEFI]] ブートを必要とします。BIOS やレガシーブートシステムは TPM 1.2 しか使えません。 |
||
− | |||
− | TPM チップの中には、ファームウェアのアップグレードによって 1.2 と 2.0 を切り替えられるものがあります(回数に限りがあります)。 |
||
== 使い方 == |
== 使い方 == |
||
68行目: | 73行目: | ||
* [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 の例 |
* [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 レジスタへのアクセス == |
||
− | == Using TPM 1.2 == |
||
− | === ドライバー === |
||
+ | Platform Configuration Registers (PCR) には、いつでも読み取ることができるハッシュが含まれていますが、以前のハッシュ値に依存する拡張操作を介してのみ書き込むことができるため、一種のブロックチェーンが形成されます。これらは、ブート間のプラットフォームのハードウェアおよびソフトウェアの整合性チェックに使用することを目的としています (たとえば、[[Wikipedia:ja:悪意あるメイド攻撃|悪意のある Maid 攻撃]] に対する保護) これらは、暗号化キーのロックを解除し、正しい OS が起動されたことを証明するために使用できます。 |
||
− | TPM ドライバーは新しいカーネルならネイティブで含まれていますが、ロードする必要があります: |
||
+ | [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 システムコンポーネントを割り当てます。 |
||
− | # modprobe tpm |
||
+ | レジスタは次のとおりです: |
||
− | さらに、使用しているチップセットにあわせて、以下のモジュールのどれかをロードしてください: |
||
+ | : |
||
+ | {| class="wikitable" |
||
− | # modprobe tpm_{atmel,bios,infineon,nsc,tis,crb} |
||
+ | |- |
||
+ | ! scope="col"| PCR |
||
+ | ! 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) を使用します。 |
||
− | TPM は {{ic|tcsd}} によって管理します。Trusted Computing リソースを管理するユーザー空間のデーモンで、(TSS の仕様によれば) TPM デバイスドライバーの唯一の表玄関です。{{ic|tcsd}} は AUR パッケージの {{AUR|trousers}} に含まれています。IBM によって開発・リリースされており、{{ic|/etc/tcsd.conf}} で設定することが可能です。 |
||
+ | tianocore のドキュメント [https://github.com/tianocore-docs/edk2-TrustedBootChain/blob/main/4_Other_Trusted_Boot_Chains.md] |
||
+ | {{Pkg|tpm2-totp}} は、オブザーバーと専用の信頼できるデバイスを使用してこのチェックを容易にします。 |
||
− | tcsd を起動して出力を監視するには、次を実行: |
||
+ | 現在の PCR 値は、{{man|1|systemd-analyze}} で一覧表示できます: |
||
− | # tcsd -f |
||
+ | $ systemd-analyze pcrs |
||
− | もしくは {{ic|tcsd.service}} を起動・有効化してください。 |
||
+ | または、{{Pkg|tpm2-tools}} の {{man|1|tpm2_pcrread}} を使用します: |
||
− | {{ic|tcsd}} を実行したら、{{AUR|tpm-tools}} もインストールすると良いでしょう。TPM を管理するためのコマンドラインツールが多数入っています。 |
||
+ | # tpm2_pcrread |
||
− | 他の便利なツール: |
||
− | |||
− | * {{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_version |
||
− | |||
− | そしてセルフテストを実行: |
||
− | |||
− | $ tpm_selftest -l info |
||
− | TPM Test Results: 00000000 ... |
||
− | tpm_selftest succeeded |
||
− | |||
− | === SSH 鍵のセキュア化 === |
||
− | |||
− | TPM を使って鍵を保護する方法は複数存在しますが、以下では {{aur|simple-tpm-pk11-git}} を使用する簡単な方法を説明します。 |
||
− | |||
− | まず、新しいディレクトリを作成して鍵を生成してください: |
||
− | |||
− | $ mkdir ~/.simple-tpm-pk11 |
||
− | $ stpm-keygen -o ~/.simple-tpm-pk11/my.key |
||
− | |||
− | 鍵を設定: |
||
− | |||
− | {{hc|~/.simple-tpm-pk11/config| |
||
− | key my.key |
||
− | }} |
||
− | |||
− | SSH を設定して適切な PKCS11 プロバイダを使用する: |
||
− | |||
− | {{hc|~/.ssh/config| |
||
− | Host * |
||
− | PKCS11Provider /usr/lib/libsimple-tpm-pk11.so |
||
− | }} |
||
− | |||
− | これで PKCS11 プロバイダで鍵を生成することができます: |
||
− | |||
− | $ ssh-keygen -D /usr/lib/libsimple-tpm-pk11.so |
||
− | |||
− | {{Note|上記の方法では複数の鍵を生成・使用することはできません。}} |
||
== トラブルシューティング == |
== トラブルシューティング == |
||
+ | === TPM2 LUKS2 のロック解除でパスワードを要求される === |
||
− | === tcsd.service が起動しない === |
||
− | |||
− | パーミッションの問題が原因で {{ic|tcsd.service}} サービスが起動できないのかもしれません [https://bugs.launchpad.net/ubuntu/+source/trousers/+bug/963587/comments/3]。以下のコマンドで解決できる可能性があります: |
||
+ | TPM2 ハードウェアモジュールに登録された鍵で luks2 デバイスのロックを自動的に解除する [[Trusted Platform Module# LUKS による保存データの暗号化|上記の指示]] に従ったにもかかわらず、initramfs のブートステージでパスワードを入力するプロンプトが表示される場合。特定の TPM2 モジュールを扱うカーネルモジュール ({{ic|1= systemd-cryptenroll --tpm2-device=list}} でその名前を取得できます) を [[カーネルモジュール#モジュールの早期ロード|早期ロード]] する必要があるかもしれません。 |
||
− | # chown tss:tss /dev/tpm* |
||
− | # chown -R tss:tss /var/lib/tpm |
||
− | ==参照== |
+ | == 参照 == |
+ | * [[Gentoo:Trusted Platform Module]] |
||
− | * [https://lwn.net/Articles/674751/ Protecting systems with the TPM] |
||
+ | * TPM-JS テストツール:: [https://github.com/google/tpm-js source] - [https://google.github.io/tpm-js/ live web version]. |
||
− | * [https://www.thinkwiki.org/wiki/Embedded_Security_Subsystem Embedded Security Subsystem on Thinkwiki] |
||
− | * [https://www.cs.unh.edu/~it666/reading_list/Hardware/tpm_fundamentals.pdf TPM Fundamentals (PDF)] |
||
− | * [https://www.lorier.net/docs/tpm Using a TPM] |
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.