疑問:TPM 2.0 って何?
TPM (Trusted Platform Module)はデバイス上で多数のセキュリティ機能を提供するセキュリティチップです。 暗号化エンジン、暗号鍵生成器、乱数生成器、データを保存するための不揮発性メモリなどを備えており、パスワードや暗号鍵、セキュリティ証明書などを生成することができます。
セキュリティ対策として、HDD上のデータを暗号化する場合、暗号鍵をHDD上ではなくTPM上に保存することによって、 セキュリティ性能を上げられます。これは、HDD内のデータを不正に見られた際、暗号鍵の保存を別にすることで復号されるリスクを低減させることができること、TPMがシステム解析の難しさ(耐ダンパー性)を持つことにより、外部からの暗号鍵の取得や不正アクセスに対して、より強いセキュリティにすることができるためです。
TPM 2.0の前のバージョンにTPM 1.2がありますが、鍵を管理するための階層が1.2 だと1階層になっていたのに対し、2.0では3階層になっており、楕円曲線暗号が使用できるようになっているなど、2.0は1.2と比較して、より強いセキュリティ性能を発揮するようになっています。
近年では、Windows 11のシステム要件に含まれていることもあり、TPM 2.0は以前にも増して注目を集めています。
ハードウェア要件
- KR260 Robotics Starter KitまたはKV260 Vision AI Starter Kit
- KR260用電源
- CAT5eイーサネットケーブル
- USB-A to micro-B ケーブル
- 16GBマイクロSDカード
図1. KR260にペリフェラルを接続した図
KriaでTPM 2.0を動かしてみよう!
ここでは、IBM TSSからKria K26 SOMのTPM 2.0を動作させ、ブラウザでTPMの状態などを表示させるデモを行います。
KR260もしくはKV260で動作するUbuntuのSDカードを持っていることを前提とします。
IBM TSSのセットアップに必要なパッケージをインストールします。
$ sudo apt-get install -y libssl-dev gawk
IBM TSSをダウンロードしてビルドします。
$ mkdir -p sandbox/ibmtss $ cd sandbox/ibmtss $ wget https://sourceforge.net/projects/ibmtpm20tss/files/ibmtss1.6.0.tar.gz $ tar xvfz ibmtss1.6.0.tar.gz $ cd utils $ sudo make -f makefiletpmc
TPMチップは/dev/tpm0にて認識されるので、/dev/tpm0 を使用可能な状態にしておきます。
$ export TPM_INTERFACE_TYPE=dev $ sudo chmod a+rwx /dev/tpm0
TPM 2.0のプロパティを表示させます。
$ ./getcapability -cap 6
図2. TPM 2.0のプロパティの表示
PCR (Platform Configuration Register) はプログラムコードやデータなど、ある一時点のメモリの状態を保存するレジスタで、次の更新式で更新されます(|| は文字列の結合)。 PCR[N] = ハッシュ関数( PCR[N] || 入力文字列)
更なる動作確認としてPCR[10]の更新を行います。 (-halg で sha1, sha256, sha384 のいずれかのハッシュ関数を指定可能、デフォルトはsha256)
$ ./pcrextend -ha 10 -ic ddddd $ ./pcrread -ha 10
図3. PCR[10]の更新
デモが動作するよう、ライブラリを/usr/libにインストールします。
$ sudo cp libtss.so /usr/lib/ $ sudo ln -s /usr/lib/libtss.so /usr/lib/libtss.so.0 $ sudo ln -s /usr/lib/libtss.so /usr/lib/libtss.so.0.1
必要なライブラリをインストールします。
$ sudo apt-get update $ sudo apt-get install apache2 -y $ sudo apt-get install php libapache2-mod-php -y
デモ環境のビルドを行います。
$ cd ../demo $ sudo mkdir /var/www/html/tpm2 $ sudo make -f makefile_dev
ホスト名 (IPアドレス) を確認します。 一番左にホスト名またはIPアドレスが表示される
$ hostname -I
次のURLをWebブラウザに貼り付けて移動します。 (
結果が表示されます。
図4. Webブラウザの表示結果1
図5. Webブラウザの表示結2
感想
今回はTPM2.0の動作確認を行いました。動作させる方法が思ったよりも単純だったので、詰まることなく進められました。セキュリティを意識した場合、TPM2.0は、これからも広がっていくと考えられます。今回は行いませんでしたが、機会があれば、実際にアタックをかけてみて、性能を検証してみたいと思います。 それでは、また次回お会いしましょう!See you next time!
参考にしたWebページ
- Windows 11で必須になった「TPM 2.0」って何?TPMの役割や確認方法を紹介https://pc.watch.impress.co.jp/docs/topic/- ture/1334277.html
- TPM2.0とは?Windows11で必須となった理由と搭載の確認・有効化の方法https://persol-tech-s.co.jp/hatalabo/it_engineer/- .html
- LinuxでTPM2.0を使うhttps://qiita.com/mune10/items/cf45a296193bb78f5c5b
- IBM TSS Githubページhttps://github.com/kgoldman/ibmtss

ブログ
AMDによる設計およびデバッグ手法のブログ、およびアヴネット社員によるAMD製品を用いた開発チャレンジのブログです。

Kria
Kria SOMはアダプティブSoCデバイスを搭載しており、スマートカメラやエンベデッドビジョンなどに最適です。
AMD製品に関連する技術ブログ
- エンジニアブログの再開およびテクニカルウェビナーのご案内
- 初心者のためのPython & Numpy入門
- KR260でIntel RealSenseを動かしてみた!
- Vitis HLSで足し算IPを作ってみた!(プログラミング編)
- KD240でモータ制御してみた!
- KR260でデジタル信号処理してみた! (3)
- KR260でデジタル信号処理してみた! (2)
- KR260でデジタル信号処理してみた! (1)
- KR260でロボットアームを動かしてみた! (2)
- KR260でロボットアームを動かしてみた! (1)
- KR260でROS2を使ってキャリブレーション&マーカー検出してみた!
- KR260とPynqでAIカメラを動かしてみた!
- KR260でROS2 Perception Stack Applicationを動かしてみた!【2】
- KR260でROS2 Perception Stack Applicationを動かしてみた!
- Kria SOMでTPM2.0を動かしてみた!
- VivadoでKR260のハードウェアデザインを作って動かしてみた!
- ROS2 Multi-Node Communications via TSNを動かしてみた!
- AIBOX-ReIDを動かしてみた!