Android Keystore सिस्टम की मदद से, क्रिप्टोग्राफ़िक कुंजियों को कंटेनर में सेव किया जा सकता है, ताकि उन्हें डिवाइस से निकालना मुश्किल हो. कुंजियों को पासकोड के डिवाइस में सेव करने के बाद, उनका इस्तेमाल क्रिप्टोग्राफ़िक ऑपरेशन के लिए किया जा सकता है. हालांकि, पासकोड का डेटा एक्सपोर्ट नहीं किया जा सकता. साथ ही, पासकोड सिस्टम की मदद से यह तय किया जा सकता है कि कुंजियों का इस्तेमाल कब और कैसे किया जाए. जैसे, कुंजी के इस्तेमाल के लिए उपयोगकर्ता की पुष्टि करना या कुंजियों को सिर्फ़ कुछ क्रिप्टोग्राफ़िक मोड में इस्तेमाल करने की पाबंदी लगाना. ज़्यादा जानकारी के लिए, सुरक्षा से जुड़ी सुविधाएं सेक्शन देखें.
Android 4.0 (एपीआई लेवल 14) में पेश किए गए KeyChain
एपीआई के साथ-साथ, Android 4.3 (एपीआई लेवल 18) में पेश की गई Android Keystore की सेवा देने वाली सुविधा, पासकोड सेव करने वाले सिस्टम का इस्तेमाल करती है. इस दस्तावेज़ में, Android Keystore सिस्टम का इस्तेमाल कब और कैसे करना है, इस बारे में बताया गया है.
सुरक्षा से जुड़ी सुविधाएं
Android कीस्टोर सिस्टम, पासकोड को दो तरीकों से बिना अनुमति के इस्तेमाल होने से बचाता है. पहला, यह Android डिवाइस के बाहर से, पासकोड के गलत इस्तेमाल के जोखिम को कम करता है. ऐसा, ऐप्लिकेशन की प्रोसेस और पूरे Android डिवाइस से पासकोड को निकालने से रोककर किया जाता है. दूसरा, पासकोड सेव करने की सुविधा वाला सिस्टम, Android डिवाइस में पासकोड के गलत इस्तेमाल के जोखिम को कम करता है. ऐसा करने के लिए, यह सिस्टम ऐप्लिकेशन को उनकी कुंजियों के इस्तेमाल के बारे में बताता है. साथ ही, ऐप्लिकेशन की प्रोसेस के बाहर उन पाबंदियों को लागू करता है.
डेटा निकालने से रोकना
Android Keystore की कुंजियों के पासकोड को निकालने से रोकने के लिए, दो सुरक्षा उपायों का इस्तेमाल किया जाता है:
- पासकोड, ऐप्लिकेशन प्रोसेस में कभी शामिल नहीं होता. जब कोई ऐप्लिकेशन, Android कीस्टोर की कुंजी का इस्तेमाल करके क्रिप्टोग्राफ़िक ऑपरेशन करता है, तो पर्दे के पीछे सादा टेक्स्ट, सिफर टेक्स्ट, और साइन किए जाने वाले या जिनकी पुष्टि की जानी है ऐसे मैसेज, सिस्टम प्रोसेस को फ़ीड किए जाते हैं. यह प्रोसेस, क्रिप्टोग्राफ़िक ऑपरेशन करती है. अगर ऐप्लिकेशन की प्रोसेस में कोई गड़बड़ी होती है, तो हमलावर ऐप्लिकेशन की कुंजियों का इस्तेमाल कर सकता है. हालांकि, वह कुंजी का मुख्य हिस्सा नहीं निकाल सकता. उदाहरण के लिए, Android डिवाइस के बाहर इसका इस्तेमाल करने के लिए.
- पासकोड को Android डिवाइस के सुरक्षित हार्डवेयर से जोड़ा जा सकता है. जैसे, ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट (टीईई) या सिक्योर एलिमेंट (एसई). जब किसी पासकोड के लिए यह सुविधा चालू होती है, तो उसका पासकोड मैटीरियल, सुरक्षित हार्डवेयर के बाहर कभी भी नहीं दिखता. अगर Android OS हैक हो जाता है या हमलावर डिवाइस के इंटरनल स्टोरेज को पढ़ सकता है, तो हो सकता है कि वह Android डिवाइस पर किसी भी ऐप्लिकेशन की Android Keystore पासकोड का इस्तेमाल कर सके. हालांकि, वह उन्हें डिवाइस से निकाल नहीं सकता. यह सुविधा सिर्फ़ तब चालू होती है, जब डिवाइस का सुरक्षित हार्डवेयर, कुंजी एल्गोरिदम, ब्लॉक मोड, पैडिंग स्कीम, और डिजेस्ट के उस खास कॉम्बिनेशन के साथ काम करता हो जिसके साथ कुंजी का इस्तेमाल करने की अनुमति है.
यह देखने के लिए कि किसी पासकोड के लिए यह सुविधा चालू है या नहीं, उस पासकोड के लिए
KeyInfo
पाएं. अगला चरण, आपके ऐप्लिकेशन के टारगेट किए गए SDK टूल के वर्शन पर निर्भर करता है:- अगर आपका ऐप्लिकेशन Android 10 (एपीआई लेवल 29) या उसके बाद के वर्शन को टारगेट करता है, तो
getSecurityLevel()
की रिटर्न वैल्यू की जांच करें.KeyProperties.SecurityLevelEnum.TRUSTED_ENVIRONMENT
याKeyProperties.SecurityLevelEnum.STRONGBOX
से मैच करने वाली रिटर्न वैल्यू से पता चलता है कि पासकोड, सुरक्षित हार्डवेयर में मौजूद है. - अगर आपका ऐप्लिकेशन Android 9 (एपीआई लेवल 28) या इससे पहले के वर्शन को टारगेट करता है, तो
KeyInfo.isInsideSecurityHardware()
की बूलियन रिटर्न वैल्यू की जांच करें.
- अगर आपका ऐप्लिकेशन Android 10 (एपीआई लेवल 29) या उसके बाद के वर्शन को टारगेट करता है, तो
StrongBox KeyMint सिक्योर एलिमेंट
Android 9 (एपीआई लेवल 28) या इसके बाद के वर्शन वाले डिवाइसों में, StrongBox KeyMint शामिल हो सकता है. यह KeyMint HAL का एक ऐसा वर्शन है जिसे StrongBox की मदद से लागू किया जाता है. हार्डवेयर सुरक्षा मॉड्यूल (एचएसएम), मुख्य रूप से Linux कर्नेल के साथ छेड़छाड़ को रोकने वाले सुरक्षित पासकोड स्टोरेज के समाधानों को दिखाते हैं. वहीं, StrongBox खास तौर पर एम्बेड किए गए एसई या इंटिग्रेट किए गए सुरक्षित एन्क्लेव (iSE) में लागू किए गए समाधानों को दिखाता है. यह टीईई की तुलना में, बेहतर अलगाव और छेड़छाड़ के लिए ज़्यादा सुरक्षित होता है.
StrongBox KeyMint को लागू करने के लिए, इन चीज़ों का होना ज़रूरी है:
- अपना सीपीयू
- सुरक्षित स्टोरेज
- रैंडम नंबर जनरेटर
- पैकेज में छेड़छाड़ और ऐप्लिकेशन को बिना अनुमति के साइडलोड करने से रोकने के लिए अतिरिक्त तरीके
- सुरक्षित टाइमर
- रीबूट करने की सूचना देने वाला पिन (या इसके बराबर कोई दूसरा पिन), जैसे कि सामान्य काम के लिए इनपुट/आउटपुट (जीपीआईओ)
कम पावर वाले StrongBox को लागू करने के लिए, एल्गोरिदम और कुंजी के साइज़ का एक सबसेट इस्तेमाल किया जा सकता है:
- आरएसए 2048
- AES 128 और 256
- ECDSA, ECDH P-256
- HMAC-SHA256 (8 बाइट से 64 बाइट के बीच की कुंजी के साइज़ के साथ काम करता है)
- ट्रिपल डीईएस
- लंबी अवधि के APDU
StrongBox में कुंजी की पुष्टि करने की सुविधा भी उपलब्ध है.
StrongBox KeyMint का इस्तेमाल करना
FEATURE_STRONGBOX_KEYSTORE
का इस्तेमाल करके देखें कि किसी डिवाइस पर StrongBox उपलब्ध है या नहीं. अगर StrongBox उपलब्ध है, तो StrongBox KeyMint में कुंजी को सेव करने के लिए प्राथमिकता दी जा सकती है. इसके लिए, इन तरीकों में true
को पास करें:
- कुंजी जनरेट करना:
KeyGenParameterSpec.Builder.setIsStrongBoxBacked()
- कुंजी इंपोर्ट:
KeyProtection.Builder.setIsStrongBoxBacked()
अगर StrongBox KeyMint, बताए गए एल्गोरिदम या पासकोड के साइज़ के साथ काम नहीं करता है, तो फ़्रेमवर्क StrongBoxUnavailableException
दिखाएगा. अगर ऐसा होता है, तो setIsStrongBoxBacked(true)
को कॉल किए बिना पासकोड जनरेट या इंपोर्ट करें.
पासकोड इस्तेमाल करने की अनुमतियां
Android डिवाइस पर पासकोड का गलत इस्तेमाल होने से बचाने के लिए, Android Keystore की मदद से ऐप्लिकेशन, पासकोड जनरेट या इंपोर्ट करते समय, उनके इस्तेमाल के लिए अनुमति तय कर सकते हैं. पासकोड जनरेट या इंपोर्ट करने के बाद, उसके ऐक्सेस लेवल में बदलाव नहीं किया जा सकता. इसके बाद, जब भी कुंजी का इस्तेमाल किया जाता है, तो Android Keystore अनुमतियों को लागू करता है. यह सुरक्षा से जुड़ी बेहतर सुविधा है. आम तौर पर, यह सिर्फ़ तब काम की होती है, जब आपकी ज़रूरतों के मुताबिक, पासकोड जनरेट करने/इंपोर्ट करने के बाद (लेकिन इससे पहले या दौरान नहीं) आपकी आवेदन प्रक्रिया में छेड़छाड़ होने पर, पासकोड का गलत इस्तेमाल न किया जा सके.
पासकोड इस्तेमाल करने की अनुमतियों को इन कैटगरी में बांटा गया है:
- क्रिप्टोग्राफ़ी: कुंजी का इस्तेमाल सिर्फ़ अनुमति वाले एल्गोरिदम, ऑपरेशन या मकसद (एन्क्रिप्ट, डिक्रिप्ट, हस्ताक्षर, पुष्टि) के साथ किया जा सकता है. साथ ही, पैडिंग स्कीम, ब्लॉक मोड या डाइजेस्ट के साथ भी किया जा सकता है.
- समयसीमा: पासकोड का इस्तेमाल सिर्फ़ तय समयसीमा के दौरान किया जा सकता है.
- उपयोगकर्ता की पुष्टि: पासकोड का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब उपयोगकर्ता की पुष्टि हाल ही में की गई हो. पासकोड इस्तेमाल करने के लिए, उपयोगकर्ता की पुष्टि करना ज़रूरी है देखें.
जिन कुंजियों का पासकोड, सुरक्षित हार्डवेयर में होता है उनके लिए, सुरक्षा के एक और उपाय के तौर पर, Android डिवाइस के हिसाब से, सुरक्षित हार्डवेयर से कुंजी के इस्तेमाल की कुछ अनुमतियां लागू की जा सकती हैं. इसके लिए, KeyInfo.isInsideSecurityHardware()
देखें या Android 10 (एपीआई लेवल 29) या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन के लिए, KeyInfo.getSecurityLevel()
देखें.
आम तौर पर, सुरक्षित हार्डवेयर, क्रिप्टोग्राफ़ी और उपयोगकर्ता की पुष्टि करने की अनुमतियों को लागू करता है. हालांकि, आम तौर पर सुरक्षित हार्डवेयर, समयसीमा के हिसाब से मान्य रहने की अनुमतियों को लागू नहीं करता, क्योंकि आम तौर पर इसमें स्वतंत्र और सुरक्षित रीयल-टाइम घड़ी नहीं होती.
KeyInfo.isUserAuthenticationRequirementEnforcedBySecureHardware()
का इस्तेमाल करके, यह पता लगाया जा सकता है कि कुंजी के उपयोगकर्ता की पुष्टि करने की अनुमति, सुरक्षित हार्डवेयर से लागू की गई है या नहीं.
पासकोड और Android Keystore की सेवा देने वाली कंपनी में से किसी एक को चुनना
जब आपको सिस्टम के लिए क्रेडेंशियल चाहिए, तो KeyChain
एपीआई का इस्तेमाल करें. जब कोई ऐप्लिकेशन KeyChain
एपीआई के ज़रिए किसी क्रेडेंशियल का इस्तेमाल करने का अनुरोध करता है, तो उपयोगकर्ता सिस्टम से मिले यूज़र इंटरफ़ेस (यूआई) की मदद से यह चुन सकते हैं कि ऐप्लिकेशन, इंस्टॉल किए गए किन क्रेडेंशियल को ऐक्सेस कर सकता है. इससे कई ऐप्लिकेशन, उपयोगकर्ता की सहमति के साथ क्रेडेंशियल के एक ही सेट का इस्तेमाल कर सकते हैं.
Android कीसस्टोर प्रोवाइडर का इस्तेमाल करके, किसी ऐप्लिकेशन को अपने क्रेडेंशियल स्टोर करने की अनुमति दें. ये क्रेडेंशियल सिर्फ़ वह ऐप्लिकेशन ऐक्सेस कर सकता है.
इससे ऐप्लिकेशन को ऐसे क्रेडेंशियल मैनेज करने का तरीका मिलता है जिनका इस्तेमाल सिर्फ़ वे कर सकते हैं. साथ ही, इससे वे वही सुरक्षा फ़ायदे पाते हैं जो KeyChain
API, सिस्टम के सभी क्रेडेंशियल के लिए देता है.
इस तरीके में, उपयोगकर्ता को क्रेडेंशियल चुनने की ज़रूरत नहीं होती.
Android कीस्टोर की सेवा देने वाली कंपनी का इस्तेमाल करना
इस सुविधा का इस्तेमाल करने के लिए, Android 4.3 (एपीआई लेवल 18) में पेश किए गए AndroidKeyStore
प्रोवाइडर के साथ-साथ, स्टैंडर्ड KeyStore
और KeyPairGenerator
या KeyGenerator
क्लास का इस्तेमाल किया जाता है.
AndroidKeyStore
को KeyStore
टाइप के तौर पर रजिस्टर किया गया है, ताकि इसका इस्तेमाल KeyStore.getInstance(type)
तरीके के साथ किया जा सके. साथ ही, इसे KeyPairGenerator.getInstance(algorithm, provider)
और KeyGenerator.getInstance(algorithm, provider)
तरीकों के साथ इस्तेमाल करने के लिए, प्रोवाइडर के तौर पर रजिस्टर किया गया है.
क्रिप्टोग्राफ़िक ऑपरेशन में समय लग सकता है. इसलिए, ऐप्लिकेशन को अपनी मुख्य थ्रेड पर AndroidKeyStore
का इस्तेमाल करने से बचना चाहिए. इससे यह पक्का किया जा सकता है कि ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) काम करता रहे. (StrictMode
की मदद से, ऐसी जगहें ढूंढी जा सकती हैं जहां ऐसा नहीं है.)
नई निजी या गुप्त कुंजी जनरेट करना
PrivateKey
वाला नया KeyPair
जनरेट करने के लिए, आपको सर्टिफ़िकेट के शुरुआती X.509 एट्रिब्यूट की जानकारी देनी होगी. KeyStore.setKeyEntry()
का इस्तेमाल करके, बाद में सर्टिफ़िकेट को किसी ऐसे सर्टिफ़िकेट से बदला जा सकता है जिस पर सर्टिफ़िकेट देने वाली संस्था (सीए) का हस्ताक्षर हो.
कुंजी का जोड़ा जनरेट करने के लिए, KeyGenParameterSpec
के साथ KeyPairGenerator
का इस्तेमाल करें:
Kotlin
/* * Generate a new EC key pair entry in the Android Keystore by * using the KeyPairGenerator API. The private key can only be * used for signing or verification and only with SHA-256 or * SHA-512 as the message digest. */ val kpg: KeyPairGenerator = KeyPairGenerator.getInstance( KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore" ) val parameterSpec: KeyGenParameterSpec = KeyGenParameterSpec.Builder( alias, KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY ).run { setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512) build() } kpg.initialize(parameterSpec) val kp = kpg.generateKeyPair()
Java
/* * Generate a new EC key pair entry in the Android Keystore by * using the KeyPairGenerator API. The private key can only be * used for signing or verification and only with SHA-256 or * SHA-512 as the message digest. */ KeyPairGenerator kpg = KeyPairGenerator.getInstance( KeyProperties.KEY_ALGORITHM_EC, "AndroidKeyStore"); kpg.initialize(new KeyGenParameterSpec.Builder( alias, KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY) .setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512) .build()); KeyPair kp = kpg.generateKeyPair();
एन्क्रिप्ट (सुरक्षित) की गई कुंजियों को सुरक्षित हार्डवेयर में इंपोर्ट करना
Android 9 (एपीआई लेवल 28) और इसके बाद के वर्शन में, एएसएन.1-एन्क्रिप्ट की गई कुंजी के फ़ॉर्मैट का इस्तेमाल करके, एन्क्रिप्ट की गई कुंजियों को कीस्टोर में सुरक्षित तरीके से इंपोर्ट किया जा सकता है. इसके बाद, Keymaster, पासकोड कोड को डिक्रिप्ट कर देता है. इसलिए, पासकोड का कॉन्टेंट डिवाइस की होस्ट मेमोरी में कभी भी सादा टेक्स्ट के तौर पर नहीं दिखता. इस प्रोसेस से, पासकोड को डिक्रिप्ट करने के लिए, पासकोड की अतिरिक्त सुरक्षा मिलती है.
एन्क्रिप्ट की गई कुंजियों को पासकोड में सुरक्षित तरीके से इंपोर्ट करने के लिए, यह तरीका अपनाएं:
एक कुंजी जोड़ा जनरेट करें, जो
PURPOSE_WRAP_KEY
के मकसद के लिए इस्तेमाल किया जाता है. हमारा सुझाव है कि आप इस कुंजी जोड़े को भी पुष्टि करें.भरोसेमंद सर्वर या मशीन पर,
SecureKeyWrapper
के लिए ASN.1 मैसेज जनरेट करें.रैपर में यह स्कीमा शामिल होता है:
KeyDescription ::= SEQUENCE { keyFormat INTEGER, authorizationList AuthorizationList } SecureKeyWrapper ::= SEQUENCE { wrapperFormatVersion INTEGER, encryptedTransportKey OCTET_STRING, initializationVector OCTET_STRING, keyDescription KeyDescription, secureKey OCTET_STRING, tag OCTET_STRING }
ASN.1 मैसेज को बाइट कलेक्शन के तौर पर पास करके,
WrappedKeyEntry
ऑब्जेक्ट बनाएं.इस
WrappedKeyEntry
ऑब्जेक्ट को,setEntry()
के उस ओवरलोड में पास करें जोKeystore.Entry
ऑब्जेक्ट को स्वीकार करता है.
पासकोड के साथ काम करना
AndroidKeyStore
की सेवा देने वाली कंपनी को, सभी स्टैंडर्ड KeyStore
एपीआई के ज़रिए ऐक्सेस किया जा सकता है.
एंट्री की सूची
aliases()
तरीके को कॉल करके, पासकोड की सूची बनाएं:
Kotlin
/* * Load the Android KeyStore instance using the * AndroidKeyStore provider to list the currently stored entries. */ val ks: KeyStore = KeyStore.getInstance("AndroidKeyStore").apply { load(null) } val aliases: Enumeration<String> = ks.aliases()
Java
/* * Load the Android KeyStore instance using the * AndroidKeyStore provider to list the currently stored entries. */ KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); ks.load(null); Enumeration<String> aliases = ks.aliases();
डेटा पर हस्ताक्षर करना और उसकी पुष्टि करना
डेटा पर हस्ताक्षर करने के लिए, पासकोड सेव करने वाली जगह से KeyStore.Entry
फ़ेच करें और Signature
एपीआई का इस्तेमाल करें. जैसे, sign()
:
Kotlin
/* * Use a PrivateKey in the KeyStore to create a signature over * some data. */ val ks: KeyStore = KeyStore.getInstance("AndroidKeyStore").apply { load(null) } val entry: KeyStore.Entry = ks.getEntry(alias, null) if (entry !is KeyStore.PrivateKeyEntry) { Log.w(TAG, "Not an instance of a PrivateKeyEntry") return null } val signature: ByteArray = Signature.getInstance("SHA256withECDSA").run { initSign(entry.privateKey) update(data) sign() }
Java
/* * Use a PrivateKey in the KeyStore to create a signature over * some data. */ KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); ks.load(null); KeyStore.Entry entry = ks.getEntry(alias, null); if (!(entry instanceof PrivateKeyEntry)) { Log.w(TAG, "Not an instance of a PrivateKeyEntry"); return null; } Signature s = Signature.getInstance("SHA256withECDSA"); s.initSign(((PrivateKeyEntry) entry).getPrivateKey()); s.update(data); byte[] signature = s.sign();
इसी तरह, verify(byte[])
तरीके से डेटा की पुष्टि करने के लिए:
Kotlin
/* * Verify a signature previously made by a private key in the * KeyStore. This uses the X.509 certificate attached to the * private key in the KeyStore to validate a previously * generated signature. */ val ks = KeyStore.getInstance("AndroidKeyStore").apply { load(null) } val entry = ks.getEntry(alias, null) as? KeyStore.PrivateKeyEntry if (entry == null) { Log.w(TAG, "Not an instance of a PrivateKeyEntry") return false } val valid: Boolean = Signature.getInstance("SHA256withECDSA").run { initVerify(entry.certificate) update(data) verify(signature) }
Java
/* * Verify a signature previously made by a private key in the * KeyStore. This uses the X.509 certificate attached to the * private key in the KeyStore to validate a previously * generated signature. */ KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); ks.load(null); KeyStore.Entry entry = ks.getEntry(alias, null); if (!(entry instanceof PrivateKeyEntry)) { Log.w(TAG, "Not an instance of a PrivateKeyEntry"); return false; } Signature s = Signature.getInstance("SHA256withECDSA"); s.initVerify(((PrivateKeyEntry) entry).getCertificate()); s.update(data); boolean valid = s.verify(signature);
पासकोड इस्तेमाल करने के लिए, उपयोगकर्ता की पुष्टि करना ज़रूरी है
AndroidKeyStore
में पासकोड जनरेट या इंपोर्ट करते समय, यह तय किया जा सकता है कि पासकोड का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब उपयोगकर्ता की पुष्टि की गई हो. उपयोगकर्ता की पुष्टि, स्क्रीन लॉक के सुरक्षित क्रेडेंशियल (पैटर्न/पिन/पासवर्ड, बायोमेट्रिक क्रेडेंशियल) के सबसेट का इस्तेमाल करके की जाती है.
यह सुरक्षा से जुड़ी एक बेहतर सुविधा है. आम तौर पर, यह सिर्फ़ तब काम की होती है, जब आपकी ज़रूरतों के मुताबिक, कुंजी जनरेट करने/इंपोर्ट करने के बाद (कुंजी जनरेट करने/इंपोर्ट करने से पहले या उसके दौरान नहीं) आपकी ऐप्लिकेशन प्रोसेस में छेड़छाड़ करने पर, कुंजी का इस्तेमाल करने के लिए उपयोगकर्ता की पुष्टि करने की ज़रूरत को बायपास नहीं किया जा सकता.
जब किसी कुंजी का इस्तेमाल सिर्फ़ तब किया जा सकता है, जब उपयोगकर्ता की पुष्टि हो चुकी हो, तो उसे इनमें से किसी एक मोड में काम करने के लिए कॉन्फ़िगर करने के लिए, setUserAuthenticationParameters()
को कॉल किया जा सकता है:
- किसी तय समय के लिए अनुमति देना
- उपयोगकर्ता के दिए गए क्रेडेंशियल का इस्तेमाल करके पुष्टि करने के बाद, सभी कुंजियों का इस्तेमाल किया जा सकता है.
- किसी खास क्रिप्टोग्राफ़िक ऑपरेशन के लिए अनुमति देना
किसी खास कुंजी से जुड़े हर ऑपरेशन के लिए, उपयोगकर्ता को अलग से अनुमति देनी होगी.
आपका ऐप्लिकेशन,
BiometricPrompt
के किसी इंस्टेंस परauthenticate()
को कॉल करके, यह प्रोसेस शुरू करता है.
आपके पास हर पासकी के लिए, बेहतर बायोमेट्रिक क्रेडेंशियल, लॉक स्क्रीन क्रेडेंशियल या दोनों तरह के क्रेडेंशियल इस्तेमाल करने का विकल्प होता है. यह पता लगाने के लिए कि उपयोगकर्ता ने वे क्रेडेंशियल सेट अप किए हैं या नहीं जिन पर आपके ऐप्लिकेशन की पासकोड निर्भर करता है, canAuthenticate()
को कॉल करें.
अगर कोई कुंजी सिर्फ़ बायोमेट्रिक क्रेडेंशियल के साथ काम करती है, तो नए बायोमेट्रिक डेटा को जोड़ने पर, कुंजी डिफ़ॉल्ट रूप से अमान्य हो जाती है. नई बायोमेट्रिक जानकारी जोड़ने पर, पासकोड को मान्य रखने के लिए कॉन्फ़िगर किया जा सकता है. ऐसा करने के लिए, false
को setInvalidatedByBiometricEnrollment()
में पास करें.
अपने ऐप्लिकेशन में बायोमेट्रिक ऑथेंटिकेशन की सुविधाएं जोड़ने के तरीके के बारे में ज़्यादा जानें. इसमें, बायोमेट्रिक ऑथेंटिकेशन डायलॉग दिखाने का तरीका भी शामिल है.
काम करने वाले एल्गोरिदम
Cipher
KeyGenerator
KeyFactory
KeyStore
(KeyGenerator
औरKeyPairGenerator
की तरह ही कुंजी टाइप के साथ काम करता है)KeyPairGenerator
Mac
Signature
SecretKeyFactory
अगला कदम क्या है
- Android Developers Blog पर, ICS में पासकोड स्टोर का ऐक्सेस एक करना लेख पढ़ें.