지식쌓기

Android Biometric

바나나쥬스 2022. 11. 8. 18:39

안드로이드에 생체인증을 구현하기 위해서는  Biometric 을 사용하면 된다 (FingerprintManager 는 deprecated 됨)

https://developer.android.com/training/sign-in/biometric-auth

 

생체 인식 인증 대화상자 표시  |  Android 개발자  |  Android Developers

생체 인식 인증 대화상자 표시 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱의 민감한 정보나 고급 콘텐츠를 보호하는 데는 얼굴 인식, 지문 인식 같은

developer.android.com

 

따라하면 그다지 어려운건 없는데 

암호화 부분이 나오면서 이게 뭐하는 놈인가 싶다

 

대부분 앱에서 생체인증을 통해 인증을 통과하면 민감한 정보(대부분 access token, 심지어는 password) 를 

앱내 (대부분 shared preferences) 에 저장해 두고, 가져 오는데 사용하게 된다. 

이땐 당연히 민감한 정보를 암호화 하여 저장하고 가져올땐 복호화 과정을 거치게 되는데

이 암복호화를 사용하기 위한 key 를 Android KeyStore 에서 관리하게 하고

이 key 사용을 위해 생체 인증 과정을 거치게 되는 것이다.

그리고 암복호화에 사용하는 key는 Android 시스템에서 관리하기 때문에 안정성을 보장받는다.

 

* Android KeyStore 참고

https://developer.android.com/training/articles/keystore?hl=ko 

 

Android Keystore 시스템  |  Android 개발자  |  Android Developers

Android Keystore 시스템 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android Keystore 시스템을 사용하면 암호화 키를 컨테이너에 저장하여 기기에서 키를 추출

developer.android.com

 

KeyGenerator 생성시 KeyGenParameterSpec 의 아래 옵션을 false 로 주면 인증을 거치지 않아도 사용 가능하다

setUserAuthenticationRequired

하지만 true를 주면 항상 인증을 거쳐야 한다. 

 

즉 Biometric 과 Cryptography 는 별개의 영역이지만

BiometricPrompt 를 실행할때 CryptoObject 를 넘겨 받으면서 밀접 연관을 갖게 되기도 한다. 

 

이때 CryptoObject 넘겨 주는 경우에는 얼굴인식이 뜨지 않고

넘겨주지 않는 경우에는 지문,얼굴 인식 두개가 다 떠서 뭐가 다른지 찾아봤더니..

[C-6-2] MUST present only Class 3 biometrics when the authentication requires BIOMETRIC_STRONG , or the authentication is invoked with a CryptoObject .

즉 CtyptoObject 넘겨 받는 경우에는 Class 3 (Strong) 에 해당되는 것만 표시된다는 것이다. 

아무래도 face 인증은 Class 3 이 아닌것 같다 (이것까지 찾아보기 귀찮으니 넘어간다)