안드로이드는 기본적으로 생체보안 framework를 구현하여 API로 제공한다. 기존의 생체보안의 경우 fingerprint prompt로 API가 지원이 되었으나 Android 10이후 FIngerprint가 없어지고 Biometric으로 새롭게 개정되며 Android 6이후 지원하고 있다.
1. Biometric 종류
안드로이드에서 지원하는 생체 보안은 크게 3가지로 나누어져 지원하게 되는데 강한 보안, 약한 보안, 편리성으로 지원한다.
각각의 기능을 사용하기 위해서는 구글에서 정의한 최소 요건을 만족해야 한다.
1) 편의 Biometric
- False Positive의 값이 0.002% 미만
- 사기 및 위장 수락률이 7%이상인 경우 PIN, 패턴, 비밀번호보다 보안성이 낮음을 명시
- 5회이상 잘못된 시도 시 30초동안 제한 적용
- TEE에 의해 보호되는 PIN, 비밀번호 등의 다른 방식을 통해 새 생체 인식을 추가하도록 정의
- 사용자 계정이 제공된 경우 사용자와 관련된 모든 생체 인식 데이터 완전히 삭제
- 개별 플래그 선정
- Andorid 10이상은 24시간이내 업그레이드 모델은 72시간 이내 다른 기본 인증(PIN, 비밀번호 등)을 요구
- 4시간 유휴의 타임아웃, 3회의 생체 인증 시도 실패 시 다른 기본 인증을 요구 해야 함. 등
2) 약한 Biometric
- 1)의 편의와 관련된 모든 요구사항 충족
- 사기 및 위장 수략률 20% 이하
- H/W 키 저장소 필요 TEE와 같은 격리된 공간에서 보안채널을 포함하는 칩(독립적인 공간)에서생체 인식 매칭 수행
- 식별 가능한 모든 데이터 암호화 필수
- 타사 어플리케이션 사용 설정 x
- TEE외 컨택스트 사용 금지, 파이프라인 보유 등
3) 강한 Biometric
- 2)의 약한 biometirc 요구사항 모두 충족
- 사기 및 위장 수락률 7% 미만
- 72시간 이내마다 권장되는 기본 인증을 사용자에게 요구해야 함.
2. Biometric 구조 및 동작
Biometric의 경우 HAL 구현 시 TEE를 통한 안전한 공간에서 데이터를 주고받아야 하며. 기본적으로 SElinux 정책에 의거하여 독립된 H/W를 사용하며 H/W와의 통신은 명시적인 SPI, I2C 등을 통해 통신이 이루어 져야 한다. 추가적으로 구글에서 제공하는 set_active_group()를 이용하거나 모든 사용자 템플릿 데이터가 삭제될 수 있도록 삭제 기능이 제공되어야한다. 특히 데이터 삭제의 경우 삭제 후 모두 삭제됬는지 확인하기 위한 작업이 필수적으로 들어가야 한다.
1) 동작
Biometric의 동작방식은 지문 및 생체 정보 data를 apk에서 보내면 해당 데이터는 TEE나 SE와 같은 독립적인 보안 공간으로 이동된다. 여기서 데이터를 검사하고 저장된 데이터와 일치하여 정상접근이 확인되면 인증이 완료된다.
추가적으로 암호화 및 복호화과정을 생체 정보로 진행할 때는 위의 인증완료 후 Crypto object를 통해서 암복호화가 진행된다.
2) 사용처
기본적으로 biometric은 사용자 인증 및 로그인 과정 등 여러 방면에서 사용이 가능하다.
또한 추가적으로 userToken 암복호화시에도 biometric 사용이 될 수 있는데 이 경우 시나리오를 설명하면 아래와같다.
먼저 기본적으로 로그인 시스템이란 ID, PW를 입력 후 userToken을 서버로부터 받아 인증을 받고 서비스를 이용하는데 해당 userToken이 저장될 때 암호화되어있지 않다면 해커의 어택으로 메모리가 유출됬을때 치명적일 수 있다. 때문에 userToken의 암호화가 보안성을 높일 수 있는데 이 때 암복호화를 사용하기 위한 key를 Andorid keystore에서 관리하고 해당 key로 암복호화하기 위해서 biometric의 인증과정을 거치도록 구현하는 것이다.
3. 암호학
Biometric은 기본적으로 crypto object를 지원한다. 이는 생체 데이터를 안전하게 관리하기 위한 방법으로 데이터 통신과정의 안전성을 보장할 수있다. 여기서 사용되는 암호화 및 복호화 키는 Android Keystore를 이용해서 생성되는 것으로 확인된다.
암호학에 이용되는 Crypto Object는 당연히 암복호화뿐 아니라 MAC, Hash 등의 보안기능에도 사용된다.
1) Android Keystore
기본적으로 안드로이드 secret key를 생성하고 관리하는 역할로써 보안적인 측면에서 아주 중요한 부분이다.
Keystore의 위치는 TEE 혹은 StrongBox내에 위치하도록 되어있으며 해커의 접근을 막고자 linux kernel, usercase에서 접근은 불가하다.
또한 Keystrore를 통해 생성된 키들은 매우 보안적으로 이슈가 될 수 있기 때문에 app에서 keystore에 키를 요청한다고해서 해당 key를 apk에게 전달하지는 않는다. 보통 apk에서 키를 요청하면 keystore에서 키를 생성하여 가지고 있으며 암호화 및 복호화를 apk에서 요청하면 데이터를 파라미터로 받은 후 암호화 및 복호화된 데이터를 apk에게 return해주는 방식으로 암복호화를 진행한다.
ref - https://source.android.com/compatibility/android-cdd#7_3_10_biometric_sensors (Android CDD)
'Android > 안드로이드 운영체제' 카테고리의 다른 글
[Android] 안드로이드(8) - Application의 권한 (0) | 2020.11.21 |
---|---|
[Android] 안드로이드(7) - TEE (0) | 2020.11.21 |
[Android] 안드로이드(5) - HAL (2) | 2020.10.25 |
[Android] 안드로이드(4) - 부팅2, Zygote (0) | 2020.10.19 |
[Android] 안드로이드(3) - 부팅 (0) | 2020.10.10 |