KeyMint (이전 Keymaster) API는 이름-값 쌍인 승인 태그를 광범위하게 사용합니다. 가능한 각 태그에는 다음이 있습니다.
- 연결된 값이 있는 enum 이름
- 연결된 유형 (예: 정수, 바이트, 날짜, enum)으로, 여러 값이 허용되는지 여부를 나타내는 표시가 포함됩니다.
예를 들어 이름이 Tag::BLOCK_MODE
인 태그에는 기본 열거형 값 4
과 연결된 값이 반복 가능한 열거형 (이 경우 BlockMode
)임을 나타내는 TagType::ENUM_REP
유형 마커가 있습니다.
태그는 API에서 두 가지 기능을 수행합니다.
- API에서 실행되는 작업의 매개변수입니다. 예를 들어 HMAC 서명 작업의
Tag::MAC_LENGTH
는 요청된 HMAC 길이를 나타냅니다. - 주요 특징으로서 특정 키에 영구적으로 바인딩된 값 (즉, 키 blob에 포함됨)은 예를 들어
Tag::EC_CURVE
는 키가 어떤 타원 곡선을 위한 것인지 나타냅니다. 각 주요 특성은 시스템의 어느 부분이 속성을 관리하는지 나타내는 보안 수준과 연결됩니다.- 보안 수준이
TRUSTED_ENVIRONMENT
또는STRONGBOX
인 키 특성은 보안 하드웨어에서 적용됩니다. - 보안 수준이
SOFTWARE
또는KEYSTORE
인 주요 특징은keystore2
시스템 서비스에 의해서만 적용됩니다. 따라서 이러한 특징은 OS 손상에 탄력적이지 않습니다.
- 보안 수준이
많은 태그가 주요 특성과 매개변수 역할을 모두 수행합니다.
- 주요 특징은 키에 허용된 매개변수 집합을 나타냅니다. 예를 들면 다음과 같습니다.
- ECDSA 키의
Tag::PURPOSE
에는SIGN
과AGREE_KEY
이 모두 포함될 수 있습니다. - AES 키의
Tag::BLOCK_MODE
에는 ECB, CBC, CTR 모드가 포함될 수 있습니다.
- ECDSA 키의
- 그런 다음
begin()
요청에는 작업의 특정 매개변수 값이 포함됩니다. 예를 들면 다음과 같습니다.begin()
에는 주요 특징의Tag::PURPOSE
값 중 하나와 일치해야 하는 명시적 목적 매개변수가 있습니다.- AES 작업의
begin()
에는params
필드에Tag::BLOCK_MODE
의 단일 값이 포함되어야 하며, 이는 키 특성의 값 중 하나와 일치해야 합니다.
이 이중 기능은 특히 키 생성 또는 가져오기 작업에서 keyParams
로 전달된 태그 컬렉션과 관련이 있습니다.
- 태그 중 일부는 키 생성 작업 자체의 매개변수 역할을 합니다. 예를 들어
Tag::CERTIFICATE_SUBJECT
태그는 반환된 X.509 인증서의 필드를 제어하여 (비대칭) 키 생성 프로세스에만 영향을 미칩니다. - 다른 태그는 새로 생성된 키에 키 특성으로 바인딩되고 반환된 keyblob에 캡슐화되어 키와 영구적으로 연결됩니다.
태그 값에 관한 자세한 내용은 다음 HAL 인터페이스 사양을 참고하세요.
- KeyMint - 모든 태그는 관련 Android 출시 브랜치의
Tag.aidl
에 정의되어 있습니다. - Keymaster - 태그는 Keymaster 3의 경우
3.0/types.hal
, Keymaster 4의 경우4.0/types.hal
과 같이 각keymaster-version
에 대해platform/hardware/interfaces/keymaster/keymaster-version/types.hal
에 정의되어 있습니다. Keymaster 2 이하의 경우 태그는platform/hardware/libhardware/include/hardware/keymaster_defs.h
에 정의됩니다.