المصادقة الآمنة للمستخدم

لحماية نظام المصادقة في Android، ننصحك بالابتعاد عن نموذج مستند إلى كلمة المرور، خاصةً للحسابات الحساسة مثل حسابات المستخدمين بنك وحسابات بريد إلكتروني. تذكَّر أنّ بعض التطبيقات التي يثبّتها المستخدمون قد لا تتضمّن نواياه الحسنة وقد يحاول التصيد الاحتيالي للمستخدمين.

ولا تفترض أنّ الجهاز يستخدِم المستخدمين المصرّح لهم فقط. سرقة الهاتف مشكلة شائعة، حيث يستهدف المهاجمون الأجهزة غير المقفلة لتحقيق الربح بشكل مباشر من بيانات المستخدمين أو التطبيقات المالية نقترح على جميع التطبيقات الحسّاسة مهلة معقولة للمصادقة (15 دقيقة؟) مع التحقق باستخدام المقاييس الحيوية طلب مصادقة إضافية قبل اتخاذ الإجراءات الحساسة، مثل الأموال والنقل.

مربّع حوار المصادقة بالمقاييس الحيوية

توفّر مكتبة المقاييس الحيوية مجموعة من الدوال لعرض طلب المصادقة بالمقاييس الحيوية، مثل التعرّف على الوجه أو التعرّف على بصمة الإصبع. مع ذلك، يمكن ضبط مطالبات المقاييس الحيوية للعودة إلى LSKF، التي لها المخاطر المعروفة للتزلج على الكتف. ننصح باستخدام التطبيقات الحسّاسة. وعدم استخدام المقاييس الحيوية لاستخدام رقم التعريف الشخصي، وبعد استنفاد المحاولة باستخدام المقاييس الحيوية بإمكان المستخدمين الانتظار، أو إعادة تسجيل الدخول باستخدام كلمة المرور أو إعادة ضبط الحسابات. إعادة ضبط الحساب يجب أن تتطلب عوامل لا يمكن الوصول إليها بسهولة على الجهاز (أفضل الممارسات أدناه).

كيفية المساعدة في الحدّ من عمليات الاحتيال وسرقة الهاتف

إن إحدى حالات الاستخدام المحددة التي يمكن أن تكون مفيدة لمنع الاحتيال هي طلب المصادقة بالمقاييس الحيوية داخل تطبيقك قبل إجراء معاملة. عند المستخدمين تريد إجراء معاملة مالية، سيظهر مربع حوار المقاييس الحيوية التأكد من أن المستخدم المقصود هو الذي يجري المعاملة بالفعل. هذا النمط أفضل الممارسات هي الحماية ضد سرقة المهاجم لأحد الأجهزة بغض النظر عن المهاجم الذي يعرف 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);
    });
}

أفضل الممارسات

ننصحك بالبدء بالدرس التطبيقي حول الترميز لمعرفة مزيد من المعلومات عن المقاييس الحيوية.

استنادًا إلى حالات الاستخدام، يمكنك تنفيذ مربّع الحوار مع أو بدون إجراء صريح للمستخدم. لتجنُّب الاحتيال، ننصحك بإضافة المقاييس الحيوية. مربع حوار يتضمن إجراء مستخدم صريحًا لكل معاملة ونحن نتفهم أن إضافة مصادقة يمكن أن يُحدث مشاكل في تجربة المستخدم، ولكن بسبب طبيعة المعلومات التي تتم معالجتها في معاملة مصرفية وأن المقاييس الحيوية تكون المصادقة أكثر سلاسة من طرق المصادقة الأخرى، نعتقد أنّها اللازمة لإضافة هذا المستوى من التنقل.

مزيد من المعلومات حول المصادقة بالمقاييس الحيوية

مفاتيح المرور

تشكِّل مفاتيح المرور بديلاً أكثر أمانًا وسهولة لكلمات المرور. استخدام مفاتيح المرور تشفير المفتاح العام لتمكين المستخدمين من تسجيل الدخول إلى التطبيقات والمواقع الإلكترونية باستخدام آلية قفل الشاشة على جهاز الطفل، مثل بصمة الإصبع أو الوجه والتقدير. وهذا يغني المستخدم عن الحاجة إلى تذكر كلمات المرور وإدارتها، وتوفّر مستوى أمان محسّنًا بشكل كبير

يمكن أن تستوفي مفاتيح المرور متطلبات المصادقة متعددة العوامل في خطوة واحدة، واستبدال كل من كلمة المرور ورموز كلمة المرور لمرة واحدة لتوفير حماية قوية من هجمات التصيّد الاحتيالي وتجنُّب معاناة المستخدم الناتجة عن الرسائل القصيرة (SMS) أو المستند إلى التطبيق لمرة واحدة كلمات المرور. بما أنه يتم توحيد مفاتيح المرور، فإن عملية تنفيذ واحدة تتيح تجربة بدون كلمات مرور لجميع مستخدمي والأجهزة والمتصفحات وأنظمة التشغيل.

على أجهزة Android، يمكن استخدام مفاتيح المرور باستخدام Jetpack مدير بيانات الاعتماد. التي تجمع بين طرق المصادقة الرئيسية، بما في ذلك مفاتيح المرور، وكلمات المرور وتسجيل الدخول الموحّد (مثل "تسجيل الدخول باستخدام حساب Google")

كيفية المساعدة في الحدّ من عمليات الاحتيال

تحميك مفاتيح المرور من هجمات التصيّد الاحتيالي لأنّها لا تعمل إلا على التطبيقات ومواقع الويب المسجلة.

المكوّن الأساسي لمفتاح المرور هو مفتاح خاص للتشفير. وعادةً ما تكون هذه يبقى المفتاح الخاص على أجهزتك فقط، مثل أجهزة الكمبيوتر المحمولة أو الهواتف المحمولة، وتتم مزامنتها من خلال موفِّري بيانات الاعتماد (المعروفون أيضًا باسم كلمة المرور). مدراء كلمات المرور)، مثل "مدير كلمات المرور في Google". لا يتم حفظ المفتاح العام إلا يتم حفظه من خلال الخدمة على الإنترنت عند إنشاء مفتاح مرور. أثناء تسجيل الدخول، قد تتضمن الخدمة يستخدم المفتاح الخاص لتوقيع تحدٍ من المفتاح العام. يمكن لهذا فقط مصدرها أحد أجهزتك. بالإضافة إلى ذلك، ولكي يحدث هذا، يجب فتح قفل جهازك أو متجر بيانات الاعتماد، ما يمنع عمليات تسجيل الدخول غير المصرَّح بها (على سبيل المثال، من هاتف مسروق).

لمنع الوصول غير المُصرح به في حالة سرقة الجهاز أو إلغاء قفله، يجب إقران مفاتيح المرور بمهلة معقولة للمصادقة. إنّ إذا كان مهاجمًا يسرق جهازًا، فلن يتمكن من استخدام تطبيق فحسب لأنّ المستخدِم السابق سجّل الدخول. بدلاً من ذلك، يجب أن تنتهي صلاحيتها على فترات زمنية منتظمة (على سبيل المثال، كل 15 دقيقة)، ويجب أن يكون المستخدمون المطلوبة لإثبات هويتهم من خلال إعادة المصادقة على قفل الشاشة.

إذا تمت سرقة هاتفك، تحميك مفاتيح المرور لأنّ اللصوص لا يمكنهم سرقة هاتفك. كلمات مرور يمكن استخدامها على الأجهزة الأخرى، ومفاتيح المرور خاصة بكل جهاز. في حال استخدام عندما تتم سرقة "مدير كلمات المرور في Google" وهاتفك، يمكنك تسجيل الدخول إلى حسابك على Google الحساب من جهاز آخر (مثل جهاز كمبيوتر) وتسجيل الخروج عن بُعد من هاتف مسروق. يؤدي هذا الإجراء إلى ظهور "مدير كلمات المرور في Google" على الهاتف المسروق. غير قابلة للاستخدام، بما في ذلك أي مفاتيح مرور محفوظة.

وفي أسوأ الحالات، إذا لم يتم استرداد الجهاز المسروق، تتم إزالة مفاتيح المرور. تمت مزامنته مرة أخرى مع الجهاز الجديد من خلال موفّر بيانات الاعتماد الذي أنشأ المزامنة مفتاح المرور. على سبيل المثال، يمكن أن يكون المستخدم قد اختار "مدير كلمات المرور في Google" لتنفيذ ما يلي: إنشاء مفتاح المرور، والوصول إلى مفتاح المرور على جهاز جديد من خلال التوقيع إلى حساباتهم على Google مع توفير قفل الشاشة من الخاص بك.

يمكنك الاطّلاع على مزيد من المعلومات في مقالة أمان مفاتيح المرور في مقالة "مدير كلمات المرور في Google"

التنفيذ

يمكن استخدام مفاتيح المرور على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android (المستوى 28 من واجهة برمجة التطبيقات) أو الإصدارات الأحدث. تتوفّر ميزة "كلمات المرور" وميزة "تسجيل الدخول باستخدام حساب Google" بدايةً من نظام التشغيل Android 4.4. إلى لبدء استخدام مفاتيح المرور، اتّبِع الخطوات التالية:

  1. اتّبِع الدرس التطبيقي حول ترميز "مدير بيانات الاعتماد" للتعرّف بشكل أولي على كيفية تنفيذ مفاتيح المرور.
  2. يمكنك مراجعة إرشادات تصميم تجربة المستخدم لمفاتيح المرور. يعرض لك هذا المستند المسارات المقترَحة لحالة استخدامك.
  3. يمكنك التعرّف على "مدير بيانات الاعتماد" من خلال اتّباع الدليل.
  4. يمكنك التخطيط لتنفيذ "مدير بيانات الاعتماد" ومفاتيح المرور لتطبيقك. التخطيط لإتاحة استخدام ميزة روابط مواد العرض الرقمية

يمكنك الاطّلاع على وثائق مطوّري البرامج للحصول على مزيد من التفاصيل حول كيفية إنشاء المحتوى والتسجيل باستخدام مفاتيح المرور.

إعادة ضبط الحساب الآمن

يشير هذا المصطلح إلى مهاجم غير مصرَّح به يمكنه الوصول إلى جهاز غير مُقفَل (مثلاً عند محاولة اختراق الهاتف). الوصول إلى تطبيقات حساسة، خاصة التطبيقات المصرفية أو النقدية. إذا نفَّذ التطبيق التحقُّق باستخدام المقاييس الحيوية، سيحاول المهاجم إعادة ضبط النظام. الحساب للدخول إليه. من الضروري ألا يعتمد تدفق إعادة تعيين الحساب فقط على المعلومات التي يسهل الوصول إليها على الجهاز، مثل البريد الإلكتروني أو كلمة المرور لمرة واحدة (OTP) عبر الرسائل القصيرة إعادة تعيين الروابط.

في ما يلي أفضل الممارسات الشائعة التي يمكنك اتّباعها في عملية إعادة ضبط التطبيق التدفق:

  • التعرّف على الوجوه بالإضافة إلى كلمة المرور لمرة واحدة
  • أسئلة الأمان
  • عامل المعرفة (مثل اسم الوالدة قبل الزواج أو مدينة الميلاد أو الاسم المفضّل) أغنية)
  • إثبات الهوية باستخدام مستند تعريف

واجهة برمجة التطبيقات SMS Retriever API

تتيح لك واجهة برمجة التطبيقات SMS Retriever API إجراء عملية إثبات هوية المستخدم استنادًا إلى الرسائل القصيرة في تطبيق Android تلقائيًا. بهذه الطريقة لن يحتاج المستخدم إلى كتابة رموز التحقق يدويًا. بالإضافة إلى ذلك، لا تطلب واجهة برمجة التطبيقات هذه من المستخدم للحصول على مزيد من أذونات التطبيق التي يُحتمل أن تكون خطيرة، مثل RECEIVE_SMS أو READ_SMS ومع ذلك، يجب عدم استخدام الرسائل القصيرة SMS كطريقة إثبات هوية المستخدم الوحيدة الحماية من الوصول المحلي غير المصرح به إلى الجهاز.

كيفية المساعدة في الحدّ من عمليات الاحتيال

ويستخدم بعض المستخدمين رموز الرسائل القصيرة SMS كعامل المصادقة الوحيد الذي يوفّر نقطة دخول سهلة للاحتيال.

تسمح واجهة برمجة التطبيقات SMS Retriever API للتطبيق باسترداد رمز SMS مباشرةً بدون تفاعل المستخدم، ويمكن أن يوفر مستوى من الحماية ضد الاحتيال.

التنفيذ

هناك جزءان لتنفيذ واجهة برمجة تطبيقات SMS Retriever API: Android وServer.

Android: (الدليل)

  1. الحصول على رقم هاتف المستخدم.
  2. ابدأ تشغيل برنامج استرداد رسائل SMS.
  3. أرسِل رقم الهاتف إلى خادمك.
  4. تلقّي رسائل إثبات الهوية
  5. أرسِل كلمة المرور لمرة واحدة إلى الخادم.

الخادم: (guide)

  1. إنشاء رسالة تحقق.
  2. أرسل رسالة التحقق عن طريق SMS.
  3. تحقَّق من كلمة المرور الصالحة لمرة واحدة عند إرجاعها.

أفضل الممارسات

بعد دمج التطبيق ويتم إثبات ملكية رقم هاتف المستخدم من خلال واجهة برمجة التطبيقات SMS Retriever API، فإنها تحاول الحصول على كلمة المرور لمرة واحدة. إذا نجح الأمر، فهذا مؤشر قوي تفيد باستلام الرسالة القصيرة على الجهاز تلقائيًا. وإذا لم يحدث ذلك ويحتاج المستخدم إلى كتابة كلمة المرور لمرة واحدة يدويًا، فقد تكون هذه علامة تحذير احتمالية تعرُّض المستخدم لعملية احتيال.

يجب عدم استخدام الرسائل القصيرة (SMS) كآلية واحدة فقط للتحقّق من هوية المستخدم لأنّها تترك مساحة أو الهجمات المحلية، مثل المهاجم الذي يسرق جهازًا غير مُقفَل أو شريحة SIM هجمات الاستنساخ. ويُنصح باستخدام المقاييس الحيوية كلما أمكن ذلك. مشغَّلة الأجهزة التي لا تتوفّر فيها أدوات الاستشعار باستخدام المقاييس الحيوية، يجب إجراء مصادقة المستخدم أن تعتمد على عامل واحد على الأقل لا يمكن الحصول عليه بسهولة من الجهاز الحالي.

مزيد من المعلومات

لمزيد من القراءة حول أفضل الممارسات، اطلع على الموارد التالية: