Java 는 KeyStore 라는 인터페이스를 통해 Encryption/Decryption(암/복호화) 및 Digital Signature-(전자서명) 에 사용되는 Private Key(개인키), Public Key(공개키) 와 Certificate(인증서) 를 추상화하여 제공하고 있다.
KeyStore 를 구현한 Provider 에 따라 실제 개인키가 저장되는 곳이 로컬 디스크이든 HSM 같은 별도의 하드웨어이든 아니면 Windows 의 CertStore나 OSX 의 KeyChain 이든 상관없이 사용자는 소스 코드 수정없이 키와 인증서를 가져올 수 있고 이를 이용하여 데이타 암/복호화, 전자서명을 수행할 수 있다.
Android Keystore 시스템을 사용하면 암호화 키를 컨테이너에 저장하여 기기에서 키를 추출하기 어렵게 할 수 있습니다. 키 저장소에 키가 저장되면, 키 자료는 내보낼 수 없는 상태로 유지하면서 키를 암호화 작업에 사용할 수 있습니다. 이 시스템에서는 키 사용 시기와 사용 방법을 제한하는 기능도 제공합니다. 예를 들어 키 사용을 위해 사용자 인증을 요구하거나, 특정 암호화 모드에서만 키를 사용하도록 제한할 수 있습니다. 자세한 내용은 보안 기능 섹션을 참조하세요.
Keystore 시스템은 Android 4.0(API 수준 14)에서 도입된 KeyChain API에서 사용됩니다. Android 4.3(API 수준 18)에서 도입된 Android Keystore 제공자 기능 및 Jetpack의 일부로 제공되는 보안 라이브러리에서도 사용됩니다.
키체인(KeyChain) 혹은 안드로이드 키스토어 제공자(Android KeyStore 제공자) 중에서 선택
- 시스템 범위의 자격 증명을 원하면 KeyChain API를 사용합니다. 앱이 KeyChain API를 통해 자격 증명 사용을 요청하는 경우, 사용자는 설치된 자격 증명 중에서 이 앱이 액세스할 수 있는 자격 증명을 시스템 제공 UI를 통해 선택합니다. 이렇게 하면 사용자 동의 하에 여러 앱이 동일한 자격 증명을 사용할 수 있습니다.
- Android KeyStore 제공자를 사용하면 개별 앱이 혼자만 액세스할 수 있는 자격 증명을 저장할 수 있습니다. 이 방법을 사용하면 앱이 혼자만 사용할 수 있는 자격 증명을 관리할 수 있을 뿐만 아니라 Keychain API가 시스템 범위의 자격 증명에 제공하는 것과 동일한 보안 이점을 누릴 수 있습니다. 이 방법은 자격 증명을 선택하기 위한 사용자 상호작용이 필요 없습니다.
스마트폰 환경(안드로이드)에서 공인인증서와 전자서명생성정보 를 안전하게 저장하는 방법
안드로이드 운영체제에서는 전자서명생성정보를 저장하기 위해 TEE 또는 키스토어(Keystore)를 활용하는 것을 권고한다.
공인인증서의 쌍이 되는 전자서명생성정보를 키스토어(또는 TEE)에 직접 저장하거나, 인증서/전자서명생성정보 파일을 키스토어(또는 TEE)에 저장된 비밀키로 암호화해서 앱 내 저장소에 저장하는 것이 바람직하다.
참고
https://www.kisa.or.kr/jsp/common/downloadAction.jsp?bno=8&dno=1484&fseq=1
https://developer.android.com/training/articles/keystore?hl=ko
https://www.lesstif.com/java/java-keytool-keystore-20775436.html
https://medium.com/hexlant/android-keystore-%EB%B3%B4%EC%95%88-fe8e0c5de359
'Computer Science > 인증, 서명, 본인확인, FIDO' 카테고리의 다른 글
인증서 관리 규격 - 발급/갱신/폐지 (0) | 2022.01.24 |
---|---|
인증서(Certificate) 규격 (0) | 2022.01.24 |