기기 식별자 구성 엔진

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

DICE 파생 프로세스

간소화된 DICE 파생 프로세스

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

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

0단계: 초기화

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

1단계: 초기 키 파생

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

2~n단계: 재귀 키 파생

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