메시 상태 및 프로비저닝

잠김 또는 잠금 해제됨일 수 있는 새로운 개념인 SDV 부팅 모드는 보안 메시를 설정하기 위해 다른 서비스 검색 에이전트 (다른 SDV VM에서 실행)에 연결을 시도할 때 SDV VM의 SDV 서비스 검색 에이전트가 동작하는 방식을 정의합니다. Android 자체 검사 부팅의 기존 기기 상태 개념 과 유사합니다.

SDV 부팅 모드는 차량 VM 트러스트 저장소 를 프로비저닝하거나 업데이트할 때 활용됩니다.

SDV 보안 메시 동작

서비스 검색 메시는 수신하는 부팅 값에 따라 정상, 경고 또는 심각 상태 중 하나일 수 있습니다.

자동차는 메시가 '정상' 상태일 때만 소유자의 손에 들어갑니다. 진단 개입 없이는 메시가 '정상'에서 '경고' 상태로 전환될 수 없습니다. 프로덕션 환경 (예: 개발/디버깅 아님)에서 '경고'는 프로비저닝 중에만 발생합니다.

'심각'은 Android 부트로더에서 system_ext 이미지 서명 확인에 실패하는 것과 유사한 근본적인 오류입니다. SDV 메시가 무선 업데이트 (OTA)로 인해 '정상'에서 '심각'으로 전환된 경우 해당 업데이트는 잘못된 것으로 간주되며 원래 '정상' 버전으로 되돌아갑니다.

다음 섹션에서는 이러한 상태를 자세히 설명합니다.

정상

  • 시스템 부팅은 서비스 검색의 관점에서 SECURE입니다.
  • 서비스 검색은 안전하게 부팅되었다고 생각하는 피어에만 연결하므로 결과적으로 서비스 검색은 자신이 속한 SDV 보안 메시가 안전하다고 생각합니다.

경고

  • 일부 확인이 사용 중지되어 시스템 부팅이 손상되었을 수 있습니다.
  • 서비스 검색은 동일한 사용 중지된 확인이 있는 피어에만 연결합니다. 따라서 서비스 검색은 자체와 동일한 보안 속성을 가진 SDV 보안 메시의 일부입니다.
  • 피어 부팅이 성공적으로 또는 실패로 완료되었을 수 있습니다. 로컬 실패 / 사용 중지로 인해 확인할 수 없습니다.
  • 개발 환경 또는 상황 외부에서 이는 다음과 같은 의미를 갖습니다.
    • 사용자 데이터를 사용할 수 없어야 합니다. 즉, SDV 보안을 통한 통신에 의해 전송되거나 영향을 받아서는 안 됩니다.
    • 메시가 이 상태일 때는 프로비저닝 흐름에 필요한 서비스만 사용할 수 있어야 합니다.

심각

  • 시스템 부팅 단계에서 심각한 오류가 발생했습니다.
  • 서비스 검색 에이전트가 메시를 설정하지 못하도록 하는 근본적인 실패 또는 오류가 하나 이상 있습니다. 로컬 서비스가 원격 서비스와 통신할 수 없습니다.
  • 시스템 부팅은 서비스 검색의 관점에서 UNSECURE입니다.

SDV 부팅 모드

SDV 부팅 모드에는 UNLOCKEDLOCKED 라는 두 가지 값이 있습니다. 서비스 검색 메시 설정과 관련하여 LOCKED 모드는 확인 오류가 심각한 반면 UNLOCKED 모드에서는 그렇지 않다는 의미입니다.

SDV 부팅 모드는 Android의 기기 상태 (AVB 모드라고도 함)와 다릅니다. SDV 부팅 모드는 SDV 보안 메시의 동작과 메시 연결 오류가 심각한지 여부를 안내합니다. AVB 모드는 Android 부트로더에서 수행하는 확인이 심각한지 여부를 결정합니다.

조건 SDV 부팅 모드
잠금 해제됨 잠김
로컬 VVM 트러스트 저장소가 비어 있음 경고 심각
로컬 DICE 체인 누락 심각 심각
로컬 DICE 체인 확인 실패 경고 심각
로컬 SDV 및 AVB 모드 일치 표 참고
원격 기기 모드 값 비교 표 참고
원격 uds_pubs 일치 실패 경고 심각
원격 DICE 체인 확인 실패 (DICE 정책 사용) 경고 심각
원격 인증 핸드셰이크 실패 심각 심각

로컬 SDV 및 AVB 모드 일치

다음 표는 AVB 모드와 SDV 부팅 모드가 SDV 보안 메시 동작에 미치는 영향을 보여줍니다. 색상은 AVB 문서의 Android Specific Integration 섹션에 정의되어 있습니다.

AVB 모드 x SDV 부팅 모드 SDV 부팅 모드
잠금 해제됨 잠김
AVB 잠김 녹색 경고 정상
노란색 심각 심각
AVB 잠금 해제됨 주황색 경고 심각

기기 모드 값

DICE 체인에서 모든 CDI 인증서에는 모드 값이 있습니다. 구성 입력을 기반으로 해당 레이어의 보안 상태를 설명하는 데 사용됩니다. 기기의 모든 소프트웨어의 보안 입장을 표현하기 위해 기기 모드 값 이 정의됩니다. 이는 지정된 SDV VM과 관련된 DICE 체인의 모든 CDI 단계의 모드 값에서 파생되며 (즉, Android HLOS 및 보안 월드) 다음과 같이 정의됩니다.

enum DeviceMode {
  NotConfigured = 0,
  Recovery = 1,
  Debug = 2,
  Normal = 3,
}

알고리즘

  1. deviceModeDeviceMode::Normal로 설정합니다.
  2. diceChainList를 SDV VM과 관련된 DICE 체인 목록으로 설정합니다.
  3. diceChainList의 각 diceChain에 대해 다음을 실행합니다.
    1. cdiListdiceChain의 CDI 인증서 목록으로 설정합니다.
    2. cdiList의 각 cdiCert에 대해 다음을 실행합니다.
      1. cdiDeviceModecdiCert.mode에 해당하는 DeviceMode로 설정합니다.
      2. deviceMode을(를) min(deviceMode, cdiDeviceMode)로 설정합니다.
  4. deviceMode를 반환합니다.

원격 기기 모드 값 비교

서비스 검색 에이전트는 자체와 동일한 기기 모드 값을 가진 다른 에이전트에만 연결합니다.

기기 모드 값은 메시가 보안 속성이 다른 구성원을 가질 수 없도록 합니다. 따라서 결과 메시에는 모든 구성원 간에 균일한 보안 입장이 있습니다.

기기 모드 값 리모컨
구성되지 않음 디버그 회복 보통
로컬 구성되지 않음 심각 심각 심각 심각
디버그 심각 경고 심각 심각
회복 심각 심각 경고 심각
보통 심각 심각 심각 정상

팩토리 프로비저닝 흐름

이는 공개 키 인프라를 사용할 수 없는 것으로 가정되는 차량 조립 라인의 프로비저닝 흐름입니다.

이 흐름은 VVMFactoryTrust라는 일회성 프로그래밍 가능 (OTP) 메모리에 저장된 32바이트 값에 따라 달라집니다. 이 값은 설정되면 androidboot.sdv.vvmfactorytrust라는 매개변수로 커널에 전달됩니다.

ECU의 모든 VM은 동일한 SDV 부팅 모드 및 VVMFactoryTrust를 가져야 합니다.

초기 상태

모든 ECU는 초기에는 SDV 부팅 모드가 잠금 해제되어 있으며 VVMFactoryTrust 및 VVMTrustStore가 비어 있습니다. VVMTrustStore에 있을 수 있는 uds_certs를 제외하고는 말입니다.

그림 1은 두 개의 개별 ECU (ECU-0 및 ECU-1)에 분산된 세 개의 SDV VM (VM-A, VM-B, VM-C)이 있는 예를 보여줍니다.

1단계: sdv_provisioning_tool 실행

모든 ECU의 모든 VM을 부팅합니다.

각 VM에서 다음을 실행합니다.

  • sdv_provisioning_tool 실행

    • 이 도구는 로컬 서비스 검색 에이전트와 통신하고 SDV 보안 메시가 완료되었음을 알리는 신호를 기다리며 에이전트는 UDS 공개 키 목록을 /vvmtruststore/uds_pubs에 씁니다.
    • 이 작업이 발생하면 도구는 방금 작성된 /vvmtruststore/uds_pubs의 해시를 가져와 출력합니다.

2단계: VVMFactoryTrust 작성

각 ECU의 VM 하나에서 다음을 실행합니다.

  • 이전 단계에서 sdv_provisioning_tool이 출력한 /vvmtruststore/uds_pubs의 해시를 VVMFactoryTrust에 씁니다. 이 쓰기가 수행되는 방식은 OEM/공급업체마다 다르므로 이 사양의 범위를 벗어납니다.

3단계: SDV 부팅 모드 잠김으로 재부팅

SDV 부팅 모드 잠김에서 모든 ECU의 모든 VM을 재부팅합니다.

서비스 검색 에이전트는 이 파일의 해시가 VVMFactoryTrust와 일치하므로 uds_pubs에 나열된 UDS 공개 키가 있는 ECU의 VM을 신뢰합니다.

ECU는 함께 프로비저닝되었으므로 영구적으로 함께 바인딩되며 따라서 DICE 체인 확인 관점에서 단일 하드웨어로 효과적으로 간주될 수 있습니다.

부품 교체 흐름

이는 결함이 있는 ECU를 프로비저닝되지 않은 새 ECU로 교체해야 하는 공인 자동차 수리 워크숍 또는 차고의 프로비저닝 흐름입니다.

이 흐름은 vvmconfig에 명시된 루트 기관에서 직접 또는 중간 기관 체인을 통해 간접적으로 발급한 UDS 인증서에 따라 달라집니다.

초기 상태

모든 VM은 이미 팩토리 프로비저닝되었으며 SDV 부팅 모드 잠김으로 실행되고 있습니다.

그림 5는 ECU-0이 오작동하여 교체해야 하는 예를 보여줍니다.

1단계: 새 ECU 설치

비어 있고 프로비저닝되지 않은 상태인 새 ECU를 설치합니다.

그림 6에서 ECU-2 (교체 ECU)가 전원이 켜지면 경고 상태의 SDV 보안 메시와 정상 상태의 SDV 보안 메시라는 두 개의 분리된 SDV 보안 메시가 있습니다. 두 SDV 보안 메시 모두 불완전합니다.

2단계: SDV 부팅 모드 잠금 해제됨으로 재부팅

SDV 부팅 모드 잠금 해제됨에서 모든 ECU의 모든 VM을 재부팅합니다.

그림 7에서 VM-B와 VM-C는 이제 완료된 경고 SDV 보안 메시로 조인합니다.

3단계: sdv_provisioning_tool 실행

각 VM에서 sdv_provisioning_tool을 실행합니다.

이 도구는 로컬 서비스 검색 에이전트와 통신하고 SDV 보안 메시가 완료되었음을 알리는 신호를 기다리며 에이전트는 UDS 공개 키 목록을 /vvmtruststore/uds_pubs에 씁니다.

이 작업이 발생하면 도구는 방금 작성된 /vvmtruststore/uds_pubs의 해시를 가져와 출력하지만 이 해시는 이 흐름에서 사용되지 않습니다.

4단계: UDS 인증서 설치

  • 임의의 SDV VM에서 /vvmtruststore/uds_pubs를 추출합니다. 동일한 SDV 보안 메시의 모든 VM에서 동일하므로 어떤 VM을 선택해도 상관없습니다.
  • 해당 /vvmtruststore/uds_pubs에 나열된 모든 UDS 공개 키의 프로비저닝 인증서를 검색합니다.
    • 일반적으로 이는 인증서가 이미 저장되어 있거나 수신된 공개 키를 알려진 UDS 공개 키 데이터베이스와 대조하여 인증서를 생성하는 원격 서버로 전송하는 것을 의미합니다. 이 데이터베이스는 ECU 제조 중에 추출된 UDS 공개 키로 빌드되었을 것입니다.
  • 각 SDV VM의 /vvmtruststore/uds_certs를 씁니다.

5단계: SDV 부팅 모드 잠김으로 재부팅

SDV 부팅 모드 잠김으로 모든 VM을 재부팅합니다.

어떤 이유로든 SDV 보안 메시가 불완전한 경우 2단계로 돌아갑니다.