기기 식별자 구성 엔진

기기 식별자 구성 엔진 (DICE)은 Android에 채택신뢰할 수 있는 컴퓨팅 그룹 (TCG) 사양입니다. 부팅 시퀀스 중에 로드된 각 펌웨어에 대해 강력하고 변경 불가능한 암호화 ID를 생성합니다. 이러한 ID를 통해 기기의 보안 상태를 원격으로 확인할 수 있으며, 이는 ROM을 손상시켜야만 회피할 수 있습니다.

DICE 파생 프로세스

간소화된 DICE 파생 프로세스

그림 1. 간소화된 DICE 파생 프로세스

DICE 파생 프로세스를 통해 펌웨어 이미지가 변경되면 해당 단계와 그 이후의 모든 단계에 새로운 고유 식별자가 생성됩니다. 이는 로드된 각 펌웨어 단계가 다음 단계를 측정하고 인증하여 우회나 조작을 방지하는 고유한 ID와 연결된 키를 생성하기 때문입니다. 읽기 전용 메모리 (ROM)는 측정, 구성, 고유 기기 비밀 (UDS)을 키 파생 함수 (KDF)로 처리하여 로드할 다음 단계의 비밀을 파생합니다. 이 보안 비밀을 복합 기기 식별자 (CDI)라고 합니다.

0단계: 초기화

DICE 프로세스는 칩셋의 ROM이 일반적으로 퓨즈인 변경 불가능한 데이터 뱅크에서 UDS를 로드하는 것으로 시작됩니다. 이 UDS는 칩 생산 프로세스 중에 암호화 방식으로 무작위 값으로 안전하게 프로비저닝됩니다. UDS를 읽은 후 ROM은 래치와 같은 공급업체 종속 하드웨어 잠금 메커니즘을 사용하여 다음 부팅까지 UDS 액세스를 잠급니다.

1단계: 초기 키 파생

ROM은 UDS를 키 파생 함수 (KDF)의 입력으로 사용하여 기기를 고유하게 식별하는 영구 비대칭 키 쌍을 생성합니다. 보안 부팅이 사용 설정되었는지 등 부팅 환경에 관한 메타데이터를 포함한 다음 펌웨어 단계를 측정합니다. 그러면 ROM은 KDF에서 UDS, 펌웨어 측정, 구성 데이터를 결합하여 첫 번째 CDI를 도출하고 이는 다음 단계에 비밀로 전달됩니다.

2단계~n단계: 재귀 키 파생

그러면 프로세스가 반복됩니다. 이후 모든 단계에서 이전 단계의 CDI는 새 KDF의 입력으로 사용됩니다. 이 KDF는 CDI와 다음 펌웨어 이미지의 해시를 사용하여 새로운 파생 CDI를 생성합니다. 각 단계에서는 자체 키 쌍을 생성하고 이를 사용하여 단계별 측정값과 기타 연결된 메타데이터가 포함된 인증서에 서명합니다.