DICE の SDV プロファイル

デバイス識別子構成エンジン(DICE)の SDV プロファイルは、DICE 向け Android プロファイルの拡張機能です。SDV では、VM は 2 つの並列 DICE チェーンを使用します。

  • Secure World DICE チェーン
  • Android SDV DICE チェーン

DICE の Android プロファイルの構成記述子の次のフィールドは、これらの各チェーンに関連しています。

名前 キー タイプ 説明
コンポーネント名 <0x0A -70002 tstr 各 CDI レイヤで推奨。コンポーネント名は、車両または車両プラットフォームで Android SDV VM を実行するハードウェアのすべての DICE チェーンの中で、ステージを一意に識別します。
セキュリティ バージョン -70005 uint 各 CDI ステージで必須。 安全でないリモート VM バージョンが SDV セキュア メッシュに参加できないようにする DICE ポリシーを定義できます。
コンポーネント インスタンス名 <0 -70007 tstr 最初の VM 固有の CDI レイヤで必須。たとえば、ハイパーバイザの後、Android SDV DICE チェーンの場合。SDV インスタンスの名前。複数の CDI レイヤにコンポーネント インスタンス名が含まれている場合、各レイヤの値は同じである必要があります。

Secure World DICE チェーン

セキュア ワールドの DICE チェーンは、Android のリモートキー プロビジョニング(RKP)サーバーが Android デバイスから受信するものと同じです。IRemotelyProvisionedComponent HAL の generateCertificateRequestV2() は、この DICE チェーンを Android に公開します。

次の表は、Secure World の DICE チェーンの例を示しています。

起動ステージ DICE CDI レイヤ 発行元
プライマリ ブートローダー CDI[0] UDS
セカンダリ ブートローダー CDI[1] プライマリ ブートローダー
TEE ブート CDI[2] セカンダリ ブートローダー
KeyMint TA の起動 CDI[3](リーフ) TEE

KeyMint の信頼できるアプリケーション(TA)を実装するには、次のいずれかのオプションを使用します。

  • すべての SDV VM で単一の KeyMint インスタンス: すべての VM で単一の CDI を指定しなければなりません。

または、

  • 各 SDV VM に 1 つの KeyMint インスタンス: 各 VM に異なる CDI 値を指定しなければなりません。個々の CDI 値には、VM のコンポーネント インスタンス名と一致するコンポーネント インスタンス名が含まれていなければなりません。

Android SDV DICE チェーン

Android SDV DICE チェーンは、ハイパーバイザを介して SDV VM で実行される Android ハイレベル オペレーティング システム(HLOS)につながるブートパスで実行されるソフトウェアを認証します。

この表は、Android SDV DICE チェーンの例を示しています。

起動ステージ DICE CDI レイヤ 発行元
プライマリ ブートローダー CDI[0] UDS
セカンダリ ブートローダー CDI[1] プライマリ ブートローダー
ハイパーバイザ CDI[2] セカンダリ ブートローダー
Android HLOS CDI[3](リーフ) (ハイパーバイザの Android ローダー)1

1 ハイパーバイザは、ゲストの Android ブートローダーをレイヤとして認証します。Android ブートローダーは Android HLOS を認証します。

Android HLOS CDI 証明書

Android ブートローダー(または、Android ブートローダーがなく、ハイパーバイザ内の VM を読み込む Android の「ローダー」プログラムのみがある場合はハイパーバイザ)は、Android HLOS CDI 証明書に署名し、Android HLOS をカバーします。たとえば、Android 確認付きブート(AVB)に従って Android ブートローダーが検証するすべてのコードを対象とします。

Android HLOS CDI 証明書には、セキュリティの脆弱性を軽減する Android OS の SDV 固有の値が含まれている必要があります。たとえば、既知の脆弱性を持つ VM を SDV Secure Mesh から禁止することで、潜在的なシークレット漏洩を軽減します。AVB 検証では、これらの値のほとんどが提供されます。

また、TEE の KeyMint にも渡されます。ここでは、SecureWorld DICE チェーンのリーフ CDI によって証明書が署名され、DeviceInfo で Android に渡されて、コア Android の鍵や ID の構成証明などの機能が有効になります。

code 入力フィールドと codeHash 証明書フィールド

VBMeta ダイジェスト(Android ブートローダーが AVB 検証のために実行する出力)は、Android HLOS のソフトウェアを対象としています。そのため、CDI シークレットを導出するための android-dice-input-values として機能し、CDI 証明書の dice-cert-fields フィールドに入ります。

AVB に推奨されるハッシュ アルゴリズムは SHA-256 で、これにより 32 バイト長の VBMeta ダイジェストが生成されます。DICE の Open Profile とは対照的に、DICE の Android Profile では、DICE フローに 32 バイト長の android-dice-input-values を使用し、DICE 証明書の codeHash として同じ 32 バイト長の値を配置することが android-dice-hash-algos されています。

構成記述子: DICE の Android プロファイルのフィールド

すべての CDI レイヤで説明されている内容に加えて、DICE の Android プロファイルの構成記述子フィールドには次の仕様が適用されます。

名前 キー タイプ 説明
コンポーネントのバージョン -70003 int AVB version-info-avb のシステム OS バージョン。android.os.Build.VERSION.release と同じです。
セキュリティ バージョン -70005 uint YYYYMMDD 形式の system パーティションのセキュリティ パッチレベル。
RKP VM マーカー -70006 null RKP VM マーカーは、リモートキー プロビジョニングが Android SDV DICE チェーンの証明書を発行することを防ぎます。

RKP VM マーカーは、セキュア ワールドの DICE チェーンと共通でない Android SDV DICE チェーンの最初の CDI 証明書に現れなければなりません。また、RKP サーバー rkp-avf-support が DICE チェーンを RKP VM からのものと見なすのを防ぐため、それ以降の CDI 証明書には現れてはなりません

構成記述子: 新しいフィールド

Android HLOS CDI 証明書の構成記述子には、DICE の Android プロファイルで説明されている値に加えて、SDV 固有の値が含まれていなければなりません。DICE の SDV プロファイルでは、この目的のためにキー値の範囲 [-71000, -71999] が予約されています。予約済みの範囲外のキー値を使用して、実装固有のフィールドを追加できます。SDV 固有の値は次のとおりです。

名前 キー タイプ 説明
確認付きブート状態 -71000 tstr greenyelloworange のいずれか。
ビルド フィンガープリント -71001 tstr このビルドを一意に識別する人が読める文字列(ro.build.fingerprint と同じ)。Android CDD の 3.2.2 ビルド パラメータ、cdd-3-2-2 で定義されています。VBMeta は、com.android.build.system.fingerprint という名前のプロパティとしてこれを保存します。
system_ext セキュリティ パッチレベル -71002 uint YYYYMMDD 形式の system_ext パーティションのセキュリティ パッチレベル。
product セキュリティ パッチレベル -71003 uint YYYYMMDD 形式の product パーティションのセキュリティ パッチレベル。
vendor セキュリティ パッチレベル -71004 uint YYYYMMDD 形式の vendor パーティションのセキュリティ パッチレベル。
boot セキュリティ パッチレベル -71005 uint YYYYMMDD 形式の boot パーティション(Linux カーネルを含む)のセキュリティ パッチ レベル。
SDV ブートモード -71006 tstr locked または unlocked。詳しくは、メッシュのステータスとプロビジョニングをご覧ください。

Android HLOS CDI のモード入力値の選択

Android HLOS CDI 証明書の android-dice-mode は、次の定義を使用します。

AVB UNLOCKED AVB LOCKED
SDV 起動モードがロック解除されている デバッグ デバッグ
SDV 起動モードがロックされています 未構成(無効) 標準

鍵導出関数

Android HLOS CDI の CDI_Attest シークレットから公開鍵と秘密鍵のペアを導出する android-dice-kdf は、ハッシュ関数として SHA512 を使用する HKDF でなければなりません。