Trusted Platform Module

提供: ArchWiki
2024年1月14日 (日) 02:35時点におけるKgx (トーク | 投稿記録)による版 (→‎TPM 2.0 の使用: 情報を更新)
ナビゲーションに移動 検索に移動

Trusted Platform Module (TPM) は安全な暗号プロセッサの国際規格です。これは暗号鍵をデバイスに統合することによりハードウェアを保護する専用のマイクロプロセッサです。

実際には TPMはセキュアブート、キーストレージ、乱数生成など様々なセキュリティアプリケーションで使うことができます。

TPM が使えるのは TPM ハードウェアに対応しているデバイスだけです。あなたのハードウェアが TPM をサポートしているのに認識されない場合、BIOS の設定で TPM を有効にする必要があります。

バージョン

TPM の仕様には、大きく分けて 2 種類あります。1.2 と 2.0 があり、それぞれ異なるソフトウェアスタックを使用しています。

  • TPM 1.2 は IBM の "TrouSerS" TSS (TCG ソフトウェアスタック) を使用しており、trousersAUR (tcsd) と tpm-toolsAUR (ユーザースペース) としてパッケージ化されている。すべてのソフトウェアは、tcsd デーモンを介して TPM にアクセスする。
  • TPM 2.0 では、/dev/tpm0 を介した直接アクセス (一度に 1 クライアント)、tpm2-abrmd リソースマネージャデーモンを介したマネージドアクセス、または /dev/tpmrm0 を介したカーネルマネージドアクセスが可能です。ユーザースペースツールには Intel の tpm2-tools と IBM の ibm-tssAUR の2種類があります。

TPM 2.0 は UEFI ブートを必要とします。BIOS やレガシーブートシステムは TPM 1.2 しか使えません。

TPM チップの中には、ファームウェアのアップグレードによって 1.2 と 2.0 を切り替えられるものがあります(回数に限りがあります)。

使い方

日常のアプリケーションで 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 レジスタへのアクセス を参照)

警告: この方法をルートボリュームで使用すると、先に述べた一定の条件が満たされている限り、暗号化パスワードを入力することなく、コンピュータの起動時に 自動的にロックが解除される ことを意味します。
  • つまり、暗号化されたディスクだけが盗まれてもデータへのアクセスは保護されますが、PC全体が盗まれた場合保護されません。
  • なぜなら、たとえコンピュータの電源が長い間オフになっていたとしても(メモリが完全にクリアされていることを保証するために)、攻撃者は単に電源を入れ、TPMが自動的にキーをロードするのを待つことができるからです。これは、価値の高いターゲットにとっては懸念事項になります。

systemd-cryptenroll

systemd-cryptenroll#Trusted Platform Module を参照してください。

SSH

TPM でシールされた SSH キーには、次の 2 つのオプションがあります:

  • ssh-tpm-agent — TPM でサポートされたキーを使用する ssh-agent 互換エージェント。
https://github.com/Foxboron/ssh-tpm-agent || ssh-tpm-agent-gitAUR
参照 SSH キーを TPM 内に保存します: ssh-tpm-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 のその他の使用例

Using TPM 1.2

ドライバー

TPM ドライバーは新しいカーネルならネイティブで含まれていますが、ロードする必要があります:

# modprobe tpm

さらに、使用しているチップセットにあわせて、以下のモジュールのどれかをロードしてください:

# modprobe tpm_{atmel,bios,infineon,nsc,tis,crb}

使用方法

TPM は tcsd によって管理します。Trusted Computing リソースを管理するユーザー空間のデーモンで、(TSS の仕様によれば) TPM デバイスドライバーの唯一の表玄関です。tcsd は AUR パッケージの trousersAUR に含まれています。IBM によって開発・リリースされており、/etc/tcsd.conf で設定することが可能です。

tcsd を起動して出力を監視するには、次を実行:

# tcsd -f

もしくは tcsd.service を起動・有効化してください。

tcsd を実行したら、tpm-toolsAUR もインストールすると良いでしょう。TPM を管理するためのコマンドラインツールが多数入っています。

他の便利なツール:

  • tpmmanager — tpm-tools の Qt フロントエンド。
https://sourceforge.net/projects/tpmmanager || tpmmanagerAUR
  • openssl_tpm_engine — TSS API と対話する OpenSSL エンジン。
https://sourceforge.net/projects/trousers || openssl_tpm_engineAUR[リンク切れ: アーカイブ: aur-mirror]
  • tpm_keyring2 — TPM ベースの eCryptfs 鍵を管理するキーマネージャ。
https://sourceforge.net/projects/trousers || tpm_keyring2AUR[リンク切れ: アーカイブ: aur-mirror]
  • opencryptoki — Linux の PKCS#11 実装。IBM の暗号ハードウェアを使用するためのドライバーやライブラリ、テスト用のソフトウェアトークンが含まれています。
https://sourceforge.net/projects/opencryptoki || opencryptokiAUR

基本

まずは基本的なバージョン情報を確認してください:

$ tpm_version

そしてセルフテストを実行:

$ tpm_selftest -l info
 TPM Test Results: 00000000 ...
 tpm_selftest succeeded

SSH 鍵のセキュア化

TPM を使って鍵を保護する方法は複数存在しますが、以下では simple-tpm-pk11-gitAUR を使用する簡単な方法を説明します。

まず、新しいディレクトリを作成して鍵を生成してください:

$ mkdir ~/.simple-tpm-pk11
$ stpm-keygen -o ~/.simple-tpm-pk11/my.key

鍵を設定:

~/.simple-tpm-pk11/config
key my.key

SSH を設定して適切な PKCS11 プロバイダを使用する:

~/.ssh/config
Host *
    PKCS11Provider /usr/lib/libsimple-tpm-pk11.so

これで PKCS11 プロバイダで鍵を生成することができます:

$ ssh-keygen -D /usr/lib/libsimple-tpm-pk11.so
ノート: 上記の方法では複数の鍵を生成・使用することはできません。

トラブルシューティング

tcsd.service が起動しない

パーミッションの問題が原因で tcsd.service サービスが起動できないのかもしれません [4]。以下のコマンドで解決できる可能性があります:

# chown tss:tss /dev/tpm*
# chown -R tss:tss /var/lib/tpm

参照