На этой странице описывается, как включить начальные функции шифрования привязки автомобиля.
Обзор
Основная цель функции начального кода привязки транспортного средства — дополнительная защита конфиденциальности пользователя путем защиты данных в автомобильной информационно-развлекательной системе (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