버전 결합

모든 KeyMint 키는 기기의 신뢰할 수 있는 루트에 결합되어야 합니다(MUST). 신뢰할 수 있는 루트는 부팅 이미지의 서명을 확인하는 데 사용되는 공개 키와 부트로더 잠금 상태에서 파생된 비트 문자열입니다.

KeyMint 키는 기기의 운영체제 버전 및 패치 수준에도 결합되어야 합니다. Treble의 모듈형 구조를 지원하기 위해 이 버전 결합에는 각 파티션(boot, system, vendor)의 별도 패치 수준이 포함됩니다. 이를 통해 각 파티션을 독립적으로 업데이트하면서 롤백 보호를 제공할 수 있습니다.

이 버전 결합을 구현하려면 KeyMint 신뢰할 수 있는 앱 (TA)이 현재 OS 버전과 패치 수준을 안전하게 수신하고 수신하는 정보가 실행 중인 시스템에 관한 모든 정보와 일치하는지 확인하는 방법이 필요합니다.

  • Android 자체 검사 부팅 (AVB)을 사용하는 기기:
    • 패치 수준과 OS 버전은 vbmeta.img에 포함될 수 있으므로 부트로더가 이를 KeyMint에 제공할 수 있습니다.
    • 연결된 파티션의 경우 파티션의 버전 정보는 연결된 VBMeta에 있습니다.
    • 일반적으로 버전 정보는 특정 파티션의 인증 데이터 (해시 또는 해시 트리)가 포함된 VBMeta struct에 있어야 합니다.
  • AVB가 없는 기기:
    • 자체 검사 부팅 구현은 부트로더가 KeyMint에 해시를 제공할 수 있도록 버전 메타데이터의 해시를 부트로더에 제공해야 합니다.
    • boot.img는 헤더에 패치 수준을 계속 저장할 수 있습니다.
    • system.img는 읽기 전용 속성에 패치 수준과 OS 버전을 계속 저장할 수 있습니다.
    • vendor.img는 읽기 전용 속성 ro.vendor.build.version.security_patch에 패치 수준을 저장합니다.
    • 부트로더는 자체 검사 부팅으로 검증된 모든 데이터의 해시를 KeyMint에 제공할 수 있습니다.

다음 태그는 관련 파티션의 버전 정보를 설명합니다.

KeyMint 구현은 모든 패치 수준을 독립적으로 처리해야 합니다. 모든 버전 정보가 키와 연결된 값과 일치하는 경우 키를 사용할 수 있습니다. 현재 기기 버전이 키와 연결된 값보다 최신인 경우 KeyMint는 키를 사용하려고 시도할 때마다 KEY_REQUIRES_UPGRADE 오류를 반환합니다. 그런 다음 키 저장소는 IKeyMintDevice::upgradeKey를 실행하여 현재 패치 수준에 바인딩된 새 키 blob을 생성합니다. 이후 키 저장소는 IKeyMintDevice::deleteKey를 호출하여 이전 키 blob을 삭제합니다.