การตรวจสอบสิทธิ์ผู้ใช้ที่ปลอดภัย

หากต้องการปกป้องระบบการตรวจสอบสิทธิ์ใน Android ให้พิจารณาเลิกใช้ รูปแบบด้วยรหัสผ่าน โดยเฉพาะสำหรับบัญชีที่มีความละเอียดอ่อน เช่น ผู้ใช้ของคุณ ธนาคาร และบัญชีอีเมล โปรดทราบว่าแอปบางแอปที่ผู้ใช้ติดตั้งอาจไม่มี โดยใช้เจตนาที่ดี และอาจพยายาม ฟิชชิงผู้ใช้ของคุณ

นอกจากนี้ อย่าคิดเอาเองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่จะใช้อุปกรณ์ได้ การขโมยโทรศัพท์ เป็นปัญหาที่พบได้ทั่วไป และผู้โจมตีจะกำหนดเป้าหมายไปยังอุปกรณ์ที่ปลดล็อกเพื่อทำกำไรโดยตรง จากข้อมูลผู้ใช้หรือแอปการเงิน เราขอแนะนำให้แอปที่ละเอียดอ่อนทั้งหมดใช้ หมดเวลาการตรวจสอบสิทธิ์อย่างสมเหตุสมผล (15 นาที) เมื่อมีการยืนยันข้อมูลไบโอเมตริก ต้องมีการตรวจสอบสิทธิ์เพิ่มเติมก่อนการดำเนินการที่มีความละเอียดอ่อน เช่น เงิน การโอน

กล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริก

ไลบรารีไบโอเมตริกมีชุดฟังก์ชันเพื่อแสดงพรอมต์ที่ขอ การตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริก เช่น การจดจำใบหน้าหรือการจดจำลายนิ้วมือ อย่างไรก็ตาม พรอมต์ข้อมูลไบโอเมตริกสามารถกำหนดค่ากลับไปใช้ LSKF ได้ ซึ่ง ความเสี่ยงที่ทราบจากการโต้คลื่นด้านข้าง สำหรับแอปที่มีความละเอียดอ่อน เราขอแนะนำ ถ้าไม่มีข้อมูลไบโอเมตริกจะกลับไปใช้ PIN และหลังจากใช้ข้อมูลไบโอเมตริกซ้ำหลายครั้งแล้ว ผู้ใช้สามารถรอ หรือเข้าสู่ระบบอีกครั้งด้วยรหัสผ่าน หรือรีเซ็ตบัญชี การรีเซ็ตบัญชี ควรใช้ปัจจัยที่เข้าถึงได้ยากบนอุปกรณ์ (แนวทางปฏิบัติแนะนำ ที่ด้านล่าง)

การดำเนินการนี้ช่วยลดการประพฤติมิชอบและการโจรกรรมโทรศัพท์ได้อย่างไร

Use Case หนึ่งที่อาจเป็นประโยชน์ในการป้องกันการประพฤติมิชอบได้ คือ ส่งคำขอ การตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกภายในแอปของคุณก่อนการทำธุรกรรม เมื่อผู้ใช้ของคุณ กล่องโต้ตอบข้อมูลไบโอเมตริกจะแสดงขึ้น ยืนยันว่าผู้ใช้ดังกล่าวเป็นผู้ใช้ที่ทำธุรกรรมจริงๆ ช่วงเวลานี้ แนวทางปฏิบัติแนะนำจะช่วยป้องกันผู้โจมตีที่ขโมยอุปกรณ์ได้ ผู้โจมตีจะทราบหรือไม่ว่า 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);
    });
}

แนวทางปฏิบัติแนะนำ

เราขอแนะนําให้คุณเริ่มต้นด้วย Codelab เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลไบโอเมตริก

คุณสามารถใช้กล่องโต้ตอบโดยมีหรือไม่มีก็ได้ ขึ้นอยู่กับกรณีการใช้งานของคุณ การดำเนินการของผู้ใช้ที่ชัดเจน เราขอแนะนำให้คุณเพิ่มข้อมูลไบโอเมตริกเพื่อหลีกเลี่ยงการประพฤติมิชอบ กล่องโต้ตอบที่มีการดำเนินการที่ชัดเจนของผู้ใช้ สำหรับธุรกรรมทั้งหมด เราทราบดีว่า การเพิ่มการตรวจสอบสิทธิ์อาจทำให้เกิดอุปสรรคใน UX แต่เนื่องจากลักษณะของ ข้อมูลที่ถูกจัดการในธุรกรรมของธนาคารและข้อมูลไบโอเมตริกนั้น การตรวจสอบสิทธิ์ทำได้ราบรื่นกว่าวิธีการตรวจสอบสิทธิ์อื่นๆ ที่จำเป็นต่อการเพิ่มการนำทางระดับนี้

ดูข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริก

พาสคีย์

พาสคีย์ปลอดภัยกว่าและใช้งานง่ายกว่าเมื่อเทียบกับรหัสผ่าน พาสคีย์ใช้ วิทยาการเข้ารหัสคีย์สาธารณะที่ช่วยให้ผู้ใช้ลงชื่อเข้าใช้แอปและเว็บไซต์ได้ โดยใช้กลไกการล็อกหน้าจอของอุปกรณ์ เช่น ลายนิ้วมือหรือใบหน้า การจดจำ ซึ่งทำให้ผู้ใช้ไม่ต้องจำและจัดการรหัสผ่าน และให้ความปลอดภัยที่ดีขึ้นอย่างมาก

พาสคีย์สามารถเป็นไปตามข้อกำหนดการตรวจสอบสิทธิ์แบบหลายปัจจัยในขั้นตอนเดียว เปลี่ยนทั้งรหัสผ่านและรหัส OTP เพื่อการป้องกันที่แข็งแกร่งจาก การโจมตีแบบฟิชชิงเพื่อหลีกเลี่ยงความเจ็บปวดของผู้ใช้จากการส่ง SMS หรือแอปเพียงครั้งเดียว รหัสผ่าน เนื่องจากพาสคีย์เป็นมาตรฐาน การใช้งานเพียงครั้งเดียวจึง แบบไม่ใช้รหัสผ่านของผู้ใช้ทุกคน อุปกรณ์ เบราว์เซอร์ และ ระบบปฏิบัติการ

ใน Android พาสคีย์ได้รับการสนับสนุนโดยใช้ Jetpack เครื่องมือจัดการข้อมูลเข้าสู่ระบบ ที่รวมวิธีการตรวจสอบสิทธิ์หลักๆ ซึ่งรวมถึงพาสคีย์ รหัสผ่าน และการลงชื่อเข้าใช้แบบรวมศูนย์ (เช่น ลงชื่อเข้าใช้ด้วย Google)

วิธีนี้ช่วยลดการประพฤติมิชอบได้อย่างไร

พาสคีย์จะป้องกันคุณจากการโจมตีแบบฟิชชิงเนื่องจากจะทำงานบน แอปและเว็บไซต์ที่ลงทะเบียน

คอมโพเนนต์หลักของพาสคีย์คือคีย์ส่วนตัวแบบเข้ารหัส โดยทั่วไปแล้ว คีย์ส่วนตัวจะอยู่ในอุปกรณ์ของคุณเท่านั้น เช่น แล็ปท็อปหรือโทรศัพท์มือถือ และซิงค์ข้อมูลโดยผู้ให้บริการข้อมูลเข้าสู่ระบบ (หรือที่เรียกว่ารหัสผ่าน) เช่น Google เครื่องมือจัดการรหัสผ่าน เฉพาะคีย์สาธารณะที่เกี่ยวข้องเท่านั้น ที่บริการออนไลน์บันทึกไว้เมื่อสร้างพาสคีย์ ในระหว่างการเข้าสู่ระบบ บริการ ใช้คีย์ส่วนตัวเพื่อลงนามในคำท้าจากคีย์สาธารณะ การดำเนินการนี้ทำได้เพียง มาจากอุปกรณ์เครื่องใดเครื่องหนึ่งของคุณ นอกจากนี้ หากต้องการดำเนินการ คุณจะต้อง ปลดล็อกอุปกรณ์หรือที่เก็บข้อมูลรับรอง ซึ่งป้องกันการลงชื่อเข้าใช้ที่ไม่ได้รับอนุญาต (เช่น จากโทรศัพท์ที่ถูกขโมย)

หากต้องการป้องกันการเข้าถึงที่ไม่ได้รับอนุญาตในกรณีที่อุปกรณ์ถูกขโมยและถูกขโมย พาสคีย์ต้องใช้ร่วมกับกรอบเวลาหมดเวลาการตรวจสอบสิทธิ์ที่เหมาะสม CANNOT TRANSLATE ผู้โจมตีที่ขโมยอุปกรณ์ไม่ควรสามารถใช้แอปพลิเคชันเพื่อ เนื่องจากผู้ใช้คนก่อนได้เข้าสู่ระบบ ดังนั้น ข้อมูลประจำตัวควร หมดอายุเป็นระยะๆ (เช่น ทุก 15 นาที) และผู้ใช้ควร เพื่อยืนยันตัวตนผ่านการตรวจสอบสิทธิ์การล็อกหน้าจอซ้ำ

หากโทรศัพท์ถูกขโมย พาสคีย์จะปกป้องคุณเพราะโจรจะขโมย รหัสผ่านที่จะใช้ในอุปกรณ์อื่นๆ พาสคีย์เป็นรหัสผ่านเฉพาะอุปกรณ์ หากคุณใช้ เครื่องมือจัดการรหัสผ่านบน Google และโทรศัพท์ของคุณถูกขโมย คุณสามารถเข้าสู่ระบบ บัญชีจากอุปกรณ์อีกเครื่องหนึ่ง (เช่น คอมพิวเตอร์) และออกจากระบบจากระยะไกล โทรศัพท์ที่ถูกขโมย การดำเนินการนี้จะทำให้เครื่องมือจัดการรหัสผ่านบน Google ในโทรศัพท์ที่ถูกขโมย ใช้ไม่ได้ ซึ่งรวมถึงพาสคีย์ที่บันทึกไว้

ในกรณีที่เลวร้ายที่สุด หากไม่กู้คืนอุปกรณ์ที่ถูกขโมย พาสคีย์ ซิงค์กลับไปที่อุปกรณ์ใหม่โดยผู้ให้บริการข้อมูลเข้าสู่ระบบที่สร้างและซิงค์ พาสคีย์ ตัวอย่างเช่น ผู้ใช้อาจเลือกเครื่องมือจัดการรหัสผ่านบน Google เพื่อ สร้างพาสคีย์ และผู้ใช้จะเข้าถึงพาสคีย์ดังกล่าวในอุปกรณ์เครื่องใหม่ได้โดยการลงชื่อเข้าใช้ กลับเข้าสู่บัญชี Google และกำหนดการล็อกหน้าจอจาก อุปกรณ์

ดูข้อมูลเพิ่มเติมใน ความปลอดภัยของพาสคีย์ในบทความเครื่องมือจัดการรหัสผ่านบน Google

การใช้งาน

พาสคีย์ใช้งานได้ในอุปกรณ์ที่ใช้ Android 9 (API ระดับ 28) ขึ้นไป ตั้งแต่ Android 4.4 เป็นต้นไป รองรับรหัสผ่านและลงชื่อเข้าใช้ด้วย Google ถึง เริ่มต้นใช้งานพาสคีย์ ให้ทำตามขั้นตอนต่อไปนี้

  1. โปรดทำตาม Codelab ของเครื่องมือจัดการข้อมูลเข้าสู่ระบบเพื่อทำความเข้าใจวิธีใช้พาสคีย์เบื้องต้น
  2. อ่านหลักเกณฑ์การออกแบบประสบการณ์ของผู้ใช้พาสคีย์ เอกสารนี้แสดงขั้นตอนที่แนะนำสำหรับกรณีการใช้งานของคุณ
  3. ศึกษาเครื่องมือจัดการข้อมูลเข้าสู่ระบบโดยทำตามคำแนะนำ
  4. วางแผนการใช้เครื่องมือจัดการข้อมูลเข้าสู่ระบบและพาสคีย์สำหรับแอป วางแผนเพิ่มการรองรับลิงก์เนื้อหาดิจิทัล

โปรดดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีสร้าง ลงทะเบียน และ ตรวจสอบสิทธิ์ด้วยพาสคีย์

รีเซ็ตบัญชีที่ปลอดภัย

ผู้โจมตีที่ไม่ได้รับอนุญาตซึ่งเข้าถึงอุปกรณ์ที่ปลดล็อกแล้ว (เช่น เมื่อมีโทรศัพท์ ถูกลักลอบใช้) จะพยายามเข้าถึงแอปที่มีความละเอียดอ่อน โดยเฉพาะแอปธนาคารหรือเงินสด หากแอปใช้การยืนยันด้วยข้อมูลไบโอเมตริก ผู้โจมตีจะพยายามรีเซ็ต เข้าถึงบัญชีของคุณ คุณจำเป็นต้องดำเนินการรีเซ็ตบัญชีเพื่อไม่พึ่งพา ข้อมูลที่เข้าถึงได้อย่างง่ายดายบนอุปกรณ์ เช่น อีเมลหรือ SMS OTP รีเซ็ตลิงก์

แนวทางปฏิบัติแนะนำทั่วไปที่คุณสามารถนำไปใช้กับการรีเซ็ตแอปได้มีดังนี้ ขั้นตอน:

  • การจดจำใบหน้านอกเหนือจาก OTP
  • คำถามเพื่อความปลอดภัย
  • ปัจจัยความรู้ (เช่น นามสกุลเดิมของมารดา เมืองเกิด หรือรายการโปรด เพลง)
  • การยืนยันผ่านบัตรประจำตัว

API ของ SMS Retriever

SMS Retriever API ช่วยให้คุณยืนยันผู้ใช้ด้วย SMS ในบัญชี แอป Android โดยอัตโนมัติ วิธีนี้จะช่วยให้ผู้ใช้ไม่จำเป็นต้อง พิมพ์รหัสยืนยันด้วยตนเอง นอกจากนี้ API นี้จะไม่ถามผู้ใช้ สำหรับสิทธิ์ของแอปพิเศษที่อาจเป็นอันตราย เช่น RECEIVE_SMS หรือ READ_SMS อย่างไรก็ตาม ไม่ควรใช้ SMS เป็นการยืนยันผู้ใช้เพียงวิธีเดียว ป้องกันการเข้าถึงอุปกรณ์โดยไม่ได้รับอนุญาต

วิธีนี้ช่วยลดการประพฤติมิชอบได้อย่างไร

ผู้ใช้บางรายใช้รหัส SMS เป็นปัจจัยเดียวในการตรวจสอบสิทธิ์ซึ่งจะให้ ที่เข้าถึงการฉ้อโกงได้ง่าย

SMS Retriever API จะช่วยให้แอปเรียกรหัส SMS ได้โดยตรงโดยไม่ต้อง การโต้ตอบกับผู้ใช้ และสามารถป้องกันการประพฤติมิชอบได้ในระดับหนึ่ง

การใช้งาน

การใช้งาน SMS Retriever API มีอยู่ 2 ส่วน ได้แก่ Android และ Server

Android: (คู่มือ)

  1. ขอหมายเลขโทรศัพท์ของผู้ใช้
  2. เริ่มต้นไคลเอ็นต์ SMS Retriever
  3. ส่งหมายเลขโทรศัพท์ไปยังเซิร์ฟเวอร์ของคุณ
  4. รับข้อความยืนยัน
  5. ส่ง OTP ไปยังเซิร์ฟเวอร์ของคุณ

เซิร์ฟเวอร์: (คู่มือ)

  1. สร้างข้อความยืนยัน
  2. ส่งข้อความยืนยันทาง SMS
  3. ยืนยัน OTP เมื่อได้รับกลับมา

แนวทางปฏิบัติแนะนำ

เมื่อผสานรวมแอปและหมายเลขโทรศัพท์ของผู้ใช้อยู่ระหว่างการยืนยัน SMS Retriever API จะพยายามรับ OTP หากประสบความสำเร็จ นั่นถือเป็น เป็นสัญญาณว่าอุปกรณ์ได้รับ SMS โดยอัตโนมัติแล้ว หากไม่เป็นเช่นนั้น สำเร็จและผู้ใช้ต้องพิมพ์ OTP ด้วยตนเอง ซึ่งอาจเป็นสัญญาณเตือน ว่าผู้ใช้อาจกำลังประสบ การฉ้อโกงอยู่

ไม่ควรใช้ SMS เป็นกลไกการยืนยันผู้ใช้เพียงวิธีเดียวเมื่อออกจากห้องแชท ต่อการโจมตีในพื้นที่ เช่น ผู้โจมตีที่ปล้นอุปกรณ์ปลดล็อก หรือซิม การโคลนการโจมตี ขอแนะนำให้ใช้ข้อมูลไบโอเมตริกทุกครั้งที่ทำได้ เปิด อุปกรณ์ที่ใช้เซ็นเซอร์ไบโอเมตริกไม่ได้ การตรวจสอบสิทธิ์ผู้ใช้ควร ขึ้นอยู่กับปัจจัยอย่างน้อย 1 อย่างที่หาได้ยากจากอุปกรณ์ปัจจุบัน

ดูข้อมูลเพิ่มเติม

อ่านข้อมูลเพิ่มเติมเกี่ยวกับแนวทางปฏิบัติแนะนำได้ในแหล่งข้อมูลต่อไปนี้