기기 식별자 구성 엔진(DICE)은 Android에 채택된 신뢰할 수 있는 컴퓨팅 그룹 사양입니다. DICE의 목표는 부팅 중에 로드되는 펌웨어의 원격 확인 가능한 측정값과 함께 기기의 변경 불가능한 암호화 ID를 만드는 것입니다. 이 프로세스는 로드된 각 펌웨어의 암호화 ID를 추가로 생성합니다. 이러한 ID는 기본 ID와 특정 부팅 중에 로드된 각 펌웨어 이미지에 전적으로 종속됩니다.
DICE는 칩셋의 ROM이 칩 생산 프로세스 중에 암호화 무작위 값으로 안전하게 프로비저닝된 변경 불가능한 데이터 은행(일반적으로 퓨즈)에서 고유한 기기 비밀(UDS)을 로드할 때 시작됩니다. ROM이 이 비밀을 읽으면 래치와 같은 공급업체 종속 하드웨어 잠금 메커니즘을 사용하여 UDS에 대한 추가 액세스를 차단합니다. 다음 부팅 프로세스가 시작될 때까지 UDS에 대한 액세스가 복원되지 않습니다.
ROM은 UDS를 키 파생 함수 (KDF)에 대한 입력으로 사용하여 특정 기기를 식별하는 영구 비대칭 키 쌍을 생성합니다. ROM은 부팅 시퀀스의 다음 단계의 펌웨어를 로드하고 측정하는 동시에 보안 부팅이 사용 설정된 경우와 같이 특정 부팅의 환경에 관한 추가 메타데이터를 지정합니다. ROM은 KDF를 사용하여 측정, 구성, UDS를 처리하여 다음 단계가 로드될 보안 비밀을 파생합니다. 이 비밀 키를 복합 기기 식별자(CDI)라고 합니다.
그런 다음 이 과정이 반복됩니다. CDI는 다음 단계의 UDS 역할을 하며, 이 단계에서는 키 쌍을 파생하고 CDI는 로드할 다음 이미지의 해시와 함께 KDF에 입력되어 다른 파생된 CDI 값을 형성합니다.
로드된 펌웨어는 생성된 키 쌍을 사용하여 CBOR 객체 서명 및 암호화(COSE) Sign1 인증서에 서명합니다. 각 단계는 로드할 다음 단계에 인증서에 서명합니다. 이 인증서에는 해당 단계의 측정값, 부팅 모드, 해당 단계의 CDI 공개 키, 기타 관련 메타데이터와 같은 정보가 포함됩니다.
그림 1. 간소화된 DICE 파생 프로세스
이 프로세스를 통해 로드된 펌웨어 이미지의 변경사항이 자체 CDI 값과 후속 모든 단계의 CDI 값을 모두 변경하도록 할 수 있습니다. 즉, 로드된 모든 펌웨어 조합은 고유한 ID와 연결된 키를 생성합니다. 또한 서명은 각 단계가 이전 단계에서 측정 및 인증되도록 보장하는 방식으로 이루어지므로 어떤 단계도 자체 인증서를 위조하여 측정을 회피할 수 없습니다. 즉, ROM이 손상되지 않는 한 기기의 보안 상태를 패치하고 기기 외부에서 원격으로 확인할 수 있습니다.