फ़िंगरप्रिंट सेंसर वाले डिवाइसों पर, उपयोगकर्ता एक या उससे ज़्यादा फ़िंगरप्रिंट रजिस्टर कर सकते हैं. साथ ही, डिवाइस को अनलॉक करने और अन्य टास्क करने के लिए, उन फ़िंगरप्रिंट का इस्तेमाल कर सकते हैं. Android, फ़िंगरप्रिंट हार्डवेयर इंटरफ़ेस डेफ़िनिशन लैंग्वेज (HIDL) का इस्तेमाल करके, वेंडर की लाइब्रेरी और फ़िंगरप्रिंट हार्डवेयर (उदाहरण के लिए, फ़िंगरप्रिंट सेंसर) से कनेक्ट करता है.
फ़िंगरप्रिंट HIDL लागू करने के लिए, आपको वेंडर के हिसाब से बनी लाइब्रेरी में IBiometricsFingerprint.hal
को लागू करना होगा.
फ़िंगरप्रिंट मैच करना
किसी डिवाइस का फ़िंगरप्रिंट सेंसर आम तौर पर काम नहीं करता. हालांकि, authenticate
या enroll
पर कॉल करने पर, फ़िंगरप्रिंट सेंसर टच के लिए तैयार हो जाता है. ऐसा हो सकता है कि उपयोगकर्ता के फ़िंगरप्रिंट सेंसर को छूने पर, स्क्रीन भी चालू हो जाए. फ़िंगरप्रिंट मैच करने के हाई-लेवल फ़्लो में ये चरण शामिल होते हैं:
- उपयोगकर्ता, फ़िंगरप्रिंट सेंसर पर अपनी उंगली रखता है.
- वेंडर की लाइब्रेरी यह तय करती है कि रजिस्टर किए गए फ़िंगरप्रिंट टेंप्लेट के मौजूदा सेट में, फ़िंगरप्रिंट मैच होता है या नहीं.
- मिलते-जुलते नतीजे
FingerprintService
को भेजे जाते हैं.
इस फ़्लो में यह माना जाता है कि डिवाइस पर पहले से ही फ़िंगरप्रिंट रजिस्टर है. इसका मतलब है कि वेंडर की लाइब्रेरी में फ़िंगरप्रिंट का टेंप्लेट रजिस्टर है. ज़्यादा जानकारी के लिए, पुष्टि करना देखें.
भवन निर्माण
फ़िंगरप्रिंट एचएएल, इन कॉम्पोनेंट के साथ इंटरैक्ट करता है.
BiometricManager
, ऐप्लिकेशन की प्रोसेस में सीधे तौर पर किसी ऐप्लिकेशन के साथ इंटरैक्ट करता है. हर ऐप्लिकेशन मेंIBiometricsFingerprint.hal
का एक इंस्टेंस होता हैFingerprintService
, सिस्टम प्रोसेस में काम करता है. यह फ़िंगरप्रिंट एचएएल के साथ कम्यूनिकेशन मैनेज करता है.- फ़िंगरप्रिंट एचएएल, IBiometricsFingerprint HIDL इंटरफ़ेस का C/C++ वर्शन है. इसमें वेंडर की लाइब्रेरी शामिल होती है, जो डिवाइस के हिसाब से हार्डवेयर के साथ काम करती है.
- Keystore API और Keymaster कॉम्पोनेंट, ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) जैसे सुरक्षित एनवायरमेंट में, कुंजी को सुरक्षित तरीके से सेव करने के लिए, हार्डवेयर पर आधारित क्रिप्टोग्राफ़ी की सुविधा देते हैं.

वेंडर के हिसाब से बनाए गए एचएएल को लागू करने के लिए, TEE के लिए ज़रूरी कम्यूनिकेशन प्रोटोकॉल का इस्तेमाल करना ज़रूरी है. रॉ इमेज और प्रोसेस किए गए फ़िंगरप्रिंट की सुविधाओं को, भरोसेमंद मेमोरी में पास नहीं किया जाना चाहिए. इस तरह के सभी बायोमेट्रिक डेटा को TEE जैसे सुरक्षित हार्डवेयर में सेव किया जाना चाहिए. डिवाइस को रूट करने से, बायोमेट्रिक डेटा की सुरक्षा को खतरा नहीं होना चाहिए.
FingerprintService
और fingerprintd
, फ़िंगरप्रिंट को रजिस्टर करने और अन्य कार्रवाइयां करने के लिए, फ़िंगरप्रिंट एचएएल के ज़रिए, वेंडर की लाइब्रेरी को कॉल करते हैं.

लागू करने के दिशा-निर्देश
फ़िंगरप्रिंट एचएएल के लिए बने इन दिशा-निर्देशों का मकसद यह पक्का करना है कि डिवाइस से किसी उपयोगकर्ता को हटाने पर, उसका फ़िंगरप्रिंट डेटा नहीं लीक हो और उसे हटाया जा सके:
- फ़िंगरप्रिंट का रॉ डेटा या डेरिवेटिव (उदाहरण के लिए, टेंप्लेट) कभी भी सेंसर ड्राइवर या टीईई के बाहर से ऐक्सेस नहीं किया जाना चाहिए. अगर हार्डवेयर में TEE की सुविधा है, तो हार्डवेयर को सिर्फ़ TEE के लिए ऐक्सेस किया जा सकता है. साथ ही, इस प्रक्रिया की सुरक्षा पर SELinux नीति लागू होनी चाहिए. सीरियल पेरिफ़रल इंटरफ़ेस (एसपीआई) चैनल को सिर्फ़ TEE ऐक्सेस कर सकता है. साथ ही, डिवाइस की सभी फ़ाइलों पर SELinux की साफ़ तौर पर बताई गई नीति लागू होनी चाहिए.
- फ़िंगरप्रिंट को कैप्चर करने, रजिस्टर करने, और उसकी पहचान करने का काम, TEE में होना चाहिए.
- फ़ाइल सिस्टम में, फ़िंगरप्रिंट का सिर्फ़ एन्क्रिप्ट (सुरक्षित) किया गया डेटा ही सेव किया जाता है. भले ही, फ़ाइल सिस्टम को ही एन्क्रिप्ट क्यों न किया गया हो.
- फ़िंगरप्रिंट टेंप्लेट पर, डिवाइस के हिसाब से बनाई गई निजी कुंजी से हस्ताक्षर किया जाना चाहिए. Advanced Encryption Standard (AES) के लिए, कम से कम किसी टेंप्लेट पर, फ़ाइल-सिस्टम के सटीक पाथ, ग्रुप, और फ़िंगर आईडी के साथ हस्ताक्षर किया जाना चाहिए. इससे टेंप्लेट की फ़ाइलें किसी दूसरे डिवाइस पर काम नहीं करेंगी. इसके अलावा, उस डिवाइस पर रजिस्टर करने वाले व्यक्ति के अलावा, किसी और के लिए भी ये फ़ाइलें काम नहीं करेंगी. उदाहरण के लिए, एक ही डिवाइस का इस्तेमाल करने वाले दूसरे उपयोगकर्ता या किसी दूसरे डिवाइस के उपयोगकर्ता का फ़िंगरप्रिंट डेटा कॉपी किया जाता है, तो इसे काम नहीं करना चाहिए.
- लागू करने के लिए,
setActiveGroup()
फ़ंक्शन से मिले फ़ाइल-सिस्टम पाथ का इस्तेमाल करना ज़रूरी है. इसके अलावा, उपयोगकर्ता को हटाने पर, उसके टेंप्लेट का सारा डेटा मिटाने का तरीका भी दिया जाना चाहिए. हमारा सुझाव है कि फ़िंगरप्रिंट टेंप्लेट की फ़ाइलों को एन्क्रिप्ट (सुरक्षित) करके, दिए गए पाथ में सेव करें. अगर TEE स्टोरेज की ज़रूरी शर्तों की वजह से ऐसा करना संभव नहीं है, तो लागू करने वाले को हुक जोड़ने होंगे, ताकि उपयोगकर्ता को हटाने पर डेटा को हटाया जा सके.
फ़िंगरप्रिंट की सुविधा इस्तेमाल करने के तरीके
फ़िंगरप्रिंट HIDL इंटरफ़ेस में, IBiometricsFingerprint.hal
में ये मुख्य तरीके शामिल हैं.
Method | ब्यौरा |
---|---|
enroll() |
फ़िंगरप्रिंट टेंप्लेट को इकट्ठा और सेव करने की प्रोसेस शुरू करने के लिए, एचएएल स्टेट मशीन को स्विच करता है. रजिस्ट्रेशन पूरा होने के बाद या टाइम आउट होने के बाद, एचएएल स्टेट मशीन, आइडल स्टेट पर वापस आ जाती है. |
preEnroll() |
फ़िंगरप्रिंट की जानकारी को रजिस्टर करने की प्रोसेस शुरू होने का संकेत देने के लिए, एक यूनीक टोकन जनरेट करता है. enroll फ़ंक्शन को एक टोकन उपलब्ध कराता है, ताकि यह पक्का किया जा सके कि पहले पुष्टि की जा चुकी है. उदाहरण के लिए, पासवर्ड का इस्तेमाल करके. टेंप्लेट में बदलाव किए जाने से रोकने के लिए, डिवाइस के क्रेडेंशियल की पुष्टि हो जाने के बाद, टोकन को रैप किया जाता है. रजिस्ट्रेशन के दौरान टोकन की जांच की जानी चाहिए, ताकि यह पुष्टि की जा सके कि वह अब भी मान्य है या नहीं. |
getAuthenticatorId() |
मौजूदा फ़िंगरप्रिंट सेट से जुड़ा टोकन दिखाता है. |
cancel() |
रजिस्टर करने या पुष्टि करने की बाकी कार्रवाइयों को रद्द कर देता है. इससे, HAL स्टेट मशीन को निष्क्रिय स्थिति में वापस लाया जाता है. |
enumerate() |
सभी ज्ञात फ़िंगरप्रिंट टेंप्लेट की गिनती करने के लिए सिंक्रोनस कॉल. |
remove() |
फ़िंगरप्रिंट टेंप्लेट मिटाता है. |
setActiveGroup() |
यह किसी ग्रुप आइडेंटिफ़ायर (जीआईडी) से पहचाने गए ग्रुप के फ़िंगरप्रिंट के सेट पर, एचएएल ऑपरेशन को सीमित करता है. |
authenticate() |
फ़िंगरप्रिंट से जुड़ी कार्रवाई की पुष्टि करता है (कार्रवाई के आईडी से पहचाना जाता है). |
setNotify() |
उपयोगकर्ता के उस फ़ंक्शन को रजिस्टर करता है जिसे एचएएल से सूचनाएं मिलती हैं. अगर एचएएल स्टेट मशीन व्यस्त स्थिति में है, तो फ़ंक्शन तब तक ब्लॉक रहता है, जब तक एचएएल व्यस्त स्थिति से बाहर नहीं निकल जाता. |
postEnroll() |
रजिस्टर करने की प्रोसेस पूरी करता है और preEnroll() से जनरेट किए गए चैलेंज को अमान्य कर देता है. इसे कई उंगलियों के डेटा को रजिस्टर करने वाले सेशन के आखिर में कॉल किया जाना चाहिए. इससे यह पता चलता है कि अब और उंगलियों का डेटा नहीं जोड़ा जा सकता. |
इनके बारे में ज़्यादा जानकारी के लिए, IBiometricsFingerprint.hal
में दी गई टिप्पणियां देखें.