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_LENGTHpada 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_CURVEmenunjukkan 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_ENVIRONMENTatauSTRONGBOXditerapkan di hardware yang aman. - Karakteristik utama dengan tingkat keamanan
SOFTWAREatauKEYSTOREhanya 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::PURPOSEkunci ECDSA dapat mencakupSIGNdanAGREE_KEY.Tag::BLOCK_MODEuntuk 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::PURPOSEkarakteristik utama.begin()untuk operasi AES harus menyertakan satu nilai untukTag::BLOCK_MODEdi 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_SUBJECThanya 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.aidlpada cabang rilis Android yang relevan. - Keymaster — Tag ditentukan
di
platform/hardware/interfaces/keymaster/keymaster-version/types.haluntuk setiapkeymaster-versionmasing-masing, seperti3.0/types.haluntuk Keymaster 3 dan4.0/types.haluntuk Keymaster 4. Untuk Keymaster 2 dan yang lebih lama, tag ditentukan diplatform/hardware/libhardware/include/hardware/keymaster_defs.h.