Режим загрузки SDV определяет, как агент обнаружения служб SDV в виртуальной машине SDV ведет себя при попытке подключения к другим агентам обнаружения служб (работающим в других виртуальных машинах SDV) для установления защищенной сети. Это аналогично существующей концепции состояния устройства из Android Verified Boot.
Режим загрузки SDV используется при создании или обновлении хранилища доверенных сертификатов виртуальной машины транспортного средства (VVM Trust Store, также называемого vvmtruststore ).
Поведение защищенной сети SDV
В зависимости от значений, полученных при загрузке, сеть обнаружения служб находится в одном из следующих состояний: Normal , Warning или Fatal .
В серийных автомобилях, поставляемых клиентам, защищенная сеть SDV Secure Mesh должна находиться в Normal состоянии. Для переключения из Normal состояния в Warning требуется вмешательство диагностической системы. В производственной среде (например, не в среде разработки или отладки) Warning состояние возникает только во время инициализации.
Fatal — это фундаментальный сбой, аналогичный ошибке проверки подписи образа system_ext в загрузчике Android. Если SDV Secure Mesh переходит из состояния Normal в Fatal исключительно из-за обновления по беспроводной сети (OTA), обновление считается некорректным, и mesh возвращается к исходной версии Normal .
В следующих разделах штаты описаны более подробно.
Нормальный
- С точки зрения обнаружения служб, загрузка системы является
SECURE. - Service Discovery устанавливает соединение только с узлами, которые загрузились безопасным способом. Безопасная загрузка узла означает, что защищенная сеть SDV также защищена.
Предупреждение
- Загрузка системы могла быть нарушена, поскольку некоторые проверки отключены.
- Функция обнаружения сервисов подключается только к узлам, которые имеют одинаковый набор отключенных проверок, гарантируя, что все узлы в защищенной сети SDV Secure Mesh обладают идентичными свойствами безопасности.
- Успешность загрузки через удаленный сервер невозможно проверить из-за локальных сбоев или отключенных функций.
- Вне контекста разработки это имеет следующие последствия:
- Данные пользователей не должны быть доступны. То есть, они не должны передаваться или подвергаться воздействию в процессе обмена данными через защищенную сеть SDV Secure Mesh.
- В этом состоянии сети должны быть доступны только те сервисы, которые необходимы для обеспечения потоков предоставления ресурсов.
фатальная
- Критическая ошибка на этапе загрузки системы.
- По меньшей мере одна фундаментальная ошибка или сбой препятствует установлению сети агентом обнаружения служб. Локальные службы не могут взаимодействовать с удаленными службами.
- С точки зрения обнаружения служб, загрузка системы
UNSECURE.
Режим загрузки SDV
Режим загрузки SDV может иметь два значения: LOCKED и UNLOCKED . Для установления сети обнаружения служб значение LOCKED указывает на то, что ошибки проверки являются критическими, а UNLOCKED — что они таковыми не являются.
| Состояние | Режим загрузки SDV | |
|---|---|---|
UNLOCKED | LOCKED | |
| Локальное хранилище доверенных сертификатов VVM пусто | Предупреждение | фатальная |
| Отсутствует локальная цепочка DICE | фатальная | фатальная |
| Сбой локальной проверки цепочки DICE | Предупреждение | фатальная |
| Соответствие локального режима SDV и AVB | См. таблицу соответствия режимов Local SDV и AVB. | |
| Сравнение значений в режиме удаленного устройства | См. таблицу в разделе «Сравнение значений в режиме удаленного устройства». | |
Ошибка сопоставления удаленного uds_pubs | Предупреждение | фатальная |
| Сбой удаленной проверки цепочки DICE (с использованием политик DICE ) | Предупреждение | фатальная |
| Сбой рукопожатия при удаленной аутентификации | фатальная | фатальная |
Соответствие локального режима SDV и режима AVB
В следующей таблице показано, как режим AVB и режим загрузки SDV влияют на работу защищенной сети SDV . Цвета соответствуют цветам, указанным в разделе интеграции с Android в документации AVB.
| Режим AVB x Режим загрузки SDV | Режим загрузки SDV | ||
|---|---|---|---|
UNLOCKED | LOCKED | ||
AVB LOCKED | Зеленый | Предупреждение | Нормальный |
| Желтый | фатальная | фатальная | |
AVB UNLOCKED | Апельсин | Предупреждение | фатальная |
значение режима устройства
В цепочке DICE каждый сертификат CDI имеет значение режима . Это значение описывает состояние безопасности соответствующего уровня на основе входных данных конфигурации. Для выражения состояния безопасности всего программного обеспечения на устройстве спецификация SDV определяет значение режима устройства. Это значение выводится из значения режима всех этапов CDI в цепочках DICE, относящихся к данной виртуальной машине SDV (то есть Android HLOS и Secure World), и использует следующее перечисление:
enum DeviceMode {
NotConfigured = 0,
Recovery = 1,
Debug = 2,
Normal = 3,
}
Алгоритм
Алгоритм вычисления значения режима работы устройства выглядит следующим образом:
- Укажите
deviceModeкакDeviceMode::Normal. - Укажите
diceChainListкак список цепочек DICE, относящихся к виртуальной машине SDV. - Для каждой
diceChainвdiceChainList:- Укажите
cdiListкак список сертификатов CDI вdiceChain: - Для каждого
cdiCertвcdiList:- Укажите
cdiDeviceModeкакDeviceMode, соответствующийcdiCert.mode. - Установите
deviceModeравнымmin(deviceMode, cdiDeviceMode).
- Укажите
- Укажите
- Возвращает
deviceMode.
Сравнение значений в режиме удаленного устройства
Агент обнаружения служб подключается только к другим агентам, имеющим то же значение режима устройства .
Значение параметра «Режим устройства» гарантирует, что в сети не может быть элементов с различными свойствами безопасности. В результате сеть имеет единый уровень безопасности для всех своих элементов.
| Значение режима устройства | Удаленный | ||||
|---|---|---|---|---|---|
| Не настроено | Отлаживать | Восстановление | Нормальный | ||
| Местный | Не настроено | фатальная | фатальная | фатальная | фатальная |
| Отлаживать | фатальная | Предупреждение | фатальная | фатальная | |
| Восстановление | фатальная | фатальная | Предупреждение | фатальная | |
| Нормальный | фатальная | фатальная | фатальная | Нормальный | |
Процесс заводской настройки
Это процесс инициализации на сборочной линии автомобиля, где предполагается недоступность инфраструктуры открытых ключей. Этот процесс зависит от 32-байтового значения, хранящегося в однократно программируемой (OTP) памяти, называемой Vehicle VM (VVM) Factory Trust или vvmfactorytrust . Если это значение установлено, оно передается ядру в качестве параметра с именем androidboot.sdv.vvmfactorytrust .
Все виртуальные машины в блоке управления должны иметь одинаковый режим загрузки SDV и уровень доверия VVM Factory Trust.
Начальное состояние
Все ЭБУ изначально находятся в режиме загрузки SDV в UNLOCKED , с пустыми полями VVM Factory Trust и Vehicle VM Trust Store , за исключением любых uds_certs присутствующих в vvmtruststore . На рисунке 1 показан пример, где три виртуальные машины SDV (VM-A, VM-B и VM-C) распределены по двум отдельным ЭБУ (ECU-0 и ECU-1):
Рисунок 1. Заводская настройка, начальное состояние.
Шаг 1: Запустите sdv_provisioning_tool
Запустите все виртуальные машины со всех блоков управления.
На каждой виртуальной машине запустите sdv_provisioning_tool .
- Инструмент взаимодействует с локальным агентом Service Discovery и ожидает от него сигнала о завершении создания защищенной сети SDV Secure Mesh и записи агентом списка открытых ключей UDS в файл
/vvmtruststore/uds_pubs. - В этом случае инструмент получает хеш только что записанного файла
/vvmtruststore/uds_pubsи выводит его.
Рисунок 2. Заводская настройка, шаг 1.
Шаг 2: Запись доверия к фабрике VVM
На одном виртуальном модуле каждого блока управления:
- Запишите хеш
/vvmtruststore/uds_pubs, полученный с помощьюsdv_provisioning_toolна предыдущем шаге, в VVM Factory Trust. Способ записи зависит от производителя оборудования или поставщика и выходит за рамки данной спецификации.
Рисунок 3. Заводская настройка, шаг 2.
Шаг 3: Перезагрузка в заблокированном режиме загрузки SDV.
Перезагрузите все виртуальные машины на всех ЭБУ в режиме загрузки SDV в LOCKED режиме.
Агент обнаружения служб доверяет виртуальным машинам в блоках управления (ECU) с открытыми ключами UDS, указанными в uds_pubs поскольку хеш этого файла совпадает с хешем VVM Factory Trust.
Поскольку блоки управления двигателем (ECU) были настроены одновременно, они навсегда связаны между собой и с точки зрения проверки цепочки DICE их можно рассматривать как единое целое.
Рисунок 4. Заводская настройка, шаг 3.
Процесс замены деталей
Это процедура инициализации в авторизованном автосервисе или автомастерской, где неисправный блок управления двигателем (ЭБУ) необходимо заменить новым, не прошедшим инициализацию.
Этот процесс зависит от сертификатов UDS, выданных либо непосредственно корневым центром сертификации, указанным в vvmconfig , либо косвенно, через цепочку промежуточных центров сертификации.
Начальное состояние
Все виртуальные машины уже настроены на заводе и работают в режиме загрузки SDV в LOCKED режиме.
На рисунке 5 показан пример неисправности блока управления двигателем (ECU-0), требующей замены:
Рисунок 5. Замена деталей, исходное состояние.
Шаг 1: Установите новый блок управления двигателем (ЭБУ).
Установите новый блок управления двигателем (ЭБУ), который находится в пустом, не запрограммированном состоянии.
На рисунке 6 показано, что при включении питания блока управления ECU-2 (заменяемого блока управления) существуют две непересекающиеся защищенные сети SDV: одна в состоянии Warning , а другая в Normal состоянии. Обе защищенные сети SDV являются неполными.
Рисунок 6. Замена деталей, шаг 1.
Шаг 2: Перезагрузка в разблокированном режиме загрузки SDV.
Перезагрузите все виртуальные машины всех ЭБУ в режиме загрузки SDV в UNLOCKED режиме.
На рисунке 7 виртуальные машины VM-B и VM-C присоединяются к завершенной сети Warning SDV Secure Mesh.
Рисунок 7. Замена деталей, шаг 2.
Шаг 3: Запустите sdv_provisioning_tool
На каждой виртуальной машине запустите sdv_provisioning_tool .
Инструмент взаимодействует с локальным агентом Service Discovery и ожидает от него сигнала о завершении создания защищенной сети SDV Secure Mesh и записи агентом списка открытых ключей UDS в файл /vvmtruststore/uds_pubs .
В этом случае инструмент получает хеш только что записанного файла /vvmtruststore/uds_pubs и выводит его, но этот хеш не используется в данном процессе.
Рисунок 8. Замена деталей, шаг 3.
Шаг 4: Установка сертификатов UDS
- Извлеките файл
/vvmtruststore/uds_pubsиз любой виртуальной машины SDV. Неважно, какой именно, поскольку он одинаков для всех виртуальных машин в одной и той же защищенной сети SDV. - Получите сертификаты подготовки для всех открытых ключей UDS, перечисленных в файле
/vvmtruststore/uds_pubs.- Этот этап обычно включает отправку извлеченных открытых ключей UDS (или файла
/vvmtruststore/uds_pubs) на удаленный сервер инициализации. Сервер либо получает существующие сертификаты, либо генерирует новые, сверяя полученные открытые ключи с базой данных известных открытых ключей UDS, созданной во время производства ЭБУ.
- Этот этап обычно включает отправку извлеченных открытых ключей UDS (или файла
- Запишите данные в каталог
/vvmtruststore/uds_certsдля каждой виртуальной машины SDV.
Рисунок 9. Замена деталей, шаг 4.
Шаг 5: Перезагрузка в заблокированном режиме загрузки SDV.
Перезагрузите все виртуальные машины в режиме загрузки SDV в LOCKED режиме.
Если настройка защищенной сети SDV не завершена, вернитесь к шагу 2 .
Рисунок 10. Замена деталей, шаг 5.