안드로이드는 기본적으로 생체보안 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)

+ Recent posts