В этом содержании описывается, как включить функции исходного кода привязки на основе транспортного средства.
Обзор
Основная цель функции привязки к транспортному средству — дополнительная защита конфиденциальности пользователя путем защиты данных бортовой информационно-развлекательной системы (IVI) от удаления из автомобиля. Это делается путем привязки ключей шифрования хранилища к какому-либо другому электронному блоку управления (ЭБУ), так что, если IVI будет удален и помещен в другое транспортное средство (или запущен на испытательном стенде), зашифрованные пользовательские данные в IVI не могут быть расшифрованы.
Чтобы связать ключи шифрования файлов, Vold смешивает начальное число для конкретного транспортного средства с производным ключом шифрования ключа, чтобы ключи были уникальными и физически привязанными к транспортному средству. Начальное значение — это массив байтов, представленный OEM-производителем как новое свойство уровня абстракции аппаратного обеспечения транспортного средства (VHAL) STORAGE_ENCRYPTION_BINDING_SEED
. Разрешения этого свойства ограничены, так что его могут запрашивать только привилегированные системные демоны.
Диаграмма архитектуры
На этом рисунке показана архитектура интеграции с привязкой к транспортному средству:
Рис. 1. Архитектура, привязанная к транспортному средству
Включение привязки к транспортному средству
Привязка шифрования хранилища к автомобилю должна быть явно включена и не может быть включена или выключена без сброса настроек. Это означает, что обновление по беспроводной сети (OTA) не может активировать эту функцию без очистки устройства. OEM-производитель может включить эту функцию при обновлении, если он также сбросит устройство до заводских настроек. Например, при посещении службы.
Эта функция включается путем поддержки свойства STORAGE_ENCRYPTION_BINDING_SEED
в предоставленном поставщиком транспортном средстве HAL. Это свойство содержит строку байтов длиной 16 байт, и ожидается, что она будет сохраняться в ЭБУ отдельно от IVI. Первоначально это свойство задается операционной системой Android Automotive (AAOS), которая создает его с помощью криптографически безопасного генератора случайных чисел (CSRNG). Затем AAOS считывает это свойство при последующих загрузках.
Способ хранения VHAL значения STORAGE_ENCRYPTION_BINDING_SEED
зависит от поставщика. У нас есть общие рекомендации по защите семян:
- ( Рекомендуется ) Семя хранится ЭБУ в транспортном средстве, которое физически хорошо защищено. Если нет, то и IVI, и ECU тривиально могут быть вытащены из автомобиля.
- ( Рекомендуется ) IVI и ECU должны пройти взаимную аутентификацию для обмена начальным числом, чтобы предотвратить подмену запросов на начальное значение от ECU.
- ( Рекомендуется ) Начальное значение должно передаваться по защищенному каналу для защиты от прослушивания шины 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