Trusty TEE

Trusty は、Android 用の Trusted Execution Environment(TEE)を実現するセキュアなオペレーティング システム(OS)です。Trusty OS は、Android OS と同じプロセッサ上で稼働しますが、ハードウェア レベルとソフトウェア レベルの両方で、システム内の残りの部分から分離されます。Trusty と Android は並列稼働します。Trusty は、デバイスのメイン プロセッサとメモリのすべてにアクセスできますが、完全に分離されています。分離されているため、悪意のあるアプリをユーザーがインストールした場合や Android 内に脆弱性があった場合でも、Trusty は保護されます。

Trusty は ARM プロセッサと Intel プロセッサに対応しています。ARM システムの場合、Trusty は、ARM の Trustzone™ を使用してメイン プロセッサを仮想化し、セキュアな Trusted Execution Environment を構築します。Intel x86 プラットフォームの場合も、Intel のバーチャライゼーション テクノロジーを活用することで同様のサポートを提供します。

図 1: Trusty の概要図

Trusty は以下の要素で構成されています。

  • Little Kernel をベースとする小さな OS カーネル
  • セキュア環境と Android との間でデータを転送するための Linux カーネル ドライバ
  • カーネル ドライバ経由で高信頼アプリ(セキュアなタスクやサービス)と通信する Android ユーザー空間ライブラリ

注: Trusty および Trusty API は変更される場合があります。Trusty API の詳細については、API リファレンスをご覧ください。

Trusty を選ぶ理由

これまでの他の TEE オペレーティング システムの場合、サードパーティ ベンダーからバイナリ blob として提供されるか、内部で開発していました。内部で TEE システムを開発する方法や、サードパーティから TEE のライセンス供与を受ける方法の場合、システム オン チップ(SoC)ベンダーや OEM にとって高コストになることがあります。信頼性の低いサードパーティ システムと金銭的なコストが組み合わさることで、Android のエコシステムが不安定になります。Trusty は、Trusted Execution Environment を実現する信頼性に優れた無料のオープンソース システムとしてパートナーに提供されています。Trusty は、クローズドソース システムでは不可能なレベルの透明性を実現します。

Android はさまざまな TEE 実装をサポートしており、必ずしも Trusty を使用する必要はありません。ただし、各種の TEE OS は、高信頼アプリをデプロイする方法がそれぞれ異なります。このように細分化した状況は、高信頼アプリのデベロッパーが多様な Android デバイス上でアプリが正常に機能するように取り組む際、悩みの種となる可能性があります。Trusty を標準規格として利用することで、アプリ デベロッパーたちは、各種 TEE システムの細分化に悩まされることなく、アプリを簡単に作成してデプロイできるようになります。Trusty TEE を使用することで、デベロッパーやパートナーは、透明性を確保し、コラボレーションを促進し、コード インスペクションやデバッグを容易に行うことができます。高信頼アプリのデベロッパーたちは、共通のツールや API に収斂していくことで、セキュリティ脆弱性が入り込むリスクを軽減できます。また、一度アプリを開発した後は、追加の開発を行うことなく、さまざまなデバイスタイプを横断して再利用できるようになります。

アプリとサービス

Trusty アプリは、バイナリ ファイル(実行ファイルとリソース ファイル)と、バイナリ マニフェスト、暗号署名を 1 つにまとめたものとして定義されます。Trusty アプリは実行時、Trusty カーネルの下、分離独立したプロセスとして非特権モードで実行されます。各プロセスは、TEE プロセッサのメモリ管理ユニット機能を利用して、それぞれ独自の仮想メモリ サンドボックス内で実行されます。Trusty が従う実際のプロセスはハードウェアのビルドによって異なりますが、たとえば、プロセスのスケジュールは、カーネルが、セキュアなタイマーチックに基づく優先度ベースのラウンドロビン スケジューラを使用して設定します。Trusty アプリはすべて同じ優先度になります。

図 2: Trusty アプリケーションの概要。

サードパーティ製の Trusty アプリ

現在のところ、Trusty アプリはすべて、単一のパーティによって開発され、Trusty カーネル イメージを使用してパッケージ化されます。イメージ全体に対して署名が行われ、ブート時にブートローダーによって検証されます。現在のところ、サードパーティによる Trusty アプリの開発はサポートされていません。Trusty は新しいアプリの開発をサポートしていますが、その際には細心の注意が必要です。新しいアプリごとに、システムのトラステッド コンピューティング ベース(TCB)の領域が増えます。高信頼アプリは、デバイスの機密データにアクセスし、それを使用して演算やデータ変換を行うことができます。TEE 内で稼働する新しいアプリを開発することで、イノベーションの可能性が広がります。ただし、TEE の定義により、このようなアプリを配布するには、一定の信頼情報を添付する必要があります。この信頼情報は通常、デジタル署名の形式をとります。デジタル署名は、アプリが稼働する製品のユーザーが信頼するエンティティによって提供されます。

用途と例

TEE は、モバイル デバイスの分野で急速に標準になりつつあります。ユーザーの日常生活はますますモバイル デバイスに依存するようになっており、セキュリティに対するニーズが高まっています。TEE を搭載したモバイル デバイスは TEE を搭載していないデバイスよりも安全です。

TEE 実装を備えたデバイスの場合、メイン プロセッサは通常、「信頼できない」プロセッサと見なされ、RAM の特定の領域や、ハードウェア レジスタ、1 回だけ書き込み可能な fuse(デバイス固有の暗号鍵などの機密データをメーカーが格納する領域)にアクセスすることはできません。メイン プロセッサ上で稼働するソフトウェアは、機密データを必要とするすべての操作を TEE プロセッサに委任します。

Android エコシステム内で最も広く知られている例は、保護対象コンテンツ向けの DRM フレームワークです。TEE プロセッサ上で稼働するソフトウェアは、保護対象コンテンツの復号に必要なデバイス固有鍵にアクセスできます。他方、メイン プロセッサが認識できるのは暗号化されたコンテンツだけに限られるため、ソフトウェア ベースの攻撃に対して高度なセキュリティ機能と保護機能が実現します。

TEE の用途としてはほかにも、モバイル決済や、セキュア バンキング、多要素認証、デバイス リセット保護、リプレイ保護機能付きの永続ストレージ、PIN / フィンガープリントのセキュアな処理、マルウェア検出などがあります。