احراز هویت امن کاربر

برای محافظت از سیستم احراز هویت خود در Android، به‌خصوص برای حساب‌های حساس مانند حساب‌های بانکی و ایمیل کاربران خود، از مدل مبتنی بر رمز عبور فاصله بگیرید. به یاد داشته باشید که برخی از برنامه هایی که کاربران شما نصب می کنند ممکن است بهترین نیت را نداشته باشند و ممکن است سعی کنند کاربران شما را فیش کنند.

همچنین، تصور نکنید که فقط کاربران مجاز از دستگاه استفاده خواهند کرد. سرقت تلفن یک مشکل رایج است و مهاجمان دستگاه های قفل نشده را هدف قرار می دهند تا مستقیماً از داده های کاربر یا برنامه های مالی سود ببرند. ما به همه برنامه‌های حساس پیشنهاد می‌کنیم یک بازه زمانی معقول احراز هویت (15 دقیقه؟) را با تأیید بیومتریک اجرا کنند و قبل از اقدامات حساس مانند نقل و انتقال پول نیاز به احراز هویت اضافی داشته باشند.

گفتگوی احراز هویت بیومتریک

کتابخانه Biometrics مجموعه ای از عملکردها را برای نمایش درخواست احراز هویت بیومتریک مانند تشخیص چهره یا تشخیص اثر انگشت ارائه می دهد. با این حال، می‌توان پیام‌های بیومتریک را طوری پیکربندی کرد که به LSKF بازگردد، که خطرات شانه‌گردی را دارد. برای برنامه‌های حساس، توصیه می‌کنیم که بیومتریک به پین ​​برگردد و پس از اتمام تلاش‌های بیومتریک مجدد، کاربران می‌توانند منتظر بمانند، یا دوباره با رمز عبور وارد شوند یا حساب‌ها را بازنشانی کنند. بازنشانی حساب باید به عواملی نیاز داشته باشد که به راحتی در دستگاه قابل دسترسی نیستند (بهترین روش در زیر).

چگونه این به کاهش کلاهبرداری و سرقت تلفن کمک می کند

یکی از موارد استفاده خاص که می تواند برای جلوگیری از کلاهبرداری مفید باشد، درخواست احراز هویت بیومتریک در برنامه خود قبل از تراکنش است. هنگامی که کاربران شما می خواهند یک تراکنش مالی انجام دهند، کادر محاوره ای بیومتریک نشان داده می شود تا تأیید شود که این کاربر واقعاً معامله را انجام می دهد. این بهترین روش در برابر سرقت یک دستگاه بدون توجه به اینکه مهاجم LSKF را می شناسد یا نه، محافظت می کند، زیرا آنها باید بررسی کنند که مالک دستگاه هستند.

برای سطوح امنیتی بیشتر، به توسعه‌دهندگان اپلیکیشن توصیه می‌کنیم که درخواست احراز هویت بیومتریک کلاس 3 را داشته باشند و از CryptoObject برای تراکنش‌های بانکی و مالی استفاده کنند.

پیاده سازی

  1. مطمئن شوید که کتابخانه androidx.biometric را در آن قرار داده اید.
  2. گفتگوی ورود بیومتریک را در فعالیت یا قطعه ای که منطقی را که می خواهید کاربر احراز هویت شود را در خود جای دهد.

کاتلین

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
    )
  }
}

جاوا

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);
    });
}

بهترین شیوه ها

برای دانستن بیشتر در مورد بیومتریک توصیه می کنیم با نرم افزار Codelab شروع کنید.

بسته به موارد استفاده شما، می توانید گفتگو را با یا بدون اقدام کاربر صریح اجرا کنید. به منظور جلوگیری از تقلب، توصیه می کنیم برای هر تراکنش، کادر گفتگوی بیومتریک را با عملکرد صریح کاربر اضافه کنید. ما می‌دانیم که افزودن احراز هویت می‌تواند باعث ایجاد اصطکاک در UX شود، اما به دلیل ماهیت اطلاعاتی که در تراکنش‌های بانکی مدیریت می‌شوند و احراز هویت بیومتریک روان‌تر از سایر روش‌های احراز هویت است، فکر می‌کنیم لازم است این سطح از ناوبری را اضافه کنیم.

درباره احراز هویت بیومتریک بیشتر بیاموزید .

کلیدهای عبور

کلیدهای عبور جایگزین ایمن تر و آسان تری برای رمز عبور هستند. کلیدهای عبور از رمزنگاری کلید عمومی استفاده می‌کنند تا کاربران شما را قادر می‌سازد تا با استفاده از مکانیسم قفل صفحه دستگاه خود، مانند اثر انگشت یا تشخیص چهره، وارد برنامه‌ها و وب‌سایت‌ها شوند. این کاربر را از به خاطر سپردن و مدیریت رمزهای عبور رها می کند و امنیت را به میزان قابل توجهی بهبود می بخشد.

کلیدهای عبور می توانند الزامات احراز هویت چندعاملی را در یک مرحله برآورده کنند و رمز عبور و کدهای OTP را جایگزین کنند تا محافظت قوی در برابر حملات فیشینگ ارائه کنند و از دردسر تجربه کاربر در پیامک یا رمزهای یکبار مصرف مبتنی بر برنامه جلوگیری کنند. از آنجایی که کلیدهای عبور استاندارد هستند، یک پیاده سازی واحد تجربه بدون رمز عبور را در تمام دستگاه ها، مرورگرها و سیستم عامل های کاربران امکان پذیر می کند.

در Android، کلیدهای عبور با استفاده از کتابخانه Credential Manager Jetpack پشتیبانی می‌شوند که روش‌های اصلی احراز هویت، از جمله کلیدهای عبور، گذرواژه‌ها و ورود به سیستم (مانند ورود با Google) را یکپارچه می‌کند.

چگونه این به کاهش تقلب کمک می کند

کلیدهای عبور از شما در برابر حملات فیشینگ محافظت می کنند زیرا فقط در برنامه ها و وب سایت های ثبت شده شما کار می کنند.

جزء اصلی یک کلید رمز یک کلید خصوصی رمزنگاری است. به طور معمول، این کلید خصوصی صرفاً در دستگاه‌های شما مانند لپ‌تاپ یا تلفن‌های همراه قرار دارد و توسط ارائه‌دهندگان اعتبار (همچنین به عنوان مدیران رمز عبور شناخته می‌شوند)، مانند Google Password Manager، بین آنها همگام‌سازی می‌شود. هنگامی که یک رمز عبور ایجاد می شود، تنها کلید عمومی مربوطه توسط سرویس آنلاین ذخیره می شود. در حین ورود، سرویس از کلید خصوصی برای امضای چالش از کلید عمومی استفاده می کند. این فقط می تواند از یکی از دستگاه های شما نشات بگیرد. علاوه بر این، برای اینکه این اتفاق بیفتد، باید قفل دستگاه یا فروشگاه اعتبار خود را باز کنید، که از ورود غیرمجاز به سیستم (مثلاً از یک تلفن دزدیده شده) جلوگیری می کند.

برای جلوگیری از دسترسی غیرمجاز در صورت سرقت و قفل دستگاه، کلیدهای عبور باید با یک پنجره مهلت زمانی احراز هویت معقول همراه شوند. مهاجمی که دستگاهی را می‌دزدد نباید فقط به این دلیل که کاربر قبلی وارد سیستم شده است از یک برنامه استفاده کند. درعوض، اعتبارنامه‌ها باید در فواصل زمانی منظم (مانند هر 15 دقیقه) منقضی شوند و کاربران باید موظف به تأیید باشند. هویت آنها از طریق احراز هویت مجدد قفل صفحه.

اگر تلفن شما دزدیده شود، کلیدهای عبور از شما محافظت می کنند زیرا سارقان نمی توانند رمزهای عبور شما را بدزدند تا در دستگاه های دیگر از آن استفاده کنند - کلیدهای عبور مخصوص دستگاه هستند. اگر از Google Password Manager استفاده می‌کنید و تلفن شما به سرقت می‌رود، می‌توانید از دستگاه دیگری (مانند رایانه) وارد حساب Google خود شوید و از راه دور از تلفن سرقت شده خارج شوید. این باعث می‌شود مدیر گذرواژه Google در تلفن دزدیده شده، از جمله کلیدهای عبور ذخیره‌شده، غیرقابل استفاده باشد.

در بدترین حالت، اگر دستگاه دزدیده شده بازیابی نشود، کلیدهای عبور توسط ارائه‌دهنده اعتباری که کلید عبور را ایجاد و همگام‌سازی کرده است، به دستگاه جدید همگام‌سازی می‌شوند. به عنوان مثال، کاربر ممکن است Google Password Manager را برای ایجاد رمز عبور انتخاب کرده باشد و می تواند با ورود مجدد به حساب Google خود و ارائه قفل صفحه از دستگاه قبلی، به رمز عبور خود در دستگاه جدید دسترسی پیدا کند.

در مقاله «مدیر رمز عبور Google» در «امنیت کلیدهای عبور» بیشتر بدانید.

پیاده سازی

کلیدهای عبور در دستگاه‌هایی که Android 9 (سطح API 28) یا بالاتر دارند پشتیبانی می‌شوند. گذرواژه‌ها و ورود به سیستم با Google با شروع Android 4.4 پشتیبانی می‌شوند. برای شروع کار با کلیدهای عبور، مراحل زیر را دنبال کنید:

  1. برای دریافت درک اولیه از نحوه پیاده سازی کلیدهای عبور، از Credential Manager codelab پیروی کنید.
  2. دستورالعمل‌های طراحی تجربه کاربری کلیدهای عبور را مرور کنید. این سند به شما نشان می دهد که چه جریان هایی برای مورد استفاده شما توصیه می شود.
  3. با دنبال کردن راهنما ، مدیر اعتبار را مطالعه کنید.
  4. اجرای Credential Manager و کلیدهای عبور را برای برنامه خود برنامه ریزی کنید. برای افزودن پشتیبانی برای پیوندهای دارایی دیجیتال برنامه ریزی کنید.

برای جزئیات بیشتر در مورد نحوه ایجاد، ثبت و احراز هویت با کلیدهای عبور، به مستندات برنامه‌نویس ما مراجعه کنید.

بازنشانی ایمن حساب

یک مهاجم غیرمجاز با دسترسی به یک دستگاه قفل نشده (مانند زمانی که یک تلفن ربوده می شود) سعی می کند به برنامه های حساس، به ویژه برنامه های بانکی یا پول نقد دسترسی پیدا کند. اگر برنامه تأیید بیومتریک را پیاده‌سازی کند، مهاجم سعی می‌کند حساب را بازنشانی کند تا وارد شود. برای جریان بازنشانی حساب ضروری است که صرفاً به اطلاعاتی که به راحتی در دستگاه قابل دسترسی است، مانند پیوندهای بازنشانی OTP ایمیل یا پیامک تکیه نکند.

در اینجا بهترین شیوه های رایجی وجود دارد که می توانید در جریان بازنشانی برنامه خود بگنجانید:

  • تشخیص چهره، علاوه بر OTP
  • سوالات امنیتی
  • عامل دانش (مانند نام دختر، شهر تولد یا آهنگ مورد علاقه مادر)
  • تایید هویت

SMS Retriever API

SMS Retriever API به شما این امکان را می دهد تا تأیید کاربر مبتنی بر پیامک را در برنامه Android خود به طور خودکار انجام دهید. به این ترتیب کاربر نیازی به تایپ دستی کدهای تأیید نخواهد داشت. علاوه بر این، این API از کاربر مجوزهای اضافی و بالقوه خطرناک برنامه مانند RECEIVE_SMS یا READ_SMS را درخواست نمی کند. با این حال، پیامک نباید به عنوان تنها تأیید کاربر برای محافظت در برابر دسترسی محلی غیرمجاز به دستگاه استفاده شود.

چگونه این به کاهش تقلب کمک می کند

برخی از کاربران از کدهای اس ام اس به عنوان تنها عامل احراز هویت استفاده می کنند که یک نقطه ورود آسان برای کلاهبرداری فراهم می کند.

SMS Retriever API به برنامه اجازه می دهد تا مستقیماً کد پیامک را بدون تعامل کاربر بازیابی کند و می تواند سطحی از محافظت در برابر کلاهبرداری را فراهم کند.

پیاده سازی

دو بخش برای پیاده سازی SMS Retriever API وجود دارد: Android و Server.

اندروید : ( راهنما )

  1. شماره تلفن کاربر را دریافت کنید.
  2. سرویس گیرنده SMS retriever را راه اندازی کنید.
  3. شماره تلفن را به سرور خود ارسال کنید.
  4. دریافت پیام های تایید
  5. OTP را به سرور خود ارسال کنید.

سرور : ( راهنما )

  1. یک پیام تأیید بسازید.
  2. پیام تایید را از طریق پیامک ارسال کنید.
  3. وقتی OTP برگردانده شد آن را تأیید کنید.

بهترین شیوه ها

هنگامی که برنامه یکپارچه شد و شماره تلفن کاربر با API SMS Retriever تأیید شد، سعی می‌کند OTP را دریافت کند. اگر موفق شد، این یک سیگنال قوی است که پیامک به طور خودکار در دستگاه دریافت شده است. اگر موفق نشد و کاربر باید OTP را به صورت دستی تایپ کند، می تواند یک علامت هشدار باشد مبنی بر اینکه کاربر ممکن است تقلب را تجربه کند.

پیامک نباید به‌عنوان تنها مکانیزم تأیید کاربر مورد استفاده قرار گیرد، زیرا فضایی را برای حملات محلی، مانند مهاجمی که یک دستگاه قفل نشده را سرقت می‌کند، باز می‌کند. یا حملات شبیه سازی سیم کارت. توصیه می شود در صورت امکان از بیومتریک استفاده کنید. در دستگاه‌هایی که حسگرهای بیومتریک در دسترس نیستند، احراز هویت کاربر باید حداقل بر یک عامل متکی باشد که به راحتی از دستگاه فعلی به دست نمی‌آید.

بیشتر بدانید

برای مطالعه بیشتر در مورد بهترین شیوه ها، منابع زیر را بررسی کنید: