KeyMint API (sebelumnya Keymaster) banyak menggunakan tag otorisasi, yang merupakan pasangan nama-nilai. Setiap kemungkinan tag memiliki:
- Nama enum dengan nilai terkait
- Jenis terkait (misalnya, integer, byte, tanggal, enum), yang mencakup indikasi apakah beberapa nilai diizinkan
Misalnya, tag dengan nama
Tag::BLOCK_MODE
memiliki nilai enum dasar 4
dan penanda jenis TagType::ENUM_REP
yang menunjukkan bahwa nilai terkait adalah enum yang dapat diulang (dalam
kasus ini, BlockMode
).
Tag memiliki fungsi ganda di API:
- Sebagai parameter untuk operasi yang dilakukan pada API, misalnya,
Tag::MAC_LENGTH
pada operasi penandatanganan HMAC menunjukkan panjang HMAC yang diminta. - Sebagai karakteristik utama, nilai yang terikat secara permanen
ke kunci tertentu (yaitu, disertakan dalam blob kunci), misalnya,
Tag::EC_CURVE
menunjukkan kurva elips mana yang digunakan untuk kunci. Setiap karakteristik utama dikaitkan dengan tingkat keamanan yang menunjukkan bagian sistem mana yang mengatur atribut:- Karakteristik utama dengan tingkat keamanan
TRUSTED_ENVIRONMENT
atauSTRONGBOX
diterapkan di hardware yang aman. - Karakteristik utama dengan tingkat keamanan
SOFTWARE
atauKEYSTORE
hanya diterapkan oleh layanan sistemkeystore2
(sehingga karakteristik tersebut tidak tahan terhadap kompromi OS).
- Karakteristik utama dengan tingkat keamanan
Banyak tag berfungsi sebagai parameter karakteristik utama dan:
- Karakteristik utama menunjukkan kumpulan parameter yang diizinkan untuk kunci,
misalnya:
Tag::PURPOSE
kunci ECDSA dapat mencakupSIGN
danAGREE_KEY
.Tag::BLOCK_MODE
untuk kunci AES dapat mencakup mode ECB, CBC, dan CTR.
- Permintaan
begin()
kemudian menyertakan nilai parameter tertentu untuk operasi, misalnya:begin()
memiliki parameter tujuan eksplisit yang harus cocok dengan salah satu nilaiTag::PURPOSE
karakteristik utama.begin()
untuk operasi AES harus menyertakan satu nilai untukTag::BLOCK_MODE
di kolomparams
, yang harus cocok dengan salah satu nilai dalam karakteristik kunci.
Fungsi ganda ini sangat relevan untuk pengumpulan tag yang diteruskan
sebagai keyParams
pada operasi pembuatan atau impor kunci.
- Beberapa tag berfungsi sebagai parameter untuk operasi pembuatan kunci
itu sendiri. Misalnya, tag
Tag::CERTIFICATE_SUBJECT
hanya memengaruhi proses pembuatan kunci (asimetris), dengan mengontrol kolom dalam sertifikat X.509 yang ditampilkan. - Tag lain terikat ke kunci yang baru dibuat sebagai karakteristik kunci, dan dienkapsulasi dalam keyblob yang ditampilkan sehingga tag tersebut terkait secara permanen dengan kunci.
Informasi mendetail tentang nilai tag dapat ditemukan dalam spesifikasi antarmuka HAL berikut:
- KeyMint — Semua tag ditentukan
di
Tag.aidl
pada cabang rilis Android yang relevan. - Keymaster — Tag ditentukan
di
platform/hardware/interfaces/keymaster/keymaster-version/types.hal
untuk setiapkeymaster-version
masing-masing, seperti3.0/types.hal
untuk Keymaster 3 dan4.0/types.hal
untuk Keymaster 4. Untuk Keymaster 2 dan yang lebih lama, tag ditentukan diplatform/hardware/libhardware/include/hardware/keymaster_defs.h
.