시큐어 코딩

Android 개발 시 보안을 위한 KeyStore

Security_Info 2020. 2. 10. 16:57

안드로이드 개발 시 보안의 이슈중 하나가 바로  '비밀 키'에 대한 보관 방법일 것입니다.

 

사실 서버, 격리된 별도의 공간에서 개인 키든, 대칭 키든 보관하는게 안전하겠으나

어떠한 사정에 의해 단말기에 저장하게 된다면 고민이 많아질 것입니다.

 

키 스토어 (KeyStore)

키 스토어는 컨테이너라는 공간속에 RSA키페어 및 AES대칭키를 저장하는 시스템을 의미합니다.

 

컨테이너는 외부에서 접근할 수 없는 형태이며 어플리케이션을 삭제하면 컨테이너의 데이터도 같이 삭제되므로

데이터 유출이 없게 됩니다.

 

이러한 컨테이너에 RSA키페어 및 AES대칭키를 저장하여, 저장된 키로 '비밀 키'를 암호화 하여 안전하게 보관할 수 있습니다. 또한, 해당 어플리케이션 내부 소스코드를 통해서만 접근이 가능하니 더욱 보안 강도가 올라가게 됩니다.

 

키 스토어 활용
전제조건

절대 하드 코딩은 안됩니다. 하드코딩은 키스토어를 사용하는 의미가없게 되어집니다.

말 그대로 소스코드안에 적어놓는 행위이기에 하지말아야할 금지의 영역.

 

 

어떻게 활용할 수 있을까?

1. 키 스토어에 저장할 RSA키페어 또는 AES대칭키를 생성하여 컨테이너에 저장하는 것이 가장 중요합니다.

2. 따라서 사용할 키페어 또는 대칭키를 컨테이너에 생성해둡니다.

3. 이후 만들어 뒀거나, 갓 생성한 '비밀 키'는 곧 바로 키 스토어를 통해 'RSA키페어 또는 AES대칭키'를 로드하여

'비밀 키'를 로드된 키 스토어의 키를 사용하여 암호 알고리즘에 적용시켜줍니다.

4. 이렇게 되면 '비밀 키'는 알아 볼 수 없는 형태로 변환이 되게 됩니다.

 

암호화 된  '비밀 키' 복호화

자, 이제 앱내에  암호화 된  '비밀 키'를 다시 복호화 시켜, 복호화된 '비밀 키'를 어딘가에 사용하려 합니다.

 

1. 키 스토어의 'RSA키페어 또는 AES대칭키'를 로드합니다.

2. 로드된 'RSA키페어 또는 AES대칭키'로 암호화 된 '비밀 키'를 복호화 시켜줍니다.

3. 복호화 된 '비밀 키'로 이후 진행할 작업을 수행해줍니다.

 

 

 

여기까지 키 스토어의 설명과 사용 방법을 통한 보안성 확보를 알아봤습니다.

키 스토어가 활용되는 두 가지 활용방안

1. SharedPreferences의 XML 데이터 암호화 보관

2. 앱 내에서 키를 암호화 하여 안전하게 보관

 

 

 

 

 

본 포스팅은 기본적인 암호학에 대한 지식이 있으시다면, 이해하는데 큰 어려움이 없으실겁니다.

다음의 깃헙 주소는 한글 주석이 표기된 '키 스토어' 소스코드가 작성된 깃헙 주소입니다.

https://github.com/LeeJuWan/security_library/tree/master/Key

 

LeeJuWan/security_library

Contribute to LeeJuWan/security_library development by creating an account on GitHub.

github.com