Android Biometric
안드로이드에 생체인증을 구현하기 위해서는 Biometric 을 사용하면 된다 (FingerprintManager 는 deprecated 됨)
https://developer.android.com/training/sign-in/biometric-auth
따라하면 그다지 어려운건 없는데
암호화 부분이 나오면서 이게 뭐하는 놈인가 싶다
대부분 앱에서 생체인증을 통해 인증을 통과하면 민감한 정보(대부분 access token, 심지어는 password) 를
앱내 (대부분 shared preferences) 에 저장해 두고, 가져 오는데 사용하게 된다.
이땐 당연히 민감한 정보를 암호화 하여 저장하고 가져올땐 복호화 과정을 거치게 되는데
이 암복호화를 사용하기 위한 key 를 Android KeyStore 에서 관리하게 하고
이 key 사용을 위해 생체 인증 과정을 거치게 되는 것이다.
그리고 암복호화에 사용하는 key는 Android 시스템에서 관리하기 때문에 안정성을 보장받는다.
* Android KeyStore 참고
https://developer.android.com/training/articles/keystore?hl=ko
KeyGenerator 생성시 KeyGenParameterSpec 의 아래 옵션을 false 로 주면 인증을 거치지 않아도 사용 가능하다
setUserAuthenticationRequired
하지만 true를 주면 항상 인증을 거쳐야 한다.
즉 Biometric 과 Cryptography 는 별개의 영역이지만
BiometricPrompt 를 실행할때 CryptoObject 를 넘겨 받으면서 밀접 연관을 갖게 되기도 한다.
이때 CryptoObject 넘겨 주는 경우에는 얼굴인식이 뜨지 않고
넘겨주지 않는 경우에는 지문,얼굴 인식 두개가 다 떠서 뭐가 다른지 찾아봤더니..
7.3.10 의 biometric sensors 섹션에 아래와 같은 내용이 있다.
[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 이 아닌것 같다 (이것까지 찾아보기 귀찮으니 넘어간다)