Android KeyStore 와 Keystore 의 차이?
KeyStore 와 Keystore 는 한글로 읽으면 둘 다 '키스토어'이기 때문에, 동일한 단어로 들리지만, 실제로 다른 의미를 가지고 있다.
Android KeyStore Service
안드로이드 앱을 Google Play에 배포하기 위해서는 해당 앱을 서명하여 생성한 APK를 업로드하여 배포해야 하는데, 이 때, 서명에 사용되는 키 및 키저장소를 KeyStore라 한다.
해당 KeyStore는 AndroidStudio tool에서 생성 할 수 있으며, Google Play에 배포를 하게되면 같은 패키지로 업데이트를 진행 할 때, 반드시 최초에 APK를 서명했던 키스토어로 서명한 APK를 업로드 해야합니다.
만약, 최초에 서명한 키스토어를 잃어버렸다면 구글에게 메일을 보내 처리할 수는 있지만 까다롭기에 안잃어버리게 잘 관리하는 것이 중요!잃어버렸을 경우 : https://cfdf.tistory.com/30
Android OS 에서도, App 자체에서 사용하는 암호키를 보다 안전하게 보관하게 위한 서비스를 제공하고 있는 데, 이것이 바로 Android KeyStore Service(AndroidKeyStore 라고 부름)이다. KeyStore Service에서 제공하는 keystore(키스토어)에 암호키를 보관한다.
Android OS에서 암호화 기능을 제공하는 목적은 App 에서 다루고 있는 정보 중 외부로 유출이 되어서는 안되는 중요한 data를 안전하게 보관하는 방법은 암호화를 시켜 저장하는 방법 밖에 없기 때문. 특정 App에서 다루는 data는 다른 App에서는 access할 수 없으나, "Rooting"을 통하여 권한 상승을 하면, 모든 App에서 만든 data를 access할 수 있기 때문이다.
참고로, 사용 App 내부에 암호키를 hard coding된 상태로 저장하는 경우는 App을 디컴파일하면 암호키가 바로 노출이 된다.
Android Keystore
Android Device에서 암호키를 안전하게 저장하기 위해 사용하는 hardware 장치를 Android Keystore 라고 부른다. 즉 Android OS에서 제공하는 "KeyStore Service"를 제공하기 위해 만들어진 hardware가 바로 Android Keystore 이다. Android Device 제조사는 자신들의 Android Keystore를 hardware적으로 디자인하여, hardware를 구동하기 위한 driver software를 함께 제공하기만 하면 된다. 다시 정리하면, Android Keystore는 Android Device 제조사가 제공하는 "hardware 기반 secure key storage" 이다. Hardware란, TEE(Trusted Execution Environment) 또는 SE(Secure Element)를 지원하는 장치다.
GlobalPlatform(Secure chip 기술에 대한 사양을 만들고 발표하는 non-profit organization) 에서는 2010년도에 TEE에 대한 자신들의 표준을 발표했으며, TEE를 구현한 solution으로 ARM TrustZone 기술이 있다. TrustZone 기술을 기반으로 한 TEE 를 "TrustZone-based TEE" 라고 부른다. TEE는 main processor내에 있는 Secure Area 이며, Android OS 와는 독립된 별도의 OS로 동작함. Andorid 8 버전까지는 TEE 방식만 지원했다. 참고) iOS 도 Secure Enclave라 불리는 유사한 기능을 제공하고 있으며, Notebook PC에서도 암호키를 hardware적으로 안전하게 보관하기 위한 장치로 TPM(Trusted Platform Module) 를 장착하기도 한다. FIPS 140-2 인증을 받은 전용 HSM 장비 보다는 못하지만 software적인 방법 보다는 훨씬 안전하기 때문. 서버에서 사용하는 암호키는, "FIPS 140-2 Level 3 또는 Level 4 인증을 받은 전용 HSM 장비"를 사용하여 암호키를 안전하게 보관한다. |
Android Keystore는 Android API 18버전(Jelly Bean, OS version 4.3)부터 지원하기 시작한 "hardware security" 기능이다. Android API에서는 Key 저장을 위하여 사용되는 "Key Storage"를 지원하기 위한 Interface로 java.security.KeyStore 라 불리는 class를 제공하고 있다.
Android Device는 부팅하면서, Keystore에 대한 driver가 없거나, hardware가 인식이 안되면, software적으로 Keystore기능을 구현한다. 따라서 좀 더 깊게 들어가면, Android Keystore는 "hardware 기반 AndroidKeyStore" 와 "software 기반 AndroidKeyStore" 두 가지 종류가 있는데 "software 기반 AndroidKeyStore" 는 "hardware 기반 AndroidKeyStore" 보다 덜 안전하다. 참고로, Android M(Version 6.0) 이전의 "software 기반 AndroidKeyStore" 는 rooting 된 기기에서 암호키 유출이 가능하다. |
'Tech develop > 인증' 카테고리의 다른 글
HMAC(Hash-based Message Authentication Code) (1) | 2021.07.29 |
---|---|
RSA 암호 알고리즘이란? (0) | 2021.07.29 |
블록 암호화에서의 운영 모드 및 패딩 (0) | 2021.07.29 |
[Android] WhiteBox (0) | 2021.07.29 |