बायोमेट्रिक्स

बायोमेट्रिक की मदद से, डिवाइस पर अपनी पहचान की पुष्टि करना ज़्यादा आसान होता है. हालांकि, यह तरीका कम सुरक्षित हो सकता है. टियर वाले पुष्टि करने के मॉडल में, पुष्टि करने का मुख्य तरीका (यानी कि पिन, पैटर्न, और पासवर्ड जैसी जानकारी पर आधारित तरीके) सबसे ज़्यादा सुरक्षा देते हैं. बायोमेट्रिक्स, पुष्टि करने के दूसरे टियर में आते हैं. इनसे सुरक्षा और सहूलियत, दोनों मिलती हैं. Android CDD में, बायोमेट्रिक सुरक्षा की तीन क्लास तय की गई हैं: क्लास 3 (पहले इसे मज़बूत कहा जाता था), क्लास 2 (पहले इसे कमज़ोर कहा जाता था), और क्लास 1 (पहले इसे सुविधा के तौर पर इस्तेमाल किया जाता था). हर क्लास के लिए, कुछ ज़रूरी शर्तें, विशेषाधिकार, और पाबंदियां होती हैं. ज़्यादा जानकारी के लिए, कृपया ऊपर दिया गया सीडीडी देखें. इन तीनों क्लास को लॉकस्क्रीन के साथ इंटिग्रेट करने की अनुमति है. हालांकि, सिर्फ़ मज़बूत और कमज़ोर पुष्टि करने वाले तरीकों को android.hardware.biometrics API के साथ इंटिग्रेट करने की अनुमति है. इस टेबल में, हर पुष्टि करने वाले व्यक्ति और उसकी सुविधाओं के बारे में बताया गया है.

Authenticator लॉक स्क्रीन BiometricPrompt इंटिग्रेशन कीस्टोर (समय के हिसाब से जनरेट होने वाला कोड) कीस्टोर (ऑपरेशन पर आधारित कुंजी)
BIOMETRIC_STRONG (क्लास 3) हां हां हां हां
BIOMETRIC_WEAK (क्लास 2) हां हां नहीं नहीं
BIOMETRIC_CONVENIENCE
(Class 1)
हां नहीं नहीं नहीं
DEVICE_CREDENTIAL हां हां हां हां

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

सोर्स

Android 12

  • BiometricManager.Strings API लॉन्च किया गया है. यह उन ऐप्लिकेशन के लिए स्थानीय भाषा में स्ट्रिंग उपलब्ध कराता है जो पुष्टि के लिए BiometricPrompt का इस्तेमाल करते हैं. इन स्ट्रिंग को डिवाइस के हिसाब से बनाया गया है. साथ ही, इनमें यह जानकारी दी गई है कि पुष्टि करने के लिए कौनसे तरीके इस्तेमाल किए जा सकते हैं.
  • इसमें डिसप्ले में मौजूद फ़िंगरप्रिंट सेंसर (यूडीएफ़पीएस) की सुविधा शामिल है.

Android 11

  • BiometricManager.Authenticators इंटरफ़ेस पेश किया गया है. यह ऐसे कॉन्स्टेंट उपलब्ध कराता है जिनका इस्तेमाल डेवलपर, यह तय करने के लिए कर सकते हैं कि उनके ऐप्लिकेशन में किस तरह की पुष्टि करने की सुविधा काम करेगी.
  • इसमें ACTION_BIOMETRIC_ENROLL इंटेंट ऐक्शन जोड़ा गया है. डेवलपर इसका इस्तेमाल करके, उपयोगकर्ता को पुष्टि करने के ऐसे तरीके के लिए रजिस्टर करने का निर्देश दे सकते हैं जो उनके ऐप्लिकेशन की ज़रूरी शर्तों को पूरा करता हो.
  • AuthenticationResult#getAuthenticationType() method को जोड़ता है. डेवलपर इसका इस्तेमाल यह देखने के लिए कर सकते हैं कि उपयोगकर्ता ने बायोमेट्रिक क्रेडेंशियल या डिवाइस क्रेडेंशियल का इस्तेमाल करके पुष्टि की है या नहीं.
  • यह BiometricPrompt क्लास में, auth-per-use कुंजियों के लिए अतिरिक्त सहायता उपलब्ध कराता है.

Android 10

  • BiometricManager class को पेश करता है. डेवलपर इसका इस्तेमाल, बायोमेट्रिक ऑथेंटिकेशन की उपलब्धता के बारे में क्वेरी करने के लिए कर सकते हैं.
  • इसमें BiometricPrompt के लिए, फ़िंगरप्रिंट और चेहरे की पहचान करके पुष्टि करने की सुविधा को इंटिग्रेट करने की सुविधा शामिल है

Android 9

  • इसमें सिर्फ़ BiometricPrompt के लिए फ़िंगरप्रिंट इंटिग्रेशन शामिल है.
  • FingerprintManager क्लास को बंद कर दिया गया है. अगर आपके बंडल किए गए और सिस्टम ऐप्लिकेशन इस क्लास का इस्तेमाल करते हैं, तो उन्हें अपडेट करके BiometricPrompt और BiometricManager का इस्तेमाल करें.
  • FingerprintManager CTS verifier टेस्ट को अपडेट किया गया है, ताकि BiometricPromptBoundKeysTest का इस्तेमाल करके BiometricPrompt की जांच की जा सके.

लागू करना

यह पक्का करने के लिए कि उपयोगकर्ताओं और डेवलपर को बायोमेट्रिक का बेहतर अनुभव मिले, अपने बायोमेट्रिक स्टैक को BiometricPrompt, BiometricManager, और ACTION_BIOMETRIC_ENROLL एपीआई के साथ इंटिग्रेट करें. बायोमेट्रिक सेंसर वाले डिवाइसों को, मज़बूत सुरक्षा से जुड़ी इन ज़रूरी शर्तों का पालन करना होगा.इसके अलावा, सभी डिवाइसों को CtsBiometricsTestCases CTS मॉड्यूल पास करना होगा.

अपने बायोमेट्रिक स्टैक को ACTION_BIOMETRIC_ENROLL API के साथ इंटिग्रेट करने के लिए:

  1. रजिस्ट्रेशन फ़्लो दिखाने के लिए, BiometricEnrollActivity में बदलाव करें. ध्यान दें कि आपका बायोमेट्रिक डेटा सिर्फ़ तब इस्तेमाल किया जा सकता है, जब वह अनुरोध की गई ज़रूरी शर्तों को पूरा करता हो. अगर आपके डिवाइस में एक से ज़्यादा तरीके काम करते हैं, तो इस कार्रवाई से एक सूची दिखनी चाहिए. इसमें से उपयोगकर्ता कोई विकल्प चुन सकता है.
BiometricPrompt आर्किटेक्चर
पहली इमेज. BiometricPrompt architecture

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

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

  • पक्का करें कि रॉ बायोमेट्रिक डेटा या डेरिवेटिव (जैसे, टेंप्लेट) को सुरक्षित आइसोलेटेड एनवायरमेंट (जैसे, टीईई या सिक्योर एलिमेंट) के बाहर से कभी ऐक्सेस न किया जा सके. सेव किए गए सभी डेटा को डिवाइस के हिसाब से तैयार की गई ऐसी कुंजी से एन्क्रिप्ट (सुरक्षित) किया जाना चाहिए जिसके बारे में सिर्फ़ ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) को पता हो. अगर हार्डवेयर इसका समर्थन करता है, तो हार्डवेयर के ऐक्सेस को सुरक्षित आइसोलेटेड एनवायरमेंट तक सीमित करें. साथ ही, इसे SELinux नीति के तहत सुरक्षित रखें. कम्यूनिकेशन चैनल (उदाहरण के लिए, SPI, I2C) को सिर्फ़ सुरक्षित आइसोलेटेड एनवायरमेंट के लिए ऐक्सेस किया जा सकता है. साथ ही, डिवाइस की सभी फ़ाइलों पर SELinux की नीति लागू होनी चाहिए.
  • बायोमेट्रिक डेटा को इकट्ठा करने, रजिस्टर करने, और पहचानने की प्रोसेस, सुरक्षित और अलग-थलग रखे गए एनवायरमेंट में होनी चाहिए. इससे डेटा के गलत इस्तेमाल और अन्य हमलों को रोका जा सकेगा. यह ज़रूरी शर्त सिर्फ़ क्लास 3 (पहले स्ट्रॉन्ग) और क्लास 2 (पहले वीक) बायोमेट्रिक्स पर लागू होती है.
  • रीप्ले अटैक से बचने के लिए, बायोमेट्रिक टेंप्लेट को निजी और डिवाइस के हिसाब से खास पासकोड से साइन करें. ऐडवांस एन्क्रिप्शन स्टैंडर्ड (एईएस) के लिए, फ़ाइल-सिस्टम के पूरे पाथ, ग्रुप, और बायोमेट्रिक आईडी के साथ कम से कम एक टेंप्लेट पर हस्ताक्षर करें. इससे यह पक्का किया जा सकेगा कि टेंप्लेट फ़ाइलें, किसी दूसरे डिवाइस पर या उस उपयोगकर्ता के अलावा किसी और के लिए काम न करें जिसने उन्हें उसी डिवाइस पर रजिस्टर किया है. उदाहरण के लिए, एक ही डिवाइस का इस्तेमाल करने वाले दूसरे उपयोगकर्ता या किसी दूसरे डिवाइस के उपयोगकर्ता का बायोमेट्रिक डेटा कॉपी करने से रोकना.
  • अगर आपको टीईई के बाहर डेटा सेव करना है, तो setActiveUser() HIDL method की ओर से दिए गए फ़ाइल-सिस्टम पाथ का इस्तेमाल करें. इसके अलावा, उपयोगकर्ता को हटाने पर, उपयोगकर्ता के सभी टेंप्लेट डेटा को मिटाने का कोई दूसरा तरीका उपलब्ध कराएं. ऐसा उपयोगकर्ता के डेटा को लीक होने से बचाने के लिए किया जाता है. जिन डिवाइसों में इस पाथ का इस्तेमाल नहीं किया जाता है उन्हें उपयोगकर्ता का खाता हटाने के बाद, ज़रूर साफ़ करना चाहिए. सीडीडी के लिए यह ज़रूरी है कि बायोमेट्रिक डेटा और उससे जुड़ी फ़ाइलों को एन्क्रिप्ट (सुरक्षित) करके सेव किया जाए. खास तौर पर, अगर उन्हें टीईई में सेव नहीं किया गया है. अगर सुरक्षित और अलग-थलग एनवायरमेंट की स्टोरेज से जुड़ी ज़रूरी शर्तों की वजह से ऐसा नहीं किया जा सकता, तो हुक जोड़ें. इससे यह पक्का किया जा सकेगा कि जब उपयोगकर्ता को हटा दिया जाए या डिवाइस को रीसेट कर दिया जाए, तब डेटा हटा दिया जाए. LockSettingsService.removeBiometricsForUser() देखें

पसंद के मुताबिक बनाएं

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

डिवाइस के हिसाब से पुष्टि करने वाली स्ट्रिंग

Android 12 से, कॉन्टेक्स्ट के हिसाब से पुष्टि करने वाली स्ट्रिंग, डेवलपर के लिए उपलब्ध कराई गई हैं. इन्हें BiometricManager.Strings API के ज़रिए ऐक्सेस किया जा सकता है. इस एपीआई से मिली संसाधन वैल्यू को अपनी ज़रूरत के मुताबिक बनाया जा सकता है, ताकि डिवाइस के हिसाब से स्ट्रिंग लागू की जा सकें. अगर ऐसा किया जाता है, तो पक्का करें कि डिवाइस के साथ काम करने वाली सभी भाषाओं के लिए, नई स्ट्रिंग का अनुवाद किया गया हो. इसके अलावा, पक्का करें कि ये प्रॉपर्टी बनी रहें:


तरीका

String purpose

पुष्टि करने के लिए शामिल किए जाने वाले तरीके

अगर बायोमेट्रिक और स्क्रीन लॉक, दोनों का इस्तेमाल किया जा सकता है

getButtonLabel()

BiometricPrompt को ट्रिगर करने वाले बटन का लेबल

सिर्फ़ रजिस्टर किए गए टाइप (अगर हो सके), जो पुष्टि करने वाले की ज़रूरी शर्तों को पूरा करते हों

biometric-only स्ट्रिंग का इस्तेमाल करें. जैसे, "फ़िंगरप्रिंट का इस्तेमाल करें"

getPromptMessage()

पुष्टि करते समय BiometricPrompt पर दिखाया गया मैसेज

सिर्फ़ रजिस्टर किए गए टाइप (अगर हो सके), जो पुष्टि करने वाले की ज़रूरी शर्तों को पूरा करते हों

बायोमेट्रिक और स्क्रीन लॉक, दोनों के लिए एक ही स्ट्रिंग का इस्तेमाल करें. उदाहरण के लिए, "जारी रखने के लिए, अपने फ़िंगरप्रिंट या पिन का इस्तेमाल करें"

getSettingName()

यह सेटिंग का नाम है. यह सेटिंग, पुष्टि करने के लिए BiometricPrompt को चालू करती है

डिवाइस के साथ काम करने वाले सभी टाइप के ऑथेंटिकेटर इस्तेमाल किए जा सकते हैं. भले ही, आपने उन्हें रजिस्टर न किया हो. हालांकि, यह ज़रूरी है कि वे ऑथेंटिकेटर से जुड़ी ज़रूरी शर्तें पूरी करते हों

बायोमेट्रिक और स्क्रीन लॉक, दोनों के लिए कंबाइंड स्ट्रिंग का इस्तेमाल करें. जैसे, "फ़िंगरप्रिंट या स्क्रीन लॉक का इस्तेमाल करें"

उदाहरण के लिए, मान लें कि किसी डिवाइस में क्लास 2 का फ़ेस सेंसर है. इसमें चेहरे की पहचान की सुविधा के लिए रजिस्टर किया गया चेहरा और रजिस्टर किया गया पिन है. साथ ही, इसमें क्लास 3 का फ़िंगरप्रिंट सेंसर है, लेकिन कोई फ़िंगरप्रिंट रजिस्टर नहीं किया गया है. यहां दी गई टेबल में, अनुमति वाले हर ऑथेंटिकेटर और BiometricManager.Strings तरीके के हर कॉम्बिनेशन के लिए सैंपल स्ट्रिंग दी गई हैं:


पुष्टि करने वाले ऐसे तरीके जिन्हें अनुमति मिली है

getButtonLabel()

getPromptMessage()

getSettingName()

क्लास 3 वाला बायोमेट्रिक (BIOMETRIC_STRONG)

"Use fingerprint"
(Only fingerprint satisfies authenticator requirements)

"जारी रखने के लिए, अपने फ़िंगरप्रिंट का इस्तेमाल करें"
(सिर्फ़ फ़िंगरप्रिंट, पुष्टि करने वाले की ज़रूरी शर्तों को पूरा करता है)

"फ़िंगरप्रिंट का इस्तेमाल करें"
(सिर्फ़ फ़िंगरप्रिंट, पुष्टि करने वाले की ज़रूरतें पूरी करता है)

क्लास 2 बायोमेट्रिक (BIOMETRIC_WEAK)

"Use face"
(Face and fingerprint satisfy requirements; only face is enrolled)

"जारी रखने के लिए अपने चेहरे का इस्तेमाल करें"
(चेहरे और उंगलियों के निशान से जुड़ी ज़रूरी शर्तें पूरी की गई हैं; सिर्फ़ चेहरे को रजिस्टर किया गया है)

"फ़िंगरप्रिंट या फ़ेस अनलॉक की सुविधा का इस्तेमाल करें"
(फ़िंगरप्रिंट और फ़ेस अनलॉक की सुविधा से जुड़ी ज़रूरी शर्तें पूरी की गई हैं; डिवाइस में दोनों सुविधाएं काम करती हैं)

स्क्रीन लॉक (DEVICE_CREDENTIAL)

"पिन का इस्तेमाल करें"
(स्क्रीन लॉक की कोई भी सुविधा ज़रूरी शर्तें पूरी करती हो; पिन रजिस्टर किया गया हो)

"जारी रखने के लिए अपना पिन डालें"
(स्क्रीन लॉक की कोई भी सुविधा इस्तेमाल की जा सकती है. हालांकि, पिन सेट होना ज़रूरी है)

"स्क्रीन लॉक का इस्तेमाल करें"
(कोई भी स्क्रीन लॉक, ज़रूरी शर्तें पूरी करता हो)

क्लास 3 वाला बायोमेट्रिक या स्क्रीन लॉक

"पिन का इस्तेमाल करें"
(फ़िंगरप्रिंट और स्क्रीन लॉक करने का कोई भी तरीका ज़रूरी शर्तें पूरी करता हो; सिर्फ़ पिन रजिस्टर किया गया हो)

"जारी रखने के लिए अपना पिन डालें"
(फ़िंगरप्रिंट और स्क्रीन लॉक करने का कोई भी तरीका ज़रूरी शर्तें पूरी करता है; सिर्फ़ पिन रजिस्टर किया जाता है)

"फ़िंगरप्रिंट या स्क्रीन लॉक का इस्तेमाल करें"
(फ़िंगरप्रिंट और कोई भी स्क्रीन लॉक, ज़रूरी शर्तें पूरी करता हो)

क्लास 2 वाला बायोमेट्रिक या स्क्रीन लॉक

"चेहरे का इस्तेमाल करें"
(चेहरे, फ़िंगरप्रिंट, और किसी भी स्क्रीन लॉक से जुड़ी ज़रूरी शर्तें पूरी होती हैं; चेहरे को रजिस्टर किया गया है और यह पिन की जगह इस्तेमाल किया जा सकता है)

"जारी रखने के लिए, फ़ेस अनलॉक या पिन का इस्तेमाल करें"
(चेहरा, फ़िंगरप्रिंट, और कोई भी स्क्रीन लॉक ज़रूरी शर्तें पूरी करता हो; फ़ेस अनलॉक और पिन रजिस्टर किए गए हों)

"बायोमेट्रिक्स या स्क्रीन लॉक का इस्तेमाल करें"
(चेहरे, उंगलियों के निशान, और किसी भी स्क्रीन लॉक से जुड़ी ज़रूरी शर्तें पूरी होनी चाहिए)

Validation

बायोमेट्रिक ऑथेंटिकेशन की सुविधा लागू करने के बाद, इन टेस्ट को पास करना ज़रूरी है:

  • CTS BiometricManager
  • सीटीएस BiometricPrompt (सटीक, ज़्यादा जांच करने के लिए पुष्टि करने वाले पर निर्भर करता है)
  • CtsVerifier Biometric Test section: डिवाइस पर काम करने वाले हर तरीके के लिए, यह टेस्ट अलग-अलग पास होना चाहिए

इसके अलावा, अगर आपके डिवाइस पर ऐसा बायोमेट्रिक काम करता है जिसमें एओएसपी एचआईडीएल (fingerprint@2.1, fingerprint@2.2, face1.0) है, तो उसे वीटीएस के ज़रूरी टेस्ट (fingerprint, face) पास करने होंगे