소개
서비스를 배포하고 운영하는 과정에서 sensitive 한 데이터를 보관하고자 할 경우에는 암호화하여 저장하는 것이 무엇보다 보안적으로 중요합니다.
AWS 를 통하여 서비스 및 인프라를 운영하고 있다면 다들 봉투 암호화를 들어보셨을 텐데요.
AWS 에서는 데이터를 암호화를 하고자 할때는 KMS 를 이용한 봉투 암호화 사용을 권장하고 있습니다.
그렇다면 이 봉투 암호화가 어떤 이점이 있고, 암호화 과정이 세부적으로 어떻게 이루어 지는지를 한번 정리해보려 합니다.
KMS 봉투 암호화의 이점
KMS 봉투암호화는 Data Key 와 Master Key 두가지 키를 이용하여 암호화하게 되는데요. 데이터를 직접 암호화하는 Data Key 와, Data Key 자체를 암호화하는 Master Key 를 이용합니다. 이러한 방식을 통해,
- 데이터 암호화시 사용되는 Data Key 를 별도 저장할 필요가 없으며,
- Key Rotate 가 더욱 용이한 이점을 가지게 됩니다.
봉투 암호화 기본 보안 강화 원리
- 데이터는 Data Key 로 암호화되고,
- Data Key 는 KMS의 Master Key 로 암호화됩니다.
- Master Key 는 KMS 안에서 안전하게 보관되어 지고, 사용자가 직접 액세스할 수 없어 보안 강화 유지가 가능해 집니다.
- 키 회전도 가능
- Data Key 변화 없이, KMS 에서 회전된 Master Key 로 Data Key 를 재암호활 수 있어 키회전이 가능합니다.
KMS 암호화 과정
흔히 암호화 과정은 어플리케이션 내에서 SDK 를 이용하여 암호화 후, 데이터베이스에 저장하거나 다른 storage 에 저장을 하게 됩니다. 아니면 AWS CLI 를 이용하여 별도로 plain text 를 암호화 하여 storage 에 저장할 수 도 있겠지요.
아래는 이러한 AWS CLI 또는 SDK 를 이용한 애플리케이션 내부에서 봉투 암호화가 어떤 순서로 이루어지는지를 나타냅니다.
핵심은 데이터를 암/복호화할때 사용하는 Data Key 를 나중에 복호화를 위해 별도 보관하지 않아도 되는 것입니다.
- 암호화 과정은 먼저 SDK 에서 KMS 로 Data-Key 생성을 요청합니다.
- KMS 에서는 가지고 있는 KMS-Key(Master Key) 로 Data-Key 를 암호화하여 Data-Key + KMS-Key 로 암호화된 Data-Key 두가지를 응답해 줍니다.
- SDK 에서는 받은 Data-Key 로 평문을 암호화하여 암화문을 만들고, KMS-Key 로 암호화된 Data-Key 를 함께 묶어 최종 봉투암호문을 만들게 됩니다.
KMS 복호화 과정
이번에는 복호화 과정이 어떤 순서로 이루어지는지를 보면 아래와 같습니다.
- 암호화된 데이터인 봉투암호문에는 암호문 + 암호화된 Data-Key 를 포함합니다.
- 복호화시 SDK 에서는 봉투암호문에서 암호문, 암호화된 Data-Key를 각각 추출합니다.
- 여기서 Data-Key 를 추출하기 위해서 암호화된 Data-Key 를 이용하게 됩니다.
- Data-Key 를 추출하기 위해 암호화된 Data-Key 를 KMS 전달하고,
- KMS 에서는 안전히 가지고 있는 KMS-Key(Master Key) 로 암호화된 Data-Key 를 복호화하여 Data-Key 를 추출하게 됩니다.
- 추출된 Data-Key 로 암호문에서 평문을 최종적을 추출하게 됩니다.
마치며
봉투암호화 방식은 다양한 보안적 키관리 로직에 사용이 되고 있습니다. 암/복호화 방식을 정확히 이해한다면 다른 서비스에서의 안전한 키관리에서도 이용 가능할 듯합니다.
Refs
AWS Document – 봉투 암호화
- https://docs.aws.amazon.com/ko_kr/encryption-sdk/latest/developer-guide/concepts.html