सुरक्षित तरीके से उपयोगकर्ता की पुष्टि करने की सुविधा

Android में अपने पुष्टि करने वाले सिस्टम को सुरक्षित रखने के लिए, पासवर्ड पर आधारित मॉडल का इस्तेमाल बंद करें. खास तौर पर, उपयोगकर्ताओं के बैंक और ईमेल खातों जैसे संवेदनशील खातों के लिए. ध्यान रखें कि आपके उपयोगकर्ताओं के इंस्टॉल किए गए कुछ ऐप्लिकेशन, सही मकसद से नहीं बनाए गए हो सकते हैं. साथ ही, वे आपके उपयोगकर्ताओं से फ़िशिंग करने की कोशिश कर सकते हैं.

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

बायोमेट्रिक ऑथेंटिकेशन डायलॉग

Biometrics लाइब्रेरी, फ़ंक्शन का एक सेट उपलब्ध कराती है. इससे, चेहरे की पहचान या फ़िंगरप्रिंट की पहचान जैसे बायोमेट्रिक ऑथेंटिकेशन का अनुरोध करने वाला प्रॉम्प्ट दिखाया जा सकता है. हालांकि, बायोमेट्रिक प्रॉम्प्ट को LSKF पर वापस लाने के लिए कॉन्फ़िगर किया जा सकता है. इसमें कंधे से झांककर जानकारी चुराने के जोखिम होते हैं. हमारा सुझाव है कि संवेदनशील ऐप्लिकेशन के लिए, बायोमेट्रिक के फ़ेल होने पर पिन का इस्तेमाल न किया जाए. साथ ही, बायोमेट्रिक की कोशिशें खत्म होने के बाद, उपयोगकर्ता इंतज़ार कर सकते हैं या पासवर्ड से फिर से लॉग इन कर सकते हैं या खातों को रीसेट कर सकते हैं. खाता रीसेट करने के लिए, ऐसे फ़ैक्टर की ज़रूरत होनी चाहिए जिन्हें डिवाइस पर आसानी से ऐक्सेस न किया जा सके. इसके लिए, यहां दिया गया सबसे सही तरीका अपनाएं.

इससे धोखाधड़ी और फ़ोन की चोरी के मामलों को कम करने में कैसे मदद मिलती है

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

सुरक्षा के अतिरिक्त स्तरों के लिए, हमारा सुझाव है कि ऐप्लिकेशन डेवलपर, क्लास 3 बायोमेट्रिक पुष्टि का अनुरोध करें. साथ ही, बैंकिंग और वित्तीय लेन-देन के लिए CryptoObject का इस्तेमाल करें.

लागू करना

  1. पक्का करें कि आपने androidx.biometric लाइब्रेरी शामिल की हो.
  2. उस गतिविधि या फ़्रैगमेंट में बायोमेट्रिक लॉगिन डायलॉग शामिल करें जिसमें वह लॉजिक मौजूद है जिसके लिए आपको उपयोगकर्ता की पुष्टि करनी है.

Kotlin

private var executor: Executor? = null
private var biometricPrompt: BiometricPrompt? = null
private var promptInfo: BiometricPrompt.PromptInfo? = null

fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_login)
  executor = ContextCompat.getMainExecutor(this)
  biometricPrompt = BiometricPrompt(this@MainActivity,
    executor, object : AuthenticationCallback() {
      fun onAuthenticationError(
        errorCode: Int,
        @NonNull errString: CharSequence
      ) {
        super.onAuthenticationError(errorCode, errString)
        Toast.makeText(
          getApplicationContext(),
          "Authentication error: $errString", Toast.LENGTH_SHORT
        )
          .show()
      }

      fun onAuthenticationSucceeded(
        @NonNull result: BiometricPrompt.AuthenticationResult?
      ) {
        super.onAuthenticationSucceeded(result)
        Toast.makeText(
          getApplicationContext(),
          "Authentication succeeded!", Toast.LENGTH_SHORT
        ).show()
      }

      fun onAuthenticationFailed() {
        super.onAuthenticationFailed()
        Toast.makeText(
          getApplicationContext(), "Authentication failed",
          Toast.LENGTH_SHORT
        )
          .show()
      }
    })
  promptInfo = Builder()
    .setTitle("Biometric login for my app")
    .setSubtitle("Log in using your biometric credential")
    .setNegativeButtonText("Use account password")
    .build()

  // Prompt appears when user clicks "Log in".
  // Consider integrating with the keystore to unlock cryptographic operations,
  // if needed by your app.
  val biometricLoginButton: Button = findViewById(R.id.biometric_login)
  biometricLoginButton.setOnClickListener { view ->
    biometricPrompt.authenticate(
      promptInfo
    )
  }
}

Java

private Executor executor;
private BiometricPrompt biometricPrompt;
private BiometricPrompt.PromptInfo promptInfo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    executor = ContextCompat.getMainExecutor(this);
    biometricPrompt = new BiometricPrompt(MainActivity.this,
            executor, new BiometricPrompt.AuthenticationCallback() {
        @Override
        public void onAuthenticationError(int errorCode,
                @NonNull CharSequence errString) {
            super.onAuthenticationError(errorCode, errString);
            Toast.makeText(getApplicationContext(),
                "Authentication error: " + errString, Toast.LENGTH_SHORT)
                .show();
        }

        @Override
        public void onAuthenticationSucceeded(
                @NonNull BiometricPrompt.AuthenticationResult result) {
            super.onAuthenticationSucceeded(result);
            Toast.makeText(getApplicationContext(),
                "Authentication succeeded!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAuthenticationFailed() {
            super.onAuthenticationFailed();
            Toast.makeText(getApplicationContext(), "Authentication failed",
                Toast.LENGTH_SHORT)
                .show();
        }
    });

    promptInfo = new BiometricPrompt.PromptInfo.Builder()
            .setTitle("Biometric login for my app")
            .setSubtitle("Log in using your biometric credential")
            .setNegativeButtonText("Use account password")
            .build();

    // Prompt appears when the user clicks "Log in".
    // Consider integrating with the keystore to unlock cryptographic operations,
    // if needed by your app.
    Button biometricLoginButton = findViewById(R.id.biometric_login);
    biometricLoginButton.setOnClickListener(view -> {
            biometricPrompt.authenticate(promptInfo);
    });
}

सबसे सही तरीके

हमारा सुझाव है कि बायोमेट्रिक के बारे में ज़्यादा जानने के लिए, कोडलैब से शुरुआत करें.

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

बायोमेट्रिक की मदद से पुष्टि करने के बारे में ज़्यादा जानें.

पासकी

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

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

Android पर, पासकी का इस्तेमाल करने के लिए Credential Manager Jetpack लाइब्रेरी का इस्तेमाल किया जाता है. यह पुष्टि करने के मुख्य तरीकों को एक साथ लाती है. इनमें पासकी, पासवर्ड, और फ़ेडरेटेड साइन इन (जैसे कि 'Google से साइन इन करें') शामिल हैं.

इससे धोखाधड़ी को कम करने में कैसे मदद मिलती है

पासकी, आपको फ़िशिंग हमलों से बचाती हैं. ऐसा इसलिए, क्योंकि ये सिर्फ़ आपके रजिस्टर किए गए ऐप्लिकेशन और वेबसाइटों पर काम करती हैं.

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

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

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

अगर चोरी हुआ डिवाइस वापस नहीं मिलता है, तो क्रेडेंशियल प्रोवाइडर पासकी को नए डिवाइस पर वापस सिंक कर देता है. यह वही क्रेडेंशियल प्रोवाइडर होता है जिसने पासकी बनाई और उसे सिंक किया था. उदाहरण के लिए, हो सकता है कि उपयोगकर्ता ने पासकी बनाने के लिए Google Password Manager को चुना हो. ऐसे में, वह अपने Google खाते में फिर से साइन इन करके और पिछले डिवाइस का स्क्रीन लॉक डालकर, नए डिवाइस पर अपनी पासकी ऐक्सेस कर सकता है.

ज़्यादा जानने के लिए, Google Password Manager में पासकी की सुरक्षा लेख पढ़ें.

लागू करना

पासकी की सुविधा, Android 9 (एपीआई लेवल 28) या उसके बाद के वर्शन पर काम करने वाले डिवाइसों पर उपलब्ध है. Android 4.4 और इसके बाद के वर्शन पर, पासवर्ड और 'Google से साइन इन करें' सुविधा काम करती है. पासकी का इस्तेमाल शुरू करने के लिए, यह तरीका अपनाएं:

  1. पासकी लागू करने के तरीके के बारे में शुरुआती जानकारी पाने के लिए, Credential Manager कोडलैब को फ़ॉलो करें.
  2. पासकी के उपयोगकर्ता अनुभव को डिज़ाइन करने से जुड़े दिशा-निर्देश पढ़ें. इस दस्तावेज़ में बताया गया है कि आपके इस्तेमाल के उदाहरण के लिए, कौनसे फ़्लो सुझाए गए हैं.
  3. गाइड पढ़कर, Credential Manager के बारे में जानें.
  4. अपने ऐप्लिकेशन के लिए, Credential Manager और पासकी लागू करने की योजना बनाएं. डिजिटल ऐसेट लिंक के लिए सहायता जोड़ने की योजना बनाएं.

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

खाता सुरक्षित करने के लिए रीसेट करना

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

यहां कुछ सामान्य सबसे सही तरीके दिए गए हैं, जिन्हें ऐप्लिकेशन के रीसेट फ़्लो में शामिल किया जा सकता है:

  • ओटीपी के साथ-साथ चेहरे की पहचान
  • सुरक्षा प्रश्‍न
  • जानकारी से जुड़ा फ़ैक्टर (जैसे, मां का शादी से पहले का नाम, जन्म का शहर या पसंदीदा गाना)
  • आईडी की मदद से पहचान की पुष्टि करना

SMS Retriever API

SMS Retriever API की मदद से, अपने Android ऐप्लिकेशन में एसएमएस की सुविधा का इस्तेमाल करके, उपयोगकर्ता की पुष्टि अपने-आप की जा सकती है. इस तरह, उपयोगकर्ता को पुष्टि करने के लिए कोड मैन्युअल तरीके से टाइप करने की ज़रूरत नहीं होगी. इसके अलावा, यह एपीआई उपयोगकर्ता से RECEIVE_SMS या READ_SMS जैसी अतिरिक्त और संभावित रूप से खतरनाक ऐप्लिकेशन अनुमतियां नहीं मांगता. हालांकि, डिवाइस को स्थानीय तौर पर अनधिकृत ऐक्सेस से बचाने के लिए, उपयोगकर्ता की पुष्टि करने के लिए सिर्फ़ एसएमएस का इस्तेमाल नहीं किया जाना चाहिए.

इससे धोखाधड़ी को कम करने में कैसे मदद मिलती है

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

SMS Retriever API की मदद से, ऐप्लिकेशन सीधे तौर पर एसएमएस कोड को वापस पा सकता है. इसके लिए, उपयोगकर्ता को कुछ नहीं करना होता. साथ ही, यह धोखाधड़ी से सुरक्षा भी करता है.

लागू करना

SMS Retriever API को दो हिस्सों में लागू किया जाता है: Android और सर्वर.

Android: (गाइड)

  1. उपयोगकर्ता का फ़ोन नंबर पाना.
  2. एसएमएस रिट्रीवर क्लाइंट शुरू करें.
  3. फ़ोन नंबर को अपने सर्वर पर भेजें.
  4. पुष्टि करने वाले मैसेज पाएं.
  5. ओटीपी को अपने सर्वर पर भेजें.

सर्वर: (guide)

  1. पुष्टि करने वाला मैसेज बनाएं.
  2. पुष्टि करने वाला मैसेज, एसएमएस के ज़रिए भेजें.
  3. ओटीपी वापस मिलने पर, उसकी पुष्टि करें.

सबसे सही तरीके

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

एसएमएस का इस्तेमाल, उपयोगकर्ता की पुष्टि करने के लिए सिर्फ़ एक तरीके के तौर पर नहीं किया जाना चाहिए. इससे स्थानीय हमलों का खतरा बढ़ जाता है. जैसे, कोई हमलावर बिना लॉक किए गए डिवाइस को चुरा लेता है या सिम क्लोनिंग के ज़रिए हमला करता है. हमारा सुझाव है कि जब भी हो सके, बायोमेट्रिक का इस्तेमाल करें. जिन डिवाइसों पर बायोमेट्रिक सेंसर उपलब्ध नहीं हैं वहां उपयोगकर्ता की पुष्टि करने के लिए, कम से कम एक ऐसे फ़ैक्टर का इस्तेमाल किया जाना चाहिए जिसे मौजूदा डिवाइस से आसानी से हासिल न किया जा सके.

ज़्यादा जानें

सबसे सही तरीकों के बारे में ज़्यादा जानने के लिए, यहां जाएं: