1. 키 증명

Google에서는 신뢰할 있는 통신을 위해 증명 과정을 Android OS 7부터 제공하기 시작했습니다.

키증명의 역할은 특정한 키를 사용할 해당 키가 안전한 하드웨어에 보관된 안전한 키가 맞는지를 증명하는데 사용합니다.

예를들어 SE에서 key 한쌍을 만들었다면 private key SE내부에서 보관하고 public key Google Attestation Key 서명을 진행하여 인증서를 만듭니다.

 

이렇게 만들어진 인증서를 개발자는 keyStore등에서 getCertificateChain() API 통해서 인증서 체인을 얻을 있고

GAK 정상적으로 인증된 인증서임을 verify하게되면 해당 key SE내부에서 안전하게 보관되고 있다고 생각할 있습니다.

 

여기서 위와같이 구글이 안전하다고 생각하는 H/W 키가보관이되어있다고 인증을해주기 위해서는 반드시 인증서 체인의 Root Key GAK 되어야 한다.

 

물론 Root of Trust GAK 아니라고해서 키가 안전하지 않은 곳에 보관되었다고는 없지만 적어도 구글에서 인정하는 안전한 H/W 보관되지는 않은 것으로 있다.

(*마찬가지로, Android 7.0 version 이하의 경우 미지원으로인해 증명 과정이 verify 없다)

 

 

 

1) 인증서

H/W 저장되는 비대칭키를 증명하기위해서 GAK 루트로하여 인증서 체인을 만들게 되며 해당 인증서는 X.509 포맷을 가진다.

sign 하는 Key로는 RSA, EC 포맷 키를 사용하였으며 attestation key 경우 GAK root로하여 공정과정에서 주입하는 방식으로 진행했다.

 

하지만 Google에서는 Android 12에서부터 optional Remote Provisioning 지원하고 Android 13부터는 의무로 진행하고자한다.

Remote Provisioning으로 인한 차이점은 아래에 추가로 설명한다.

 

 

 

 

2) Remote Provisioning

Google에서는 더 이상 attesation key 공정과정에서 주입하고자 하지 않고 위와같이 원격 프로비저닝을 진행하고자 한다.

과정을 간단히 설명하면

0 : Device에서 고유의 값을 통해서 비대칭키 쌍을 생성

1 : public key Google Server 업로드

2 : Google에서 pubkey key DataBase 저장

3 : 단말에서 현재 안전한 H/W 보관된 priv key 증명을 위한 인증서 요청

4 : key database에서 pubkey 존재하는지 확인

5 : certificate signing server pubkey에대한 인증서 생성

6 : 단말에 인증서 발급

 

과정을 통해서 기존 attestation key 공정과정에서만 주입하여 이후 key 고장나는 등의 이슈를 대응하지 못할 대응할 있도록 하였고 기존 RSA, EC 증명키 대신 EC 증명키만을 사용하도록 강제하여 보안을 견고하게 수정했다.

 

 

정리하면 증명이란 비대칭키가 존재할 해당 priv key 안전하게 보관되고 있음을 증명하는 과정을 말한다.

증명을 위해 인증서체인을 만드는데 인증서 체인의 Root of Trust GAK(Google Attestation Key) 경우 priv key Google에서 신뢰하는 H/W 보관되어있음을 확인할 있다.

때문에 KeyStore 같은 모듈에서 priv key 보관한다고 해당 area Google 인정한 안전한 공간임을 증명하기위해 keyStore에서는 API 통해서 자신이 가지고 있는 priv key 대한 인증서를 요청하고, 해당 인증서를 사람들에게 전달해줌으로써 자신이 안전한 공간임을 입증할 있다.

여기서 증명 (attesation key) 결국 인증서를 만드는 키를 의미한다. 다시 말해 해당 key 거슬러 올라가면 최종 루트에서는 GAK 서명되어 인증된 키이다.

 

 

 

 

 

 

 

  • ref

https://developer.android.com/training/articles/security-key-attestation?hl=ko

https://source.android.com/security/keystore/attestation?hl=ko

https://developers-kr.googleblog.com/2022/05/upgrading-android-attestation-remote.html

 

+ Recent posts