पुष्टि करना

Android उपयोगकर्ता-प्रमाणीकरण-गेटेड क्रिप्टोग्राफ़िक कुंजियों की अवधारणा का उपयोग करता है जिसके लिए निम्नलिखित घटकों की आवश्यकता होती है:

  • क्रिप्टोग्राफिक कुंजी भंडारण और सेवा प्रदाता। क्रिप्टोग्राफिक कुंजियों को संग्रहीत करता है और उन चाबियों के ऊपर मानक क्रिप्टो रूटीन प्रदान करता है। एंड्रॉइड क्रिप्टोग्राफिक सेवाओं के लिए हार्डवेयर-समर्थित कीस्टोर और कीमास्टर का समर्थन करता है, जिसमें कुंजी स्टोरेज के लिए हार्डवेयर-समर्थित क्रिप्टोग्राफी शामिल है जिसमें एक विश्वसनीय निष्पादन पर्यावरण (टीईई) या सिक्योर एलिमेंट (एसई), जैसे स्ट्रांगबॉक्स शामिल हो सकता है।
  • उपयोगकर्ता प्रमाणक। उपयोगकर्ता की उपस्थिति और/या सफल प्रमाणीकरण की पुष्टि करें। एंड्रॉइड पिन/पैटर्न/पासवर्ड प्रमाणीकरण के लिए गेटकीपर और फिंगरप्रिंट प्रमाणीकरण के लिए फ़िंगरप्रिंट का समर्थन करता है। एंड्रॉइड 9 और उच्चतर के साथ शिप करने वाले डिवाइस BiometricPrompt का उपयोग फिंगरप्रिंट और अतिरिक्त बायोमेट्रिक्स के लिए एकल एकीकरण बिंदु के रूप में कर सकते हैं। ये घटक एक प्रमाणित चैनल के माध्यम से कीस्टोर सेवा के साथ अपनी प्रमाणीकरण स्थिति का संचार करते हैं। (ढांचे के स्तर पर एंड्रॉइड कीस्टोर सिस्टम भी कीस्टोर सेवा द्वारा समर्थित है।)

गेटकीपर, फ़िंगरप्रिंट और बायोमेट्रिक घटक हार्डवेयर-समर्थित प्रमाणीकरण टोकन (AuthTokens) के उपयोग का समर्थन करने के लिए कीस्टोर और अन्य घटकों के साथ काम करते हैं।

उपस्थिति पंजी

फ़ैक्टरी रीसेट के बाद डिवाइस के पहले बूट पर, सभी प्रमाणक उपयोगकर्ता से क्रेडेंशियल नामांकन प्राप्त करने के लिए तैयार होते हैं। उपयोगकर्ता को शुरू में गेटकीपर के पास एक पिन/पैटर्न/पासवर्ड दर्ज करना होगा। यह प्रारंभिक नामांकन एक यादृच्छिक रूप से उत्पन्न, 64-बिट उपयोगकर्ता सुरक्षित पहचानकर्ता (एसआईडी) बनाता है जो उपयोगकर्ता के लिए पहचानकर्ता के रूप में और उपयोगकर्ता की क्रिप्टोग्राफ़िक सामग्री के लिए बाध्यकारी टोकन के रूप में कार्य करता है। यह उपयोगकर्ता SID क्रिप्टोग्राफ़िक रूप से उपयोगकर्ता के पासवर्ड के लिए बाध्य है; गेटकीपर के सफल प्रमाणीकरण का परिणाम AuthTokens में होता है जिसमें उस पासवर्ड के लिए उपयोगकर्ता SID होता है।

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

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

प्रमाणीकरण

उपयोगकर्ता द्वारा क्रेडेंशियल सेट करने और उपयोगकर्ता SID प्राप्त करने के बाद, वे प्रमाणीकरण शुरू कर सकते हैं, जो तब शुरू होता है जब कोई उपयोगकर्ता पिन, पैटर्न, पासवर्ड या फ़िंगरप्रिंट प्रदान करता है। सभी टीईई घटक एक गुप्त कुंजी साझा करते हैं जिसका उपयोग वे एक दूसरे के संदेशों को प्रमाणित करने के लिए करते हैं।

प्रमाणीकरण प्रवाह
चित्रा 1. प्रमाणीकरण प्रवाह
  1. एक उपयोगकर्ता प्रमाणीकरण विधि प्रदान करता है और संबंधित सेवा संबंधित डेमॉन से अनुरोध करती है।
    • पिन, पैटर्न या पासवर्ड के लिए, LockSettingsService gatekeeperd से अनुरोध करता है।
    • बॉयोमीट्रिक्स-आधारित प्रमाणीकरण प्रवाह Android संस्करण पर निर्भर करता है। Android 8.x और उसके बाद के संस्करण चलाने वाले उपकरणों पर, FingerprintService सेवा fingerprintd के लिए अनुरोध करती है)। Android 9 और उच्चतर चलाने वाले उपकरणों पर, BiometricPrompt उपयुक्त Biometric Manager वर्ग, जैसे FingerprintManager या FaceManager का उपयोग करके उपयुक्त बायोमेट्रिक डेमॉन (उदाहरण के लिए, fingerprintd के लिए फ़िंगरप्रिंट या faced के लिए फ़िंगरप्रिंट) के लिए अनुरोध करता है। संस्करण के बावजूद, अनुरोध भेजे जाने के बाद बायोमेट्रिक प्रमाणीकरण अतुल्यकालिक रूप से होता है।
  2. डेमॉन अपने समकक्ष को डेटा भेजता है, जो एक AuthToken उत्पन्न करता है:
    • पिन/पैटर्न/पासवर्ड प्रमाणीकरण के लिए, gatekeeperd टीईई में गेटकीपर को पिन, पैटर्न या पासवर्ड हैश भेजता है। यदि टीईई में प्रमाणीकरण सफल होता है, तो टीईई में गेटकीपर एंड्रॉइड ओएस में अपने समकक्ष को संबंधित उपयोगकर्ता एसआईडी (ऑथटोकन एचएमएसी कुंजी के साथ हस्ताक्षरित) युक्त एक ऑथटोकन भेजता है।
    • फ़िंगरप्रिंट प्रमाणीकरण के लिए, fingerprintd फ़िंगरप्रिंट घटनाओं को सुनता है और टीईई में फ़िंगरप्रिंट को डेटा भेजता है। यदि TEE में प्रमाणीकरण सफल होता है, तो TEE में फ़िंगरप्रिंट Android OS में अपने समकक्ष को एक AuthToken (AuthToken HMAC कुंजी के साथ हस्ताक्षरित) भेजता है।
    • अन्य बायोमेट्रिक प्रमाणीकरण के लिए, उपयुक्त बायोमेट्रिक डेमॉन बायोमेट्रिक ईवेंट को सुनता है और उसे उपयुक्त बायोमेट्रिक टीईई घटक को भेजता है।
  3. डेमॉन एक हस्ताक्षरित AuthToken प्राप्त करता है और इसे कीस्टोर सेवा के बाइंडर इंटरफ़ेस के विस्तार के माध्यम से कीस्टोर सेवा में भेजता है। (डिवाइस के लॉक होने पर और डिवाइस का पासवर्ड बदलने पर gatekeeperd कीस्टोर सेवा को भी सूचित करता है।)
  4. कीस्टोर सेवा AuthTokens को Keymaster को पास करती है और गेटकीपर और समर्थित बायोमेट्रिक TEE घटक के साथ साझा की गई कुंजी का उपयोग करके उन्हें सत्यापित करती है। कीमास्टर टोकन में टाइमस्टैम्प को अंतिम प्रमाणीकरण समय के रूप में मानता है और टाइमस्टैम्प पर एक कुंजी रिलीज़ निर्णय (ऐप को कुंजी का उपयोग करने की अनुमति देने के लिए) को आधार बनाता है।

ऑथटोकन प्रारूप

सभी भाषाओं और घटकों में टोकन साझाकरण और संगतता सुनिश्चित करने के लिए, AuthToken प्रारूप को hw_auth_token.h में वर्णित किया गया है। प्रारूप निश्चित आकार के क्षेत्रों के साथ एक साधारण क्रमांकन प्रोटोकॉल है।

खेत टाइप आवश्यक विवरण
AuthToken संस्करण 1 बाइट हाँ नीचे सभी क्षेत्रों के लिए समूह टैग।
चुनौती 64-बिट अहस्ताक्षरित पूर्णांक नहीं रीप्ले हमलों को रोकने के लिए एक यादृच्छिक पूर्णांक। आमतौर पर अनुरोधित क्रिप्टो ऑपरेशन की आईडी। वर्तमान में लेन-देन संबंधी फिंगरप्रिंट प्राधिकरण द्वारा उपयोग किया जाता है। यदि मौजूद है, तो AuthToken केवल उसी चुनौती वाले क्रिप्टो संचालन के लिए मान्य है।
उपयोगकर्ता सिड 64-बिट अहस्ताक्षरित पूर्णांक हाँ गैर-दोहराए जाने वाले उपयोगकर्ता पहचानकर्ता डिवाइस प्रमाणीकरण से जुड़ी सभी कुंजियों के लिए क्रिप्टोग्राफ़िक रूप से बंधे हैं। विवरण के लिए, गेटकीपर देखें।
प्रमाणक आईडी (एएसआईडी) नेटवर्क क्रम में 64-बिट अहस्ताक्षरित पूर्णांक नहीं पहचानकर्ता एक विशिष्ट प्रमाणक नीति से आबद्ध होता था। सभी प्रमाणकों का ASID का अपना मूल्य होता है कि वे अपनी आवश्यकताओं के अनुसार बदल सकते हैं।
प्रमाणक प्रकार नेटवर्क क्रम में 32-बिट अहस्ताक्षरित पूर्णांक हाँ
  • 0x00 गेटकीपर है।
  • 0x01 फिंगरप्रिंट है।
समय-चिह्न नेटवर्क क्रम में 64-बिट अहस्ताक्षरित पूर्णांक हाँ नवीनतम सिस्टम बूट के बाद से समय (मिलीसेकंड में)।
ऑथटोकन एचएमएसी (एसएचए-256) 256-बिट ब्लॉब हाँ HMAC क्षेत्र को छोड़कर सभी क्षेत्रों के SHA-256 MAC की कुंजी।

डिवाइस बूट प्रवाह

डिवाइस के प्रत्येक बूट पर, AuthToken HMAC कुंजी को सभी TEE घटकों (गेटकीपर, कीमास्टर, और समर्थित बायोमेट्रिक्स ट्रस्टलेट) के साथ उत्पन्न और साझा किया जाना चाहिए। इस प्रकार, रिप्ले हमलों के खिलाफ अतिरिक्त सुरक्षा के लिए, HMAC कुंजी को हर बार डिवाइस के रिबूट होने पर बेतरतीब ढंग से उत्पन्न किया जाना चाहिए।

इस HMAC कुंजी को सभी घटकों के साथ साझा करने का प्रोटोकॉल एक प्लेटफ़ॉर्म-निर्भर कार्यान्वयन सुविधा है। चाबी कभी भी टीईई के बाहर उपलब्ध नहीं कराई जानी चाहिए। यदि एक टीईई ओएस में आंतरिक इंटरप्रोसेस कम्युनिकेशन (आईपीसी) तंत्र की कमी है और अविश्वसनीय ओएस के माध्यम से डेटा स्थानांतरित करने की आवश्यकता है, तो स्थानांतरण एक सुरक्षित कुंजी एक्सचेंज प्रोटोकॉल के माध्यम से किया जाना चाहिए।

ट्रस्टी ऑपरेटिंग सिस्टम, जो एंड्रॉइड के बगल में चलता है, एक टीईई का एक उदाहरण है, लेकिन इसके बजाय अन्य टीईई का उपयोग किया जा सकता है। ट्रस्टी कीमास्टर और गेटकीपर या उपयुक्त बायोमेट्रिक ट्रस्टलेट के बीच सीधे संवाद करने के लिए एक आंतरिक आईपीसी प्रणाली का उपयोग करता है। HMAC कुंजी पूरी तरह Keymaster में रखी जाती है; फ़िंगरप्रिंट और गेटकीपर प्रत्येक उपयोग के लिए कीमास्टर से कुंजी का अनुरोध करते हैं और मूल्य को जारी या कैश नहीं करते हैं।

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