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

На этой странице описывается, как включить начальные функции шифрования привязки автомобиля.

Обзор

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

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

  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