इस पेज पर, कीमास्टर एचएएल को लागू करने वाले सहायक संगठनों की जानकारी दी गई है. यह HAL में हर टैग को कवर करता है, जो की-मास्टर वर्शन है वह टैग उपलब्ध है में है और क्या टैग दोहराया जा सकता है. टैग के ब्यौरे में जो जानकारी दी गई है उसे छोड़कर, नीचे दिए गए सभी टैग, कुंजी जनरेट करने के दौरान कुंजी दर्ज करने के लिए इस्तेमाल किए जाते हैं विशेषताएं.
कीमास्टर 4 के लिए, टैग
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
.
फ़ंक्शन के लिए, KeyMaster फ़ंक्शन पेज.
टैग::ACTIVE_DATETIME
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
कुंजी के चालू होने की तारीख और समय के बारे में बताता है. इससे पहले
समय, कुंजी का उपयोग करने का कोई भी प्रयास विफल हो जाता है
ErrorCode::KEY_NOT_YET_VALID
.
यह वैल्यू 64-बिट पूर्णांक है, जो 1 जनवरी से मिलीसेकंड को दिखाता है. 1970 में लॉन्च किया गया.
टैग::ALGORITHM
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
उस क्रिप्टोग्राफ़िक एल्गोरिदम के बारे में बताता है जिसमें कुंजी का इस्तेमाल किया जाता है.
संभावित वैल्यू, यहां दी गई गिनती के आधार पर तय की जाती हैं:
कीमास्टर 3enum class Algorithm : uint32_t { RSA = 1, EC = 3, AES = 32, HMAC = 128, };KeyMaster 2 और उससे पहले के वर्शन
typedef enum { KM_ALGORITHM_RSA = 1, KM_ALGORITHM_EC = 3, KM_ALGORITHM_AES = 32, KM_ALGORITHM_HMAC = 128, } keymaster_algorithm_t;
टैग::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
.
इस टैग का कॉन्टेंट, मुख्य क्रिप्टोोग्राफ़िक से जुड़ा है, इसका मतलब है कि यह उस विरोधी के लिए संभव नहीं होना चाहिए जिसके पास सुरक्षित रहती है, लेकिन उसके पास कुंजी को बिना किसी रुकावट के टैग सामग्री को दबाए रखते हुए, जिसे ऐप्लिकेशन वह काफ़ी ज़्यादा एंट्रॉपी वाला कॉन्टेंट तय कर रहा है.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::APPLICATION_ID
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
इसे कब दिया जाता है
generateKey
या importKey,
इस टैग में उस डेटा के बारे में बताया जाता है जो कुंजी के सभी इस्तेमाल के दौरान ज़रूरी होता है. तय सीमा में
खास तौर पर,
exportKey और
getKeyCharacteristics
clientId
पैरामीटर में एक ही वैल्यू देनी होगी, और
कॉल शुरू करने के लिए यह करने की ज़रूरत है
हम इस टैग और उससे जुड़े डेटा को
inParams
सेट हो गया है. अगर सही डेटा नहीं दिया गया है, तो फ़ंक्शन
ErrorCode::INVALID_KEY_BLOB
दिखाता है.
इस टैग का कॉन्टेंट, मुख्य क्रिप्टोोग्राफ़िक से जुड़ा है, मतलब एक विरोधी जो दुनिया के सभी सुरक्षित रहस्यों को ऐक्सेस कर सकता है—लेकिन टैग सामग्री को ऐक्सेस नहीं करता है— कुंजी (टैग सामग्री पर दबाव डाले बिना).
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ASSOCIATED_DATA
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
"जुड़ा डेटा" देता है का इस्तेमाल किया जाता है. यह टैग है अपडेट के लिए दिया गया और यह ऐसे डेटा के बारे में बताता है जो एन्क्रिप्ट (सुरक्षित) या डिक्रिप्ट नहीं किया गया है. हालांकि, इसका इस्तेमाल कंप्यूटिंग में किया जाता है को GCM टैग के साथ जोड़ा जा सकता है.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_APPLICATION_ID
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
इसका इस्तेमाल संभावित ऐप्लिकेशन के सेट की पहचान करने के लिए किया जाता है ने कुंजी को प्रमाणित करने की प्रक्रिया शुरू की है.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_CHALLENGE
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
प्रमाणित करने में चैलेंज देने के लिए इस्तेमाल किया जाता है.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_ID_BRAND
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
डिवाइस के ब्रैंड का नाम बताता है, जैसा कि Build.BRAND
से जानकारी मिलती है
Android में. यह फ़ील्ड सिर्फ़ तब सेट किया जाता है, जब
सेव किया जाता है.
अगर डिवाइस पर आईडी प्रमाणित करने की सुविधा काम नहीं करती (या
destroyAttestationIds()
को पहले कॉल किया गया था और डिवाइस ये काम कर सकता है
अब अपनी आईडी प्रमाणित नहीं करता है), तो पुष्टि करने का कोई भी मुख्य अनुरोध जिसमें ये शामिल हों
यह टैग ErrorCode::CANNOT_ATTEST_IDS
से काम नहीं करता.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_ID_DEVICE
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
डिवाइस का नाम बताता है, जैसा कि Build.DEVICE
से जानकारी मिलती है
Android में. यह फ़ील्ड सिर्फ़ तब सेट किया जाता है, जब
सेव किया जाता है.
अगर डिवाइस पर आईडी प्रमाणित करने की सुविधा काम नहीं करती (या
destroyAttestationIds()
को पहले कॉल किया गया था और डिवाइस ये काम कर सकता है
अब अपनी आईडी प्रमाणित नहीं करता है), तो पुष्टि करने का कोई भी मुख्य अनुरोध जिसमें ये शामिल हों
यह टैग ErrorCode::CANNOT_ATTEST_IDS
से काम नहीं करता.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_ID_IMEI
वर्शन: 3, 4
दोहराया जा सकता है? हां
इससे डिवाइस पर मौजूद सभी रेडियो के IMEI नंबर की जानकारी मिलती है. यह फ़ील्ड सिर्फ़ सेट है डिवाइस के आइडेंटिफ़ायर की पुष्टि का अनुरोध करते समय.
अगर डिवाइस पर आईडी प्रमाणित करने की सुविधा काम नहीं करती (या
destroyAttestationIds()
को पहले कॉल किया गया था और डिवाइस ये काम कर सकता है
अब अपनी आईडी प्रमाणित नहीं करता है), तो पुष्टि करने का कोई भी मुख्य अनुरोध जिसमें ये शामिल हों
यह टैग ErrorCode::CANNOT_ATTEST_IDS
से काम नहीं करता.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_ID_MANUFACTURER
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
डिवाइस के मैन्युफ़ैक्चरर का नाम बताता है, जैसे कि
Android में Build.MANUFACTURER
. यह फ़ील्ड सिर्फ़ तब सेट होता है, जब
डिवाइस के आइडेंटिफ़ायर की पुष्टि करने का अनुरोध करना.
अगर डिवाइस पर आईडी प्रमाणित करने की सुविधा काम नहीं करती (या
destroyAttestationIds()
को पहले कॉल किया गया था और डिवाइस ये काम कर सकता है
अब अपनी आईडी प्रमाणित नहीं करता है), तो पुष्टि करने का कोई भी मुख्य अनुरोध जिसमें ये शामिल हों
यह टैग ErrorCode::CANNOT_ATTEST_IDS
से काम नहीं करता.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_ID_MEID
वर्शन: 3, 4
दोहराया जा सकता है? हां
डिवाइस पर सभी रेडियो के लिए MEID देता है. यह फ़ील्ड सिर्फ़ सेट किया जाएगा डिवाइस के आइडेंटिफ़ायर की पुष्टि का अनुरोध करते समय.
अगर डिवाइस पर आईडी प्रमाणित करने की सुविधा काम नहीं करती (या
destroyAttestationIds()
को पहले कॉल किया गया था और डिवाइस ये काम कर सकता है
अब अपनी आईडी प्रमाणित नहीं करता है), तो पुष्टि करने का कोई भी मुख्य अनुरोध जिसमें ये शामिल हों
यह टैग ErrorCode::CANNOT_ATTEST_IDS
से काम नहीं करता.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_ID_MODEL
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
इससे डिवाइस के मॉडल का नाम मिलता है, जो
Android में Build.MODEL
. यह फ़ील्ड सिर्फ़ तब सेट होता है, जब
डिवाइस के आइडेंटिफ़ायर की पुष्टि करने का अनुरोध करना.
अगर डिवाइस पर आईडी प्रमाणित करने की सुविधा काम नहीं करती (या
destroyAttestationIds()
को पहले कॉल किया गया था और डिवाइस ये काम कर सकता है
अब अपनी आईडी प्रमाणित नहीं करता है), तो पुष्टि करने का कोई भी मुख्य अनुरोध जिसमें ये शामिल हों
यह टैग ErrorCode::CANNOT_ATTEST_IDS
से काम नहीं करता.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_ID_PRODUCT
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
डिवाइस का प्रॉडक्ट नाम देता है, जैसा कि इनके ज़रिए दिया जाता है:
Android में Build.PRODUCT
. यह फ़ील्ड सिर्फ़ तब सेट होता है, जब
डिवाइस के आइडेंटिफ़ायर की पुष्टि करने का अनुरोध करना.
अगर डिवाइस पर आईडी प्रमाणित करने की सुविधा काम नहीं करती (या
destroyAttestationIds()
को पहले कॉल किया गया था और डिवाइस ये काम कर सकता है
अब अपनी आईडी प्रमाणित नहीं करता है), तो पुष्टि करने का कोई भी मुख्य अनुरोध जिसमें ये शामिल हों
यह टैग ErrorCode::CANNOT_ATTEST_IDS
से काम नहीं करता.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::ATTESTATION_ID_SERIAL
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
डिवाइस का सीरियल नंबर बताता है. यह फ़ील्ड सिर्फ़ तब सेट होता है, जब डिवाइस के आइडेंटिफ़ायर की पुष्टि करने का अनुरोध करना.
अगर डिवाइस पर आईडी प्रमाणित करने की सुविधा काम नहीं करती (या
destroyAttestationIds()
को पहले कॉल किया गया था और डिवाइस ये काम कर सकता है
अब अपनी आईडी प्रमाणित नहीं करता है), तो पुष्टि करने का कोई भी मुख्य अनुरोध जिसमें ये शामिल हों
यह टैग ErrorCode::CANNOT_ATTEST_IDS
से काम नहीं करता.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::AUTH_ फ़िल्म
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
कुंजी को इस्तेमाल करने की अनुमति मिलने के बाद का समय (सेकंड में) बताता है पुष्टि करने के लिए. अगर टैग::USER_SECURE_ID मौजूद है और यह टैग मौजूद नहीं है, तो कुंजी को हर इस्तेमाल (इसका इस्तेमाल शुरू करने के लिए, शुरू करें देखें हर कार्रवाई के लिए पुष्टि की प्रक्रिया की जानकारी).
वैल्यू 32-बिट पूर्णांक होती है, जो वैल्यू के तौर पर पुष्टि करने के तरीके से, टैग::USER_SECURE_ID के ज़रिए तय किए गए उपयोगकर्ता की पुष्टि करें Tag::USER_AUTH_TYPE से बताया गया है कि कुंजी ये हो सकती है इस्तेमाल किया गया.
टैग::AUTH_TOKEN
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
एक पुष्टि करना टोकन से begin, अपडेट करें या खत्म, की मदद से, मुख्य कार्रवाई के लिए उपयोगकर्ता की पहचान की पुष्टि की जा सकती है. (कुंजी में Tag::USER_SECURE_ID है).
वैल्यू एक BLOB है, जिसमें hw_auth_token_t
स्ट्रक्चर है.
टैग::BLOB_USAGE_REQUIREMENTS
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
जनरेट किए गए इवेंट के लिए, सिस्टम एनवायरमेंट की ज़रूरी शर्तें तय करता है का इस्तेमाल किया जा सकता है.
संभावित वैल्यू, यहां दी गई गिनती के आधार पर तय की जाती हैं:
कीमास्टर 3enum class KeyBlobUsageRequirements : uint32_t { STANDALONE = 0, REQUIRES_FILE_SYSTEM = 1, };KeyMaster 2 और उससे पहले के वर्शन
typedef enum { KM_BLOB_STANDALONE = 0, KM_BLOB_REQUIRES_FILE_SYSTEM = 1, } keymaster_key_blob_usage_requirements_t;
इस टैग को कुंजी जनरेट करते समय तय किया जा सकता है, ताकि यह ज़रूरी हो सके कि कुंजी
तय स्थिति में इस्तेमाल किया जा सकता है. इसे कुंजी के साथ लौटाना ज़रूरी है
विशेषताएं
generateKey और
getKeyCharacteristics.
अगर कॉल करने वाला (कॉलर) Tag::BLOB_USAGE_REQUIREMENTS
को
वैल्यू KeyBlobUsageRequirements::STANDALONE
, ट्रस्टलेट कुंजी ब्लॉब लौटाता है
जिसे फ़ाइल सिस्टम की सुविधा के बिना इस्तेमाल किया जा सकता है. डिवाइसों के लिए यह ज़रूरी है
में एन्क्रिप्ट (सुरक्षित) की गई डिस्क शामिल हैं, जहां हो सकता है कि फ़ाइल सिस्टम
के बाद, डिस्क को डिक्रिप्ट करने के लिए KeyMaster कुंजी का इस्तेमाल किया जाता है.
टैग::ब्लॉक_मोड
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? हां
इस नीति से, ब्लॉक साइफ़र मोड के बारे में जानकारी मिलती है, जिसके साथ कुंजी का इस्तेमाल किया जा सकता है. यह टैग सिर्फ़ एईएस कुंजियों के लिए काम का है.
संभावित वैल्यू, यहां दी गई गिनती के आधार पर तय की जाती हैं:
कीमास्टर 3enum class BlockMode : uint32_t { ECB = 1, CBC = 2, CTR = 3, GCM = 32, };KeyMaster 2 और उससे पहले के वर्शन
typedef enum { KM_MODE_ECB = 1, KM_MODE_CBC = 2, KM_MODE_CTR = 3, KM_MODE_GCM = 32, } keymaster_block_mode_t;
इस टैग को दोहराया जा सकता है और AES कुंजी से जुड़ी कार्रवाइयों के लिए एक मोड तय करें
इसका additionalParams
तर्क
शुरू करें.
अगर कुंजी से जुड़े मोड में तय किया गया मोड नहीं है, तो
ErrorCode::INCOMPATIBLE_BLOCK_MODE
से कार्रवाई नहीं की जा सकी.
टैग::BOOT_PATCHLEVEL
वर्शन: 4
टैग::BOOT_PATCHLEVEL बूट इमेज (कर्नेल) सुरक्षा पैच स्तर तय करता है
जिससे कुंजी का इस्तेमाल किया जा सके. यह टैग कीमास्टर टीए को कभी नहीं भेजा जाता, लेकिन
को टीए की ओर से हार्डवेयर के ज़रिए लागू की गई अनुमति सूची में जोड़ दिया जाता है. ऐसा करने की कोई भी कोशिश
ऐसी कुंजी का इस्तेमाल करें जिसका Tag::BOOT_PATCHLEVEL
मान,
अभी चल रहे सिस्टम पैचलेवल की वजह से begin()
,
वापसी के लिए getKeyCharacteristics()
या exportKey()
ErrorCode::KEY_REQUIRES_UPGRADE
. upgradeKey()
देखें
देखें.
टैग का मान, YYYYMMDD रूप का पूर्णांक होता है, जहां YYYY आखिरी अपडेट के चार अंकों वाला साल, MM दो अंकों वाला महीना है और DD आखिरी अपडेट के दो अंकों वाला दिन. उदाहरण के लिए, Android डिवाइस को पिछली बार 5 जून, 2018 को अपडेट किया गया था. ऐसे में, इसका मान 20180605 होगा. अगर दिन की जानकारी नहीं है, तो 00 को बदला जा सकता है.
हर बूट के दौरान, बूटलोडर को बूट इमेज का पैच लेवल देना होगा को सुरक्षित माहौल में रखा जा सके (यह प्रोसेस, लागू करने के तरीके को तय करती है).
हार्डवेयर की मदद से लागू होना चाहिए.
टैग::BOOTLOADER_ONLY
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
इससे पता चलता है कि सिर्फ़ बूटलोडर, कुंजी का इस्तेमाल कर सकता है.
यह टैग बूलियन है, इसलिए संभावित मान सही हैं (अगर टैग मौजूद है) और गलत (अगर टैग मौजूद नहीं है).
Tag::BOOTLOADER_ONLY
के साथ कुंजी इस्तेमाल करने की कोई भी कोशिश
ErrorCode::INVALID_KEY_BLOB
का इस्तेमाल करने पर, Android सिस्टम काम नहीं करता.
टैग::CALLER_NONCE
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
इससे पता चलता है कि कॉलर नॉन्स की ज़रूरत के हिसाब से काम करने के लिए नॉन्स उपलब्ध करा सकता है.
यह टैग बूलियन है, इसलिए संभावित मान सही हैं (अगर टैग मौजूद है) और गलत (अगर टैग मौजूद नहीं है).
इस टैग का इस्तेमाल सिर्फ़ AES कुंजियों के लिए किया जाता है. साथ ही, यह सिर्फ़ CBC, सीटीआर, और GCM के लिए काम का है
ब्लॉक मोड. अगर टैग मौजूद नहीं है, तो लागू होने पर
वह कार्रवाई जो इसके लिए Tag::NONCE देती है
शुरू करें
ErrorCode::CALLER_NONCE_PROHIBITED
के साथ.
टैग::CREATION_DATETIME
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
कुंजी बनाने की तारीख और समय के बारे में बताती है. यह जानकारी मिलीसेकंड में है 1 जनवरी, 1970. यह टैग ज़रूरी नहीं है और इसे सिर्फ़ जानकारी देने के लिए इस्तेमाल किया गया है.
टैग::DIGEST
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? हां
उन डाइजेस्ट एल्गोरिदम के बारे में बताता है जिन्हें परफ़ॉर्म करने के लिए, कुंजी के साथ इस्तेमाल किया जा सकता है और पुष्टि से जुड़ी कार्रवाइयां. यह टैग आरएसए, ईसीडीएसए, और एचएमएसी कुंजियां.
संभावित वैल्यू, यहां दी गई गिनती के आधार पर तय की जाती हैं:
कीमास्टर 3enum 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, };KeyMaster 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
दोहराया जा सकता है? नहीं
KeyMaster 1 में, EC कुंजियों के लिए इस्तेमाल किए जाने वाले कर्व का अनुमान खास कुंजी से लगाया गया था
साइज़. आने वाले समय में, ज़रूरत के हिसाब से सुविधा को बेहतर बनाने के लिए, KeyMaster 2 में
तय करें. ऐसा हो सकता है कि EC कुंजी जनरेट करने के अनुरोधों में
Tag::EC_CURVE
, Tag::KEY_SIZE
या दोनों.
संभावित वैल्यू, यहां दी गई गिनती के आधार पर तय की जाती हैं:
कीमास्टर 3enum class EcCurve : uint32_t { P_224 = 0, P_256 = 1, P_384 = 2, P_521 = 3, };KeyMaster 2 और उससे पहले के वर्शन
enum class EcCurve : uint32_t { P_224 = 0, P_256 = 1, P_384 = 2, P_521 = 3, };
अगर जनरेट करने के अनुरोध में सिर्फ़ Tag::KEY_SIZE
है, तो
सही एनआईएसटी कर्व चुनकर, 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.
यह टैग बूलियन है, इसलिए संभावित मान सही हैं (अगर टैग मौजूद है) और गलत (अगर टैग मौजूद नहीं है).
टैग::KEY_SIZE
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
यह कुंजी का साइज़, बिट में बताता है. इसे
का एल्गोरिदम. उदाहरण के लिए, आरएसए कुंजियों के लिए, Tag::KEY_SIZE
तय करता है कि
सार्वजनिक मापांक का साइज़. AES कुंजियों के लिए यह लंबाई तय करती है
के बारे में ज़्यादा जानकारी मिल सकती है.
टैग::MAC_LENGTH
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
MAC या GCM की पुष्टि करने वाले टैग की अनुरोध की गई लंबाई को बिट में देता है.
वैल्यू, एमएसी की लंबाई के बिट में होती है. यह 8 और कम से कम Tag::MIN_MAC_LENGTH की वैल्यू जितनी बड़ी हो से जुड़ा हुआ होना चाहिए.
टैग::MAX_USES_PER_BOOT
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
इससे पता चलता है कि सिस्टम के बीच किसी कुंजी का इस्तेमाल ज़्यादा से ज़्यादा कितनी बार किया जा सकता है फिर से चालू करता है. कुंजी के इस्तेमाल को सीमित करने के लिए यह एक और तरीका है.
वैल्यू 32-बिट पूर्णांक है, जो हर बूट के लिए इस्तेमाल के बारे में बताती है.
जब किसी कार्रवाई में इस टैग वाली कुंजी का इस्तेमाल किया जाता है, तो कुंजी से जुड़ा काउंटर
को इस अवधि के दौरान बढ़ाना चाहिए
कॉल शुरू करें. 'की' के बाद
काउंटर ने इस मान को पार कर लिया है, कुंजी का उपयोग करने के सभी बाद के प्रयास विफल हो जाते हैं
ErrorCode::MAX_OPS_EXCEEDED
के साथ, जब तक डिवाइस रीस्टार्ट नहीं किया जाता.
इसका अर्थ है कि एक ट्रस्टलेट इसके साथ कुंजियों के लिए उपयोग काउंटर की एक तालिका रखता है
टैग के पहले डालना ज़रूरी है. कीमास्टर मेमोरी अक्सर सीमित होने की वजह से, इस टेबल में
अधिकतम आकार और KeyMaster उन कार्रवाइयों को विफल कर सकते है जो कुंजी का इस्तेमाल
टेबल के भरे होने पर इस टैग का इस्तेमाल करें. टेबल में कम से कम 16 बटन होने चाहिए.
यदि तालिका के भर जाने के कारण कोई कार्रवाई विफल होती है, तो कीमास्टर वापस आ जाती है
ErrorCode::TOO_MANY_OPERATIONS
.
टैग::MIN_MAC_LENGTH
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
यह टैग अनुरोध किए जा सकने वाले MAC की कम से कम लंबाई बताता है या इस कुंजी से GCM मोड का समर्थन करने वाली HMAC कुंजियों और AES कुंजियों के लिए सत्यापित किया जा सकता है.
यह वैल्यू, एमएसी की कम से कम लंबाई को बिट में दिखाती है. यह 8 का गुणांक है. इसके लिए एचएमएसी कुंजियों का मतलब कम से कम 64 है. GCM कुंजियों के लिए, मान कम से कम 96 है और 128 से ज़्यादा नहीं होना चाहिए.
टैग::MIN_SECONDS_BETWEEN_OPS
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
तय की गई अवधि के बीच बीतने वाले कम से कम समय की जानकारी देता है संक्रियाएं करते हैं. इसका इस्तेमाल, कॉन्टेक्स्ट में कुंजी के इस्तेमाल को सीमित करने के लिए किया जा सकता है जहां बहुत ज़्यादा इस्तेमाल करने पर ब्रूट फ़ोर्स अटैक हो सकता है.
वैल्यू 32-बिट पूर्णांक है, जो कि मंज़ूर किए गए सेकंड के बीच में दिखाता है कार्रवाइयां.
जब किसी कार्रवाई में इस टैग वाली कुंजी का इस्तेमाल किया जाए, तो टाइमर शुरू करें
खत्म होने के दौरान या
रद्द करने की कॉल. कोई भी
इसे शुरू करने के लिए कॉल करो
टाइमर से पहले मिलने वाला यह संकेत देता है कि से बताया गया अंतराल
Tag::MIN_SECONDS_BETWEEN_OPS
इस समय से विफल रहा
ErrorCode::KEY_RATE_LIMIT_EXCEEDED
. यह
इसका मतलब है कि ट्रस्टलेट इस टैग वाली कुंजियों के लिए उपयोग काउंटर की एक तालिका रखता है.
कीमास्टर मेमोरी अक्सर सीमित होने की वजह से, इस टेबल में तय ज़्यादा से ज़्यादा मेमोरी हो सकती है
आकार और KeyMaster उन कार्रवाइयों को विफल कर सकते है जो इस टैग के साथ कुंजियों का इस्तेमाल करने की कोशिश करते हैं
जब टेबल भर जाएगी. टेबल में, पहले से इस्तेमाल किए जा रहे कम से कम 32 उपयोगकर्ताओं की जानकारी होनी चाहिए
पासकोड और कम से कम इस्तेमाल की समयसीमा खत्म होने पर, टेबल स्लॉट का तेज़ी से दोबारा इस्तेमाल करें.
यदि तालिका के भर जाने के कारण कोई कार्रवाई विफल होती है, तो कीमास्टर वापस आ जाती है
ErrorCode::TOO_MANY_OPERATIONS
.
टैग::NO_AUTH_REQUIRED
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
इससे पता चलता है कि इस कुंजी का इस्तेमाल करने के लिए, पुष्टि करने की ज़रूरत नहीं है. यह टैग है टैग::USER_SECURE_ID के साथ म्यूचुअली एक्सक्लूसिव.
यह टैग बूलियन है, इसलिए संभावित मान सही हैं (अगर टैग मौजूद है) और गलत (अगर टैग मौजूद नहीं है).
टैग::NONCE
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
AES GCM, CBC के लिए नॉन्स या इनिशलाइज़ेशन वेक्टर (IV) देता है या देता है, या सीटीआर को एन्क्रिप्ट (सुरक्षित) करना या डिक्रिप्ट करना. यह टैग इन्हें दिया गया है शुरू करें सुरक्षित करने और डिक्रिप्ट करने की कार्रवाइयों के दौरान किया गया था. यह सिर्फ़ इन्हें दिया जाता है शुरू करें अगर कुंजी में Tag::CALLER_NONCE है. अगर यह पैरामीटर उपलब्ध नहीं कराया गया है, नॉन्स या IV को बिना किसी क्रम के जनरेट किया जाएगा KeyMaster और शुरुआत से वापस लौटा दिया गया है.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है. मंज़ूर की गई लंबाई मोड पर निर्भर करते हैं: GCM नॉन्स की लंबाई 12 बाइट होती है; CBC और CTR IV की संख्या 16 है बाइट में.
टैग::Origin
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
अगर जानकारी पहले से मौजूद है, तो इससे पता चलता है कि पासकोड कहां बनाया गया था. शायद इस टैग को नहीं बताया गया है और उसे मुख्य विशेषताओं में जोड़ा जाना चाहिए के तहत, भरोसेमंद जानकारी दें.
कीमास्टर 3संभावित वैल्यू यहां दी गई हैं
android::hardware::keymaster::v3_0::KeyOrigin
:
enum class KeyOrigin : uint32_t { GENERATED = 0, DERIVED = 1, IMPORTED = 2, UNKNOWN = 3, };अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है KeyMaster 2 और उससे पहले के वर्शन
संभावित वैल्यू keymaster_origin_t
में दी गई हैं:
typedef enum { KM_ORIGIN_GENERATED = 0, KM_ORIGIN_IMPORTED = 2, KM_ORIGIN_UNKNOWN = 3, } keymaster_key_origin_t
वैल्यू का पूरा मतलब सिर्फ़ वैल्यू पर ही नहीं, बल्कि इस बात पर निर्भर करता है कि यह हार्डवेयर के ज़रिए लागू की गई या सॉफ़्टवेयर के ज़रिए लागू की गई विशेषताओं की सूची में मौजूद होता है.
GENERATED
से पता चलता है कि KeyMaster ने कुंजी जनरेट की है.
अगर हार्डवेयर के ज़रिए लागू होने वाली सूची में है, तो
कुंजी सुरक्षित हार्डवेयर में जनरेट की गई थी और यह हमेशा के लिए हार्डवेयर से जुड़ी हुई है. अगर आपने
यह कुंजी, SoftKeyMaster में जनरेट की गई थी. साथ ही, इसे
हार्डवेयर बाउंड नहीं है.
DERIVED
से पता चलता है कि कुंजी, कीमास्टर के ज़रिए ली गई थी.
ऐसा हो सकता है कि डिवाइस के पास मौजूद न हो.
IMPORTED
से पता चलता है कि कुंजी कहीं और से जनरेट की गई है
को कॉपी किया गया है और
कीमास्टर. अगर हार्डवेयर के ज़रिए लागू होने वाली सूची में, यह स्थायी रूप से हार्डवेयर की तरह है,
हालांकि सुरक्षित हार्डवेयर के बाहर कॉपी मौजूद हो सकती हैं. अगर
सॉफ़्टवेयर की मदद से सूची बनाने की ज़रूरत नहीं होती. इस कुंजी को SoftKeyMaster में इंपोर्ट किया गया था और इसे
हार्डवेयर बाउंड.
UNKNOWN
सिर्फ़ हार्डवेयर के ज़रिए लागू की गई सूची में ही दिखना चाहिए.
इससे पता चलता है कि कुंजी
हार्डवेयर से बंधे हैं, लेकिन इस बात की जानकारी नहीं है कि कुंजी मूल रूप से यहां जनरेट की गई थी या नहीं
सुरक्षित हार्डवेयर हो या उसे इंपोर्ट किया गया हो. यह केवल तब होता है जब keyMaster0 हार्डवेयर होता है
का इस्तेमाल keyMaster1 सेवाओं को एम्युलेट करने के लिए किया जा रहा था.
टैग::OriginATION_EXPIRE_DATETIME
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
इससे, साइन करने के लिए पासकोड की समयसीमा खत्म होने की तारीख और समय के बारे में पता चलता है और
एन्क्रिप्शन के लिए इस्तेमाल किया जाता है. इसके बाद, अगर किसी कुंजी का इस्तेमाल किया जा रहा है, तो
Keypurpose::SIGN या
Keypurpose::ENCRYPT दिया गया
शुरू करने में गड़बड़ी हुई
ErrorCode::KEY_EXPIRED
के साथ.
वैल्यू 64-बिट पूर्णांक है, जो मिलीसेकंड को दिखाता है 1 जनवरी, 1970.
टैग::OS_PATCHLEVEL
वर्शन: 2, 3, 4
दोहराया जा सकता है? नहीं
यह टैग कभी भी keyMaster TA को नहीं भेजा जाता, बल्कि इसे टीए की ओर से हार्डवेयर-लागू होने वाली अनुमति की सूची.
टैग का मान YYYYMM फ़ॉर्म का पूर्णांक होता है, जहां YYYY होता है. पिछले अपडेट का चार अंकों वाला साल और MM आखिरी अपडेट का दो अंकों वाला महीना है अपडेट. उदाहरण के लिए, Android डिवाइस पर जनरेट किए गए उस पासकोड के लिए जिसे पिछली बार दिसंबर 2015, मान 201512 हो जाएगा.
जिन कुंजियों का पैच लेवल मौजूदा पैच लेवल से अलग है वे नहीं हैं
इस्तेमाल करें. ऐसे प्रमुख वजहों का इस्तेमाल करने की कोशिश
शुरू करें,
getKeyCharacteristics,
या exportKey
ErrorCode::KEY_REQUIRES_UPGRADE
लौटाने के लिए. यहां जाएं:
ज़्यादा के लिए वर्शन बाइंडिंग
विवरण.
टैग::OS_VERSION
वर्शन: 2, 3, 4
दोहराया जा सकता है? नहीं
यह टैग कभी भी keyMaster TA को नहीं भेजा जाता, बल्कि इसे टीए की ओर से हार्डवेयर-लागू होने वाली अनुमति की सूची.
टैग का मान MMmmss के रूप में पूर्णांक होता है, जहां MM प्रमुख होता है वर्शन नंबर, mm वर्शन नंबर है और ss सब-माइनर वर्शन है जोड़ें. उदाहरण के लिए, Android वर्शन 4.0.3 पर जनरेट की गई कुंजी के लिए, मान यह 040003 होगा.
टैग::पैडिंग
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? हां
कुंजी के साथ इस्तेमाल किए जा सकने वाले पैडिंग मोड के बारे में बताता है. यह टैग है जो आरएसए और एईएस कुंजियों से जुड़े हों.
संभावित वैल्यू, यहां दी गई गिनती के आधार पर तय की जाती हैं:
कीमास्टर 3enum 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, };KeyMaster 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
का इस्तेमाल किया गया है
सिर्फ़ आरएसए एन्क्रिप्शन/डिक्रिप्शन कुंजियों के लिए और आरएसए PKCS#1v2 OAEP तय करें
पैडिंग और आरएसए PKCS#1 v1.5 रैंडमाइज़्ड पैडिंग.
PaddingMode::RSA_PSS
और
PaddingMode::RSA_PKCS1_1_5_SIGN
का इस्तेमाल सिर्फ़ आरएसए के लिए किया जाता है
साइनिंग/पुष्टि कुंजियां और आरएसए PKCS#1v2 PSS दर्ज करें
पैडिंग और आरएसए PKCS#1 v1.5 डिटरमिनिस्टिक पैडिंग.
PaddingMode::NONE
का इस्तेमाल, आरएसए या आरएसए के साथ किया जा सकता है
AES कुंजियां. AES कुंजियों के लिए, अगर PaddingMode::NONE
का इस्तेमाल किया जाता है
जिसमें डेटा को एन्क्रिप्ट (सुरक्षित) या डिक्रिप्ट किया जा सकता है और डेटा को ईसीबी या सीबीसी के ब्लॉक मोड में रखा जा सकता है
यह एईएस ब्लॉक साइज़ का गुणज नहीं है, तो इवेंट खत्म करने के लिए
ErrorCode::INVALID_INPUT_LENGTH
से जुड़ी गड़बड़ी.
PaddingMode::PKCS7
का इस्तेमाल सिर्फ़ AES कुंजियों के साथ किया जा सकता है और
यह सुविधा सिर्फ़ ईसीबी और सीबीसी मोड के साथ मिलती है.
इस टैग को दोहराया जा सकता है.
शुरू करें.
अगर बताए गए मोड में कुंजी इस्तेमाल करने की अनुमति नहीं है, तो कार्रवाई नहीं हो पाती
ErrorCode::INCOMPATIBLE_BLOCK_MODE
के साथ.
टैग::PURPOSE
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? हां
उन मकसद के बारे में बताता है जिनके लिए कुंजी का इस्तेमाल किया जा सकता है.
संभावित वैल्यू, यहां दी गई गिनती के आधार पर तय की जाती हैं:
कीमास्टर 3enum class KeyPurpose : uint32_t { ENCRYPT = 0, DECRYPT = 1, SIGN = 2, VERIFY = 3, DERIVE_KEY = 4, // since 3.0 WRAP_KEY = 5, // since 3.0 };KeyMaster 2 और उससे पहले के वर्शन
typedef enum { KM_PURPOSE_ENCRYPT = 0, KM_PURPOSE_DECRYPT = 1, KM_PURPOSE_SIGN = 2, KM_PURPOSE_VERIFY = 3, } keymaster_purpose_t;
इस टैग को दोहराया जा सकता है; कुंजियां, कई वैल्यू का इस्तेमाल करके जनरेट की जा सकती हैं.
हालांकि, किसी कार्रवाई का एक ही मकसद होता है. जब
begin फ़ंक्शन को कॉल किया जाता है
कोई कार्रवाई शुरू करने के लिए, कार्रवाई का मकसद बताया गया है.
अगर ऑपरेशन के लिए बताए गए मकसद की अनुमति
कुंजी है, तो ErrorCode::INCOMPATIBLE_PURPOSE
के साथ कार्रवाई विफल हो जाती है.
टैग::RESET_started_ID_ROTATION
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
इससे पता चलता है कि डिवाइस को फ़ैक्ट्री रीसेट किया गया है या नहीं आखिरी यूनीक आईडी रोटेशन के बाद से. कुंजी को प्रमाणित करने के लिए इस्तेमाल किया जाता है.
यह टैग बूलियन है, इसलिए संभावित मान सही हैं (अगर टैग मौजूद है) और गलत (अगर टैग मौजूद नहीं है).
टैग::ROLLBACK_RESISTANT
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
इससे पता चलता है कि कुंजी पर रोल बैक नहीं किया जा सकता. इसका मतलब है कि कुंजी को मिटाने पर deleteKey के ज़रिए या deleteAllKeys, कुंजी के हमेशा के लिए मिट जाने और इसका इस्तेमाल करने की गारंटी नहीं है. यह मुमकिन है बिना टैग वाली कुंजी को मिटाया जा सकता है और फिर बैकअप से वापस लाया जा सकता है.
यह टैग बूलियन है, इसलिए संभावित मान सही हैं (अगर टैग मौजूद है) और गलत (अगर टैग मौजूद नहीं है).
टैग::ROOT_OF_TRUST
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
रूट ऑफ़ ट्रस्ट के बारे में बताता है. पुष्टि किए गए बूट से इस कुंजी का इस्तेमाल अगर ऑपरेटिंग सिस्टम चालू है, तो उसकी पुष्टि करें. यह टैग कभी नहीं दिया गया की तुलना में, और उसके साथ वापस लौट आए हैं.
टैग::RSA_PUBLIC_EXPONENT
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
आरएसए कुंजी के जोड़े के लिए, सार्वजनिक एक्सपोनेंट की वैल्यू तय करता है. यह टैग है यह सिर्फ़ आरएसए कुंजियों के लिए काम का है और सभी आरएसए कुंजियों के लिए ज़रूरी है.
मान एक 64-बिट वाला बिना हस्ताक्षर वाला पूर्णांक होता है, जो
आरएसए सार्वजनिक घातांक. यह मान एक अभाज्य संख्या होनी चाहिए. ट्रस्टलेट
वैल्यू 2^16+1 है और वह दूसरी उचित वैल्यू के साथ काम कर सकती है, खास तौर पर वैल्यू 3.
यदि कोई घातांक तय नहीं है या तय घातांक समर्थित नहीं है, तो
ErrorCode::INVALID_ARGUMENT
के साथ कुंजी नहीं बनाना.
टैग::UNIQUE_ID
वर्शन: 3, 4
दोहराया जा सकता है? नहीं
इसका इस्तेमाल, प्रमाणित करने के लिए यूनीक आईडी देने के लिए किया जाता है.
वैल्यू एक BLOB है, जो बाइट की आर्बिट्रेरी लंबाई वाला कलेक्शन है.
टैग::USAGE_EXPIRE_DATETIME
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
इस नीति से, पुष्टि के लिए पासकोड की समयसीमा खत्म होने की तारीख और समय के बारे में पता चलता है और
डिक्रिप्शन के लिए इस्तेमाल किया जाता है. इसके बाद, अगर किसी कुंजी का इस्तेमाल किया जा रहा है, तो
मुख्य मकसद::पुष्टि करें या
मुख्य मकसद::decRYPT इन कामों के लिए दिया गया
शुरुआत नहीं हो पाई
ErrorCode::KEY_EXPIRED
के साथ.
वैल्यू 64-बिट पूर्णांक है, जो मिलीसेकंड को दिखाता है 1 जनवरी, 1970.
टैग::USER_AUTH_TYPE
वर्शन: 1, 2, 3, 4
दोहराया जा सकता है? नहीं
इस नीति से यह पता चलता है कि उपयोगकर्ता की पहचान की पुष्टि करने वाले किस तरह के टूल इस्तेमाल किए जा सकते हैं
बटन दबाएं. जब KeyMaster से किसी कुंजी के साथ कोई कार्रवाई करने का अनुरोध किया जाए
टैग है, तो इसे प्रमाणीकरण टोकन मिलता है, और टोकन
authenticator_type
फ़ील्ड को टैग की वैल्यू से मेल खाना चाहिए.
उदाहरण के लिए, (ntoh(token.authenticator_type) &
auth_type_tag_value) != 0
, जहां ntoh
एक ऐसा फ़ंक्शन है जो
नेटवर्क-ऑर्डर किए गए पूर्णांकों को होस्ट-ऑर्डर किए गए पूर्णांकों में बदलता है और
auth_type_tag_value
इस टैग का मान है.
वैल्यू, इन्यूमरेशन से मिली वैल्यू का 32-बिट वाला पूर्णांक बिटमास्क है:
कीमास्टर 3enum class HardwareAuthenticatorType : uint32_t { NONE = 0u, // 0 PASSWORD = 1 << 0, FINGERPRINT = 1 << 1, ANY = UINT32_MAX, };KeyMaster 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
दोहराया जा सकता है? हां
इससे पता चलता है कि कुंजी का इस्तेमाल किसी खास सुरक्षित उपयोगकर्ता के तहत ही किया जा सकता है पुष्टि करने की स्थिति. यह टैग म्यूचुअली एक्सक्लूसिव है टैग::NO_AUTH_REQUIRED के साथ.
वैल्यू, 64-बिट वाला पूर्णांक है, जो पुष्टि करने की नीति की स्थिति के बारे में बताता है वह वैल्यू जिसका इस्तेमाल पुष्टि करने वाले टोकन में किया जाना चाहिए (इसके लिए दिया गया है) इससे शुरू करें: कुंजी के इस्तेमाल की अनुमति देने के लिए, Tag::AUTH_TOKEN). कोई भी शुरू करने के लिए कॉल करो के साथ एक कुंजी डालें, जो पुष्टि करने के लिए टोकन का इस्तेमाल करता है या प्रमाणीकरण टोकन का मिलान नीति की स्थिति मान के बिना हुआ है, विफल हो जाता है.
इस टैग को दोहराया जा सकता है. अगर दी गई कोई भी वैल्यू किसी नीति से मेल खाती है
पुष्टि करने के टोकन में दिया गया है, तो कुंजी उपयोग के लिए अधिकृत है.
अगर ऐसा नहीं होता है, तो कार्रवाई इसके साथ पूरी नहीं हो पाती
ErrorCode::KEY_USER_NOT_AUTHENTICATED
.
टैग::विक्रेता_PATCHLEVEL
वर्शन: 4
यह टैग, वेंडर इमेज का सुरक्षा पैच लेवल तय करता है, जिसके साथ कुंजी
इस्तेमाल किया जा सकता है. यह टैग कभी भी keyMaster TA को नहीं भेजा जाता, बल्कि इसे
टीए की ओर से हार्डवेयर-लागू होने वाली अनुमति की सूची. ऐसी किसी भी स्थिति में,
Tag::VENDOR_PATCHLEVEL
की वैल्यू, मौजूदा समय में चल रही वैल्यू से अलग है
सिस्टम पैचलेवल की वजह से begin()
,
वापसी के लिए getKeyCharacteristics()
या exportKey()
ErrorCode::KEY_REQUIRES_UPGRADE
. upgradeKey()
देखें
देखें.
टैग का मान, YYYYMMDD रूप का पूर्णांक होता है, जहां YYYY आखिरी अपडेट के चार अंकों वाला साल, MM दो अंकों वाला महीना है और DD आखिरी अपडेट के दो अंकों वाला दिन. उदाहरण के लिए, Android डिवाइस को पिछली बार 5 जून, 2018 को अपडेट किया गया था. ऐसे में, इसका मान 20180605 होगा.
IKeyMasterDevice HAL को सिस्टम के मौजूदा वेंडर पैचलेवल को पढ़ना चाहिए
प्रॉपर्टी ro.vendor.build.security_patch
और उसे
एचएएल के पहली बार लोड होने पर एक सुरक्षित एनवायरमेंट (काम करने का तरीका
लागू होता है). सिक्योर एनवायरमेंट में
पैचलेवल को लागू किया जा सकता है.
हार्डवेयर की मदद से लागू होना चाहिए.