Профиль SDV для DICE

Профиль SDV для механизма компоновки идентификаторов устройств (DICE) является расширением профиля Android для DICE . В SDV виртуальная машина использует две параллельные цепочки DICE:

  • Безопасная всемирная цепочка DICE
  • цепочка Android SDV DICE

Эти поля из дескриптора конфигурации профиля Android для DICE имеют отношение к каждой из этих цепочек:

Имя Ключ Тип Описание
Название компонента -70002 tstr Рекомендуется для каждого уровня CDI . Название компонента однозначно идентифицирует этап среди всех цепочек оборудования DICE, на которых работают виртуальные машины Android SDV на транспортном средстве или платформе транспортного средства.
версия безопасности -70005 uint Требуется на каждом этапе CDI. Позволяет определить политику DICE , которая предотвращает присоединение небезопасных удаленных версий виртуальных машин к защищенной сети SDV.
Имя экземпляра компонента -70007 tstr Требуется на первом уровне CDI, специфичном для виртуальной машины. Например, после гипервизора, для цепочки DICE Android SDV. Имя экземпляра SDV. Если несколько уровней CDI содержат имя экземпляра компонента, каждый уровень должен иметь одинаковое значение.

Безопасная всемирная цепочка DICE

Цепочка DICE Secure World — это та же самая цепочка, которую сервер удаленного предоставления ключей (RKP) Android получает от устройств Android. generateCertificateRequestV2() компонента HAL IRemotelyProvisionedComponent предоставляет Android доступ к этой цепочке DICE.

В таблице представлен пример цепочки DICE в безопасном мире:

Этап загрузки Слой DICE CDI Выдан
Основной загрузчик CDI[0] UDS
Вторичный загрузчик CDI[1] Основной загрузчик
ботинок TEE CDI[2] Вторичный загрузчик
Ботинки KeyMint TA CDI[3] (Лист) ТИ

Для внедрения доверенного приложения KeyMint (TA) используйте один из следующих вариантов:

  • Для всех виртуальных машин SDV необходимо использовать один экземпляр KeyMint: ОБЯЗАТЕЛЬНО нужно указать один CDI для всех виртуальных машин.

или,

  • Для каждой виртуальной машины SDV требуется один экземпляр KeyMint: необходимо указать различное значение CDI для каждой виртуальной машины. Индивидуальные значения CDI ДОЛЖНЫ содержать имя экземпляра компонента, совпадающее с именем экземпляра компонента виртуальной машины.

цепочка Android SDV DICE

Сертификационная цепочка Android SDV DICE подтверждает работоспособность программного обеспечения, работающего на пути загрузки, ведущем через гипервизор к высокоуровневой операционной системе Android (HLOS), работающей на виртуальных машинах SDV.

В таблице представлен пример цепочки SDV DICE для Android:

Этап загрузки Слой 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 нет, а есть только программа-загрузчик Android, которая загружает виртуальную машину внутри гипервизора) подписывает сертификат CDI Android HLOS и охватывает Android HLOS. Например, он охватывает весь код, который загрузчик Android проверяет в соответствии с Android Verified Boot (AVB) .

Сертификат Android HLOS CDI должен содержать специфические для SDV значения операционной системы Android, которые позволяют снизить уязвимости безопасности. Например, потенциальную утечку секретной информации путем блокировки виртуальных машин с известными уязвимостями в защищенной сети SDV. Большинство таких значений обеспечивает проверка AVB.

Они также передаются KeyMint в TEE, где сертификат подписывается конечным CDI цепочки SecureWorld DICE и передается в Android через DeviceInfo для включения таких функций, как аттестация ключа и идентификатора в ядре Android.

Поля ввода кода и хэша кода сертификата

Дайджест VBMeta (вывод, выполняемый загрузчиком Android для проверки AVB) охватывает программное обеспечение Android HLOS. Следовательно, он служит входными android-dice-input-values ​​для получения секретов CDI и помещается в поле dice-cert-fields сертификата CDI.

Рекомендуемый алгоритм хеширования для AVB — SHA-256, который приводит к получению дайджеста VBMeta длиной 32 байта. В отличие от Open Profile для DICE, Android Profile для DICE позволяет использовать алгоритмы хеширования android-dice-hash-algos с 32-байтовыми android-dice-input-values ​​для потока DICE, а также размещать то же 32-байтовое значение в качестве codeHash в сертификате DICE.

Дескриптор конфигурации: поля в профиле Android для DICE

Помимо описанного для всех уровней CDI, к полям дескриптора конфигурации из профиля Android для DICE относятся следующие особенности:

Имя Ключ Тип Описание
Версия компонента -70003 int Версия операционной системы, полученная из AVB version-info-avb . Также совпадает с android.os.Build.VERSION.release .
версия безопасности -70005 uint Уровень исправлений безопасности system раздела в формате YYYYMMDD .
RKP VM маркер -70006 null Маркер RKP VM предотвращает выдачу сертификатов для цепочки Android SDV DICE системой Remote Key Provisioning.

Маркер RKP VM должен присутствовать в первом сертификате CDI цепочки DICE Android SDV, который не совпадает с цепочкой DICE Secure World. Он также НЕ должен присутствовать ни в каких последующих сертификатах CDI, чтобы сервер RKP rkp-avf-support не рассматривал цепочку DICE как исходящую от виртуальной машины RKP.

Описание конфигурации: новые поля

Дескриптор конфигурации сертификата Android HLOS CDI должен содержать значения, специфичные для SDV, выходящие за рамки значений, описанных в профиле Android для DICE. Профиль SDV для DICE резервирует для этой цели диапазон значений ключей [-71000, -71999] . Вы можете добавить поля, специфичные для реализации, используя значения ключей, выходящие за пределы зарезервированного диапазона. Специфические для SDV значения:

Имя Ключ Тип Описание
Проверено состояние загрузки -71000 tstr green , yellow или orange .
создать отпечаток пальца -71001 tstr Удобочитаемая строка, однозначно идентифицирующая эту сборку, аналогичная ro.build.fingerprint . Она определяется в Android CDD, 3.2.2 Build Parameters, cdd-3-2-2 . VBMeta хранит это как свойство с именем com.android.build.system.fingerprint
уровень исправления безопасности system_ext -71002 uint Уровень исправлений безопасности раздела system_ext в формате YYYYMMDD .
уровень исправлений безопасности product -71003 uint Уровень исправлений безопасности раздела product в формате YYYYMMDD .
уровень исправлений безопасности vendor -71004 uint Уровень исправлений безопасности раздела vendor в формате YYYYMMDD .
уровень исправления безопасности boot -71005 uint Уровень исправлений безопасности boot раздела (содержащего ядро ​​Linux) в формате YYYYMMDD .
режим загрузки SDV -71006 tstr locked или unlocked . Для получения дополнительной информации см. раздел «Состояние сети и выделение ресурсов» .

Выбор входного значения режима в Android HLOS CDI

В параметре android-dice-mode сертификата Android HLOS CDI используется следующее определение:

AVB разблокирован AVB заблокирован
Режим загрузки SDV разблокирован Отлаживать Отлаживать
Режим загрузки SDV заблокирован. Не настроено (неверно) Нормальный

Функция вывода ключа

Библиотека android-dice-kdf , которая вычисляет пару открытого и закрытого ключей из секрета CDI_Attest для Android HLOS CDI, должна быть в формате HKDF с хеш-функцией SHA512.