생체 인식은 기기에서 본인 확인을 하는 방식으로, 편의성은 높지만 보안은 떨어질 수 있습니다. 단계식 인증 모델에서는 기본 인증(PIN, 패턴, 비밀번호 등의 지식 계수 기반 모달리티)이 최고 수준의 보안을 제공합니다. 생체 인식은 편의성과 보안의 균형을 제공하는 인증의 보조 단계에 해당합니다. Android CDD는 클래스 3(이전 명칭: 강함), 클래스 2(이전 명칭: 약함), 클래스 1(이전 명칭: 편의)로 구성된 3가지 생체 인식 강도 클래스를 정의합니다. 각 클래스에는 기본 요건, 권한, 제약 조건이 있습니다. 자세한 내용은 위의 CDD를 참고하세요. 세 가지 클래스 모두 잠금 화면과 통합할 수 있지만, 강함 및 약함 인증자만 android.hardware.biometrics API와 통합할 수 있습니다. 다음 표에서는 각 인증자와 인증자가 지원하는 기능을 설명합니다.
인증자 | 잠금 화면 | BiometricPrompt 통합 | 키 저장소(시간 기반 키) | 키 저장소(작업 기반 키) |
---|---|---|---|---|
BIOMETRIC_STRONG(클래스 3) | 예 | 예 | 예 | 예 |
BIOMETRIC_WEAK(클래스 2) | 예 | 예 | 아니요 | 아니요 |
BIOMETRIC_CONVENIENCE (클래스 1) |
예 | 아니요 | 아니요 | 아니요 |
DEVICE_CREDENTIAL | 예 | 예 | 예 | 예 |
Android 프레임워크에는 얼굴 및 지문 생체 인식 인증이 지원됩니다. Android는 다른 생체 인식 모달리티(예: 홍채)를 지원하도록 맞춤설정할 수 있습니다. 그러나 생체 인식 통합은 모달리티가 아닌 생체 인식 보안에 따라 달라집니다. 생체 인식 보안 규정에 관한 자세한 내용은 생체 인식 잠금 해제 보안 측정을 참고하세요.
출처
Android 12
- 인증에 BiometricPrompt를 사용하는 앱에 현지화된 문자열을 제공하는 BiometricManager.Strings API를 도입했습니다. 이러한 문자열은 기기 인식을 위한 것으로 어떤 인증 유형이 사용될지 더욱 구체적으로 명시합니다.
- 언더 디스플레이 지문 센서(UDFPS) 지원이 포함됩니다.
Android 11
- 개발자가 앱에서 허용하는 인증 유형을 지정하는 데 사용할 수 있는 상수를 제공하는 BiometricManager.Authenticators 인터페이스를 도입했습니다.
- 개발자가 앱의 요구사항을 충족하는 인증 방법을 등록하도록 사용자를 안내하는 데 사용할 수 있는
ACTION_BIOMETRIC_ENROLL
인텐트 작업을 추가합니다. - 사용자가 생체 인식 사용자 인증 정보를 사용하여 인증했는지 또는 기기 사용자 인증 정보를 사용하여 인증했는지 확인하는 데 사용할 수 있는
AuthenticationResult#getAuthenticationType()
메서드를 추가합니다. - BiometricPrompt 클래스 내에서 사용당 인증 키를 추가로 지원합니다.
Android 10
- 개발자가 생체 인식 인증의 사용 가능 여부를 쿼리하는 데 사용할 수 있는
BiometricManager
클래스가 도입되었습니다. BiometricPrompt
에 지문 및 얼굴 인증 통합이 포함되었습니다.
Android 9
BiometricPrompt
에 지문 통합만 포함되었습니다.- FingerprintManager 클래스가 지원 중단되었습니다. 번들 및 시스템 앱에서 이 클래스를 사용하는 경우 대신
BiometricPrompt
및BiometricManager
를 사용하도록 업데이트하세요. FingerprintManager
CTS 인증기 테스트가BiometricPromptBoundKeysTest
를 사용하여BiometricPrompt
를 테스트하도록 업데이트되었습니다.
구현
사용자와 개발자의 생체 인식 환경을 원활하게 하려면 생체 인식 스택을 BiometricPrompt
, BiometricManager
, ACTION_BIOMETRIC_ENROLL
API와 통합하세요. 생체 인식 센서가 있는 기기는 이러한 강도 요구사항을 준수해야 합니다. 또한 모든 구현은 CtsBiometricsTestCases CTS 모듈을 통과해야 합니다.
생체 인식 스택을 ACTION_BIOMETRIC_ENROLL API와 통합하려면 다음 안내를 따르세요.
- 등록 흐름을 표시하도록 BiometricEnrollActivity를 수정합니다. 생체 인식은 요청된 강도를 충족하는 경우에만 표시될 수 있습니다. 기기에서 둘 이상을 지원하는 경우 이 작업에서는 사용자가 선택할 수 있는 목록을 표시해야 합니다.

HAL 구현 가이드라인
생체 인식 데이터가 유출되지 않고 사용자가 기기에서 삭제될 때 생체 인식 데이터도 함께 삭제되도록 하려면 다음 생체 인식 HAL 가이드라인을 따르세요.
- 안전한 격리 환경(예: TEE 또는 보안 요소) 외부에서 원시 생체 인식 데이터 또는 파생물(예: 템플릿)에 절대 액세스할 수 없도록 합니다. 저장된 모든 데이터는 TEE(신뢰할 수 있는 실행 환경)에만 알려진 기기별 키로 암호화되어야 합니다. 하드웨어가 이를 지원하는 경우 보안 격리 환경에 대한 하드웨어의 액세스 권한을 제한하고 SELinux 정책을 통해 이를 보호합니다. 모든 기기 파일에서 명시적 SELinux 정책을 사용하는 보안 격리 환경에서만 통신 채널(예: SPI, I2C)에 액세스할 수 있도록 합니다.
- 정보 유출 및 기타 공격을 방지하려면 보안 격리 환경에서 생체 인식 기능을 획득, 등록 및 인식해야 합니다. 이 요구사항은 클래스 3(이전 명칭: 강함) 및 클래스 2(이전 명칭: 약함) 생체 인식에만 적용됩니다.
- 재생 공격으로부터 보호하려면 비공개 기기 전용 키로 생체 인식 템플릿에 서명하세요. 고급 암호화 표준(AES)의 경우 템플릿 파일이 다른 기기에서 또는 같은 기기에 등록한 다른 사용자에 의해 작동되지 않도록 최소 한 개의 템플릿을 절대 파일 시스템 경로, 그룹 및 생체 인식 ID로 서명합니다. 예를 들어 같은 기기의 다른 사용자 계정에서 또는 다른 기기에서 생체 인식 데이터를 복사하는 등의 작업 자체가 불가능해야 합니다.
- TEE 외부에 데이터를 저장해야 하는 경우
setActiveUser() HIDL method
에서 제공하는 파일 시스템 경로를 사용하거나 사용자가 삭제될 때 모든 사용자 템플릿 데이터를 삭제하는 다른 방법을 제공합니다. 이렇게 하는 이유는 사용자 데이터의 유출을 방지하기 위해서입니다. 이 경로를 사용하지 않는 기기는 사용자가 삭제된 후 정리해야 합니다. 특히 TEE에 없는 경우 생체 인식 데이터와 파생 파일을 암호화하여 저장하는 것이 CDD 요구사항입니다. 보안 격리 환경의 저장소 요구사항으로 인해 이를 실행할 수 없는 경우 사용자가 삭제되거나 기기가 완전 삭제될 때 데이터가 삭제되도록 후크를 추가하세요. LockSettingsService.removeBiometricsForUser()를 참고하세요.
맞춤설정
기기가 여러 생체 인식 기능을 지원하는 경우 사용자는 설정에서 기본값을 지정할 수 있어야 합니다. BiometricPrompt
구현은 사용자가 명시적으로 재정의하지 않는 한 클래스 3(이전 명칭: 강함) 생체 인식을 우선적으로 설정해야 하며, 생체 인식과 관련된 위험을 설명하는 경고 메시지를 표시해야 합니다(예: 사용자가 나온 사진으로 기기가 잠금 해제될 수 있습니다).
기기별 인증 문자열
Android 12부터 개발자는 BiometricManager.Strings API를 통해 컨텍스트 인증 문자열을 사용할 수 있습니다. 이 API가 반환하는 리소스 값을 맞춤설정하여 기기별 문자열을 구현할 수도 있습니다. 이렇게 하는 경우 새로운 모든 문자열이 기기에서 지원하는 모든 언어로 번역되어야 합니다. 또한 다음 속성이 보존되어야 합니다.
메서드 |
문자열 목적 |
포함할 인증 유형 |
생체 인식 및 화면 잠금 두 가지 모두 사용 가능한 경우 |
---|---|---|---|
getButtonLabel() |
BiometricPrompt를 트리거하는 버튼의 라벨 |
인증자 요구사항을 충족하는 등록된 유형만(가능한 경우) |
생체 인식 전용 문자열 사용(예: '지문을 사용하세요') |
getPromptMessage() |
인증 시 BiometricPrompt에 표시되는 메시지 |
인증자 요구사항을 충족하는 등록된 유형만(가능한 경우) |
결합된 생체 인식 및 화면 잠금 문자열 사용(예: '계속하려면 지문 또는 PIN을 사용하세요') |
getSettingName() |
인증을 위해 BiometricPrompt를 사용할 수 있게 해 주는 설정 이름 |
인증자 요구사항을 충족하며 기기에서 지원하는 모든 유형(등록되지 않은 유형도 포함) |
결합된 생체 인식 및 화면 잠금 문자열 사용(예: '지문 또는 화면 잠금을 사용하세요') |
예를 들어 등록된 얼굴 및 등록된 PIN이 있는 클래스 2 얼굴 센서와 등록된 지문이 없는 클래스 3 지문 센서가 포함된 기기를 고려해 보세요. 다음 표에서는 허용된 인증자와 호출된 BiometricManager.Strings 메서드의 각 조합에 대한 샘플 문자열을 제공합니다.
허용된 인증자 |
getButtonLabel() |
getPromptMessage() |
getSettingName() |
---|---|---|---|
클래스 3 생체 인식(BIOMETRIC_STRONG) |
'지문을 사용하세요' (지문만 인증자 요구사항을 충족함) |
'계속하려면 지문을 사용하세요' (지문만 인증자 요구사항을 충족함) |
'지문을 사용하세요' (지문만 인증자 요구사항을 충족함) |
클래스 2 생체 인식(BIOMETRIC_WEAK) |
'얼굴을 사용하세요' (얼굴 및 지문이 요구사항을 충족하지만 얼굴만 등록되어 있음) |
'계속하려면 얼굴을 사용하세요' (얼굴 및 지문이 요구사항을 충족하지만 얼굴만 등록되어 있음) |
'얼굴 또는 지문을 사용하세요' (얼굴 및 지문이 요구사항을 충족하며 기기에서 둘 다 지원함) |
화면 잠금(DEVICE_CREDENTIAL) |
'PIN을 사용하세요' (모든 화면 잠금이 요구사항을 충족하지만 PIN이 등록되어 있음) |
'계속하려면 PIN을 입력하세요' (모든 화면 잠금이 요구사항을 충족하지만 PIN이 등록되어 있음) |
'화면 잠금을 사용하세요' (모든 화면 잠금이 요구사항을 충족함) |
클래스 3 생체 인식 또는 화면 잠금 |
'PIN을 사용하세요' (지문 및 모든 화면 잠금이 요구사항을 충족하지만 PIN만 등록되어 있음) |
'계속하려면 PIN을 입력하세요' (지문 및 모든 화면 잠금이 요구사항을 충족하지만 PIN만 등록되어 있음) |
'지문 또는 화면 잠금을 사용하세요' (지문 및 모든 화면 잠금이 요구사항을 충족함) |
클래스 2 생체 인식 또는 화면 잠금 |
'얼굴을 사용하세요' (얼굴, 지문, 모든 화면 잠금이 요구사항을 충족하지만 얼굴이 등록되어 있고 PIN을 대체함) |
'계속하려면 얼굴 또는 PIN을 사용하세요' (얼굴, 지문, 모든 화면 잠금이 요구사항을 충족하지만 얼굴과 PIN이 등록되어 있음) |
'생체 인식 또는 화면 잠금을 사용하세요' (얼굴, 지문, 모든 화면 잠금이 요구사항을 충족함) |
유효성 검사
생체 인식 기능을 구현하려면 다음 테스트를 통과해야 합니다.
- CTS BiometricManager
- CTS BiometricPrompt(상태, 인증기를 사용한 심층 테스트)
- CtsVerifier 생체 인식 테스트 섹션: 기기에서 지원하는 각 모달리티를 개별적으로 통과해야 함
또한 기기가 AOSP HIDL(fingerprint@2.1, fingerprint@2.2, face1.0)을 사용하는 생체 인식을 지원하는 경우 관련 VTS 테스트(지문, 얼굴)를 통과해야 합니다.