TCGが提供するTPM2.0の基本技術

  0. TPMを始める前に

  1. TPM1.2とTPM2.0の違いについて
  2. 信頼の基点(Root of Trust)の重要性
  3. TPM2.0チップの基本構成
  4. 階層
  5. 鍵の種類
  6. 復号/暗号化セッションの重要性
  7. TPM2.0を使用したソフトウェア開発
  8. Q&A


7.TPM2.0を使用したソフトウェア開発

以下は、LinuxなどでTPM2.0を使用した、一般的なソフトウェア構成の概略ブロック図になります。詳細はTCGが提供している仕様書を参照してください。

  

*上記図はTCGで作成された仕様で、すべてのTSSがこの仕様通りの実装をしているわけではありません。


TPMデバイスドライバ

TPM2.0についてTPMデバイスドライバFIFOまたはCRB(Comamand Response Buffer)のいずれかのインターフェースになります。FIFOインターフェースはTPM1.2で採用され、データの送受信にアドレスと、ハンドシェークおよびステータスオペレーションのためアドレスを使用するFisrt In First Outのバイト送信インターフェースです。CRBはTPM2.0で新たに採用されたインターフェースで、物理バスに依存せず、コマンドとレスポンスを伝えるために共有されたメモリバッファを使用するのが特長です。実装する場合は、このどちらかのインターフェースを実装する必要があります。また、TPMを実装する場合は、このドライバ以外にSPIやI2Cのバスドライバも必要な場合があります。

TSS (TCG Software Stack)

ミドルウェアの部分にあるSAPI、ESAI、FAPIが、TCGでは一般的にTSS(TSG Software Stack)と呼ばれています。TSSには、この3つのAPI以外にもTPM2.0のリソースを管理するResource Managerなどが仕様に記載されています。
一般的な組込み機器ではSAPI(正式名称はSystem API)やESAPI(Enhabced System API)が使用されることが多いようです。これらのAPIに対応したアプリケーションソフトウェアを作成するには、高度なTPM2.0の仕様を理解する必要があります。特にSAPIに対応したアプリケーションでは、基本的にTPM2.0のすべての機能にアクセスすることができます。

暗号ライブラリ

TPMを使用する場合によく誤解されている一つが、TPMチップ自身ですべての暗号機能を実現していると思われていることです。TPM2.0はTPM1.2よりもさらに多くの暗号機能、例えばECC(楕円曲線暗号)やAESなどを搭載していますが、暗号のアクセラレータではありません。これはTPM仕様を検討する段階でコストとより強力な保護機能を検討した結果、暗号機能の一部にソフトウェアでの暗号を使用することになりました。

アプリケーション

TPMを使用したアプリケーションは、一般的にはデータや鍵などの暗号化/復号がありますが、その他にも署名や認証など多くのことができます。しかし、どの機能をどのように使用して暗号機能を実現するかについて、十分に設計開発前に検討する必要があります。例えば、端末側にTPM2.0を搭載していてハッシュ計算にSHA256を使用して、サーバと通信する場合、サーバ側ではSHA1のみのサポートの可能性もあります。同様のことがRSAやECCなどにも言えます。