차량 바인딩 파일 암호화 사용

이 콘텐츠에서는 차량 기반의 암호화 SEED 바인딩 기능을 사용 설정하는 방법을 설명합니다.

개요

차량의 SEED 바인딩 기능의 주목표는 차량용 인포테인먼트(IVI) 시스템에 있는 데이터가 차량에서 삭제되지 않도록 방지함으로써 사용자의 개인 정보 보호를 강화하는 것입니다. 이는 저장소 암호화 키를 다른 ECU(전자 제어 장치)에 바인딩하는 방식으로 이루어집니다. 그러면 IVI를 제거한 후 다른 차량에 설치하더라도(또는 테스트 벤치에서 실행) IVI에 암호화된 사용자 데이터가 복호화되지 않습니다.

파일 암호화 키를 바인딩하기 위해 Vold에서 키 암호화 키 파생을 통해 차량별 SEED를 결합합니다. 그러면 키가 차량에 물리적으로 바인딩된 상태가 되며 고유해집니다. SEED는 OEM에 의해 새 차량 하드웨어 추상화 계층(VHAL) 속성 STORAGE_ENCRYPTION_BINDING_SEED로 노출되는 바이트 배열입니다. 이 속성의 권한은 권한이 있는 시스템 데몬에 의해서만 쿼리할 수 있도록 제한됩니다.

아키텍처 다이어그램

다음 그림은 차량 바인딩 통합 아키텍처를 보여줍니다.

그림 1. 차량 바인딩 아키텍처

차량 기반 바인딩 사용

차량에 대한 저장소 암호화 바인딩은 명시적으로 사용 설정해야 하고, 초기화하지 않으면 사용 또는 사용 중지할 수 없습니다. 즉, 무선 업데이트(OTA)를 사용하면 기기 완전 삭제도 실행해야만 이 기능을 사용 설정할 수 있습니다. OEM에서는 기기를 초기화하는 경우에도 업그레이드 시 이 기능을 사용 설정하도록 선택할 수 있습니다. 예를 들면 서비스 센터에 방문하는 상황일 때 필요합니다.

이 기능은 공급업체 제공 차량 HAL에서 STORAGE_ENCRYPTION_BINDING_SEED 속성을 지원하여 사용 설정됩니다. 이 속성은 바이트 문자열 길이가 16바이트이며 IVI와는 별도의 ECU에 유지됩니다. 처음에 이 속성은 Android Automotive OS(AAOS)에 의해 설정됩니다. AAOS는 암호화 방식으로 안전한 랜덤 숫자 생성기(CSRNG)를 사용하여 속성을 생성합니다. 그런 다음 AAOS는 후속 부팅 시 속성을 읽습니다.

VHAL이 STORAGE_ENCRYPTION_BINDING_SEED의 값을 저장하는 방식은 공급업체별로 다릅니다. SEED 보호를 위한 일반적인 권장사항은 다음과 같습니다.

  1. (권장됨) 물리적으로 안전하게 보호되는 차량에 ECU를 통해 SEED를 저장합니다. 그러지 않으면 차량에 있는 IVI와 ECU 모두를 쉽게 가져갈 수 있습니다.
  2. (권장됨) SEED에 대한 ECU 요청이 스푸핑되는 것을 방지하기 위해 SEED를 교환하도록 IVI와 ECU가 상호 인증되어야 합니다.
  3. (권장됨) CAN 버스 스니핑이 발생하지 않도록 보안 채널을 사용하여 SEED를 전송해야 합니다.

또한 mount_all --late 전에 late-fs에서 공급업체 init.target.rc를 허용하도록 다음을 추가합니다.

# feed vehicle binding seed to vold
exec_start vold_seed_binding

차량 HAL은 hal now가 아닌 early_hal에서 시작해야 합니다. /data 파티션이 아직 마운트되지 않았으므로 early-hal에서 persist.* 시스템 속성에 액세스할 수 없습니다.

차량 기반 바인딩 구성

ECU SEED가 일치하지 않으면 기기는 복구 모드로 재부팅되고 사용자에게 /data 파티션을 삭제하거나 다시 시도하라는 메시지가 표시됩니다.

프롬프트 메시지 및 데이터 완전 삭제 동작은 builtins.cpp에서 다음과 같이 변경할 수 있습니다.

  1. prompt_and_wipe_datawipe_data로 변경합니다. 기기 완전 삭제 후 프롬프트 메시지 없이 재부팅됩니다.
  2. 프롬프트 메시지는 recovery.cpp에 포함되어 있습니다.

    그림 2. 프롬프트 메시지

차량 기반 바인딩 테스트

모의 테스트

모의 테스트는 packages/services/Car/cpp/security/vehicle_binding_util/tests에서 제공됩니다.

모의 테스트는 다음으로 실행하면 됩니다.

attest libvehicle_binding_util_test

통합 테스트

atest 테스트는 packages/services/Car/cpp/security/vehicle_binding_util/tests에서 제공됩니다.

통합 테스트는 다음으로 실행하면 됩니다.

atest vehicle_binding_integration_test