विशेषताएं

इस पृष्ठ में Android 6.0 और इसके बाद के संस्करण में Keystore की क्रिप्टोग्राफ़िक सुविधाओं के बारे में जानकारी है।

क्रिप्टोग्राफिक प्रिमिटिव्स

कीस्टोर निम्नलिखित श्रेणियों के संचालन प्रदान करता है:

  • प्रमुख पीढ़ी
  • असममित कुंजियों का आयात और निर्यात (कोई कुंजी लपेटना नहीं)
  • कच्ची सममित कुंजियों का आयात (कोई कुंजी लपेटना नहीं)
  • उपयुक्त पैडिंग मोड के साथ असममित एन्क्रिप्शन और डिक्रिप्शन
  • पाचन और उपयुक्त पैडिंग मोड के साथ असममित हस्ताक्षर और सत्यापन
  • AEAD मोड सहित उपयुक्त मोड में सममित एन्क्रिप्शन और डिक्रिप्शन
  • सममित संदेश प्रमाणीकरण कोड का निर्माण और सत्यापन

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

ऊपर दी गई सूची के अलावा, एक और सेवा है जो कीमास्टर कार्यान्वयन प्रदान करता है, लेकिन जिसे एपीआई के रूप में उजागर नहीं किया जाता है: यादृच्छिक संख्या पीढ़ी। इसका उपयोग आंतरिक रूप से चाबियों, इनिशियलाइज़ेशन वेक्टर्स (IVs), रैंडम पैडिंग और सुरक्षित प्रोटोकॉल के अन्य तत्वों के लिए किया जाता है, जिन्हें रैंडमनेस की आवश्यकता होती है।

आवश्यक आदिम

सभी कीमास्टर कार्यान्वयन प्रदान करते हैं:

  • आरएसए
    • 2048, 3072, और 4096-बिट कुंजी समर्थन
    • सार्वजनिक प्रतिपादक F4 के लिए समर्थन (2^16+1)
    • आरएसए हस्ताक्षर के लिए पैडिंग मोड:
      • RSASSA-PSS ( PaddingMode::RSA_PSS )
      • RSASSA-PKCS1-v1_5 ( PaddingMode::RSA_PKCS1_1_5_SIGN )
    • आरएसए हस्ताक्षर के लिए डाइजेस्ट मोड:
      • एसएचए-256
    • RSA एन्क्रिप्शन/डिक्रिप्शन के लिए पैडिंग मोड:
      • बिना गद्देदार
      • आरएसएईएस-ओएईपी ( PaddingMode::RSA_OAEP )
      • RSAES-PKCS1-v1_5 ( PaddingMode::RSA_PKCS1_1_5_ENCRYPT )
  • ईसीडीएसए
    • 224, 256, 384, और 521-बिट कुंजी समर्थन क्रमशः एनआईएसटी पी-224, पी-256, पी-384, और पी-521 वक्रों का उपयोग करते हुए समर्थित हैं।
    • ईसीडीएसए के लिए डाइजेस्ट मोड:
      • कोई डाइजेस्ट नहीं (बहिष्कृत, भविष्य में हटा दिया जाएगा)
      • एसएचए-256
  • एईएस
    • 128 और 256-बिट कुंजियाँ समर्थित हैं
    • सीबीसी , सीटीआर, ईसीबी, और जीसीएम। GCM कार्यान्वयन 96 बिट्स से छोटे या 96 बिट्स के अलावा अन्य गैर-लंबाई वाले टैग के उपयोग की अनुमति नहीं देता है।
    • पैडिंग मोड पैडिंग मोड :: कोई नहीं और पैडिंग मोड PaddingMode::NONE PaddingMode::PKCS7 सीबीसी और ईसीबी मोड के लिए समर्थित है। बिना पैडिंग के, सीबीसी या ईसीबी मोड एन्क्रिप्शन विफल हो जाता है यदि इनपुट ब्लॉक आकार का एक बहु नहीं है।
  • HMAC SHA-256 , कम से कम 32 बाइट्स तक किसी भी कुंजी आकार के साथ।

कीमास्टर कार्यान्वयन के लिए SHA1 और SHA2 परिवार के अन्य सदस्यों (SHA-224, SHA384 और SHA512) की जोरदार अनुशंसा की जाती है। कीस्टोर उन्हें सॉफ्टवेयर में प्रदान करता है यदि हार्डवेयर कीमास्टर कार्यान्वयन उन्हें प्रदान नहीं करता है।

अन्य प्रणालियों के साथ इंटरऑपरेबिलिटी के लिए कुछ प्राइमेटिव्स की भी सिफारिश की जाती है:

  • आरएसए के लिए छोटे कुंजी आकार
  • आरएसए के लिए मनमाना सार्वजनिक प्रतिपादक

कुंजी अभिगम नियंत्रण

हार्डवेयर-आधारित कुंजियाँ जिन्हें कभी भी उपकरण से निकाला नहीं जा सकता है, यदि कोई हमलावर उन्हें अपनी इच्छा से उपयोग कर सकता है, तो वे अधिक सुरक्षा प्रदान नहीं करती हैं (हालाँकि वे उन कुंजियों की तुलना में अधिक सुरक्षित हैं जिन्हें बाहर निकाला जा सकता है)। इस प्रकार, यह महत्वपूर्ण है कि कीस्टोर अभिगम नियंत्रणों को लागू करे।

अभिगम नियंत्रणों को टैग/मान युग्मों की "प्राधिकरण सूची" के रूप में परिभाषित किया गया है। प्राधिकरण टैग 32-बिट पूर्णांक हैं और मान कई प्रकार के होते हैं। अनेक मान निर्दिष्ट करने के लिए कुछ टैग दोहराए जा सकते हैं। क्या किसी टैग को दोहराया जा सकता है , यह टैग के दस्तावेज़ीकरण में निर्दिष्ट किया गया है। जब एक कुंजी बनाई जाती है, तो कॉलर एक प्राधिकरण सूची निर्दिष्ट करता है। कीस्टोर में अंतर्निहित कीमास्टर कार्यान्वयन सूची को कुछ अतिरिक्त जानकारी निर्दिष्ट करने के लिए संशोधित करता है, जैसे कि क्या कुंजी में रोलबैक सुरक्षा है, और एक "अंतिम" प्राधिकरण सूची लौटाता है, जो लौटाई गई कुंजी ब्लॉब में एन्कोडेड है। यदि अंतिम प्राधिकरण सूची को संशोधित किया जाता है, तो किसी भी क्रिप्टोग्राफिक ऑपरेशन के लिए कुंजी का उपयोग करने का कोई भी प्रयास विफल हो जाता है।

कीमास्टर 2 और पहले के लिए, संभावित टैग के सेट को एन्यूमरेशन keymaster_authorization_tag_t में परिभाषित किया गया है और स्थायी रूप से तय किया गया है (हालांकि इसे बढ़ाया जा सकता है)। नामों के पहले KM_TAG थे। टैग आईडी के शीर्ष चार बिट्स प्रकार को इंगित करने के लिए उपयोग किए जाते हैं।

कीमास्टर 3 ने KM_TAG उपसर्ग को Tag:: में बदल दिया।

संभावित प्रकारों में शामिल हैं:

ENUM : कई टैग के मान गणनाओं में परिभाषित हैं। उदाहरण के लिए, TAG::PURPOSE के संभावित मानों को enum keymaster_purpose_t में परिभाषित किया गया है।

ENUM_REP : ENUM के समान, सिवाय इसके कि टैग को प्राधिकरण सूची में दोहराया जा सकता है। दोहराव कई अधिकृत मूल्यों को इंगित करता है। उदाहरण के लिए, एक एन्क्रिप्शन कुंजी में KeyPurpose::ENCRYPT और KeyPurpose::DECRYPT होने की संभावना है।

UINT : 32-बिट अहस्ताक्षरित पूर्णांक। उदाहरण: TAG::KEY_SIZE

UINT_REP : UINT के समान, सिवाय इसके कि टैग को प्राधिकरण सूची में दोहराया जा सकता है। दोहराव कई अधिकृत मूल्यों को इंगित करता है।

ULONG : 64-बिट अहस्ताक्षरित पूर्णांक। उदाहरण: TAG::RSA_PUBLIC_EXPONENT

ULONG_REP : ULONG के समान, सिवाय इसके कि टैग को प्राधिकरण सूची में दोहराया जा सकता है। दोहराव कई अधिकृत मूल्यों को इंगित करता है।

DATE : दिनांक/समय मान, 1 जनवरी, 1970 से मिलीसेकंड के रूप में व्यक्त किया गया। उदाहरण: TAG::PRIVKEY_EXPIRE_DATETIME

BOOL : सही या गलत। BOOL प्रकार का एक टैग "गलत" माना जाता है यदि टैग मौजूद नहीं है और यदि मौजूद है तो "सत्य" है। उदाहरण: TAG::ROLLBACK_RESISTANT

BIGNUM : बड़े-एंडियन क्रम में बाइट सरणी के रूप में व्यक्त मनमानी-लंबाई पूर्णांक। उदाहरण: TAG::RSA_PUBLIC_EXPONENT

BYTES : बाइट्स का एक क्रम। उदाहरण: TAG::ROOT_OF_TRUST

हार्डवेयर बनाम सॉफ्टवेयर प्रवर्तन

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

सभी कार्यान्वयन:

  • सभी प्राधिकरणों का सटीक मिलान (प्रवर्तन नहीं) लागू करें। कुंजी ब्लॉब्स में प्राधिकरण सूचियां ऑर्डरिंग सहित, कुंजी पीढ़ी के दौरान लौटाए गए प्राधिकरणों से बिल्कुल मेल खाती हैं। कोई भी बेमेल त्रुटि निदान का कारण बनता है।
  • उन प्राधिकरणों की घोषणा करें जिनके सिमेंटिक मूल्य लागू हैं।

हार्डवेयर-प्रवर्तित प्राधिकरण घोषित करने के लिए API तंत्र keymaster_key_characteristics_t संरचना में है। यह प्राधिकरण सूची को दो उप-सूचियों, hw_enforced और sw_enforced में विभाजित करता है। सुरक्षित हार्डवेयर प्रत्येक में उपयुक्त मान रखने के लिए ज़िम्मेदार है, जो इस बात पर आधारित है कि वह क्या लागू कर सकता है।

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

उदाहरण के लिए, ट्रस्टज़ोन-आधारित कार्यान्वयन पर विचार करें जो कुंजी समाप्ति का समर्थन नहीं करता है। एक समाप्ति तिथि वाली कुंजी अभी भी बनाई जा सकती है। उस कुंजी की प्राधिकरण सूची में समाप्ति तिथि के साथ TAG::ORIGINATION_EXPIRE_DATETIME टैग शामिल होगा। प्रमुख विशेषताओं के लिए कीस्टोर के लिए एक अनुरोध को यह टैग sw_enforced सूची में मिलेगा और सुरक्षित हार्डवेयर समाप्ति आवश्यकता को लागू नहीं करेगा। हालाँकि, समाप्ति के बाद कुंजी का उपयोग करने का प्रयास Keystore द्वारा अस्वीकार कर दिया जाएगा।

यदि डिवाइस को सुरक्षित हार्डवेयर के साथ अपग्रेड किया जाता है जो समाप्ति का समर्थन करता है, तो प्रमुख विशेषताओं के लिए एक अनुरोध hw_enforced सूची में TAG::ORIGINATION_EXPIRE_DATETIME मिलेगा, और समाप्ति के बाद कुंजी का उपयोग करने का प्रयास विफल हो जाएगा, भले ही कीस्टोर को किसी तरह से हटा दिया गया हो या बायपास कर दिया गया हो। .

यह निर्धारित करने के बारे में अधिक जानकारी के लिए कि क्या कुंजियाँ हार्डवेयर-समर्थित हैं, कुंजी सत्यापन देखें।

क्रिप्टोग्राफिक संदेश निर्माण प्राधिकरण

संबंधित कुंजी का उपयोग करके संचालन की क्रिप्टोग्राफ़िक विशेषताओं को परिभाषित करने के लिए निम्नलिखित टैग का उपयोग किया जाता है: TAG::ALGORITHM TAG::KEY_SIZE , TAG::KEY_SIZE , TAG::BLOCK_MODE , TAG::PADDING , TAG::CALLER_NONCE , और TAG::DIGEST

TAG::PADDING , TAG::DIGEST , और PaddingMode::BLOCK_MODE दोहराने योग्य हैं, जिसका अर्थ है कि एक ही कुंजी के साथ कई मान संबद्ध हो सकते हैं, और उपयोग किए जाने वाले मान को ऑपरेशन के समय निर्दिष्ट किया जाता है।

उद्देश्य

कुंजी के उद्देश्यों का एक संबद्ध समूह होता है, जिसे TAG::PURPOSE टैग के साथ एक या अधिक प्राधिकरण प्रविष्टियों के रूप में व्यक्त किया जाता है, जो परिभाषित करता है कि उनका उपयोग कैसे किया जा सकता है। उद्देश्य हैं:

  • KeyPurpose::ENCRYPT
  • KeyPurpose::DECRYPT
  • KeyPurpose::SIGN
  • KeyPurpose::VERIFY

किसी भी कुंजी में इन उद्देश्यों का कोई सबसेट हो सकता है। ध्यान दें कि कुछ संयोजन सुरक्षा समस्याएँ पैदा करते हैं। उदाहरण के लिए, एक आरएसए कुंजी जिसका उपयोग एन्क्रिप्ट और हस्ताक्षर दोनों के लिए किया जा सकता है, एक हमलावर को अनुमति देता है जो हस्ताक्षर उत्पन्न करने के लिए सिस्टम को मनमाने डेटा को डिक्रिप्ट करने के लिए मना सकता है।

आयात और निर्यात

कीमास्टर केवल X.509 प्रारूप में सार्वजनिक कुंजी के निर्यात का समर्थन करता है, और इसके आयात का समर्थन करता है:

  • पासवर्ड-आधारित एन्क्रिप्शन के बिना, डीईआर-एन्कोडेड पीकेसीएस # 8 प्रारूप में सार्वजनिक और निजी कुंजी जोड़े
  • कच्चे बाइट्स के रूप में सममित कुंजियाँ

यह सुनिश्चित करने के लिए कि आयातित कुंजियों को सुरक्षित रूप से जेनरेट की गई कुंजियों से अलग किया जा सकता है, TAG::ORIGIN को उपयुक्त कुंजी प्राधिकरण सूची में शामिल किया गया है। उदाहरण के लिए, यदि कोई कुंजी सुरक्षित हार्डवेयर में जेनरेट की गई थी, तो KeyOrigin::GENERATED मान के साथ TAG::ORIGIN कुंजी विशेषताओं की hw_enforced सूची में मिलेगा, जबकि सुरक्षित हार्डवेयर में आयात की गई कुंजी का मान KeyOrigin::IMPORTED होगा। KeyOrigin::IMPORTED

प्रयोक्ता प्रमाणीकरण

सुरक्षित कीमास्टर कार्यान्वयन उपयोगकर्ता प्रमाणीकरण को लागू नहीं करते हैं, लेकिन अन्य विश्वसनीय ऐप्स पर निर्भर करते हैं जो ऐसा करते हैं। इन ऐप्स द्वारा कार्यान्वित इंटरफ़ेस के लिए, गेटकीपर पृष्ठ देखें।

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

  • TAG::ALL_USERS इंगित करता है कि कुंजी सभी उपयोगकर्ताओं द्वारा प्रयोग करने योग्य है। यदि मौजूद है, तो TAG::USER_ID और TAG::USER_SECURE_ID मौजूद नहीं है।
  • TAG::USER_ID का एक अंकीय मान है जो अधिकृत उपयोगकर्ता की आईडी निर्दिष्ट करता है। ध्यान दें कि यह एंड्रॉइड यूजर आईडी (बहु-उपयोगकर्ता के लिए) है, एप्लिकेशन यूआईडी नहीं है, और यह केवल गैर-सुरक्षित सॉफ़्टवेयर द्वारा लागू किया गया है। अगर मौजूद है, तो TAG::ALL_USERS मौजूद नहीं है.
  • TAG::USER_SECURE_ID में सुरक्षित उपयोगकर्ता आईडी निर्दिष्ट करने वाला एक 64-बिट संख्यात्मक मान है जो कुंजी के उपयोग को अनलॉक करने के लिए एक सुरक्षित प्रमाणीकरण टोकन में प्रदान किया गया है। यदि दोहराया जाता है, तो कुंजी का उपयोग किया जा सकता है यदि कोई मान सुरक्षित प्रमाणीकरण टोकन में प्रदान किया गया हो।

दूसरा सेट इंगित करता है कि उपयोगकर्ता को प्रमाणित करने की आवश्यकता है या नहीं। यदि इनमें से कोई भी टैग मौजूद नहीं है, लेकिन TAG::USER_SECURE_ID है, तो कुंजी के प्रत्येक उपयोग के लिए प्रमाणीकरण आवश्यक है।

  • NO_AUTHENTICATION_REQUIRED इंगित करता है कि किसी उपयोगकर्ता प्रमाणीकरण की आवश्यकता नहीं है, हालांकि कुंजी अभी भी केवल TAG::USER_ID द्वारा निर्दिष्ट उपयोगकर्ता के रूप में चल रहे ऐप्स द्वारा उपयोग की जा सकती है।
  • TAG::AUTH_TIMEOUT एक सांख्यिक मान है जो सेकंड में निर्दिष्ट करता है कि कुंजी उपयोग को अधिकृत करने के लिए उपयोगकर्ता प्रमाणीकरण कितना ताज़ा होना चाहिए। यह केवल निजी/गुप्त कुंजी संचालन पर लागू होता है। सार्वजनिक कुंजी संचालन को प्रमाणीकरण की आवश्यकता नहीं होती है। टाइमआउट रिबूट को पार नहीं करता है; रिबूट के बाद, सभी कुंजियाँ "कभी प्रमाणित नहीं होती हैं।" टाइमआउट को एक बड़े मान पर सेट किया जा सकता है यह इंगित करने के लिए कि प्रति बूट एक बार प्रमाणीकरण की आवश्यकता है (2 ^ 32 सेकंड ~ 136 वर्ष है; संभवतः एंड्रॉइड डिवाइस उससे अधिक बार रीबूट होते हैं)।

क्लाइंट बाइंडिंग

क्लाइंट बाइंडिंग, एक विशेष क्लाइंट एप्लिकेशन के साथ एक कुंजी का जुड़ाव, एक वैकल्पिक क्लाइंट आईडी और कुछ वैकल्पिक क्लाइंट डेटा (क्रमशः TAG TAG::APPLICATION_ID और TAG::APPLICATION_DATA ) के माध्यम से किया जाता है। कीस्टोर इन मानों को अपारदर्शी ब्लॉब्स के रूप में मानता है, केवल यह सुनिश्चित करता है कि कुंजी पीढ़ी/आयात के दौरान प्रस्तुत किए गए समान ब्लॉब्स प्रत्येक उपयोग के लिए प्रस्तुत किए जाते हैं और बाइट-दर-बाइट समान होते हैं। क्लाइंट बाइंडिंग डेटा कीमास्टर द्वारा वापस नहीं किया जाता है। कुंजी का उपयोग करने के लिए कॉलर को इसे जानना होगा।

यह सुविधा अनुप्रयोगों के संपर्क में नहीं है।

समय सीमा समाप्ति

कीस्टोर दिनांक के अनुसार मुख्य उपयोग को प्रतिबंधित करने का समर्थन करता है। वैधता की मुख्य शुरुआत और कुंजी की समाप्ति को एक कुंजी के साथ जोड़ा जा सकता है और यदि वर्तमान दिनांक/समय मान्य सीमा से बाहर है, तो कीमास्टर मुख्य संचालन करने से इंकार कर देता है। कुंजी वैधता सीमा TAG::ACTIVE_DATETIME , TAG::ORIGINATION_EXPIRE_DATETIME , और TAG::USAGE_EXPIRE_DATETIME टैग के साथ निर्दिष्ट है। "उत्पत्ति" और "उपयोग" के बीच का अंतर इस बात पर आधारित है कि क्या कुंजी का उपयोग एक नए सिफरटेक्स्ट/हस्ताक्षर/आदि को "उत्पत्ति" करने के लिए किया जा रहा है, या किसी मौजूदा सिफरटेक्स्ट/हस्ताक्षर/आदि का "उपयोग" करने के लिए किया जा रहा है। ध्यान दें कि यह भेद अनुप्रयोगों के संपर्क में नहीं है।

TAG::ACTIVE_DATETIME , TAG::ORIGINATION_EXPIRE_DATETIME , और TAG::USAGE_EXPIRE_DATETIME टैग वैकल्पिक हैं। यदि टैग अनुपस्थित हैं, तो यह माना जाता है कि विचाराधीन कुंजी का उपयोग संदेशों को डिक्रिप्ट/सत्यापित करने के लिए हमेशा किया जा सकता है।

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

विश्वास बंधन की जड़

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

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

स्टैंडअलोन कुंजियाँ

कुछ कीमास्टर सुरक्षित हार्डवेयर मुख्य सामग्री को आंतरिक रूप से संग्रहीत करना और एन्क्रिप्टेड कुंजी सामग्री के बजाय हैंडल लौटाना चुन सकते हैं। या ऐसे अन्य मामले भी हो सकते हैं जिनमें चाबियों का उपयोग तब तक नहीं किया जा सकता जब तक कि कोई अन्य गैर-सुरक्षित या सुरक्षित विश्व प्रणाली घटक उपलब्ध न हो। कीमास्टर एचएएल कॉलर को यह अनुरोध करने की अनुमति देता है कि TAG::STANDALONE टैग के माध्यम से एक कुंजी "स्टैंडअलोन" हो, जिसका अर्थ है कि ब्लॉब और चल रहे कीमास्टर सिस्टम के अलावा किसी अन्य संसाधन की आवश्यकता नहीं है। यह देखने के लिए कि कुंजी स्टैंडअलोन है या नहीं, कुंजी से जुड़े टैग का निरीक्षण किया जा सकता है। वर्तमान में, केवल दो मान परिभाषित हैं:

  • KeyBlobUsageRequirements::STANDALONE
  • KeyBlobUsageRequirements::REQUIRES_FILE_SYSTEM

यह सुविधा अनुप्रयोगों के संपर्क में नहीं है।

वेग

जब इसे बनाया जाता है, तो अधिकतम उपयोग वेग को TAG::MIN_SECONDS_BETWEEN_OPS के साथ निर्दिष्ट किया जा सकता है। यदि कोई ऑपरेशन TAG::MIN_SECONDS_BETWEEN_OPS सेकंड पहले से कम समय में किया गया था, तो TrustZone कार्यान्वयन उस कुंजी के साथ क्रिप्टोग्राफ़िक संचालन करने से मना कर देता है।

वेग सीमा को लागू करने का सरल तरीका प्रमुख आईडी और अंतिम उपयोग टाइमस्टैम्प की एक तालिका है। यह तालिका संभवतः सीमित आकार की होगी, लेकिन इसमें कम से कम 16 प्रविष्टियां होंगी। इस घटना में कि तालिका भर गई है और कोई प्रविष्टियां अपडेट या त्याग नहीं की जा सकती हैं, सुरक्षित हार्डवेयर कार्यान्वयन "सुरक्षित विफल" हैं, सभी वेग-सीमित कुंजी संचालन को अस्वीकार करना पसंद करते हैं जब तक कि प्रविष्टियों में से कोई एक समाप्त नहीं हो जाता। रिबूट पर सभी प्रविष्टियों की समय सीमा समाप्त होना स्वीकार्य है।

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

यह सुविधा अनुप्रयोगों के संपर्क में नहीं है।

रैंडम नंबर जनरेटर री-सीडिंग

क्योंकि सुरक्षित हार्डवेयर मुख्य सामग्री और इनिशियलाइज़ेशन वैक्टर (IVs) के लिए यादृच्छिक संख्याएँ उत्पन्न करता है, और क्योंकि हार्डवेयर यादृच्छिक संख्या जनरेटर हमेशा पूरी तरह से भरोसेमंद नहीं हो सकते हैं, Keymaster HAL क्लाइंट को अतिरिक्त एन्ट्रापी प्रदान करने की अनुमति देने के लिए एक इंटरफ़ेस प्रदान करता है जिसे यादृच्छिक में मिश्रित किया जाएगा। संख्या उत्पन्न।

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

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