KeyMint (पहले इसे Keymaster कहा जाता था) एपीआई, अनुमति टैग का ज़्यादा से ज़्यादा इस्तेमाल करता है. ये नाम-वैल्यू पेयर होते हैं. हर टैग में ये चीज़ें होती हैं:
- एनोटेशन का नाम और उससे जुड़ी वैल्यू
- इससे जुड़ा टाइप (उदाहरण के लिए, इंटीजर, बाइट, तारीख, वैल्यू की सूची), जिसमें यह जानकारी शामिल होती है कि एक से ज़्यादा वैल्यू की अनुमति है या नहीं
उदाहरण के लिए, नाम Tag::BLOCK_MODE
वाले टैग की बुनियादी वैल्यू 4
है. साथ ही, इसमें TagType::ENUM_REP
टाइप का मार्कर है, जो बताता है कि इससे जुड़ी वैल्यू, दोहराई जा सकने वाली वैल्यू है. इस मामले में, BlockMode
.
टैग, एपीआई पर दो काम करते हैं:
- एपीआई पर किए गए किसी ऑपरेशन के पैरामीटर के तौर पर, उदाहरण के लिए, एचएमएस साइनिंग ऑपरेशन पर
Tag::MAC_LENGTH
, एचएमएस की अनुरोध की गई लंबाई दिखाता है. - कुंजी की विशेषताओं के तौर पर, ऐसी वैल्यू जो किसी खास कुंजी से हमेशा के लिए
बाउंड होती हैं (यानी, कुंजी ब्लॉब में शामिल होती हैं). उदाहरण के लिए,
Tag::EC_CURVE
से पता चलता है कि कुंजी किस एलिप्टिक कर्व के लिए है. हर मुख्य विशेषता, सुरक्षा के किसी लेवल से जुड़ी होती है. इससे पता चलता है कि सिस्टम का कौनसा हिस्सा एट्रिब्यूट को कंट्रोल करता है:- सुरक्षित हार्डवेयर में, सुरक्षा के लेवल
TRUSTED_ENVIRONMENT
याSTRONGBOX
वाली मुख्य विशेषता लागू की जाती है. - सुरक्षा लेवल
SOFTWARE
याKEYSTORE
वाली मुख्य विशेषता को सिर्फ़keystore2
सिस्टम सेवा लागू करती है. इसलिए, ऐसी विशेषता ओएस के साथ छेड़छाड़ के लिए सुरक्षित नहीं है.
- सुरक्षित हार्डवेयर में, सुरक्षा के लेवल
कई टैग, मुख्य विशेषताओं और पैरामीटर, दोनों के तौर पर काम करते हैं:
- मुख्य विशेषताओं से, किसी कुंजी के लिए अनुमति वाले पैरामीटर के सेट का पता चलता है. उदाहरण के लिए:
- ईसीएसडीए कुंजी के
Tag::PURPOSE
में,SIGN
औरAGREE_KEY
, दोनों शामिल हो सकते हैं. - एईएस पासकोड के लिए
Tag::BLOCK_MODE
में ईसीबी, सीबीसी, और सीटीआर मोड शामिल हो सकते हैं.
- ईसीएसडीए कुंजी के
- इसके बाद,
begin()
अनुरोध में ऑपरेशन के लिए एक खास पैरामीटर वैल्यू शामिल होती है. उदाहरण के लिए:begin()
में एक खास मकसद वाला पैरामीटर होता है, जो मुख्य विशेषताओं कीTag::PURPOSE
वैल्यू में से किसी एक से मेल खाना चाहिए.- AES ऑपरेशन के लिए
begin()
में,params
फ़ील्ड मेंTag::BLOCK_MODE
के लिए एक वैल्यू शामिल होनी चाहिए. यह वैल्यू, मुख्य विशेषताओं में मौजूद किसी वैल्यू से मेल खानी चाहिए.
यह ड्यूअल फ़ंक्शन, कुंजी जनरेट करने या इंपोर्ट करने के ऑपरेशन पर keyParams
के तौर पर पास किए गए टैग को इकट्ठा करने के लिए खास तौर पर काम का है.
- कुछ टैग, पासकोड जनरेट करने की प्रोसेस के लिए पैरामीटर के तौर पर काम करते हैं. उदाहरण के लिए,
Tag::CERTIFICATE_SUBJECT
टैग का असर सिर्फ़ (असिममेट्रिक) कुंजी जनरेशन प्रोसेस पर पड़ता है. ऐसा, दिखाए गए X.509 सर्टिफ़िकेट में मौजूद फ़ील्ड को कंट्रोल करके किया जाता है. - अन्य टैग, नई जनरेट की गई कुंजी के साथ, कुंजी की विशेषताओं के तौर पर बाउंड होते हैं. साथ ही, उन्हें दिखाए गए keyblob में शामिल किया जाता है, ताकि वे कुंजी से हमेशा जुड़े रहें.
टैग वैल्यू के बारे में ज़्यादा जानकारी, यहां दिए गए एचएएल इंटरफ़ेस की खास बातों में मिल सकती है:
- 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
में तय किए जाते हैं.