KeyMint (पहले इसे Keymaster कहा जाता था) API, अनुमति देने वाले टैग का बड़े पैमाने पर इस्तेमाल करता है. ये नाम-वैल्यू पेयर होते हैं. हर टैग में ये शामिल हैं:
- जुड़ी हुई वैल्यू के साथ enum का नाम
- जुड़ा हुआ टाइप (उदाहरण के लिए, पूर्णांक, बाइट, तारीख, enum), जिसमें यह जानकारी शामिल होती है कि एक से ज़्यादा वैल्यू की अनुमति है या नहीं
उदाहरण के लिए, Tag::BLOCK_MODE
नाम वाले टैग की बेस एनम वैल्यू 4
है. साथ ही, इसमें TagType::ENUM_REP
टाइप का मार्कर है. इससे पता चलता है कि इससे जुड़ी वैल्यू, दोहराई जा सकने वाली एनम वैल्यू है. इस मामले में, यह वैल्यू BlockMode
है.
टैग, एपीआई पर दो काम करते हैं:
- एपीआई पर की गई किसी कार्रवाई के पैरामीटर के तौर पर. उदाहरण के लिए, एचएमएसी साइनिंग की कार्रवाई पर
Tag::MAC_LENGTH
से, एचएमएसी की अनुरोध की गई लंबाई का पता चलता है. - मुख्य विशेषताओं के तौर पर, वे वैल्यू जो किसी खास कुंजी से हमेशा के लिए जुड़ी होती हैं. जैसे, कुंजी के ब्लब में शामिल होती हैं. उदाहरण के लिए,
Tag::EC_CURVE
से पता चलता है कि कोई कुंजी किस एलिप्टिक कर्व के लिए है. हर मुख्य विशेषता, सुरक्षा के एक लेवल से जुड़ी होती है. इससे पता चलता है कि सिस्टम का कौन-सा हिस्सा, एट्रिब्यूट की निगरानी करता है:- सुरक्षा कुंजी की मुख्य विशेषता, सुरक्षित हार्डवेयर में
TRUSTED_ENVIRONMENT
याSTRONGBOX
के सुरक्षा स्तर के साथ लागू की जाती है. - सुरक्षा लेवल
SOFTWARE
याKEYSTORE
वाली मुख्य विशेषता को सिर्फ़keystore2
सिस्टम सेवा लागू करती है. इसलिए, ऐसी विशेषता ओएस के साथ छेड़छाड़ होने पर भी सुरक्षित नहीं रहती.
- सुरक्षा कुंजी की मुख्य विशेषता, सुरक्षित हार्डवेयर में
कई टैग, मुख्य विशेषताओं और पैरामीटर, दोनों के तौर पर काम करते हैं:
- मुख्य विशेषताओं से, किसी कुंजी के लिए अनुमति वाले पैरामीटर के सेट के बारे में पता चलता है. उदाहरण के लिए:
- किसी ECDSA कुंजी के
Tag::PURPOSE
मेंSIGN
औरAGREE_KEY
, दोनों शामिल हो सकते हैं. - एईएस कुंजी के लिए
Tag::BLOCK_MODE
में ईसीबी, सीबीसी, और सीटीआर मोड शामिल हो सकते हैं.
- किसी ECDSA कुंजी के
- इसके बाद,
begin()
अनुरोध में कार्रवाई के लिए, पैरामीटर की कोई खास वैल्यू शामिल होती है. उदाहरण के लिए:begin()
में एक खास मकसद वाला पैरामीटर होता है. इसकी वैल्यू, मुख्य विशेषताओं कीTag::PURPOSE
वैल्यू में से किसी एक से मेल खानी चाहिए.- AES ऑपरेशन के लिए
begin()
कोparams
फ़ील्ड मेंTag::BLOCK_MODE
के लिए एक वैल्यू शामिल करनी होगी. यह वैल्यू, कुंजी की विशेषताओं में से किसी एक वैल्यू से मेल खानी चाहिए.
यह दोहरा फ़ंक्शन, खास तौर पर उन टैग को इकट्ठा करने के लिए काम का है जिन्हें कुंजी जनरेट करने या इंपोर्ट करने की कार्रवाई के दौरान keyParams
के तौर पर पास किया जाता है.
- कुछ टैग, कुंजी जनरेट करने की कार्रवाई के लिए पैरामीटर के तौर पर काम करते हैं. उदाहरण के लिए,
Tag::CERTIFICATE_SUBJECT
टैग, सिर्फ़ (एसिमेट्रिक) कुंजी जनरेट करने की प्रोसेस पर असर डालता है. यह X.509 सर्टिफ़िकेट में मौजूद किसी फ़ील्ड को कंट्रोल करता है. - अन्य टैग, नई जनरेट की गई कुंजी से key characteristics के तौर पर जुड़े होते हैं. साथ ही, इन्हें वापस किए गए keyblob में शामिल किया जाता है, ताकि ये हमेशा कुंजी से जुड़े रहें.
टैग वैल्यू के बारे में ज़्यादा जानकारी, यहां दी गई HAL इंटरफ़ेस की खास बातों में मिल सकती है:
- KeyMint — सभी टैग, Android के रिलीज़ किए गए वर्शन की संबंधित ब्रांच में
Tag.aidl
में तय किए गए हैं. - Keymaster — टैग,
platform/hardware/interfaces/keymaster/keymaster-version/types.hal
में तय किए जाते हैं. ये टैग, हरkeymaster-version
के लिए अलग-अलग होते हैं. जैसे, Keymaster 3 के लिए3.0/types.hal
और Keymaster 4 के लिए4.0/types.hal
. Keymaster 2 और इससे पहले के वर्शन के लिए, टैगplatform/hardware/libhardware/include/hardware/keymaster_defs.h
में तय किए जाते हैं.