На этой странице описывается, как включить начальные функции шифрования привязки автомобиля.
Обзор
Основная цель функции начального значения привязки транспортного средства — дополнительная защита конфиденциальности пользователя путем защиты данных в автомобильной информационно-развлекательной системе (IVI) от удаления из автомобиля. Это делается путем привязки ключей шифрования хранилища к какому-либо другому электронному блоку управления (ЭБУ), так что если IVI снимается и помещается в другой автомобиль (или запускается на испытательном стенде), зашифрованные пользовательские данные на IVI не могут быть расшифрованы.
Чтобы связать ключи шифрования файлов, Волд смешивает начальное значение для конкретного автомобиля с производным ключом шифрования ключа, поэтому ключи уникальны и физически привязаны к транспортному средству. Начальное значение представляет собой массив байтов, представленный OEM-производителем как новое свойство уровня абстракции аппаратного обеспечения транспортного средства (VHAL), STORAGE_ENCRYPTION_BINDING_SEED . Разрешения этого свойства ограничены таким образом, что его могут запрашивать только привилегированные системные демоны.
Схема архитектуры
Этот рисунок иллюстрирует архитектуру интеграции с привязкой к транспортному средству:

Рисунок 1. Архитектура, привязанная к транспортному средству.
Включить привязку на основе транспортного средства
Привязка шифрования хранилища к автомобилю должна быть явно включена и не может быть включена или выключена без выполнения сброса настроек. Это означает, что обновление по беспроводной сети (OTA) не может включить эту функцию без очистки устройства. OEM-производитель может включить эту функцию после обновления, если он также осуществит сброс настроек устройства до заводских. Например, при посещении сервиса.
Эта функция включается путем поддержки свойства STORAGE_ENCRYPTION_BINDING_SEED в HAL, предоставляемом поставщиком транспортного средства. Это свойство содержит байтовую строку длиной 16 байт и, как ожидается, будет сохраняться в ECU отдельно от IVI. Свойство изначально задается автомобильной ОС Android (AAOS), которая генерирует его с помощью криптографически безопасного генератора случайных чисел (CSRNG). Затем AAOS считывает это свойство при последующих загрузках.
То, как VHAL хранит значение STORAGE_ENCRYPTION_BINDING_SEED , зависит от поставщика. У нас есть общие рекомендации по защите семян:
- ( Рекомендуется ) Семена хранятся в ЭБУ автомобиля, который физически хорошо защищен. Если нет, то и IVI, и ECU можно легко снять с автомобиля.
- ( Рекомендуется ) IVI и ECU должны взаимно аутентифицироваться для обмена начальным значением, чтобы предотвратить поддельные запросы на начальное значение от ECU.
- ( Рекомендуется ) Seed следует передавать по защищенному каналу для защиты от перехвата CAN-шины.
Кроме того, добавьте следующее, чтобы гарантировать, что поставщик init.target.rc будет работать с late-fs перед mount_all --late :
# feed vehicle binding seed to vold
exec_start vold_seed_binding HAL транспортного средства следует запускать в early_hal вместо hal now . К любому системному свойству persist.* невозможно получить доступ в early-hal поскольку раздел /data еще не смонтирован.
Настройка привязки на основе транспортного средства
Если начальное значение ECU не совпадает, устройство перезагружается в режиме восстановления и предлагает пользователю стереть раздел /data или повторить попытку.
Поведение запроса и очистки данных можно изменить в файлеbuiltins.cpp :
- Измените
prompt_and_wipe_dataнаwipe_data. Устройство очищает данные, а затем перезагружается без подсказки. - Сообщение с подсказкой содержится в файле Recovery.cpp .

Рисунок 2. Подсказка.
Тестовая привязка на базе автомобиля
Пробное тестирование
Пробный тест представлен в packages/services/Car/cpp/security/vehicle_binding_util/tests .
Чтобы запустить этот пробный тест:
attest libvehicle_binding_util_test
Интеграционное тестирование
Тестовый тест доступен в packages/services/Car/cpp/security/vehicle_binding_util/tests .
Чтобы запустить этот интеграционный тест:
atest vehicle_binding_integration_test