कीमास्टर प्राधिकरण टैग

यह पृष्ठ कीमास्टर एचएएल के कार्यान्वयनकर्ताओं की सहायता के लिए विवरण प्रदान करता है। यह एचएएल में प्रत्येक टैग को कवर करता है, वह टैग किस कीमास्टर संस्करण में उपलब्ध है, और क्या टैग दोहराने योग्य है। टैग विवरण में बताए गए को छोड़कर, नीचे दिए गए सभी टैग मुख्य विशेषताओं को निर्दिष्ट करने के लिए कुंजी निर्माण के दौरान उपयोग किए जाते हैं।

कीमास्टर 4 के लिए, टैग्स को platform/hardware/interfaces/keymaster/ keymaster-version /types.hal में परिभाषित किया गया है, जैसे कि कीमास्टर 3 के लिए 3.0/टाइप्स.हाल और कीमास्टर 4 के लिए 4.0/टाइप्स.हाल। कीमास्टर 2 और उससे नीचे के लिए, टैग्स को platform/hardware/libhardware/include/hardware/keymaster_defs.h में परिभाषित किया गया है।

फ़ंक्शंस के लिए, कीमास्टर फ़ंक्शंस पृष्ठ देखें।

टैग::ACTIVE_DATETIME

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

वह दिनांक और समय निर्दिष्ट करता है जिस पर कुंजी सक्रिय हो जाती है। इस समय से पहले, कुंजी का उपयोग करने का कोई भी प्रयास ErrorCode::KEY_NOT_YET_VALID के साथ विफल हो जाता है।

मान एक 64-बिट पूर्णांक है जो 1 जनवरी, 1970 से मिलीसेकंड का प्रतिनिधित्व करता है।

टैग::एल्गोरिदम

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

क्रिप्टोग्राफ़िक एल्गोरिदम निर्दिष्ट करता है जिसके साथ कुंजी का उपयोग किया जाता है।

संभावित मान निम्नलिखित गणना द्वारा परिभाषित किए गए हैं:

कीमास्टर 3
enum class Algorithm : uint32_t {
    RSA = 1,
    EC = 3,
    AES = 32,
    HMAC = 128,
};
कीमास्टर 2 और पहले का
typedef enum {
    KM_ALGORITHM_RSA = 1,
    KM_ALGORITHM_EC = 3,
    KM_ALGORITHM_AES = 32,
    KM_ALGORITHM_HMAC = 128,
} keymaster_algorithm_t;

टैग::सभी_अनुप्रयोग

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

भविष्य उपयोग के लिए आरक्षित।

टैग::शरीर पर अनुमति दें

संस्करण : 2, 3, 4

दोहराने योग्य ? नहीं

यह टैग केवल ऑन-बॉडी सेंसर वाले Android Wear डिवाइस के लिए लागू है। इस बिंदु पर, यह उम्मीद नहीं की जाती है कि कोई भी टीईई ऑन-बॉडी सेंसर तक सुरक्षित पहुंच प्रदान करने में सक्षम होगा, या ऑन-बॉडी सेंसर बहुत सुरक्षित हैं, इसलिए यह पूरी तरह से सॉफ्टवेयर-प्रवर्तित सुविधा होने की उम्मीद है।

टैग::सभी_उपयोगकर्ता

संस्करण : 3, 4

दोहराने योग्य ? नहीं

भविष्य उपयोग के लिए आरक्षित।

टैग::एप्लिकेशन_डेटा

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

जब generateKey या आयातKey को प्रदान किया जाता है, तो यह टैग उस डेटा को निर्दिष्ट करता है जो कुंजी के सभी उपयोगों के दौरान आवश्यक होता है। विशेष रूप से, editKey और getKeyCharacteristics के लिए कॉल को clientId पैरामीटर के लिए समान मान प्रदान करने की आवश्यकता होती है, और कॉल शुरू करने के लिए inParams सेट के हिस्से के रूप में इस टैग और समान संबंधित डेटा को प्रदान करने की आवश्यकता होती है। यदि सही डेटा प्रदान नहीं किया गया है, तो फ़ंक्शन ErrorCode::INVALID_KEY_BLOB लौटाता है।

इस टैग की सामग्री क्रिप्टोग्राफ़िक रूप से कुंजी से बंधी हुई है, जिसका अर्थ है कि यह किसी ऐसे प्रतिद्वंद्वी के लिए संभव नहीं होना चाहिए जिसके पास सभी सुरक्षित विश्व रहस्यों तक पहुंच है, लेकिन टैग सामग्री तक पहुंच नहीं है, ताकि टैग को बलपूर्वक लागू किए बिना कुंजी को डिक्रिप्ट किया जा सके। सामग्री, जिसे अनुप्रयोग पर्याप्त उच्च-एन्ट्रापी सामग्री निर्दिष्ट करके रोक सकते हैं।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::आवेदन_आईडी

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

जब generateKey या आयातKey को प्रदान किया जाता है, तो यह टैग उस डेटा को निर्दिष्ट करता है जो कुंजी के सभी उपयोगों के दौरान आवश्यक होता है। विशेष रूप से, editKey और getKeyCharacteristics के लिए कॉल को clientId पैरामीटर में समान मान प्रदान करने की आवश्यकता होती है, और कॉल शुरू करने के लिए inParams सेट के हिस्से के रूप में इस टैग और समान संबंधित डेटा को प्रदान करने की आवश्यकता होती है। यदि सही डेटा प्रदान नहीं किया गया है, तो फ़ंक्शन ErrorCode::INVALID_KEY_BLOB लौटाता है।

इस टैग की सामग्री क्रिप्टोग्राफ़िक रूप से कुंजी से बंधी हुई है, जिसका अर्थ है कि यह एक प्रतिद्वंद्वी है जो सभी सुरक्षित विश्व रहस्यों तक पहुंच सकता है - लेकिन टैग सामग्री तक पहुंच नहीं है - कुंजी को डिक्रिप्ट नहीं कर सकता है (टैग सामग्री को क्रूर तरीके से मजबूर किए बिना) ).

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::एसोसिएटेड_डेटा

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

एईएस-जीसीएम एन्क्रिप्शन या डिक्रिप्शन के लिए "संबद्ध डेटा" प्रदान करता है। यह टैग उस डेटा को अद्यतन और निर्दिष्ट करने के लिए प्रदान किया जाता है जो एन्क्रिप्टेड/डिक्रिप्टेड नहीं है, लेकिन जीसीएम टैग की गणना में उपयोग किया जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::ATTESTATION_APPLICATION_ID

संस्करण : 3, 4

दोहराने योग्य ? नहीं

इसका उपयोग उन संभावित अनुप्रयोगों के सेट की पहचान करने के लिए किया जाता है जिनमें से किसी एक ने मुख्य सत्यापन शुरू किया है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::सत्यापन_चुनौती

संस्करण : 3, 4

दोहराने योग्य ? नहीं

सत्यापन में चुनौती प्रदान करने के लिए उपयोग किया जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::ATTESTATION_ID_BRAND

संस्करण : 3, 4

दोहराने योग्य ? नहीं

डिवाइस का ब्रांड नाम प्रदान करता है, जैसा कि एंड्रॉइड में Build.BRAND द्वारा दिया गया है। यह फ़ील्ड केवल डिवाइस के पहचानकर्ताओं के सत्यापन का अनुरोध करते समय सेट की जाती है।

यदि डिवाइस आईडी सत्यापन का समर्थन नहीं करता है (या destroyAttestationIds() को पहले कॉल किया गया था और डिवाइस अब अपनी आईडी प्रमाणित नहीं कर सकता है), तो कोई भी कुंजी सत्यापन अनुरोध जिसमें यह टैग शामिल है, ErrorCode::CANNOT_ATTEST_IDS के साथ विफल हो जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::ATTESTATION_ID_DEVICE

संस्करण : 3, 4

दोहराने योग्य ? नहीं

डिवाइस का डिवाइस नाम प्रदान करता है, जैसा कि Android में Build.DEVICE द्वारा दिया गया है। यह फ़ील्ड केवल डिवाइस के पहचानकर्ताओं के सत्यापन का अनुरोध करते समय सेट की जाती है।

यदि डिवाइस आईडी सत्यापन का समर्थन नहीं करता है (या destroyAttestationIds() को पहले कॉल किया गया था और डिवाइस अब अपनी आईडी प्रमाणित नहीं कर सकता है), तो कोई भी कुंजी सत्यापन अनुरोध जिसमें यह टैग शामिल है, ErrorCode::CANNOT_ATTEST_IDS के साथ विफल हो जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::ATTESTATION_ID_IMEI

संस्करण : 3, 4

दोहराने योग्य ? हाँ

डिवाइस पर सभी रेडियो के लिए IMEI प्रदान करता है। यह फ़ील्ड केवल डिवाइस के पहचानकर्ताओं के सत्यापन का अनुरोध करते समय सेट की जाती है।

यदि डिवाइस आईडी सत्यापन का समर्थन नहीं करता है (या destroyAttestationIds() को पहले कॉल किया गया था और डिवाइस अब अपनी आईडी प्रमाणित नहीं कर सकता है), तो कोई भी कुंजी सत्यापन अनुरोध जिसमें यह टैग शामिल है, ErrorCode::CANNOT_ATTEST_IDS के साथ विफल हो जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::ATTESTATION_ID_निर्माता

संस्करण : 3, 4

दोहराने योग्य ? नहीं

डिवाइस का निर्माता नाम प्रदान करता है, जैसा कि एंड्रॉइड में Build.MANUFACTURER द्वारा दिया गया है। यह फ़ील्ड केवल डिवाइस के पहचानकर्ताओं के सत्यापन का अनुरोध करते समय सेट की जाती है।

यदि डिवाइस आईडी सत्यापन का समर्थन नहीं करता है (या destroyAttestationIds() को पहले कॉल किया गया था और डिवाइस अब अपनी आईडी प्रमाणित नहीं कर सकता है), तो कोई भी कुंजी सत्यापन अनुरोध जिसमें यह टैग शामिल है, ErrorCode::CANNOT_ATTEST_IDS के साथ विफल हो जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::ATTESTATION_ID_MEID

संस्करण : 3, 4

दोहराने योग्य ? हाँ

डिवाइस पर सभी रेडियो के लिए MEID प्रदान करता है। यह फ़ील्ड केवल डिवाइस के पहचानकर्ताओं के सत्यापन का अनुरोध करते समय ही सेट की जाएगी।

यदि डिवाइस आईडी सत्यापन का समर्थन नहीं करता है (या destroyAttestationIds() को पहले कॉल किया गया था और डिवाइस अब अपनी आईडी प्रमाणित नहीं कर सकता है), तो कोई भी कुंजी सत्यापन अनुरोध जिसमें यह टैग शामिल है, ErrorCode::CANNOT_ATTEST_IDS के साथ विफल हो जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::ATTESTATION_ID_MODEL

संस्करण : 3, 4

दोहराने योग्य ? नहीं

डिवाइस का मॉडल नाम प्रदान करता है, जैसा कि Android में Build.MODEL द्वारा दिया गया है। यह फ़ील्ड केवल डिवाइस के पहचानकर्ताओं के सत्यापन का अनुरोध करते समय सेट की जाती है।

यदि डिवाइस आईडी सत्यापन का समर्थन नहीं करता है (या destroyAttestationIds() को पहले कॉल किया गया था और डिवाइस अब अपनी आईडी प्रमाणित नहीं कर सकता है), तो कोई भी कुंजी सत्यापन अनुरोध जिसमें यह टैग शामिल है, ErrorCode::CANNOT_ATTEST_IDS के साथ विफल हो जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::ATTESTATION_ID_PRODUCT

संस्करण : 3, 4

दोहराने योग्य ? नहीं

डिवाइस का उत्पाद नाम प्रदान करता है, जैसा कि Android में Build.PRODUCT द्वारा दिया गया है। यह फ़ील्ड केवल डिवाइस के पहचानकर्ताओं के सत्यापन का अनुरोध करते समय सेट की जाती है।

यदि डिवाइस आईडी सत्यापन का समर्थन नहीं करता है (या destroyAttestationIds() को पहले कॉल किया गया था और डिवाइस अब अपनी आईडी प्रमाणित नहीं कर सकता है), तो कोई भी कुंजी सत्यापन अनुरोध जिसमें यह टैग शामिल है, ErrorCode::CANNOT_ATTEST_IDS के साथ विफल हो जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::ATTESTATION_ID_SERIAL

संस्करण : 3, 4

दोहराने योग्य ? नहीं

डिवाइस का सीरियल नंबर प्रदान करता है। यह फ़ील्ड केवल डिवाइस के पहचानकर्ताओं के सत्यापन का अनुरोध करते समय सेट की जाती है।

यदि डिवाइस आईडी सत्यापन का समर्थन नहीं करता है (या destroyAttestationIds() को पहले कॉल किया गया था और डिवाइस अब अपनी आईडी प्रमाणित नहीं कर सकता है), तो कोई भी कुंजी सत्यापन अनुरोध जिसमें यह टैग शामिल है, ErrorCode::CANNOT_ATTEST_IDS के साथ विफल हो जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::AUTH_TIMEOUT

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

प्रमाणीकरण के बाद कुंजी को उपयोग के लिए अधिकृत करने का समय सेकंड में निर्दिष्ट करता है। यदि टैग::USER_SECURE_ID मौजूद है और यह टैग नहीं है, तो कुंजी को प्रत्येक उपयोग के लिए प्रमाणीकरण की आवश्यकता होती है (प्रमाणीकरण-प्रति-ऑपरेशन प्रवाह के विवरण के लिए प्रारंभ देखें)।

मान एक 32-बिट पूर्णांक है जो Tag::USER_SECURE_ID द्वारा निर्दिष्ट उपयोगकर्ता के सफल प्रमाणीकरण के बाद Tag::USER_AUTH_TYPE द्वारा निर्दिष्ट प्रमाणीकरण विधि के साथ सेकंड में समय निर्दिष्ट करता है कि कुंजी का उपयोग किया जा सकता है।

टैग::AUTH_टोकन

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

किसी कुंजी ऑपरेशन के लिए उपयोगकर्ता प्रमाणीकरण को साबित करने के लिए प्रारंभ , अद्यतन या समाप्त करने के लिए एक प्रमाणीकरण टोकन प्रदान करता है जिसके लिए इसकी आवश्यकता होती है (कुंजी में टैग::USER_SECURE_ID है)।

मान एक ब्लॉब है जिसमें hw_auth_token_t संरचना शामिल है।

टैग::BLOB_उपयोग_आवश्यकताएँ

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

उपयोग की जाने वाली जेनरेट की गई कुंजी के लिए आवश्यक सिस्टम वातावरण शर्तों को निर्दिष्ट करता है।

संभावित मान निम्नलिखित गणना द्वारा परिभाषित किए गए हैं:

कीमास्टर 3
enum class KeyBlobUsageRequirements : uint32_t {
    STANDALONE = 0,
    REQUIRES_FILE_SYSTEM = 1,
};
कीमास्टर 2 और पहले का
typedef enum {
    KM_BLOB_STANDALONE = 0,
    KM_BLOB_REQUIRES_FILE_SYSTEM = 1,
} keymaster_key_blob_usage_requirements_t;

इस टैग को कुंजी निर्माण के दौरान निर्दिष्ट किया जा सकता है ताकि कुंजी निर्दिष्ट स्थिति में प्रयोग करने योग्य हो। इसे generateKey और getKeyCharacteristics की प्रमुख विशेषताओं के साथ वापस करने की आवश्यकता है। यदि कॉलर KeyBlobUsageRequirements::STANDALONE मान के साथ Tag::BLOB_USAGE_REQUIREMENTS निर्दिष्ट करता है तो ट्रस्टलेट एक कुंजी ब्लॉब लौटाता है जिसका उपयोग फ़ाइल सिस्टम समर्थन के बिना किया जा सकता है। यह एन्क्रिप्टेड डिस्क वाले उपकरणों के लिए महत्वपूर्ण है, जहां डिस्क को डिक्रिप्ट करने के लिए कीमास्टर कुंजी का उपयोग किए जाने तक फ़ाइल सिस्टम उपलब्ध नहीं हो सकता है।

टैग::ब्लॉक_मोड

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? हाँ

ब्लॉक सिफर मोड निर्दिष्ट करता है जिसके साथ कुंजी का उपयोग किया जा सकता है। यह टैग केवल एईएस कुंजियों के लिए प्रासंगिक है।

संभावित मान निम्नलिखित गणना द्वारा परिभाषित किए गए हैं:

कीमास्टर 3
enum class BlockMode : uint32_t {
    ECB = 1,
    CBC = 2,
    CTR = 3,
    GCM = 32,
};
कीमास्टर 2 और पहले का
typedef enum {
    KM_MODE_ECB = 1,
    KM_MODE_CBC = 2,
    KM_MODE_CTR = 3,
    KM_MODE_GCM = 32,
} keymaster_block_mode_t;

यह टैग दोहराने योग्य है, और एईएस कुंजी संचालन के लिए प्रारंभ के additionalParams तर्क में एक मोड निर्दिष्ट करें। यदि निर्दिष्ट मोड कुंजी से जुड़े मोड में नहीं है, तो ऑपरेशन ErrorCode::INCOMPATIBLE_BLOCK_MODE के साथ विफल हो जाता है।

टैग::बूट_पैचलेवल

वर्जन : 4

टैग::BOOT_PATCHLEVEL बूट छवि (कर्नेल) सुरक्षा पैच स्तर निर्दिष्ट करता है जिसके साथ कुंजी का उपयोग किया जा सकता है। यह टैग कभी भी कीमास्टर टीए को नहीं भेजा जाता है, बल्कि टीए द्वारा हार्डवेयर-प्रबलित प्राधिकरण सूची में जोड़ा जाता है। वर्तमान में चल रहे सिस्टम पैचलेवल से भिन्न Tag::BOOT_PATCHLEVEL मान वाली कुंजी का उपयोग करने का कोई भी प्रयास ErrorCode::KEY_REQUIRES_UPGRADE वापस करने के लिए begin() , getKeyCharacteristics() या exportKey() कारण बनता है। विवरण के लिए upgradeKey() देखें।

टैग का मान YYYYMMDD फॉर्म का एक पूर्णांक है, जहां YYYY अंतिम अपडेट का चार अंकों वाला वर्ष है, MM दो अंकों वाला महीना है और DD अंतिम अपडेट का दो अंकों वाला दिन है। उदाहरण के लिए, 5 जून 2018 को अंतिम बार अपडेट किए गए एंड्रॉइड डिवाइस पर उत्पन्न कुंजी के लिए, मान 20180605 होगा। यदि दिन ज्ञात नहीं है, तो 00 को प्रतिस्थापित किया जा सकता है।

प्रत्येक बूट के दौरान, बूटलोडर को सुरक्षित वातावरण में बूट छवि का पैच स्तर प्रदान करना होगा (तंत्र कार्यान्वयन-परिभाषित है)।

हार्डवेयर-प्रवर्तित होना चाहिए.

टैग::बूटलोडर_केवल

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

निर्दिष्ट करता है कि केवल बूटलोडर ही कुंजी का उपयोग कर सकता है।

यह टैग बूलियन है, इसलिए संभावित मान सत्य हैं (यदि टैग मौजूद है) और गलत हैं (यदि टैग मौजूद नहीं है)।

एंड्रॉइड सिस्टम से Tag::BOOTLOADER_ONLY के साथ कुंजी का उपयोग करने का कोई भी प्रयास ErrorCode::INVALID_KEY_BLOB के साथ विफल हो जाता है।

टैग::CALLER_NONCE

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

निर्दिष्ट करता है कि कॉल करने वाला गैर-आवश्यक संचालन के लिए एक नॉन प्रदान कर सकता है।

यह टैग बूलियन है, इसलिए संभावित मान सत्य हैं (यदि टैग मौजूद है) और गलत हैं (यदि टैग मौजूद नहीं है)।

यह टैग केवल एईएस कुंजियों के लिए उपयोग किया जाता है, और केवल सीबीसी, सीटीआर और जीसीएम ब्लॉक मोड के लिए प्रासंगिक है। यदि टैग मौजूद नहीं है, तो कार्यान्वयन को किसी भी ऑपरेशन को अस्वीकार कर देना चाहिए जो ErrorCode::CALLER_NONCE_PROHIBITED से शुरू करने के लिए Tag::NONCE प्रदान करता है।

टैग::CREATION_DATETIME

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

1 जनवरी 1970 से मिलीसेकंड में कुंजी के निर्माण की तिथि और समय निर्दिष्ट करता है। यह टैग केवल वैकल्पिक और सूचनात्मक है।

टैग::डाइजेस्ट

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? हाँ

डाइजेस्ट एल्गोरिदम निर्दिष्ट करता है जिसका उपयोग हस्ताक्षर और सत्यापन संचालन करने के लिए कुंजी के साथ किया जा सकता है। यह टैग RSA, ECDSA और HMAC कुंजियों के लिए प्रासंगिक है।

संभावित मान निम्नलिखित गणना द्वारा परिभाषित किए गए हैं:

कीमास्टर 3
enum class Digest : uint32_t {
    NONE = 0,
    MD5 = 1,
    SHA1 = 2,
    SHA_2_224 = 3,
    SHA_2_256 = 4,
    SHA_2_384 = 5,
    SHA_2_512 = 6,
};
कीमास्टर 2 और पहले वाला
typedef enum {
    KM_DIGEST_NONE = 0,
    KM_DIGEST_MD5 = 1,
    KM_DIGEST_SHA1 = 2,
    KM_DIGEST_SHA_2_224 = 3,
    KM_DIGEST_SHA_2_256 = 4,
    KM_DIGEST_SHA_2_384 = 5,
    KM_DIGEST_SHA_2_512 = 6,
}
keymaster_digest_t;

यह टैग दोहराने योग्य है. हस्ताक्षर करने और सत्यापन कार्यों के लिए, प्रारंभ के additionalParams तर्क में एक डाइजेस्ट निर्दिष्ट करें। यदि निर्दिष्ट डाइजेस्ट कुंजी से जुड़े डाइजेस्ट में नहीं है, तो ऑपरेशन ErrorCode::INCOMPATIBLE_DIGEST के साथ विफल हो जाता है।

टैग::EC_CURVE

संस्करण : 2, 3, 4

दोहराने योग्य ? नहीं

कीमास्टर 1 में, ईसी कुंजियों के लिए प्रयुक्त वक्र का अनुमान निर्दिष्ट कुंजी आकार से लगाया गया था। लचीलेपन को आगे बढ़ाने के लिए, कीमास्टर 2 ने वक्र निर्दिष्ट करने का एक स्पष्ट तरीका पेश किया। EC कुंजी निर्माण अनुरोधों में Tag::EC_CURVE , Tag::KEY_SIZE , या दोनों हो सकते हैं।

संभावित मान निम्नलिखित गणना द्वारा परिभाषित किए गए हैं:

कीमास्टर 3
enum class EcCurve : uint32_t {
    P_224 = 0,
    P_256 = 1,
    P_384 = 2,
    P_521 = 3,
};
कीमास्टर 2 और इससे पहले
enum class EcCurve : uint32_t {
    P_224 = 0,
    P_256 = 1,
    P_384 = 2,
P_521 = 3,
};

यदि किसी जेनरेशन अनुरोध में केवल Tag::KEY_SIZE शामिल है, तो उचित NIST वक्र का चयन करते हुए, Keymaster 1 तर्क पर वापस जाएँ।

यदि अनुरोध में केवल Tag::EC_CURVE शामिल है, तो निर्दिष्ट वक्र का उपयोग करें। कीमास्टर 3 और बाद के संस्करण के लिए, कर्व्स को EcCurve में परिभाषित किया गया है। कीमास्टर 2 और इससे पहले के संस्करण के लिए, कर्व्स keymaster_ec_curve_t में परिभाषित किए गए हैं।

यदि अनुरोध में दोनों शामिल हैं, तो Tag::EC_CURVE द्वारा निर्दिष्ट वक्र का उपयोग करें, और सत्यापित करें कि निर्दिष्ट कुंजी आकार उस वक्र के लिए उपयुक्त है। यदि नहीं, तो ErrorCode::INVALID_ARGUMENT लौटाएँ।

टैग::INCLUDE_UNIQUE_ID

संस्करण : 2, 3, 4

दोहराने योग्य ? नहीं

यह टैग कुंजी निर्माण के दौरान यह इंगित करने के लिए निर्दिष्ट किया जाता है कि जेनरेट की गई कुंजी के लिए सत्यापन प्रमाणपत्र में एक एप्लिकेशन-स्कोप और समय-सीमा वाली डिवाइस-अद्वितीय आईडी होनी चाहिए, जैसा कि टैग::UNIQUE_ID द्वारा निर्दिष्ट है।

यह टैग बूलियन है, इसलिए संभावित मान सत्य हैं (यदि टैग मौजूद है) और गलत हैं (यदि टैग मौजूद नहीं है)।

टैग::कुंजी_आकार

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

कुंजी के एल्गोरिथ्म के लिए सामान्य तरीके से मापते हुए, कुंजी का आकार, बिट्स में निर्दिष्ट करता है। उदाहरण के लिए, RSA कुंजियों के लिए, Tag::KEY_SIZE सार्वजनिक मापांक का आकार निर्दिष्ट करता है। एईएस कुंजियों के लिए यह गुप्त कुंजी सामग्री की लंबाई निर्दिष्ट करता है।

टैग::MAC_LENGTH

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

मैक या जीसीएम प्रमाणीकरण टैग की अनुरोधित लंबाई बिट्स में प्रदान करता है।

मान बिट्स में MAC लंबाई है। यह 8 का गुणज है और कम से कम कुंजी से जुड़े Tag::MIN_MAC_LENGTH के मान जितना बड़ा है।

टैग::MAX_USES_PER_BOOT

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

सिस्टम रीबूट के बीच कुंजी का अधिकतम उपयोग निर्दिष्ट करता है। यह कुंजी के उपयोग को दर-सीमित करने का एक और तंत्र है।

मान एक 32-बिट पूर्णांक है जो प्रति बूट उपयोग का प्रतिनिधित्व करता है।

जब किसी ऑपरेशन में इस टैग वाली कुंजी का उपयोग किया जाता है, तो आरंभिक कॉल के दौरान कुंजी से जुड़े काउंटर को बढ़ाया जाना चाहिए। कुंजी काउंटर इस मान से अधिक हो जाने के बाद, कुंजी का उपयोग करने के सभी बाद के प्रयास ErrorCode::MAX_OPS_EXCEEDED के साथ विफल हो जाते हैं, जब तक कि डिवाइस पुनरारंभ न हो जाए। इसका तात्पर्य यह है कि एक ट्रस्टलेट इस टैग वाली कुंजियों के लिए उपयोग काउंटरों की एक तालिका रखता है। क्योंकि कीमास्टर मेमोरी अक्सर सीमित होती है, इस तालिका का एक निश्चित अधिकतम आकार हो सकता है और कीमास्टर उन ऑपरेशनों को विफल कर सकता है जो तालिका भर जाने पर इस टैग के साथ कुंजियों का उपयोग करने का प्रयास करते हैं। टेबल में कम से कम 16 चाबियाँ होनी चाहिए। यदि तालिका भरी होने के कारण कोई ऑपरेशन विफल हो जाता है, तो कीमास्टर ErrorCode::TOO_MANY_OPERATIONS लौटाता है।

टैग::MIN_MAC_LENGTH

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

यह टैग MAC की न्यूनतम लंबाई निर्दिष्ट करता है जिसे HMAC कुंजियों और GCM मोड का समर्थन करने वाली AES कुंजियों के लिए इस कुंजी के साथ अनुरोध या सत्यापित किया जा सकता है।

यह मान बिट्स में न्यूनतम MAC लंबाई है। यह 8 का गुणज है। HMAC कुंजियों के लिए, मान कम से कम 64 है। GCM कुंजियों के लिए, मान कम से कम 96 है और 128 से अधिक नहीं है।

टैग::MIN_SECONDS_BETWEEN_OPS

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

कुंजी का उपयोग करके अनुमत संचालन के बीच व्यतीत होने वाले न्यूनतम समय को निर्दिष्ट करता है। इसका उपयोग उन संदर्भों में कुंजियों के उपयोग को दर-सीमा करने के लिए किया जा सकता है जहां असीमित उपयोग क्रूर बल के हमलों को सक्षम कर सकता है।

मान एक 32-बिट पूर्णांक है जो अनुमत संचालन के बीच सेकंड का प्रतिनिधित्व करता है।

जब किसी ऑपरेशन में इस टैग वाली कुंजी का उपयोग किया जाता है, तो समाप्ति के दौरान एक टाइमर शुरू करें या कॉल को रोकें । टाइमर से पहले प्राप्त होने वाली कोई भी कॉल यह इंगित करती है कि Tag::MIN_SECONDS_BETWEEN_OPS द्वारा निर्दिष्ट अंतराल समाप्त हो गया है ErrorCode::KEY_RATE_LIMIT_EXCEEDED के साथ विफल हो जाता है। इसका तात्पर्य यह है कि एक ट्रस्टलेट इस टैग वाली कुंजियों के लिए उपयोग काउंटरों की एक तालिका रखता है। क्योंकि कीमास्टर मेमोरी अक्सर सीमित होती है, इस तालिका का एक निश्चित अधिकतम आकार हो सकता है और कीमास्टर उन ऑपरेशनों को विफल कर सकता है जो तालिका भर जाने पर इस टैग के साथ कुंजियों का उपयोग करने का प्रयास करते हैं। तालिका में कम से कम 32 उपयोग में आने वाली कुंजियों को समायोजित करने की आवश्यकता होती है और कुंजी न्यूनतम-उपयोग अंतराल समाप्त होने पर आक्रामक रूप से तालिका स्लॉट का पुन: उपयोग करने की आवश्यकता होती है। यदि तालिका भरी होने के कारण कोई ऑपरेशन विफल हो जाता है, तो कीमास्टर ErrorCode::TOO_MANY_OPERATIONS लौटाता है।

टैग::NO_AUTH_आवश्यक

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

निर्दिष्ट करता है कि इस कुंजी का उपयोग करने के लिए किसी प्रमाणीकरण की आवश्यकता नहीं है। यह टैग Tag::USER_SECURE_ID के साथ परस्पर अनन्य है।

यह टैग बूलियन है, इसलिए संभावित मान सत्य हैं (यदि टैग मौजूद है) और गलत हैं (यदि टैग मौजूद नहीं है)।

टैग::नॉनसी

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

एईएस जीसीएम, सीबीसी, या सीटीआर एन्क्रिप्शन या डिक्रिप्शन के लिए एक नॉन्स या इनिशियलाइज़ेशन वेक्टर (IV) प्रदान करता है या लौटाता है। यह टैग एन्क्रिप्शन और डिक्रिप्शन ऑपरेशन के दौरान शुरू करने के लिए प्रदान किया गया है। इसे आरंभ करने के लिए केवल तभी प्रदान किया जाता है जब कुंजी में Tag::CALLER_NONCE हो। यदि प्रदान नहीं किया गया है, तो कीमास्टर द्वारा एक उपयुक्त गैर या IV यादृच्छिक रूप से उत्पन्न किया जाएगा और शुरू से ही वापस कर दिया जाएगा।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है। अनुमत लंबाई मोड पर निर्भर करती है: जीसीएम नॉनस की लंबाई 12 बाइट्स होती है; सीबीसी और सीटीआर IV की लंबाई 16 बाइट्स है।

टैग::उत्पत्ति

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

यदि ज्ञात हो तो निर्दिष्ट करता है कि कुंजी कहाँ बनाई गई थी। यह टैग कुंजी निर्माण या आयात के दौरान निर्दिष्ट नहीं किया जा सकता है, और इसे ट्रस्टलेट द्वारा मुख्य विशेषताओं में जोड़ा जाना चाहिए।

कीमास्टर 3

संभावित मान android::hardware::keymaster::v3_0::KeyOrigin में परिभाषित हैं:

enum class KeyOrigin : uint32_t {
    GENERATED = 0,
    DERIVED = 1,
    IMPORTED = 2,
    UNKNOWN = 3,
};
कीमास्टर 2 और इससे पहले का संस्करण

संभावित मान keymaster_origin_t में परिभाषित हैं:

typedef enum {
    KM_ORIGIN_GENERATED = 0,
    KM_ORIGIN_IMPORTED = 2,
    KM_ORIGIN_UNKNOWN = 3,
} keymaster_key_origin_t

मान का पूरा अर्थ न केवल मूल्य पर निर्भर करता है, बल्कि इस पर भी निर्भर करता है कि यह हार्डवेयर-प्रवर्तित या सॉफ़्टवेयर-प्रवर्तित विशेषताओं की सूची में पाया जाता है या नहीं।

GENERATED इंगित करता है कि कीमास्टर ने कुंजी तैयार की है। यदि हार्डवेयर-प्रबलित सूची में, कुंजी सुरक्षित हार्डवेयर में उत्पन्न हुई थी और स्थायी रूप से हार्डवेयर से बंधी हुई है। यदि सॉफ़्टवेयर-प्रवर्तित सूची में, कुंजी SoftKeymaster में उत्पन्न हुई थी और हार्डवेयर से बंधी नहीं है।

DERIVED इंगित करता है कि कुंजी कीमास्टर के अंदर प्राप्त की गई थी। संभवतः ऑफ-डिवाइस मौजूद है।

IMPORTED इंगित करता है कि कुंजी कीमास्टर के बाहर उत्पन्न हुई थी और कीमास्टर में आयात की गई थी। यदि हार्डवेयर-प्रवर्तन सूची में है, तो यह स्थायी रूप से हार्डवेयर बाध्य है, हालांकि सुरक्षित हार्डवेयर के बाहर प्रतियां मौजूद हो सकती हैं। यदि सॉफ़्टवेयर-प्रवर्तन सूची में, कुंजी को SoftKeymaster में आयात किया गया था और हार्डवेयर बाध्य नहीं है।

UNKNOWN केवल हार्डवेयर-प्रबलित सूची में दिखना चाहिए। यह इंगित करता है कि कुंजी हार्डवेयर से बंधी हुई है, लेकिन यह ज्ञात नहीं है कि कुंजी मूल रूप से सुरक्षित हार्डवेयर में उत्पन्न हुई थी या आयात की गई थी। यह केवल तब होता है जब keymaster0 हार्डवेयर का उपयोग keymaster1 सेवाओं का अनुकरण करने के लिए किया जा रहा हो।

टैग::उत्पत्ति_समाप्ति_दिनांकसमय

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

वह तिथि और समय निर्दिष्ट करता है जिस पर हस्ताक्षर और एन्क्रिप्शन उद्देश्यों के लिए कुंजी समाप्त हो जाती है। इस समय के बाद, शुरू करने के लिए प्रदान की गई KeyPurpose::SIGN या KeyPurpose::ENCRYPT के साथ कुंजी का उपयोग करने का कोई भी प्रयास ErrorCode::KEY_EXPIRED के साथ विफल हो जाता है।

मान एक 64-बिट पूर्णांक है जो 1 जनवरी, 1970 से मिलीसेकंड का प्रतिनिधित्व करता है।

टैग::ओएस_पैचलेवल

संस्करण : 2, 3, 4

दोहराने योग्य ? नहीं

यह टैग कभी भी कीमास्टर टीए को नहीं भेजा जाता है, बल्कि टीए द्वारा हार्डवेयर-प्रबलित प्राधिकरण सूची में जोड़ा जाता है।

टैग का मान YYYYMM फॉर्म का एक पूर्णांक है, जहां YYYY अंतिम अपडेट का चार अंकों वाला वर्ष है और एमएम अंतिम अपडेट का दो अंकों वाला महीना है। उदाहरण के लिए, एंड्रॉइड डिवाइस पर अंतिम बार दिसंबर 2015 में अपडेट की गई कुंजी के लिए, मान 201512 होगा।

जिन कुंजियों का पैच स्तर वर्तमान पैच स्तर से भिन्न है, वे उपयोग योग्य नहीं हैं। ऐसी कुंजी का उपयोग करने का प्रयास ErrorCode::KEY_REQUIRES_UPGRADE वापस करने के लिए प्रारंभ , getKeyCharacteristics , या exportKey का कारण बनता है। अधिक विवरण के लिए संस्करण बाइंडिंग देखें।

टैग::ओएस_संस्करण

संस्करण : 2, 3, 4

दोहराने योग्य ? नहीं

यह टैग कभी भी कीमास्टर टीए को नहीं भेजा जाता है, बल्कि टीए द्वारा हार्डवेयर-प्रबलित प्राधिकरण सूची में जोड़ा जाता है।

टैग का मान MMmmss फॉर्म का एक पूर्णांक है, जहां MM प्रमुख संस्करण संख्या है, mm लघु संस्करण संख्या है, और ss उप-लघु संस्करण संख्या है। उदाहरण के लिए, एंड्रॉइड संस्करण 4.0.3 पर उत्पन्न कुंजी के लिए, मान 040003 होगा।

टैग::पैडिंग

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? हाँ

पैडिंग मोड निर्दिष्ट करता है जिसका उपयोग कुंजी के साथ किया जा सकता है। यह टैग RSA और AES कुंजियों के लिए प्रासंगिक है।

संभावित मान निम्नलिखित गणना द्वारा परिभाषित किए गए हैं:

कीमास्टर 3
enum class PaddingMode : uint32_t {
    NONE = 1,
    RSA_OAEP = 2,
    RSA_PSS = 3,
    RSA_PKCS1_1_5_ENCRYPT = 4,
    RSA_PKCS1_1_5_SIGN = 5,
    PKCS7 = 64,
};
कीमास्टर 2 और पहले वाला
typedef enum {
    KM_PAD_NONE = 1,
    KM_PAD_RSA_OAEP = 2,
    KM_PAD_RSA_PSS = 3,
    KM_PAD_RSA_PKCS1_1_5_ENCRYPT = 4,
    KM_PAD_RSA_PKCS1_1_5_SIGN = 5,
    KM_PAD_PKCS7 = 64,
} keymaster_padding_t;

PaddingMode::RSA_OAEP और PaddingMode::RSA_PKCS1_1_5_ENCRYPT का उपयोग केवल RSA एन्क्रिप्शन/डिक्रिप्शन कुंजियों के लिए किया जाता है और क्रमशः RSA PKCS#1v2 OAEP पैडिंग और RSA PKCS#1 v1.5 यादृच्छिक पैडिंग निर्दिष्ट करते हैं। PaddingMode::RSA_PSS और PaddingMode::RSA_PKCS1_1_5_SIGN का उपयोग केवल RSA हस्ताक्षर/सत्यापन कुंजी के लिए किया जाता है और क्रमशः RSA PKCS#1v2 PSS पैडिंग और RSA PKCS#1 v1.5 नियतात्मक पैडिंग निर्दिष्ट करते हैं।

PaddingMode::NONE उपयोग RSA या AES कुंजियों के साथ किया जा सकता है। एईएस कुंजियों के लिए, यदि PaddingMode::NONE का उपयोग ब्लॉक मोड ईसीबी या सीबीसी के साथ किया जाता है और एन्क्रिप्टेड या डिक्रिप्ट किया जाने वाला डेटा लंबाई में एईएस ब्लॉक आकार का एक गुणक नहीं है, तो समाप्त करने के लिए कॉल ErrorCode::INVALID_INPUT_LENGTH के साथ विफल हो जाती है।

PaddingMode::PKCS7 उपयोग केवल एईएस कुंजियों के साथ, और केवल ईसीबी और सीबीसी मोड के साथ किया जा सकता है।

यह टैग दोहराने योग्य है. कॉल शुरू करने के लिए एक पैडिंग मोड निर्दिष्ट किया जाना चाहिए। यदि निर्दिष्ट मोड कुंजी के लिए अधिकृत नहीं है, तो ऑपरेशन ErrorCode::INCOMPATIBLE_BLOCK_MODE के साथ विफल हो जाता है।

टैग::उद्देश्य

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? हाँ

उन उद्देश्यों के सेट को निर्दिष्ट करता है जिनके लिए कुंजी का उपयोग किया जा सकता है।

संभावित मान निम्नलिखित गणना द्वारा परिभाषित किए गए हैं:

कीमास्टर 3
enum class KeyPurpose : uint32_t {
    ENCRYPT = 0,
    DECRYPT = 1,
    SIGN = 2,
    VERIFY = 3,
    DERIVE_KEY = 4,  // since 3.0
    WRAP_KEY = 5,    // since 3.0
};
कीमास्टर 2 और पहले का
typedef enum {
    KM_PURPOSE_ENCRYPT = 0,
    KM_PURPOSE_DECRYPT = 1,
    KM_PURPOSE_SIGN = 2,
    KM_PURPOSE_VERIFY = 3,
} keymaster_purpose_t;

यह टैग दोहराने योग्य है; कुंजियाँ कई मानों के साथ उत्पन्न हो सकती हैं, हालाँकि एक ऑपरेशन का एक ही उद्देश्य होता है। जब किसी ऑपरेशन को शुरू करने के लिए शुरुआती फ़ंक्शन को कॉल किया जाता है, तो ऑपरेशन का उद्देश्य निर्दिष्ट होता है। यदि ऑपरेशन के लिए निर्दिष्ट उद्देश्य कुंजी द्वारा अधिकृत नहीं है, तो ऑपरेशन ErrorCode::INCOMPATIBLE_PURPOSE के साथ विफल हो जाता है।

टैग::RESET_SINCE_ID_ROTATION

संस्करण : 3, 4

दोहराने योग्य ? नहीं

निर्दिष्ट करता है कि क्या डिवाइस को अंतिम अद्वितीय आईडी रोटेशन के बाद से फ़ैक्टरी रीसेट किया गया है। कुंजी सत्यापन के लिए उपयोग किया जाता है।

यह टैग बूलियन है, इसलिए संभावित मान सत्य हैं (यदि टैग मौजूद है) और गलत हैं (यदि टैग मौजूद नहीं है)।

टैग::रोलबैक_रेज़िस्टेंट

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

इंगित करता है कि कुंजी रोलबैक-प्रतिरोधी है, जिसका अर्थ है कि जब deleteKey या deleteAllKeys द्वारा हटाया जाता है, तो कुंजी को स्थायी रूप से हटाए जाने और अनुपयोगी होने की गारंटी होती है। यह संभव है कि इस टैग के बिना कुंजियाँ हटाई जा सकें और फिर बैकअप से पुनर्स्थापित की जा सकें।

यह टैग बूलियन है, इसलिए संभावित मान सत्य हैं (यदि टैग मौजूद है) और गलत हैं (यदि टैग मौजूद नहीं है)।

टैग::ROOT_OF_TRUST

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

विश्वास की जड़ को निर्दिष्ट करता है, बूट किए गए ऑपरेटिंग सिस्टम (यदि कोई हो) को मान्य करने के लिए सत्यापित बूट द्वारा उपयोग की जाने वाली कुंजी। मुख्य विशेषताओं में यह टैग कभी भी कीमास्टर को प्रदान नहीं किया जाता है या वापस नहीं किया जाता है।

टैग::RSA_सार्वजनिक_प्रतिपादक

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

RSA कुंजी जोड़ी के लिए सार्वजनिक प्रतिपादक का मान निर्दिष्ट करता है। यह टैग केवल RSA कुंजियों के लिए प्रासंगिक है, और सभी RSA कुंजियों के लिए आवश्यक है।

मान एक 64-बिट अहस्ताक्षरित पूर्णांक है जो आरएसए सार्वजनिक प्रतिपादक की आवश्यकताओं को पूरा करता है। यह मान एक अभाज्य संख्या होनी चाहिए. ट्रस्टलेट मान 2^16+1 का समर्थन करते हैं और अन्य उचित मानों का समर्थन कर सकते हैं, विशेष रूप से मान 3। यदि कोई घातांक निर्दिष्ट नहीं है या यदि निर्दिष्ट घातांक समर्थित नहीं है, तो कुंजी पीढ़ी ErrorCode::INVALID_ARGUMENT के साथ विफल हो जाती है।

टैग::UNIQUE_ID

संस्करण : 3, 4

दोहराने योग्य ? नहीं

सत्यापन में अद्वितीय आईडी प्रदान करने के लिए उपयोग किया जाता है।

मान एक ब्लॉब है, जो बाइट्स की एक मनमानी-लंबाई वाली सरणी है।

टैग::USAGE_EXPIRE_DATETIME

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

वह दिनांक और समय निर्दिष्ट करता है जिस पर सत्यापन और डिक्रिप्शन उद्देश्यों के लिए कुंजी समाप्त हो जाती है। इस समय के बाद, शुरू करने के लिए प्रदान की गई KeyPurpose::VERIFY या KeyPurpose::DECRYPT के साथ कुंजी का उपयोग करने का कोई भी प्रयास ErrorCode::KEY_EXPIRED के साथ विफल हो जाता है।

मान एक 64-बिट पूर्णांक है जो 1 जनवरी, 1970 से मिलीसेकंड का प्रतिनिधित्व करता है।

टैग::USER_AUTH_TYPE

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

उपयोगकर्ता प्रमाणीकरणकर्ताओं के प्रकार निर्दिष्ट करता है जिनका उपयोग इस कुंजी को अधिकृत करने के लिए किया जा सकता है। जब कीमास्टर को इस टैग के साथ एक कुंजी के साथ एक ऑपरेशन करने का अनुरोध किया जाता है, तो उसे एक प्रमाणीकरण टोकन प्राप्त होता है, और टोकन के authenticator_type फ़ील्ड को टैग में मान से मेल खाने की आवश्यकता होती है। उदाहरण के लिए, (ntoh(token.authenticator_type) & auth_type_tag_value) != 0 , जहां ntoh एक फ़ंक्शन है जो नेटवर्क-ऑर्डर किए गए पूर्णांकों को होस्ट-ऑर्डर किए गए पूर्णांकों में परिवर्तित करता है और auth_type_tag_value इस टैग का मान है।

मान गणना से मानों का 32-बिट पूर्णांक बिटमास्क है:

कीमास्टर 3
enum class HardwareAuthenticatorType : uint32_t {
    NONE = 0u, // 0
    PASSWORD = 1 << 0,
    FINGERPRINT = 1 << 1,
    ANY = UINT32_MAX,
};
कीमास्टर 2 और पहले वाला
typedef enum {
    HW_AUTH_NONE = 0,
    HW_AUTH_PASSWORD = 1 << 0,
    HW_AUTH_FINGERPRINT = 1 << 1,
    // Additional entries should be powers of 2.
    HW_AUTH_ANY = UINT32_MAX,
} hw_authenticator_type_t;

टैग::USER_SECURE_ID

संस्करण : 1, 2, 3, 4

दोहराने योग्य ? नहीं

निर्दिष्ट करता है कि एक कुंजी का उपयोग केवल एक विशेष सुरक्षित उपयोगकर्ता प्रमाणीकरण स्थिति के तहत किया जा सकता है। यह टैग Tag::NO_AUTH_REQUIRED के साथ परस्पर अनन्य है।

मान एक 64-बिट पूर्णांक है जो प्रमाणीकरण नीति स्थिति मान को निर्दिष्ट करता है जिसे कुंजी के उपयोग को अधिकृत करने के लिए प्रमाणीकरण टोकन ( टैग::AUTH_TOKEN से शुरू करने के लिए प्रदान किया गया) में मौजूद होना आवश्यक है। इस टैग के साथ एक कुंजी के साथ शुरू होने वाली कोई भी कॉल जो प्रमाणीकरण टोकन प्रदान नहीं करती है, या मिलान नीति स्थिति मान के बिना प्रमाणीकरण टोकन प्रदान करती है, विफल हो जाती है।

यह टैग दोहराने योग्य है. यदि प्रदान किया गया कोई भी मान प्रमाणीकरण टोकन में किसी नीति स्थिति मान से मेल खाता है, तो कुंजी उपयोग के लिए अधिकृत है। अन्यथा ErrorCode::KEY_USER_NOT_AUTHENTICATED के साथ ऑपरेशन विफल हो जाता है।

टैग::विक्रेता_पैचलेवल

वर्जन : 4

यह टैग विक्रेता छवि सुरक्षा पैच स्तर को निर्दिष्ट करता है जिसके साथ कुंजी का उपयोग किया जा सकता है। यह टैग कभी भी कीमास्टर टीए को नहीं भेजा जाता है, बल्कि टीए द्वारा हार्डवेयर-प्रबलित प्राधिकरण सूची में जोड़ा जाता है। वर्तमान में चल रहे सिस्टम पैचलेवल से भिन्न Tag::VENDOR_PATCHLEVEL मान वाली कुंजी का उपयोग करने का कोई भी प्रयास ErrorCode::KEY_REQUIRES_UPGRADE को वापस करने के लिए begin() , getKeyCharacteristics() या exportKey() का कारण बनना चाहिए। विवरण के लिए upgradeKey() देखें।

टैग का मान YYYYMMDD फॉर्म का एक पूर्णांक है, जहां YYYY अंतिम अपडेट का चार अंकों वाला वर्ष है, MM दो अंकों वाला महीना है और DD अंतिम अपडेट का दो अंकों वाला दिन है। उदाहरण के लिए, 5 जून 2018 को अंतिम बार अपडेट किए गए एंड्रॉइड डिवाइस पर उत्पन्न कुंजी के लिए, मान 20180605 होगा।

IKeymasterDevice HAL को सिस्टम प्रॉपर्टी ro.vendor.build.security_patch से वर्तमान विक्रेता पैचलेवल को पढ़ना होगा और HAL के पहली बार लोड होने पर इसे सुरक्षित वातावरण में वितरित करना होगा (तंत्र कार्यान्वयन-परिभाषित है)। सुरक्षित वातावरण को अगले बूट के बाद तक किसी अन्य पैचलेवल को स्वीकार नहीं करना चाहिए।

हार्डवेयर-प्रवर्तित होना चाहिए.