फ़िंगरप्रिंट सेंसर वाले डिवाइस पर, उपयोगकर्ता एक या अधिक फ़िंगरप्रिंट नामांकित कर सकते हैं और डिवाइस को अनलॉक करने और अन्य कार्य करने के लिए उन फ़िंगरप्रिंट का उपयोग कर सकते हैं। विक्रेता-विशिष्ट लाइब्रेरी और फ़िंगरप्रिंट हार्डवेयर (उदाहरण के लिए, फ़िंगरप्रिंट सेंसर) से कनेक्ट करने के लिए एंड्रॉइड फ़िंगरप्रिंट हार्डवेयर इंटरफ़ेस डेफिनिशन लैंग्वेज (HIDL) का उपयोग करता है।
फ़िंगरप्रिंट HIDL को लागू करने के लिए, आपको विक्रेता-विशिष्ट लाइब्रेरी में IBiometricsFingerprint.hal
लागू करना होगा।
फ़िंगरप्रिंट मिलान
किसी डिवाइस का फ़िंगरप्रिंट सेंसर आमतौर पर निष्क्रिय रहता है। हालाँकि, authenticate
या enroll
के लिए कॉल के जवाब में, फिंगरप्रिंट सेंसर एक स्पर्श को सुनता है (जब कोई उपयोगकर्ता फिंगरप्रिंट सेंसर को छूता है तो स्क्रीन भी सक्रिय हो सकती है)। फ़िंगरप्रिंट मिलान के उच्च-स्तरीय प्रवाह में निम्नलिखित चरण शामिल हैं:
- यूजर फिंगरप्रिंट सेंसर पर उंगली रखता है।
- विक्रेता-विशिष्ट लाइब्रेरी यह निर्धारित करती है कि नामांकित फ़िंगरप्रिंट टेम्प्लेट के वर्तमान सेट में फ़िंगरप्रिंट मिलान है या नहीं।
- मिलान परिणाम
FingerprintService
को भेज दिए जाते हैं।
यह प्रवाह मानता है कि डिवाइस पर फ़िंगरप्रिंट पहले ही नामांकित किया जा चुका है, अर्थात, विक्रेता-विशिष्ट लाइब्रेरी ने फ़िंगरप्रिंट के लिए एक टेम्पलेट नामांकित किया है। अधिक विवरण के लिए, प्रमाणीकरण देखें।
वास्तुकला
फ़िंगरप्रिंट HAL निम्नलिखित घटकों के साथ इंटरैक्ट करता है।
-
BiometricManager
एक ऐप प्रक्रिया में एक ऐप के साथ सीधे इंटरैक्ट करता है। प्रत्येक ऐप मेंIBiometricsFingerprint.hal
का एक उदाहरण है -
FingerprintService
सिस्टम प्रक्रिया में काम करती है, जो फ़िंगरप्रिंट HAL के साथ संचार संभालती है। - फ़िंगरप्रिंट HAL, IBiometricsफ़िंगरप्रिंट HIDL इंटरफ़ेस का C/C++ कार्यान्वयन है। इसमें विक्रेता-विशिष्ट लाइब्रेरी शामिल है जो डिवाइस-विशिष्ट हार्डवेयर के साथ संचार करती है।
- कीस्टोर एपीआई और कीमास्टर घटक विश्वसनीय निष्पादन वातावरण (टीईई) जैसे सुरक्षित वातावरण में सुरक्षित कुंजी भंडारण के लिए हार्डवेयर-समर्थित क्रिप्टोग्राफी प्रदान करते हैं।
![फिंगरप्रिंट प्रमाणीकरण के लिए डेटा प्रवाह](https://source.android.google.cn/static/docs/security/images/fingerprint-data-flow.png?authuser=9&hl=hi)
एक विक्रेता-विशिष्ट एचएएल कार्यान्वयन को टीईई द्वारा आवश्यक संचार प्रोटोकॉल का उपयोग करना चाहिए। कच्ची छवियों और संसाधित फ़िंगरप्रिंट सुविधाओं को अविश्वसनीय मेमोरी में पारित नहीं किया जाना चाहिए। ऐसे सभी बायोमेट्रिक डेटा को टीईई जैसे सुरक्षित हार्डवेयर में संग्रहीत करने की आवश्यकता है। रूटिंग बायोमेट्रिक डेटा से समझौता करने में सक्षम नहीं होनी चाहिए ।
FingerprintService
और fingerprintd
फ़िंगरप्रिंट एचएएल के माध्यम से विक्रेता-विशिष्ट लाइब्रेरी में फ़िंगरप्रिंट दर्ज करने और अन्य ऑपरेशन करने के लिए कॉल करते हैं।
![फ़िंगरप्रिंट के साथ इंटरेक्शन](https://source.android.google.cn/static/docs/security/images/fingerprint-daemon.png?authuser=9&hl=hi)
कार्यान्वयन दिशानिर्देश
निम्नलिखित फ़िंगरप्रिंट HAL दिशानिर्देश यह सुनिश्चित करने के लिए डिज़ाइन किए गए हैं कि फ़िंगरप्रिंट डेटा लीक न हो और उपयोगकर्ता द्वारा डिवाइस से हटाए जाने पर हटा दिया जाए :
- कच्चा फ़िंगरप्रिंट डेटा या डेरिवेटिव (उदाहरण के लिए, टेम्प्लेट) सेंसर ड्राइवर या टीईई के बाहर से कभी भी पहुंच योग्य नहीं होना चाहिए। यदि हार्डवेयर टीईई का समर्थन करता है, तो हार्डवेयर पहुंच टीईई तक सीमित होनी चाहिए और SELinux नीति द्वारा संरक्षित होनी चाहिए। सीरियल पेरिफेरल इंटरफ़ेस (एसपीआई) चैनल केवल टीईई के लिए पहुंच योग्य होना चाहिए और सभी डिवाइस फ़ाइलों पर एक स्पष्ट SELinux नीति होनी चाहिए।
- फ़िंगरप्रिंट अधिग्रहण, नामांकन और पहचान टीईई के अंदर होनी चाहिए।
- फ़िंगरप्रिंट डेटा का केवल एन्क्रिप्टेड रूप फ़ाइल सिस्टम पर संग्रहीत किया जा सकता है, भले ही फ़ाइल सिस्टम स्वयं एन्क्रिप्टेड हो।
- फ़िंगरप्रिंट टेम्प्लेट पर एक निजी, डिवाइस-विशिष्ट कुंजी के साथ हस्ताक्षर किए जाने चाहिए। उन्नत एन्क्रिप्शन स्टैंडर्ड (एईएस) के लिए, कम से कम एक टेम्प्लेट को पूर्ण फ़ाइल-सिस्टम पथ, समूह और फिंगर आईडी के साथ हस्ताक्षरित किया जाना चाहिए ताकि टेम्प्लेट फ़ाइलें किसी अन्य डिवाइस पर या उस उपयोगकर्ता के अलावा किसी अन्य के लिए निष्क्रिय न हों जिसने उन्हें नामांकित किया था। एक ही उपकरण. उदाहरण के लिए, एक ही डिवाइस पर या किसी अन्य डिवाइस से किसी भिन्न उपयोगकर्ता के फ़िंगरप्रिंट डेटा की प्रतिलिपि बनाना काम नहीं करना चाहिए।
- कार्यान्वयन को या तो
setActiveGroup()
फ़ंक्शन द्वारा प्रदान किए गए फ़ाइल-सिस्टम पथ का उपयोग करना चाहिए या उपयोगकर्ता को हटाए जाने पर सभी उपयोगकर्ता टेम्पलेट डेटा को मिटाने का एक तरीका प्रदान करना चाहिए। यह पुरजोर अनुशंसा की जाती है कि फ़िंगरप्रिंट टेम्पलेट फ़ाइलों को एन्क्रिप्टेड के रूप में संग्रहीत किया जाए और दिए गए पथ में संग्रहीत किया जाए। यदि टीईई भंडारण आवश्यकताओं के कारण यह संभव नहीं है, तो उपयोगकर्ता को हटाए जाने पर डेटा को हटाने को सुनिश्चित करने के लिए कार्यान्वयनकर्ता को हुक जोड़ना होगा।
फ़िंगरप्रिंट विधियाँ
फ़िंगरप्रिंट HIDL इंटरफ़ेस में IBiometricsFingerprint.hal
में निम्नलिखित प्रमुख विधियाँ शामिल हैं।
तरीका | विवरण |
---|---|
enroll() | फिंगरप्रिंट टेम्पलेट का संग्रह और भंडारण शुरू करने के लिए एचएएल राज्य मशीन को स्विच करता है। जब नामांकन पूरा हो जाता है, या समय समाप्त होने के बाद, एचएएल राज्य मशीन निष्क्रिय स्थिति में वापस आ जाती है। |
preEnroll() | फ़िंगरप्रिंट नामांकन की शुरुआत को इंगित करने के लिए एक अद्वितीय टोकन उत्पन्न करता है। यह सुनिश्चित करने के लिए enroll फ़ंक्शन को एक टोकन प्रदान करता है कि पहले प्रमाणीकरण किया गया था, उदाहरण के लिए, पासवर्ड का उपयोग करना। छेड़छाड़ को रोकने के लिए, डिवाइस क्रेडेंशियल की पुष्टि होने के बाद टोकन को लपेटा जाता है। यह सत्यापित करने के लिए कि यह अभी भी वैध है, नामांकन के दौरान टोकन की जाँच की जानी चाहिए। |
getAuthenticatorId() | वर्तमान फ़िंगरप्रिंट सेट से संबद्ध एक टोकन लौटाता है। |
cancel() | लंबित नामांकन या प्रमाणीकरण कार्यों को रद्द करता है। एचएएल राज्य मशीन निष्क्रिय स्थिति में वापस आ जाती है। |
enumerate() | सभी ज्ञात फ़िंगरप्रिंट टेम्पलेट्स की गणना के लिए सिंक्रोनस कॉल। |
remove() | फ़िंगरप्रिंट टेम्प्लेट हटाता है. |
setActiveGroup() | एचएएल ऑपरेशन को समूह पहचानकर्ता (जीआईडी) द्वारा पहचाने गए एक निर्दिष्ट समूह से संबंधित फिंगरप्रिंट के सेट तक सीमित करता है। |
authenticate() | फ़िंगरप्रिंट-संबंधी ऑपरेशन को प्रमाणित करता है (ऑपरेशन आईडी द्वारा पहचाना जाता है)। |
setNotify() | एक उपयोगकर्ता फ़ंक्शन पंजीकृत करता है जो एचएएल से सूचनाएं प्राप्त करता है। यदि एचएएल राज्य मशीन व्यस्त स्थिति में है, तो फ़ंक्शन तब तक अवरुद्ध रहता है जब तक कि एचएएल व्यस्त स्थिति को छोड़ नहीं देता। |
postEnroll() | नामांकन कार्रवाई समाप्त करता है और preEnroll() उत्पन्न चुनौती को अमान्य कर देता है। इसे मल्टीफिंगर नामांकन सत्र के अंत में बुलाया जाना चाहिए ताकि यह इंगित किया जा सके कि कोई और उंगलियां नहीं जोड़ी जा सकती हैं। |
इनके बारे में अधिक जानकारी के लिए, IBiometricsFingerprint.hal
में टिप्पणियाँ देखें।