फ़िंगरप्रिंट HIDL

फ़िंगरप्रिंट सेंसर वाले डिवाइसों पर, उपयोगकर्ता एक या उससे ज़्यादा फ़िंगरप्रिंट रजिस्टर कर सकते हैं. साथ ही, उन फ़िंगरप्रिंट का इस्तेमाल करके डिवाइस को अनलॉक कर सकते हैं और अन्य टास्क पूरे कर सकते हैं. Android, वेंडर के हिसाब से बनी लाइब्रेरी और फ़िंगरप्रिंट को पहचानने वाला हार्डवेयर (जैसे, फ़िंगरप्रिंट सेंसर) से कनेक्ट करने के लिए, फ़िंगरप्रिंट हार्डवेयर इंटरफ़ेस डेफ़िनिशन लैंग्वेज (एचआईडीएल) का इस्तेमाल करता है.

फ़िंगरप्रिंट HIDL को लागू करने के लिए, आपको इसे IBiometricsFingerprint.hal वेंडर के लिए खास लाइब्रेरी में लागू करना होगा.

फ़िंगरप्रिंट मैच करना

किसी डिवाइस का फ़िंगरप्रिंट सेंसर आम तौर पर निष्क्रिय रहता है. हालांकि, authenticate या enroll को कॉल करने पर, फ़िंगरप्रिंट सेंसर टच को सुनता है. जब कोई व्यक्ति फ़िंगरप्रिंट सेंसर को छूता है, तो स्क्रीन भी चालू हो सकती है. फ़िंगरप्रिंट मैच करने की प्रोसेस में ये चरण शामिल होते हैं:

  1. उपयोगकर्ता, फ़िंगरप्रिंट सेंसर पर उंगली रखता है.
  2. वेंडर के हिसाब से तय की गई लाइब्रेरी यह तय करती है कि फ़िंगरप्रिंट के मौजूदा सेट में, फ़िंगरप्रिंट मैच हो रहा है या नहीं.
  3. मिलते-जुलते नतीजे FingerprintService को भेजे जाते हैं.

इस फ़्लो में यह माना जाता है कि डिवाइस पर पहले से ही फ़िंगरप्रिंट रजिस्टर किया गया है. इसका मतलब है कि वेंडर के हिसाब से लाइब्रेरी ने फ़िंगरप्रिंट के लिए एक टेंप्लेट रजिस्टर किया है. ज़्यादा जानकारी के लिए, पुष्टि करना देखें.

भवन निर्माण

फ़िंगरप्रिंट एचएएल, इन कॉम्पोनेंट के साथ इंटरैक्ट करता है.

  • BiometricManager, ऐप्लिकेशन की प्रोसेस में सीधे तौर पर ऐप्लिकेशन के साथ इंटरैक्ट करता है. हर ऐप्लिकेशन में IBiometricsFingerprint.hal का एक इंस्टेंस होता है
  • FingerprintService सिस्टम प्रोसेस में काम करता है. यह प्रोसेस, फ़िंगरप्रिंट एचएएल के साथ कम्यूनिकेशन को मैनेज करती है.
  • फ़िंगरप्रिंट एचएएल, IBiometricsFingerprint एचआईडीएल इंटरफ़ेस का C/C++ वर्शन है. इसमें वेंडर के हिसाब से लाइब्रेरी होती है. यह लाइब्रेरी, डिवाइस के हिसाब से हार्डवेयर के साथ कम्यूनिकेट करती है.
  • कीस्टोर एपीआई और KeyMint (पहले इसे Keymaster कहा जाता था) कॉम्पोनेंट, सुरक्षित एनवायरमेंट में सुरक्षित तरीके से कुंजी सेव करने के लिए, हार्डवेयर की मदद से क्रिप्टोग्राफ़ी की सुविधा देते हैं. जैसे, ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई).
फ़िंगरप्रिंट की मदद से पुष्टि करने के लिए डेटा फ़्लो
पहली इमेज. फ़िंगरप्रिंट से पुष्टि करने की सुविधा के लिए, हाई-लेवल डेटा फ़्लो

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

FingerprintService और fingerprintd, फ़िंगरप्रिंट HAL के ज़रिए कॉल करते हैं. इससे वेंडर के हिसाब से लाइब्रेरी में फ़िंगरप्रिंट रजिस्टर किए जाते हैं और अन्य कार्रवाइयां की जाती हैं.

fingerprintd के साथ इंटरैक्शन
दूसरी इमेज. फ़िंगरप्रिंट डेमॉन का, फ़िंगरप्रिंट की सुविधा देने वाली कंपनी की लाइब्रेरी के साथ इंटरैक्शन

लागू करने के दिशा-निर्देश

फ़िंगरप्रिंट एचएएल से जुड़े ये दिशा-निर्देश, यह पक्का करने के लिए बनाए गए हैं कि फ़िंगरप्रिंट का डेटा लीक न हो और जब किसी उपयोगकर्ता को डिवाइस से हटाया जाए, तो उसे हटा दिया जाए:

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

फ़िंगरप्रिंट के तरीके

फ़िंगरप्रिंट HIDL इंटरफ़ेस में, IBiometricsFingerprint.hal में ये मुख्य तरीके शामिल होते हैं.

तरीका ब्यौरा
enroll() यह एचएएल स्टेट मशीन को स्विच करता है, ताकि फ़िंगरप्रिंट टेंप्लेट को इकट्ठा और सेव किया जा सके. रजिस्ट्रेशन पूरा होने पर या टाइम आउट के बाद, एचएएल स्टेट मशीन वापस से निष्क्रिय स्थिति में आ जाती है.
preEnroll() यह कुकी, फ़िंगरप्रिंट के रजिस्ट्रेशन की शुरुआत का पता लगाने के लिए एक यूनीक टोकन जनरेट करती है. यह कुकी, enroll फ़ंक्शन को एक टोकन देती है. इससे यह पक्का किया जाता है कि पहले पुष्टि की गई हो. उदाहरण के लिए, पासवर्ड का इस्तेमाल करके. छेड़छाड़ को रोकने के लिए, डिवाइस के क्रेडेंशियल की पुष्टि हो जाने के बाद टोकन को रैप किया जाता है. रजिस्ट्रेशन के दौरान टोकन की जांच की जानी चाहिए, ताकि यह पुष्टि की जा सके कि यह अब भी मान्य है.
getAuthenticatorId() यह फ़ंक्शन, फ़िंगरप्रिंट के मौजूदा सेट से जुड़ा टोकन दिखाता है.
cancel() यह कुकी, रजिस्टर करने या पुष्टि करने की प्रोसेस को रद्द करती है. HAL स्टेट मशीन को आइडल स्टेट में वापस कर दिया जाता है.
enumerate() यह सभी पहचाने हुए फ़िंगरप्रिंट टेंप्लेट की गिनती करने के लिए, सिंक कॉल है.
remove() यह फ़िंगरप्रिंट टेंप्लेट को मिटाता है.
setActiveGroup() यह एचएएल ऑपरेशन को, फ़िंगरप्रिंट के ऐसे सेट तक सीमित करता है जो किसी खास ग्रुप से जुड़े हों. इस ग्रुप की पहचान, ग्रुप आइडेंटिफ़ायर (GID) से की जाती है.
authenticate() यह कुकी, फ़िंगरप्रिंट से जुड़ी कार्रवाई की पुष्टि करती है. इस कार्रवाई की पहचान, कार्रवाई के आईडी से की जाती है.
setNotify() यह फ़ंक्शन, उपयोगकर्ता के ऐसे फ़ंक्शन को रजिस्टर करता है जिसे एचएएल से सूचनाएं मिलती हैं. अगर एचएएल स्टेट मशीन व्यस्त है, तो एचएएल के व्यस्त होने की स्थिति से बाहर आने तक फ़ंक्शन को ब्लॉक कर दिया जाता है.
postEnroll() यह कुकी, रजिस्टर करने की प्रोसेस को पूरा करती है. साथ ही, preEnroll() से जनरेट किए गए चैलेंज को अमान्य करती है. एक से ज़्यादा उंगलियों के फ़िंगरप्रिंट रजिस्टर करने वाले सेशन के आखिर में, इस फ़ंक्शन को कॉल करना ज़रूरी है. इससे यह पता चलता है कि अब और उंगलियों के फ़िंगरप्रिंट नहीं जोड़े जा सकते.

इनके बारे में ज़्यादा जानकारी के लिए, IBiometricsFingerprint.hal में दी गई टिप्पणियां देखें.