KeyMint (이전 명칭: Keymaster) API는 이름-값 쌍인 승인 태그를 광범위하게 사용합니다. 가능한 각 태그에는 다음이 있습니다.
- 연결된 값이 있는 enum 이름
- 연결된 유형 (예: 정수, 바이트, 날짜, enum). 여기에는 여러 값이 허용되는지 여부에 관한 표시가 포함됩니다.
예를 들어 이름이 Tag::BLOCK_MODE
인 태그는 기본 enum 값이 4
이고 연결된 값이 반복 가능한 enum (이 경우 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 인증서의 필드를 제어하여 (비대칭) 키 생성 프로세스에만 영향을 미칩니다. - 다른 태그는 새로 생성된 키에 키 특성으로 바인딩되며 반환된 키 blob에 캡슐화되어 키와 영구적으로 연결됩니다.
태그 값에 관한 자세한 내용은 다음 HAL 인터페이스 사양을 참고하세요.
- KeyMint: 모든 태그는 관련 Android 출시 브랜치의
Tag.aidl
에 정의됩니다. - Keymaster: 태그는 각
keymaster-version
에 대해platform/hardware/interfaces/keymaster/keymaster-version/types.hal
에서 정의됩니다(예: Keymaster 3의 경우3.0/types.hal
, Keymaster 4의 경우4.0/types.hal
). Keymaster 2 이하의 경우 태그는platform/hardware/libhardware/include/hardware/keymaster_defs.h
에서 정의됩니다.