KMS Module
아키텍처
react-native-aws-kms 내부 동작 원리 및 엔벨로프 암호화 패턴
아키텍처
엔벨로프 암호화 패턴
@boostbrothers/react-native-aws-kms는 AWS KMS의 권장 패턴인 엔벨로프 암호화(Envelope Encryption)를 사용합니다.
엔벨로프 암호화는 두 단계로 이루어집니다.
- 데이터 키 생성: AWS KMS에 요청하여 데이터 암호화 키(DEK, Data Encryption Key)를 생성합니다. KMS는 평문 DEK와 KMS 마스터 키로 암호화된 DEK를 함께 반환합니다.
- 로컬 암호화: 평문 DEK로 실제 데이터를 AES-256-ECB로 암호화합니다. 암호화 후 평문 DEK는 메모리에서 즉시 폐기합니다.
복호화 시:
- 암호화된 DEK를 AWS KMS에 전송하여 복호화합니다.
- 복호화된 평문 DEK로 암호화된 데이터를 복호화합니다.
이 방식의 장점:
- 실제 데이터가 AWS KMS 서버로 전송되지 않음 (네트워크 트래픽 최소화)
- 대용량 데이터도 효율적으로 처리 가능
- 키 관리는 AWS KMS가 담당, 키 보안 강화
암호화 데이터 흐름
복호화 데이터 흐름
레이어 구조
암호화 알고리즘 상세
| 항목 | 값 |
|---|---|
| KMS 키 타입 | Symmetric (AES-256) |
| KMS 키 사용 | ENCRYPT_DECRYPT |
| 로컬 암호화 알고리즘 | AES-256-ECB |
| 출력 인코딩 | Base64 |
ECB 모드 주의사항: AES-256-ECB는 동일한 평문 블록이 동일한 암호문 블록을 생성합니다. 패턴 분석에 취약할 수 있으므로, 보안 요구사항에 따라 CBC 또는 GCM 모드 사용을 고려하세요. 현재 모듈은 ECB 모드를 사용하므로 이 점을 고려하여 데이터를 설계하세요.
보안 고려사항
자격증명 관리
- 장기 자격증명(액세스 키 + 시크릿 키) 사용을 최소화하고 STS 임시 자격증명을 사용합니다.
- 임시 자격증명의 만료 시간(보통 1시간)을 추적하여 갱신합니다.
- 자격증명을 앱 번들이나 소스 코드에 포함하지 않습니다.
KMS 키 관리
- 최소 권한 원칙: KMS 키에
GenerateDataKey,Decrypt만 허용합니다. - KMS 키 교체(Key Rotation) 활성화를 권장합니다 (연간 자동 교체).
- CloudTrail로 모든 KMS API 호출을 모니터링합니다.
데이터 처리
- 복호화된 평문 데이터를 로컬 스토리지에 저장하지 않습니다.
- 메모리에서 사용 후 즉시 참조를 해제합니다.
- 암호화된 데이터만 저장하고 필요 시 복호화합니다.