Профиль 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.