Использование шифрования связанных файлов транспортных средств

В этом содержании описывается, как включить функции исходного кода привязки на основе транспортного средства.

Обзор

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

  1. ( Рекомендуется ) Семя хранится ЭБУ в транспортном средстве, которое физически хорошо защищено. Если нет, то и IVI, и ECU тривиально могут быть вытащены из автомобиля.
  2. ( Рекомендуется ) IVI и ECU должны пройти взаимную аутентификацию для обмена начальным числом, чтобы предотвратить подмену запросов на начальное значение от ECU.
  3. ( Рекомендуется ) Начальное значение должно передаваться по защищенному каналу для защиты от прослушивания шины 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 :

  1. Измените prompt_and_wipe_data на wipe_data . Устройство стирает, а затем перезагружается без запроса.
  2. Подсказка содержится в 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