web-dev-qa-db-ja.com

TrustZoneが主要なセキュリティ機能を提供するために必要な追加機能

ペーパー モバイルデバイスでの信頼できる実行:モバイルプラットフォームで得られるセキュリティプロパティ は、モバイルデバイスに必要な5つのセキュリティ機能について説明しています。

  1. 分離された実行
  2. 安全なストレージ
  3. リモート認証
  4. 安全なプロビジョニング
  5. 信頼できるパス

私が正しく理解している場合、TrustZoneのベアケーパビリティだけを利用してこれらの機能を提供するシステムを設計することはできません。

私の質問は:
これらのセキュリティ機能を提供するために(TrustZoneを使用するシステムで)必要な追加機能は何ですか?


私の現在の理解は次のとおりです(注意:@Gilles 指摘 のように、ここには多くの誤りがあります):

  • Secure Boot は必須です。
    つまり、起動時に、デバイスで実行する最初のコードを信頼する必要があります(たとえば、製造元がROMチップに焼き付け))。次に、各コードがそれが実行される前に、少なくとも制御が通常の世界に移されるまで検証されます。
  • Secure BootとTrustZoneを組み合わせれば、Isolated ExecutionTrusted Pathを提供するのに十分です。
  • 隔離された実行信頼されたパスを活用して、安全なストレージを提供できますユーザーのみが知っている秘密に基づいています。例:
    • セキュアな世界の信頼できるアプリは、ユーザーに秘密のパスワードを要求します。
    • アプリはパスワードから対称キーを取得し、パスワードをメモリから削除します。
    • アプリはキーを使用して、いくつかの秘密データ(または他のキー)を暗号化し、それをディスクに保存します。
    • アプリは、キーから(パスワードから派生した)キーをメモリから削除します。
    • その後、ユーザーがシークレットデータにアクセスする場合、信頼できるアプリはユーザーにパスワードの入力を求め、それを使用してキーを取得し、シークレットデータを復号化します。
  • Remote Attestation、およびこの特定のデバイスへのデータのシーリングに基づくSecure Storageを提供するために、信頼できる*安全な世界コードのみにデバイス固有のキーへのアクセスを許可する必要があります。例: Samsung Knoxのデバイス固有のハードウェアキー(DUHK) 。 (これは この答え でも説明されています。)
    * 'trusted'は、このコードがSecure Bootの後に実行されることを意味します。例: Knoxホワイトペーパー は、Samsung Knoxデバイスでは、「デバイスが未承認の状態で起動されたことがある」場合、DUHKにアクセスできなくなることを説明しています。
  • 最後に、Remote Attestationを利用して、Secure Provisioningを提供できます。例:
    • 安全な世界の信頼できるアプリは、非対称鍵ペアを生成します。
    • アプリは、公開鍵の署名を含むリモート証明書を作成します。
    • secure worldの信頼できるアプリにのみプロビジョニングされるデータを保持するリモートマシンに、アプリは公開鍵と一緒に証明された署名を送信します。
3
Oren Milman

厳密に言えば、TrustZone自体では何もできません。 TrustZone自体は、CPUコアの分離機能です。プロセス間の分離に別のレベルを追加します。ユーザー/カーネルまたはユーザー/カーネル/ハイパーバイザーに加えて、通常のユーザー、通常のカーネル、通常のハイパーバイザー、安全なユーザー、安全なカーネルがあります。ただし、通常のカーネルモード(またはハイパーバイザーが使用されている場合は通常のハイパーバイザーモード)はRAM全体にアクセスできるため、コードとデータを通常の世界の手の届かないところに置く場所はありません。 TrustZoneで何か便利なことを行うには、TZを備えたコア(すべてのCortex-A CPUの場合です)だけでなく、CPU上のTrustZone対応のメモリコントローラー(一部のメーカーでは省略しています)も必要です。 TZ対応メモリコントローラーは、メモリ領域をファイアウォール処理して、CPUが通常モードのときに領域へのアクセスをブロックできます。さらに、DMAコントローラもTrustZone対応である必要があります。そうでない場合、通常の世界では、周辺機器を活用することでメモリ保護を回避できる場合があります(たとえば、セットアップDMA =セキュアワールドが使用するメモリとフラッシュコントローラーの間で、フラッシュからコンテンツを読み取ります)。

CPUにTZ認識メモリコントローラーが含まれている場合、それは隔離された実行をサポートします。ただし、他の機能がないと、分離された実行環境は、分離がセットアップされたときに存在していたコードのみを実行し、再起動後は何も保持できないため、これだけでは使用が制限されます。

セキュアブートでは、ブートプロセスの各ステージが次のステージの署名を検証してから、セキュアワールドでの実行を許可します。ROMを制御する人は誰でも、セキュアワールドで実行するものを制御できます。すべてのCortex-Aプロセッサは、ROMから起動します(実際の読み取り専用メモリで、フラッシュやEEPROMではありません)。

あなたが安全な環境を持っているので、これはまだ限られた用途です…何をするために?セキュア環境が持つ唯一の特権がRAM内の特定の領域へのアクセスである場合、それは何の役にも立ちません。

さらに、TrustZoneを利用するCPUには、安全な世界にのみアクセスできる秘密鍵があります。 を参照してくださいARM TrustZoneテクノロジは、コードハッシュの下での秘密キーのシーリングをサポートしていますか? および ハードウェアのセキュアキー 。セキュアブート(コードの整合性のため)と分離実行1つのブートストラップ特権(秘密鍵へのアクセス)に加えて、セキュアな世界で実行されるソフトウェアは、リモート認証や限定された形式のセキュアストレージなどの機能を実装できます。

セキュアな世界では、データを暗号化および認証し、通常の世界に暗号化されたBLOBの保存を任せることで、データを永続的に保存できます。これにより、データの機密性と信頼性は保証されますが、データの整合性は保証されません。通常の世界でもデータを削除したり、ロールバックしたりできます。ロールバックを防ぐために、安全な世界には少なくとも少量のロールバック保護されたストレージが必要です。実際には、モバイルデバイスでは、これはフラッシュコントローラの協力を得て行われます。フラッシュコントローラは、再生保護されたメモリブロック(RPMB)と呼ばれるセキュアワールドにパーティションを割り当て、 RPMBプロトコル を使用してデバイスの製造時に確立される共有キーを使用して、メインCPUのセキュアワールドと通信します。安全なストレージは、デバイスのユーザーをまったく関与させる必要はありません。安全な世界にはすでに秘密鍵があり、弱いものからパスワードを導出する必要はありません(通常のパスワードは、強化を適用しても弱い)ありふれた128ビットの秘密鍵よりも)。

この文脈での「信頼できるパス」とは、CPUと周辺機器の間の分離されたチャネルを指します。信頼できるパスは、TrustZoneだけでなく、セキュアワールドに従うセキュアモードにすることができるペリフェラルもCPU内でサポートする必要があり、その間のバスは通信を分離する必要があります。モバイルデバイスで最も導入されている種類の信頼できるパスは、DRMをビデオレンダリングに適用するためのディスプレイサブシステムです。ユーザー入力と表示に信頼できるパスを提供することは技術的に難しく、広く展開されていません。

安全なプロビジョニングにはリモート認証は必要ありません。サーバーは、特定のデバイスのみが復号化できるキーで暗号化されたデータを送信でき、デバイスから認証を受信する必要はありません。それがデバイスの公開鍵を検出する方法であるか、または証明書に追加のコンテンツが必要なため(たとえば、どのソフトウェアを知っているか)、証明書を受け取ることを希望する可能性があります実行中のバージョン)。

あなたが除外した大きなことは、これらの機能のすべてを誰が管理するのですか?究極のコントロールは、ROMがロードしても構わないというコードに誰が署名するかを決定する人に属します。通常、これはチーの製造元であり、デバイスの製造元からのコードのみを許可します。携帯電話およびタブレットでは、エンドユーザーは通常、安全な世界にアクセスできません。