Trusted Platform Module
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 レジスタへのアクセス を参照)
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 の例
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 フロントエンド。
- openssl_tpm_engine — TSS API と対話する OpenSSL エンジン。
- tpm_keyring2 — TPM ベースの eCryptfs 鍵を管理するキーマネージャ。
- https://sourceforge.net/projects/trousers || tpm_keyring2AUR[リンク切れ: アーカイブ: aur-mirror]
- opencryptoki — Linux の PKCS#11 実装。IBM の暗号ハードウェアを使用するためのドライバーやライブラリ、テスト用のソフトウェアトークンが含まれています。
基本
まずは基本的なバージョン情報を確認してください:
$ 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