SDV 부팅 모드 는 보안 메시를 설정하기 위해 다른 서비스 검색 에이전트 (다른 SDV VM에서 실행)에 연결을 시도할 때 SDV VM의 SDV 서비스 검색 에이전트가 동작하는 방식을 정의합니다. 이는 Android 자체 검사 부팅의 기존 기기 상태 개념과 유사합니다.
SDV 부팅 모드는 차량 VM 트러스트
저장소 (VVM 트러스트 저장소, vvmtruststore라고도 함)를 프로비저닝하거나 업데이트할 때 사용됩니다.
SDV 보안 메시 동작
서비스 검색 메시는 수신하는 부팅 값에 따라 Normal, Warning 또는 Fatal 상태 중 하나에 있습니다.
고객에게 제공되는 프로덕션 차량에서 SDV 보안 메시는 Normal 상태여야 합니다. 메시에는 Normal 상태에서 Warning 상태로 전환하기 위한 진단 개입이 필요합니다. 프로덕션 환경 (예: 개발 또는 디버깅 아님)에서 Warning 상태는 프로비저닝 중에만 발생합니다.
Fatal 은 Android 부트로더에서 system_ext 이미지가 서명 확인에 실패하는 것과 유사한 근본적인 오류입니다. SDV 보안 메시가 무선 (OTA) 업데이트로 인해 Normal에서 Fatal로 전환되는 경우 업데이트가 잘못된 것으로 간주되고 메시가 원래 Normal 버전으로 대체됩니다.
다음 섹션에서는 상태를 자세히 설명합니다.
Normal
- 시스템 부팅은 서비스 검색 관점에서
SECURE입니다. - 서비스 검색은 안전하게 부팅된 피어와만 연결됩니다. 안전하게 부팅된 피어는 SDV 보안 메시도 안전하다는 것을 의미합니다.
Warning
- 일부 확인이 사용 중지되어 시스템 부팅이 손상되었을 수 있습니다.
- 서비스 검색은 정확히 동일한 사용 중지된 확인 집합을 공유하는 피어와만 연결되어 SDV 보안 메시의 모든 피어가 동일한 보안 속성을 공유하도록 합니다.
- 로컬 오류 또는 사용 중지된 기능으로 인해 피어 부팅의 성공 여부를 확인할 수 없습니다.
- 개발 환경 또는 상황 외부에서는 다음과 같은 의미가 있습니다.
- 사용자 데이터를 사용할 수 없어야 합니다. 즉, SDV 보안 메시를 통한 통신에 의해 전송되거나 영향을 받아서는 안 됩니다.
- 메시가 이 상태에 있을 때는 프로비저닝 흐름에 필요한 서비스만 사용할 수 있어야 합니다.
Fatal
- 시스템 부팅 단계 중 심각한 오류가 발생했습니다.
- 서비스 검색 에이전트가 메시를 설정하지 못하도록 하는 근본적인 오류가 하나 이상 있습니다. 로컬 서비스는 원격 서비스와 통신할 수 없습니다.
- 시스템 부팅은 서비스 검색 관점에서
UNSECURE입니다.
SDV 부팅 모드
SDV 부팅 모드에는 LOCKED와 UNLOCKED라는 두 가지 값이 있을 수 있습니다. 서비스
검색 메시 설정의 경우 LOCKED는 확인 오류가
치명적임을 나타내고 UNLOCKED는 치명적이지 않음을 의미합니다.
| 조건 | SDV 부팅 모드 | |
|---|---|---|
UNLOCKED |
LOCKED |
|
| 로컬 VVM 트러스트 저장소가 비어 있음 | Warning | Fatal |
| 로컬 DICE 체인이 누락됨 | Fatal | Fatal |
| 로컬 DICE 체인 확인 실패 | Warning | Fatal |
| 로컬 SDV 및 AVB 모드가 일치함 | 로컬 SDV 및 AVB 모드 일치 표 참고 | |
| 원격 기기 모드 값 비교 | 원격 기기 모드 값 비교 표 참고 | |
원격 uds_pubs 일치 실패 |
Warning | Fatal |
| 원격 DICE 체인 확인 실패 (사용 중 DICE 정책) | Warning | Fatal |
| 원격 인증 핸드셰이크 실패 | Fatal | Fatal |
로컬 SDV 및 AVB 모드 일치
다음 표는 AVB 모드와 SDV 부팅 모드가 SDV 보안 메시 동작에 미치는 영향을 보여줍니다. 색상은 AVB 문서의 Android 관련 통합 섹션에 정의되어 있습니다.
| AVB 모드 x SDV 부팅 모드 | SDV 부팅 모드 | ||
|---|---|---|---|
UNLOCKED |
LOCKED |
||
AVB LOCKED |
녹색 | Warning | Normal |
| 노란색 | Fatal | Fatal | |
AVB UNLOCKED |
Orange | Warning | Fatal |
기기 모드 값
DICE 체인에서 모든 CDI 인증서에는 모드 값이 있습니다. 이 값은 구성 입력을 기반으로 해당 레이어의 보안 상태를 설명합니다. 기기의 모든 소프트웨어의 보안 입장을 표현하기 위해 SDV 사양은 기기 모드 값을 정의합니다. 이 값은 지정된 SDV VM (즉, Android HLOS 및 보안 월드)과 관련된 DICE 체인의 모든 CDI 단계의 모드 값에서 파생되며 다음 열거형을 사용합니다.
enum DeviceMode {
NotConfigured = 0,
Recovery = 1,
Debug = 2,
Normal = 3,
}
알고리즘
기기 모드 값을 계산하는 알고리즘은 다음과 같습니다.
deviceMode를DeviceMode::Normal로 지정합니다.diceChainList를 SDV VM과 관련된 DICE 체인 목록으로 지정합니다.diceChainList의 각diceChain에 대해 다음을 실행합니다.cdiList를diceChain의 CDI 인증서 목록으로 지정합니다.cdiList의 각cdiCert에 대해 다음을 실행합니다.cdiDeviceMode을(를)cdiCert.mode에 해당하는DeviceMode로 지정합니다.deviceMode을(를)min(deviceMode, cdiDeviceMode)로 설정합니다.
deviceMode를 반환합니다.
원격 기기 모드 값 비교
서비스 검색 에이전트는 동일한 기기 모드 값을 가진 다른 에이전트와만 연결됩니다.
기기 모드 값은 메시가 보안 속성이 다른 구성원을 가질 수 없도록 합니다. 결과 메시에는 모든 구성원 간에 균일한 보안 입장이 있습니다.
| 기기 모드 값 | 리모컨 | ||||
|---|---|---|---|---|---|
| 구성되지 않음 | 디버그 | 회복 | 일반 | ||
| 로컬 | 구성되지 않음 | Fatal | Fatal | Fatal | Fatal |
| 디버그 | Fatal | Warning | Fatal | Fatal | |
| 회복 | Fatal | Fatal | Warning | Fatal | |
| 일반 | Fatal | Fatal | Fatal | Normal | |
팩토리 프로비저닝 흐름
이는 공개 키 인프라를 사용할 수 없는 것으로 가정되는 차량 조립 라인의 프로비저닝 흐름입니다. 이 흐름은 차량 VM (VVM) 팩토리 트러스트 또는 vvmfactorytrust라고 하는 일회성 프로그래밍 가능 (OTP) 메모리에 저장된 32바이트 값에 따라 달라집니다. 설정되면 이 값은 androidboot.sdv.vvmfactorytrust라는 이름의 매개변수로 커널에 전달됩니다.
ECU의 모든 VM은 동일한 SDV 부팅 모드 및 VVM 팩토리 트러스트를 가져야 합니다.
초기 상태
모든 ECU는 빈
VVM 팩토리 트러스트 및 차량 VM 트러스트 저장소와 함께 UNLOCKED 모드의 SDV 부팅 모드이며, vvmtruststore에 있는 uds_certs
를 제외합니다. 그림 1은 두 개의 개별 ECU (ECU-0 및 ECU-1)에 배포된 세 개의 SDV VM (VM-A, VM-B, VM-C)이 있는 예를 보여줍니다.
그림 1. 팩토리 프로비저닝, 초기 상태.
1단계: sdv_provisioning_tool 실행
모든 ECU의 모든 VM을 부팅합니다.
각 VM에서 sdv_provisioning_tool을 실행합니다.
- 이 도구는 로컬 서비스 검색 에이전트와 통신하고 SDV 보안 메시가 완료되었음을 알리는 신호를 기다립니다. 에이전트는 UDS 공개 키 목록을
/vvmtruststore/uds_pubs에 씁니다. - 이 작업이 발생하면 도구는 방금 작성된
/vvmtruststore/uds_pubs의 해시를 가져와 출력합니다.
그림 2. 팩토리 프로비저닝, 1단계.
2단계: VVM 팩토리 트러스트 작성
각 ECU의 VM 하나에서 다음을 실행합니다.
- 이전 단계에서
sdv_provisioning_tool이 출력한/vvmtruststore/uds_pubs의 해시를 VVM 팩토리 트러스트에 씁니다. 이 쓰기가 수행되는 방식은 OEM 또는 공급업체별로 다르며 이 사양의 범위를 벗어납니다.
그림 3. 팩토리 프로비저닝, 2단계.
3단계: SDV 부팅 모드 잠금으로 재부팅
LOCKED 모드의 SDV 부팅 모드에서 모든 ECU의 모든 VM을 재부팅합니다.
서비스 검색 에이전트는 이 파일의 해시가 VVM 팩토리 트러스트와 일치하므로 uds_pubs에 나열된 UDS 공개 키가 있는 ECU의 VM을 신뢰합니다.
ECU가 함께 프로비저닝되었으므로 영구적으로 함께 바인딩되며 DICE 체인 확인 관점에서 단일 하드웨어로 효과적으로 간주될 수 있습니다.
그림 4. 팩토리 프로비저닝, 3단계.
부품 교체 흐름
이는 결함이 있는 ECU를 프로비저닝되지 않은 새 ECU로 교체해야 하는 공인 자동차 수리 워크숍 또는 차고의 프로비저닝 흐름입니다.
이 흐름은 vvmconfig에 명시된 루트
기관에서 직접 발급하거나
중간 기관 체인을 통해 간접적으로 발급한 UDS 인증서에 따라 달라집니다.
초기 상태
모든 VM은 이미 팩토리 프로비저닝되었으며 LOCKED 모드의 SDV 부팅 모드에서 실행 중입니다.
그림 5는 ECU-0이 오작동하여 교체해야 하는 예를 보여줍니다.
그림 5. 부품 교체, 초기 상태.
1단계: 새 ECU 설치
비어 있고 프로비저닝되지 않은 상태인 새 ECU를 설치합니다.
그림 6에서 ECU-2 (교체 ECU)의 전원이 켜지면 두 개의 분리된 SDV 보안 메시가 있습니다. 하나는 Warning 상태이고 다른 하나는 Normal 상태입니다. 두 SDV 보안 메시 모두 불완전합니다.
그림 6. 부품 교체, 1단계.
2단계: SDV 부팅 모드 잠금 해제로 재부팅
UNLOCKED 모드의 SDV 부팅 모드에서 모든 ECU의 모든 VM을 재부팅합니다.
그림 7에서 VM-B와 VM-C는 완료된 Warning SDV 보안 메시와 결합됩니다.
그림 7. 부품 교체, 2단계.
3단계: sdv_provisioning_tool 실행
각 VM에서 sdv_provisioning_tool을 실행합니다.
이 도구는 로컬 서비스 검색 에이전트와 통신하고 SDV 보안 메시가 완료되었음을 알리는 신호를 기다립니다. 에이전트는 UDS 공개 키 목록을 /vvmtruststore/uds_pubs에 씁니다.
이 작업이 발생하면 도구는 방금 작성된 /vvmtruststore/uds_pubs의 해시를 가져와 출력하지만 이 해시는 이 흐름에서 사용되지 않습니다.
그림 8. 부품 교체, 3단계.
4단계: UDS 인증서 설치
- 임의의 SDV VM에서
/vvmtruststore/uds_pubs를 추출합니다. 동일한 SDV 보안 메시의 모든 VM에서 동일하므로 어떤 VM을 선택해도 상관없습니다. - 해당
/vvmtruststore/uds_pubs에 나열된 모든 UDS 공개 키의 프로비저닝 인증서를 검색합니다.- 이 단계에서는 일반적으로 추출된 UDS 공개 키 또는
/vvmtruststore/uds_pubs파일을 원격 프로비저닝 서버로 전송합니다. 서버는 기존 인증서를 검색하거나 ECU 제조 중에 빌드된 알려진 UDS 공개 키의 데이터베이스와 비교하여 수신된 공개 키를 확인하여 새 인증서를 생성합니다.
- 이 단계에서는 일반적으로 추출된 UDS 공개 키 또는
- 각 SDV VM의
/vvmtruststore/uds_certs를 작성합니다.
그림 9. 부품 교체, 4단계.
5단계: SDV 부팅 모드 잠금으로 재부팅
LOCKED 모드의 SDV 부팅 모드에서 모든 VM을 재부팅합니다.
SDV 보안 메시가 불완전하면 2단계로 돌아갑니다.
그림 10. 부품 교체, 5단계.