एंड्रॉइड उपयोगकर्ता-प्रमाणीकरण-गेटेड क्रिप्टोग्राफ़िक कुंजी की अवधारणा का उपयोग करता है जिसके लिए निम्नलिखित घटकों की आवश्यकता होती है:
- क्रिप्टोग्राफ़िक कुंजी भंडारण और सेवा प्रदाता। क्रिप्टोग्राफ़िक कुंजियाँ संग्रहीत करता है और उन कुंजियों के शीर्ष पर मानक क्रिप्टो रूटीन प्रदान करता है। एंड्रॉइड क्रिप्टोग्राफ़िक सेवाओं के लिए हार्डवेयर-समर्थित कीस्टोर और कीमास्टर का समर्थन करता है, जिसमें कुंजी भंडारण के लिए हार्डवेयर-समर्थित क्रिप्टोग्राफी शामिल है जिसमें विश्वसनीय निष्पादन पर्यावरण (टीईई) या सुरक्षित तत्व (एसई), जैसे स्ट्रॉन्गबॉक्स शामिल हो सकता है।
- उपयोगकर्ता प्रमाणक. उपयोगकर्ता की उपस्थिति और/या सफल प्रमाणीकरण को प्रमाणित करें। एंड्रॉइड पिन/पैटर्न/पासवर्ड प्रमाणीकरण के लिए गेटकीपर और फिंगरप्रिंट प्रमाणीकरण के लिए फिंगरप्रिंट का समर्थन करता है। जो डिवाइस एंड्रॉइड 9 और उच्चतर के साथ आते हैं, वे फिंगरप्रिंट और अतिरिक्त बायोमेट्रिक्स के लिए एकल एकीकरण बिंदु के रूप में
BiometricPrompt
उपयोग कर सकते हैं। ये घटक एक प्रमाणित चैनल के माध्यम से कीस्टोर सेवा के साथ अपनी प्रमाणीकरण स्थिति का संचार करते हैं। (फ्रेमवर्क स्तर पर एंड्रॉइड कीस्टोर सिस्टम भी कीस्टोर सेवा द्वारा समर्थित है।)
गेटकीपर, फ़िंगरप्रिंट और बायोमेट्रिक घटक हार्डवेयर-समर्थित प्रमाणीकरण टोकन (ऑथटोकेंस) के उपयोग का समर्थन करने के लिए कीस्टोर और अन्य घटकों के साथ काम करते हैं।
उपस्थिति पंजी
फ़ैक्टरी रीसेट के बाद डिवाइस के पहले बूट पर, सभी प्रमाणक उपयोगकर्ता से क्रेडेंशियल नामांकन प्राप्त करने के लिए तैयार होते हैं। उपयोगकर्ता को प्रारंभ में गेटकीपर के साथ एक पिन/पैटर्न/पासवर्ड दर्ज करना होगा। यह प्रारंभिक नामांकन एक यादृच्छिक रूप से उत्पन्न, 64-बिट उपयोगकर्ता सुरक्षित पहचानकर्ता (एसआईडी) बनाता है जो उपयोगकर्ता के लिए एक पहचानकर्ता के रूप में और उपयोगकर्ता की क्रिप्टोग्राफ़िक सामग्री के लिए बाध्यकारी टोकन के रूप में कार्य करता है। यह उपयोगकर्ता SID क्रिप्टोग्राफ़िक रूप से उपयोगकर्ता के पासवर्ड से बंधा हुआ है; गेटकीपर के सफल प्रमाणीकरण के परिणामस्वरूप ऑथटोकन बनता है जिसमें उस पासवर्ड के लिए उपयोगकर्ता SID होता है।
जो उपयोगकर्ता क्रेडेंशियल बदलना चाहता है उसे मौजूदा क्रेडेंशियल प्रस्तुत करना होगा। यदि किसी मौजूदा क्रेडेंशियल को सफलतापूर्वक सत्यापित किया जाता है, तो मौजूदा क्रेडेंशियल से जुड़े उपयोगकर्ता एसआईडी को नए क्रेडेंशियल में स्थानांतरित कर दिया जाता है, जिससे उपयोगकर्ता क्रेडेंशियल बदलने के बाद कुंजी तक पहुंच बनाए रख सकता है। यदि कोई उपयोगकर्ता मौजूदा क्रेडेंशियल प्रस्तुत नहीं करता है, तो नया क्रेडेंशियल पूरी तरह से यादृच्छिक उपयोगकर्ता एसआईडी के साथ नामांकित किया जाता है। उपयोगकर्ता डिवाइस तक पहुंच सकता है, लेकिन पुराने उपयोगकर्ता एसआईडी के तहत बनाई गई कुंजी स्थायी रूप से खो जाती है। इसे अविश्वसनीय नामांकन के रूप में जाना जाता है।
सामान्य परिस्थितियों में, एंड्रॉइड फ्रेमवर्क किसी अविश्वसनीय नामांकन की अनुमति नहीं देता है, इसलिए अधिकांश उपयोगकर्ता इस कार्यक्षमता को कभी नहीं देख पाएंगे। हालाँकि, डिवाइस व्यवस्थापक या हमलावर द्वारा जबरन पासवर्ड रीसेट करने से ऐसा हो सकता है।
प्रमाणीकरण
उपयोगकर्ता द्वारा क्रेडेंशियल सेट करने और उपयोगकर्ता एसआईडी प्राप्त करने के बाद, वे प्रमाणीकरण शुरू कर सकते हैं, जो तब शुरू होता है जब कोई उपयोगकर्ता पिन, पैटर्न, पासवर्ड या फिंगरप्रिंट प्रदान करता है। सभी टीईई घटक एक गुप्त कुंजी साझा करते हैं जिसका उपयोग वे एक-दूसरे के संदेशों को प्रमाणित करने के लिए करते हैं।
- एक उपयोगकर्ता एक प्रमाणीकरण विधि प्रदान करता है और संबंधित सेवा संबंधित डेमॉन से अनुरोध करती है।
- पिन, पैटर्न या पासवर्ड के लिए,
LockSettingsService
gatekeeperd
से अनुरोध करता है। - बायोमेट्रिक्स-आधारित प्रमाणीकरण प्रवाह एंड्रॉइड संस्करण पर निर्भर करता है। एंड्रॉइड 8.x और उससे पहले के संस्करण चलाने वाले उपकरणों पर,
FingerprintService
fingerprintd
का अनुरोध करता है)। एंड्रॉइड 9 और उच्चतर चलाने वाले उपकरणों पर,BiometricPrompt
उपयुक्तBiometric Manager
वर्ग, जैसेFingerprintManager
याFaceManager
का उपयोग करके उपयुक्त बायोमेट्रिक डेमॉन (उदाहरण के लिए,fingerprintd
के लिए फ़िंगरप्रिंट या चेहरे के लिएfaced
) के लिए अनुरोध करता है। संस्करण चाहे जो भी हो, अनुरोध भेजे जाने के बाद बायोमेट्रिक प्रमाणीकरण अतुल्यकालिक रूप से होता है।
- पिन, पैटर्न या पासवर्ड के लिए,
- डेमॉन अपने समकक्ष को डेटा भेजता है, जो एक ऑथटोकन उत्पन्न करता है:
- पिन/पैटर्न/पासवर्ड प्रमाणीकरण के लिए,
gatekeeperd
टीईई में गेटकीपर को पिन, पैटर्न या पासवर्ड हैश भेजता है। यदि टीईई में प्रमाणीकरण सफल होता है, तो टीईई में गेटकीपर एंड्रॉइड ओएस में अपने समकक्ष को संबंधित उपयोगकर्ता एसआईडी (ऑथटोकन एचएमएसी कुंजी के साथ हस्ताक्षरित) युक्त एक ऑथटोकन भेजता है। - फिंगरप्रिंट प्रमाणीकरण के लिए,
fingerprintd
फिंगरप्रिंट घटनाओं को सुनता है और टीईई में फिंगरप्रिंट को डेटा भेजता है। यदि टीईई में प्रमाणीकरण सफल होता है, तो टीईई में फ़िंगरप्रिंट एंड्रॉइड ओएस में अपने समकक्ष को एक ऑथटोकन (ऑथटोकन एचएमएसी कुंजी के साथ हस्ताक्षरित) भेजता है। - अन्य बायोमेट्रिक प्रमाणीकरण के लिए, उपयुक्त बायोमेट्रिक डेमॉन बायोमेट्रिक घटना को सुनता है और इसे उपयुक्त बायोमेट्रिक टीईई घटक को भेजता है।
- पिन/पैटर्न/पासवर्ड प्रमाणीकरण के लिए,
- डेमॉन एक हस्ताक्षरित ऑथटोकन प्राप्त करता है और इसे कीस्टोर सेवा के बाइंडर इंटरफ़ेस के एक्सटेंशन के माध्यम से कीस्टोर सेवा में भेजता है। (जब डिवाइस दोबारा लॉक होता है और जब डिवाइस का पासवर्ड बदलता है तो
gatekeeperd
कीस्टोर सेवा को भी सूचित करता है।) - कीस्टोर सेवा ऑथटोकन को कीमास्टर के पास भेजती है और गेटकीपर और समर्थित बायोमेट्रिक टीईई घटक के साथ साझा की गई कुंजी का उपयोग करके उन्हें सत्यापित करती है। कीमास्टर अंतिम प्रमाणीकरण समय के रूप में टोकन में टाइमस्टैम्प पर भरोसा करता है और टाइमस्टैम्प पर एक कुंजी रिलीज़ निर्णय (किसी ऐप को कुंजी का उपयोग करने की अनुमति देने के लिए) को आधार बनाता है।
ऑथटोकन प्रारूप
भाषाओं और घटकों में टोकन साझाकरण और अनुकूलता सुनिश्चित करने के लिए, AuthToken प्रारूप का वर्णन hw_auth_token.h
में किया गया है। प्रारूप निश्चित आकार के फ़ील्ड के साथ एक सरल क्रमांकन प्रोटोकॉल है।
मैदान | प्रकार | आवश्यक | विवरण |
---|---|---|---|
ऑथटोकन संस्करण | 1 बाइट | हाँ | नीचे सभी फ़ील्ड के लिए समूह टैग. |
चुनौती | 64-बिट अहस्ताक्षरित पूर्णांक | नहीं | पुनरावृत्ति हमलों को रोकने के लिए एक यादृच्छिक पूर्णांक। आमतौर पर अनुरोधित क्रिप्टो ऑपरेशन की आईडी। वर्तमान में ट्रांसेक्शनल फ़िंगरप्रिंट प्राधिकरण द्वारा उपयोग किया जाता है। यदि मौजूद है, तो ऑथटोकन केवल समान चुनौती वाले क्रिप्टो संचालन के लिए मान्य है। |
उपयोगकर्ता एसआईडी | 64-बिट अहस्ताक्षरित पूर्णांक | हाँ | गैर-दोहराया जाने वाला उपयोगकर्ता पहचानकर्ता डिवाइस प्रमाणीकरण से जुड़ी सभी कुंजियों से क्रिप्टोग्राफ़िक रूप से बंधा हुआ है। विवरण के लिए, गेटकीपर देखें। |
प्रमाणक आईडी (एएसआईडी) | नेटवर्क क्रम में 64-बिट अहस्ताक्षरित पूर्णांक | नहीं | पहचानकर्ता का उपयोग एक विशिष्ट प्रमाणक नीति से जुड़ने के लिए किया जाता है। सभी प्रमाणकों के पास ASID का अपना मूल्य होता है जिसे वे अपनी आवश्यकताओं के अनुसार बदल सकते हैं। |
प्रमाणक प्रकार | नेटवर्क क्रम में 32-बिट अहस्ताक्षरित पूर्णांक | हाँ |
|
समय-चिह्न | नेटवर्क क्रम में 64-बिट अहस्ताक्षरित पूर्णांक | हाँ | नवीनतम सिस्टम बूट के बाद से समय (मिलीसेकंड में)। |
ऑथटोकन एचएमएसी (एसएचए-256) | 256-बिट ब्लॉब | हाँ | HMAC फ़ील्ड को छोड़कर सभी फ़ील्ड के कुंजीबद्ध SHA-256 MAC। |
डिवाइस बूट प्रवाह
डिवाइस के प्रत्येक बूट पर, ऑथटोकन एचएमएसी कुंजी उत्पन्न की जानी चाहिए और सभी टीईई घटकों (गेटकीपर, कीमास्टर और समर्थित बायोमेट्रिक्स ट्रस्टलेट्स) के साथ साझा की जानी चाहिए। इस प्रकार, रीप्ले हमलों के खिलाफ अतिरिक्त सुरक्षा के लिए, हर बार डिवाइस के रीबूट होने पर HMAC कुंजी को यादृच्छिक रूप से उत्पन्न किया जाना चाहिए।
इस HMAC कुंजी को सभी घटकों के साथ साझा करने का प्रोटोकॉल एक प्लेटफ़ॉर्म-निर्भर कार्यान्वयन सुविधा है। कुंजी को कभी भी टीईई के बाहर उपलब्ध नहीं कराया जाना चाहिए। यदि टीईई ओएस में आंतरिक इंटरप्रोसेस संचार (आईपीसी) तंत्र का अभाव है और उसे अविश्वसनीय ओएस के माध्यम से डेटा स्थानांतरित करने की आवश्यकता है, तो स्थानांतरण एक सुरक्षित कुंजी विनिमय प्रोटोकॉल के माध्यम से किया जाना चाहिए।
भरोसेमंद ऑपरेटिंग सिस्टम, जो एंड्रॉइड के बगल में चलता है, टीईई का एक उदाहरण है, लेकिन इसके बजाय अन्य टीईई का उपयोग किया जा सकता है। ट्रस्टी कीमास्टर और गेटकीपर या उपयुक्त बायोमेट्रिक ट्रस्टलेट के बीच सीधे संवाद करने के लिए एक आंतरिक आईपीसी प्रणाली का उपयोग करता है। HMAC कुंजी पूरी तरह से कीमास्टर में रखी जाती है; फ़िंगरप्रिंट और गेटकीपर प्रत्येक उपयोग के लिए कीमास्टर से कुंजी का अनुरोध करते हैं और मान को जारी या कैश नहीं करते हैं।
चूंकि कुछ टीईई में आईपीसी बुनियादी ढांचे का अभाव है, इसलिए टीईई में एप्लेट्स के बीच कोई संचार नहीं होता है। यह कीस्टोर सेवा को उन अनुरोधों को तुरंत अस्वीकार करने की अनुमति देता है जो विफल होने के लिए बाध्य हैं क्योंकि उसे सिस्टम में प्रमाणीकरण तालिका का ज्ञान है, जिससे टीईई में संभावित रूप से महंगा आईपीसी बच जाता है।