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

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

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

कीमास्टर 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,
};
1 कीमास्टर 2 और पूर्ववर्ती
typedef enum {
    KM_ALGORITHM_RSA = 1,
    KM_ALGORITHM_EC = 3,
    KM_ALGORITHM_AES = 32,
    KM_ALGORITHM_HMAC = 128,
} keymaster_algorithm_t;
2

टैग::ALL_APPLICATIONS

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

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

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

टैग::ALLOW_WHILE_ON_BODY

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

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

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

टैग::ALL_USERS

संस्करण : 3, 4

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

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

टैग::APPLICATION_DATA

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

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

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

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

मान एक बूँद है, बाइट्स की एक मनमानी-लंबाई वाली सरणी।

टैग::APPLICATION_ID

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

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

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

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

मान एक बूँद है, बाइट्स की एक मनमानी-लंबाई वाली सरणी।

टैग::ASSOCIATED_DATA

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

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

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

मान एक बूँद है, बाइट्स की एक मनमानी-लंबाई वाली सरणी।

टैग::ATTESTATION_APPLICATION_ID

संस्करण : 3, 4

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

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

मान एक बूँद है, बाइट्स की एक मनमानी-लंबाई वाली सरणी।

टैग::ATTESTATION_CHALLENGE

संस्करण : 3, 4

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

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

मान एक बूँद है, बाइट्स की एक मनमानी-लंबाई वाली सरणी।

टैग::ATTESTATION_ID_BRAND

संस्करण : 3, 4

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

डिवाइस का ब्रांड नाम प्रदान करता है, जैसा कि Android में 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_MANUFACTUER

संस्करण : 3, 4

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

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

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

मान एक बूँद है, बाइट्स की एक मनमानी-लंबाई वाली सरणी।

टैग::ATTESTATION_ID_MEID

संस्करण : 3, 4

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

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

यदि डिवाइस आईडी सत्यापन का समर्थन नहीं करता है (या 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-बिट पूर्णांक है जो टैग :: USER_SECURE_ID द्वारा टैग :: USER_AUTH_TYPE द्वारा निर्दिष्ट प्रमाणीकरण विधि द्वारा निर्दिष्ट उपयोगकर्ता के सफल प्रमाणीकरण के बाद सेकंड में समय निर्दिष्ट करता है कि कुंजी का उपयोग किया जा सकता है।

टैग::AUTH_TOKEN

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

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

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

मान एक बूँद है जिसमें एक hw_auth_token_t संरचना होती है।

टैग::BLOB_USAGE_REQUIREMENTS

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

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

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

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

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

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

टैग::BLOCK_MODE

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

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

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

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

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

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

टैग::BOOT_PATCHLEVEL

संस्करण : 4

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

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

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

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

टैग::BOOTLOADER_ONLY

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

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

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

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

Android सिस्टम से 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,
};
7 कीमास्टर 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;
8

यह टैग दोहराने योग्य है। हस्ताक्षर और सत्यापन संचालन के लिए, start के 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,
};
9 कीमास्टर 2 और पूर्ववर्ती
enum class EcCurve : uint32_t {
    P_224 = 0,
    P_256 = 1,
    P_384 = 2,
P_521 = 3,
};
10

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

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

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

टैग::INCLUDE_UNIQUE_ID

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

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

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

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

टैग::KEY_SIZE

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

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

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

टैग::MAC_LENGTH

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

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

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

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

टैग::MAX_USES_PER_BOOT

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

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

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

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

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

टैग::MIN_MAC_LENGTH

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

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

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

यह मान न्यूनतम 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 इन-यूज़ कुंजियों को समायोजित करने और कुंजी न्यूनतम-उपयोग अंतराल समाप्त होने पर आक्रामक रूप से तालिका स्लॉट का पुन: उपयोग करने की आवश्यकता होती है। यदि तालिका भर जाने के कारण कोई कार्रवाई विफल हो जाती है, तो Keymaster ErrorCode::TOO_MANY_OPERATIONS लौटाता है।

टैग::NO_AUTH_REQUIRED

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

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

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

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

टैग::गैर

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

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

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

मान एक बूँद है, बाइट्स की एक मनमानी-लंबाई वाली सरणी। अनुमत लंबाई मोड पर निर्भर करती है: GCM नॉन्स लंबाई में 12 बाइट्स हैं; CBC और CTR 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,
};
11 कीमास्टर 2 और पूर्व संस्करण

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

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

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

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

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

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

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

टैग::ORIGINATION_EXPIRE_DATETIME

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

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

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

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

टैग::OS_PATCHLEVEL

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

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

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

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

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

टैग::OS_VERSION

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

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

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

टैग का मान प्रपत्र MMmmss का एक पूर्णांक है, जहाँ MM प्रमुख संस्करण संख्या है, मिमी लघु संस्करण संख्या है, और ss उप-मामूली संस्करण संख्या है। उदाहरण के लिए, Android संस्करण 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,
};
13 कीमास्टर 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;
14

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 का उपयोग केवल AES कुंजियों के साथ, और केवल ECB और CBC मोड के साथ किया जा सकता है।

यह टैग दोहराने योग्य है। शुरू करने के लिए कॉल में एक पैडिंग मोड निर्दिष्ट किया जाना चाहिए। यदि निर्दिष्ट मोड कुंजी के लिए अधिकृत नहीं है, तो ऑपरेशन 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
};
15 कीमास्टर 2 और पूर्ववर्ती
typedef enum {
    KM_PURPOSE_ENCRYPT = 0,
    KM_PURPOSE_DECRYPT = 1,
    KM_PURPOSE_SIGN = 2,
    KM_PURPOSE_VERIFY = 3,
} keymaster_purpose_t;
16

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

टैग::RESET_SINCE_ID_ROTATION

संस्करण : 3, 4

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

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

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

टैग::ROLLBACK_RESISTANT

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

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

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

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

टैग::ROOT_OF_TRUST

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

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

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

टैग::RSA_PUBLIC_EXPONENT

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

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

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

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

टैग::UNIQUE_ID

संस्करण : 3, 4

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

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

मान एक बूँद है, बाइट्स की एक मनमानी-लंबाई वाली सरणी।

टैग::USAGE_EXPIRE_DATETIME

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

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

वह दिनांक और समय निर्दिष्ट करता है जिस पर सत्यापन और डिक्रिप्शन उद्देश्यों के लिए कुंजी समाप्त हो जाती है। इस समय के बाद, KeyPurpose::VERIFY या KeyPurpose::DECRYPT के साथ किसी कुंजी का उपयोग करने का कोई भी प्रयास ErrorCode:: 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,
};
17 कीमास्टर 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;
18

टैग::USER_SECURE_ID

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

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

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

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

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

टैग::VENDOR_PATCHLEVEL

संस्करण : 4

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

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

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

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