이전 글에서 TEE의 지문인증모듈과 TEE의 Keymaster모듈이 지문인증의 결과를 주고 받음으로서 지문인증의 결과를 더욱 신뢰할 수 있다고 하였습니다. 이번 글에서는 TEE의 두 모듈이 어떻게 지문인증 결과를 주고 받는지에 대해 이야기해보겠습니다.
이에 대한 개략적인 내용은 source.android.com/security/authentication 에 설명되어 있습니다.
- 앱에서 지문인증을 요청합니다.
- REE의 fingerprint 데몬이 TEE의 지문인증모듈에 지문인증을 수행하도록 합니다. 지문이 인증된 경우 TEE의 지문인증모듈은 AuthToken이라는 것을 생성하고, AuthToken HMAC키를 이용하여 일종의 전자서명이 됩니다.
- 전자서명된(HMAC 값) AuthToken이 keystore로 전달됩니다.
- REE의 keystore는 TEE의 keymaster에서 이 전자서명된 AuthToken을 전달합니다. 위 그림에서 확인할 수 있듯이 지문인증의 결과를 나타내는 AuthToken은 TEE의 keymaster까지 전달되기 위해 REE 환경을 경유하게 되어 있습니다. REE는 공격(위/변조)당할 가능성이 높기 때문에 이를 수신 측인 TEE keymaster 모듈에서 확인하기 위해 전자서명이 됩니다.
참고로, 위 3번과정을 Android 10 Q 버전 소스에서 다음과 같이 확인해볼 수 있습니다.
// android/frameworks/base/services/core/java/com/android/server/biometrics/AuthenticationClient.java
@Override
public boolean onAuthenticated(BiometricAuthenticator.Identifier identifier,
boolean authenticated, ArrayList<Byte> token) {
// skip ...
boolean result = false;
// skip ...
if (authenticated) {
// skip ...
result = true;
// skip ...
KeyStore.getInstance().addAuthToken(byteToken);
// skip ...
return result;
}
지문인증이 된 경우, KeyStore.getInstance().addAuthToken(byteToken) 를 통해 AuthToken을 keymaster로 전달함을 알 수 있습니다.
AuthToken의 자료구조는 아래와 같으며 빨간 박스 부분을 통해 중간의 위/변조를 확인할 수 있습니다.
정리하자면,
- AuthToken HMAC을 생성/검증하기 위한 HMAC key는 TEE내의 keymaster 모듈이 단말이 부팅할 때마다 랜덤하게 만들어냅니다.
- AuthToken HMAC key는 TEE keymaster 모듈로부터 TEE 지문인증모듈로 전달됩니다.
- TEE 지문인증모듈은 지문인증이 성공한 경우 AuthToken HMAC을 포함한 AuthToken 을 생성합니다.
- 생성된 AuthToken은 REE를 거쳐 TEE keymaster 모듈로 전달됩니다.
- TEE keymaster 모듈은 AuthToken HMAC을 확인하게 AuthToken의 위/변조를 확인한 후 지문인증결과를 확인합니다.
'Android' 카테고리의 다른 글
Android에 설치된 앱이 Platform Key로 서명되었는지 확인하는 방법 (0) | 2021.02.15 |
---|---|
보안 측면에서의 Android 지문인증 (4) (0) | 2021.02.15 |
보안 측면에서의 Android 지문인증 (2) (0) | 2021.02.13 |
보안 측면에서의 Android 지문인증 (1) (0) | 2021.02.08 |
Android 소스 검색 방법 (0) | 2021.02.08 |