หากต้องการปกป้องระบบการตรวจสอบสิทธิ์ใน Android ให้พิจารณาเลิกใช้ รูปแบบด้วยรหัสผ่าน โดยเฉพาะสำหรับบัญชีที่มีความละเอียดอ่อน เช่น ผู้ใช้ของคุณ ธนาคาร และบัญชีอีเมล โปรดทราบว่าแอปบางแอปที่ผู้ใช้ติดตั้งอาจไม่มี โดยใช้เจตนาที่ดี และอาจพยายาม ฟิชชิงผู้ใช้ของคุณ
นอกจากนี้ อย่าคิดเอาเองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้นที่จะใช้อุปกรณ์ได้ การขโมยโทรศัพท์ เป็นปัญหาที่พบได้ทั่วไป และผู้โจมตีจะกำหนดเป้าหมายไปยังอุปกรณ์ที่ปลดล็อกเพื่อทำกำไรโดยตรง จากข้อมูลผู้ใช้หรือแอปการเงิน เราขอแนะนำให้แอปที่ละเอียดอ่อนทั้งหมดใช้ หมดเวลาการตรวจสอบสิทธิ์อย่างสมเหตุสมผล (15 นาที) เมื่อมีการยืนยันข้อมูลไบโอเมตริก ต้องมีการตรวจสอบสิทธิ์เพิ่มเติมก่อนการดำเนินการที่มีความละเอียดอ่อน เช่น เงิน การโอน
กล่องโต้ตอบการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริก
ไลบรารีไบโอเมตริกมีชุดฟังก์ชันเพื่อแสดงพรอมต์ที่ขอ การตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริก เช่น การจดจำใบหน้าหรือการจดจำลายนิ้วมือ อย่างไรก็ตาม พรอมต์ข้อมูลไบโอเมตริกสามารถกำหนดค่ากลับไปใช้ LSKF ได้ ซึ่ง ความเสี่ยงที่ทราบจากการโต้คลื่นด้านข้าง สำหรับแอปที่มีความละเอียดอ่อน เราขอแนะนำ ถ้าไม่มีข้อมูลไบโอเมตริกจะกลับไปใช้ PIN และหลังจากใช้ข้อมูลไบโอเมตริกซ้ำหลายครั้งแล้ว ผู้ใช้สามารถรอ หรือเข้าสู่ระบบอีกครั้งด้วยรหัสผ่าน หรือรีเซ็ตบัญชี การรีเซ็ตบัญชี ควรใช้ปัจจัยที่เข้าถึงได้ยากบนอุปกรณ์ (แนวทางปฏิบัติแนะนำ ที่ด้านล่าง)
การดำเนินการนี้ช่วยลดการประพฤติมิชอบและการโจรกรรมโทรศัพท์ได้อย่างไร
Use Case หนึ่งที่อาจเป็นประโยชน์ในการป้องกันการประพฤติมิชอบได้ คือ ส่งคำขอ การตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกภายในแอปของคุณก่อนการทำธุรกรรม เมื่อผู้ใช้ของคุณ กล่องโต้ตอบข้อมูลไบโอเมตริกจะแสดงขึ้น ยืนยันว่าผู้ใช้ดังกล่าวเป็นผู้ใช้ที่ทำธุรกรรมจริงๆ ช่วงเวลานี้ แนวทางปฏิบัติแนะนำจะช่วยป้องกันผู้โจมตีที่ขโมยอุปกรณ์ได้ ผู้โจมตีจะทราบหรือไม่ว่า LSKF ทราบ เนื่องจากจะต้องตรวจสอบว่าตน เจ้าของอุปกรณ์
หากต้องการเพิ่มระดับความปลอดภัย เราขอแนะนำให้นักพัฒนาแอปส่งคำขอคลาส 3
การตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกและการใช้ CryptoObject
สำหรับการธนาคารและ
ธุรกรรมทางการเงิน
การใช้งาน
- อย่าลืมใส่ไลบรารี androidx.biometric
- รวมกล่องโต้ตอบการเข้าสู่ระบบด้วยข้อมูลไบโอเมตริกไว้ในกิจกรรมหรือส่วนย่อยที่ตรึง ตรรกะที่คุณต้องการตรวจสอบสิทธิ์ผู้ใช้
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 ถึง เริ่มต้นใช้งานพาสคีย์ ให้ทำตามขั้นตอนต่อไปนี้
- โปรดทำตาม Codelab ของเครื่องมือจัดการข้อมูลเข้าสู่ระบบเพื่อทำความเข้าใจวิธีใช้พาสคีย์เบื้องต้น
- อ่านหลักเกณฑ์การออกแบบประสบการณ์ของผู้ใช้พาสคีย์ เอกสารนี้แสดงขั้นตอนที่แนะนำสำหรับกรณีการใช้งานของคุณ
- ศึกษาเครื่องมือจัดการข้อมูลเข้าสู่ระบบโดยทำตามคำแนะนำ
- วางแผนการใช้เครื่องมือจัดการข้อมูลเข้าสู่ระบบและพาสคีย์สำหรับแอป วางแผนเพิ่มการรองรับลิงก์เนื้อหาดิจิทัล
โปรดดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีสร้าง ลงทะเบียน และ ตรวจสอบสิทธิ์ด้วยพาสคีย์
รีเซ็ตบัญชีที่ปลอดภัย
ผู้โจมตีที่ไม่ได้รับอนุญาตซึ่งเข้าถึงอุปกรณ์ที่ปลดล็อกแล้ว (เช่น เมื่อมีโทรศัพท์ ถูกลักลอบใช้) จะพยายามเข้าถึงแอปที่มีความละเอียดอ่อน โดยเฉพาะแอปธนาคารหรือเงินสด หากแอปใช้การยืนยันด้วยข้อมูลไบโอเมตริก ผู้โจมตีจะพยายามรีเซ็ต เข้าถึงบัญชีของคุณ คุณจำเป็นต้องดำเนินการรีเซ็ตบัญชีเพื่อไม่พึ่งพา ข้อมูลที่เข้าถึงได้อย่างง่ายดายบนอุปกรณ์ เช่น อีเมลหรือ 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: (คู่มือ)
- ขอหมายเลขโทรศัพท์ของผู้ใช้
- เริ่มต้นไคลเอ็นต์ SMS Retriever
- ส่งหมายเลขโทรศัพท์ไปยังเซิร์ฟเวอร์ของคุณ
- รับข้อความยืนยัน
- ส่ง OTP ไปยังเซิร์ฟเวอร์ของคุณ
เซิร์ฟเวอร์: (คู่มือ)
- สร้างข้อความยืนยัน
- ส่งข้อความยืนยันทาง SMS
- ยืนยัน OTP เมื่อได้รับกลับมา
แนวทางปฏิบัติแนะนำ
เมื่อผสานรวมแอปและหมายเลขโทรศัพท์ของผู้ใช้อยู่ระหว่างการยืนยัน SMS Retriever API จะพยายามรับ OTP หากประสบความสำเร็จ นั่นถือเป็น เป็นสัญญาณว่าอุปกรณ์ได้รับ SMS โดยอัตโนมัติแล้ว หากไม่เป็นเช่นนั้น สำเร็จและผู้ใช้ต้องพิมพ์ OTP ด้วยตนเอง ซึ่งอาจเป็นสัญญาณเตือน ว่าผู้ใช้อาจกำลังประสบ การฉ้อโกงอยู่
ไม่ควรใช้ SMS เป็นกลไกการยืนยันผู้ใช้เพียงวิธีเดียวเมื่อออกจากห้องแชท ต่อการโจมตีในพื้นที่ เช่น ผู้โจมตีที่ปล้นอุปกรณ์ปลดล็อก หรือซิม การโคลนการโจมตี ขอแนะนำให้ใช้ข้อมูลไบโอเมตริกทุกครั้งที่ทำได้ เปิด อุปกรณ์ที่ใช้เซ็นเซอร์ไบโอเมตริกไม่ได้ การตรวจสอบสิทธิ์ผู้ใช้ควร ขึ้นอยู่กับปัจจัยอย่างน้อย 1 อย่างที่หาได้ยากจากอุปกรณ์ปัจจุบัน
ดูข้อมูลเพิ่มเติม
อ่านข้อมูลเพิ่มเติมเกี่ยวกับแนวทางปฏิบัติแนะนำได้ในแหล่งข้อมูลต่อไปนี้
- เอกสาร Android ของเราเกี่ยวกับความปลอดภัย
- เอกสารประกอบของ Play Integrity API
- การเปลี่ยนแปลงของ Android 15
- แนวทางปฏิบัติแนะนำสำหรับการป้องกันการโทรของกลโกงจาก Monzo Bank