안드로이드 개발 시 보안의 이슈중 하나가 바로 '비밀 키'에 대한 보관 방법일 것입니다.
사실 서버, 격리된 별도의 공간에서 개인 키든, 대칭 키든 보관하는게 안전하겠으나
어떠한 사정에 의해 단말기에 저장하게 된다면 고민이 많아질 것입니다.
키 스토어 (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
'시큐어 코딩' 카테고리의 다른 글
불안정한 약한 암호 알고리즘 사용 (0) | 2020.03.27 |
---|---|
public 메소드를 통한 private array 접근 (0) | 2020.03.24 |
중요정보 키보드 캐시 (0) | 2020.03.22 |
내부저장소를 활용한 민감정보 저장 (0) | 2020.03.13 |
JAVA 메모리 취약성 제거 (0) | 2020.03.11 |