車両のバインドされたファイル暗号化を使用する

ここでは、車両ベースのバインディング暗号化シード機能を有効にする方法について説明します。

概要

車両バインディング シード機能の主な目的は、車載インフォテインメント(IVI)システムのデータを車両から取り出せないようにすることで、ユーザー プライバシーの保護を強化することです。これは、ストレージ暗号鍵を他の電子制御ユニット(ECU)にバインドすることで実現します。IVI を取り外して別の車両に配置する(またはテストベンチで実行する)ような場合、IVI のユーザーデータは復号できません。

ファイルの暗号鍵をバインドするため、Vold は車両固有のシードと鍵暗号鍵の導出を組み合わせて、一意の鍵が車両に物理的にバインドされるようにします。シードはバイト配列 STORAGE_ENCRYPTION_BINDING_SEED であり、新しい Vehicle Hardware Abstraction Layer(VHAL)プロパティとして OEM によって公開されています。このプロパティの権限は、特権システム デーモンのみがクエリできるように制限されています。

アーキテクチャ図

次の図は、車両バインド統合のアーキテクチャを示しています。

図 1. 車両バインドのアーキテクチャ

車両ベースのバインディングを有効にする

車両のストレージ暗号化のバインディングは、明示的に有効にする必要があります。また、出荷時設定のリセットを行わずにオンとオフを切り替えることはできません。つまり、無線(OTA)アップデートではデバイスのワイプも行わなければ、この機能を有効にすることはできません。OEM はデバイスを出荷時の設定にリセットする場合も、アップグレード時にこの機能を有効にできます(訪問サポート時など)。

この機能は、ベンダー提供の車両 HAL で STORAGE_ENCRYPTION_BINDING_SEED プロパティをサポートすることで有効になります。このプロパティは、長さ 16 バイトのバイト文字列を保持し、IVI とは別に ECU で永続化される必要があります。このプロパティは、最初に Android Automotive OS(AAOS)によって設定され、暗号論的に安全な乱数ジェネレータ(CSRNG)を使用して生成されます。AAOS は次の起動時にこのプロパティを読み取ります。

VHAL が STORAGE_ENCRYPTION_BINDING_SEED の値を保存する方法はベンダー固有です。シードの保護に関する一般的な推奨事項は次のとおりです。

  1. (推奨)シードは物理的に十分に保護された車両の ECU によって保存される必要があります。そうしない場合、IVI と ECU の両方が車両から容易に引き出されます。
  2. (推奨)IVI と ECU は相互に認証を行ってシードを交換し、ECU からのシードのなりすましリクエストを防止する必要があります。
  3. (推奨)CAN バス スニッフィングから保護するため、シードは安全なチャネルを使用して送信される必要があります。

さらに、以下を追加して、必ず late-fs でベンダーの init.target.rcmount_all --lateになるようにします。

# feed vehicle binding seed to vold
exec_start vold_seed_binding

車両 HAL は、hal now ではなく early_hal で開始する必要があります。/data パーティションはまだマウントされていないため、どの persist.* システム プロパティも early-hal 内でアクセスできません。

車両ベースのバインディングを構成する

ECU シードが一致しない場合、デバイスは再起動してリカバリに入り、/data パーティションを消去または再試行するようユーザーに求めます。

プロンプトとワイプデータの動作は以下のように builtins.cpp で変更できます。

  1. prompt_and_wipe_datawipe_data に変更します。デバイスがワイプされ、プロンプトを表示せずに再起動します。
  2. プロンプト メッセージは recovery.cpp に含まれています。

    図 2. プロンプト メッセージ

車両ベースのバインディングをテストする

モックテスト

モックテストは packages/services/Car/cpp/security/vehicle_binding_util/tests で提供されています。

このモックテストを実行するには:

attest libvehicle_binding_util_test

統合テスト

Atest によるテストは packages/services/Car/cpp/security/vehicle_binding_util/tests で提供されています。

この統合テストを実行するには:

atest vehicle_binding_integration_test