기기 식별자 구성 엔진

기기 식별자 구성 엔진 (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를 생성합니다. 각 단계는 자체 키 쌍을 생성하고 이를 사용하여 단계별 측정값과 기타 관련 메타데이터가 포함된 인증서에 서명합니다.