전공영역 공부 기록

KMS 봉투암호화 쉽게 이해하기 - data key와 root key의 관계(실습, AWS KMS)

악분 2026. 3. 2. 09:26
반응형

 

이 글은 KMS에서 어떻게 암호화 키를 관리하는지 설명합니다.

 

요약

  • KMS(Key Management Service)는 암호화 키를 안전하게 생성, 저장, 관리하는 시스템이다
  • AWS KMS 콘솔에 보이는 ARN과 key material ID는 암호화키가 아니다
  • KMS의 핵심 원리는 HSM(하드웨어 보안 모듈)과 봉투암호화이다
  • 봉투암호화는 data key를 root key로 한번 더 암호화하여 키를 보호하는 방식이다

 

 

KMS란

KMS(Key Management Service)는 암호화 키를 안전하게 생성, 저장, 관리하는 시스템입니다. AWS에서도 KMS를 제공하고, AWS 이외에 대표적인 KMS 오픈소스는 Hashicorp의 Vault입니다.

 

KMS가 별도로 필요한 이유는 암호화 키를 소스코드에 보관하면 보안사고가 발생하기 때문입니다. 그렇다고 암호화 키를 암호화해서 소스코드에 보관한다면, 그 암호화키를 또 별도로 보관하는 프로세스가 필요합니다. KMS는 이런 암호화키 관리의 불편한 점을 해결하기 위해 탄생했습니다.

 

또한, KMS는 암호화 키를 안전하게 관리할 뿐만 아니라 암호화/복호화 기능도 같이 제공합니다.

 

헷갈리는 점: AWS KMS ARN은 암호화키가 아니다

AWS KMS 콘솔에 가면 KMS ARN과 key material ID가 보입니다. 처음에 헷갈리는 점이 이 두 개의 값이 암호화에 사용되는 값이 아니라는 점입니다.

 

ARN은 AWS가 인식하는 AWS 리소스 ID입니다. 따라서 데이터 암호화와 관련이 없습니다.

 

데이터 암호화는 key material이 관여합니다. key material이 여러 개 있을 때 구분하기 위해 ID화 한 게 key material ID입니다. 따라서 KMS ARN과 key material ID는 유출되어도 상관이 없지만, IAM access key와 같이 유출된다면 위험합니다.

 

KMS 원리: HSM

AWS KMS처럼 키를 관리하는 KMS의 핵심 원리는 HSM(Hardware Security Modules, 하드웨어 보안 모듈)과 봉투암호화에 있습니다.

 

HSM은 하드웨어 보안 모듈로 KMS의 핵심 기능입니다. HSM은 보안 인증을 받아야 하며, AWS KMS는 FIPS 140-3 보안인증을 받았습니다.

출처: https://docs.aws.amazon.com/kms/latest/cryptographic-details/intro.html

 

HSM은 암호화 키 생성, 암호화, 복호화 연산 등 암호의 모든 작업을 수행합니다.

 

AWS KMS는 IAM policy로 KMS 리소스에 접근 가능한지 확인하고, 암호화/복호화 연산 권한을 검사합니다. 권한 검사가 끝난 후 사용자가 요청한 작업을 수행합니다.

출처: https://docs.aws.amazon.com/kms/latest/cryptographic-details/intro.html

 

 

암호화/복호화 원리: 봉투암호화

KMS에서 핵심 기능 중 하나는 어떻게 암호화키를 보관할 것인가입니다. AWS KMS는 봉투암호화를 사용하여 키를 관리합니다.

 

봉투암호화는 두 가지 키워드로 나눌 수 있습니다.
1. data key: 데이터 암호화에 사용되는 키
2. root key(또는 wrapper key): data key를 암호화하는 키

 

정리하면, data key로 데이터를 암호화하고, 그 data key를 root key로 한번 더 암호화하는 방식이 봉투암호화입니다. 마치 편지를 봉투에 넣는 것처럼 키를 한번 더 감싸는 것입니다.

출처: https://docs.aws.amazon.com/kms/latest/developerguide/overview.html

 

KMS에서 관리하는 키는 외부에 공개되지 않는다

AWS KMS에서 관리되는 root key, data key는 절대 복호화된 상태로 외부에 제공되지 않습니다. 따라서 사용자는 root key, data key의 원본을 볼 수 없습니다. 그저 사용자는 KMS API를 사용해서 암호화/복호화를 요청할 뿐입니다.

 

반대로 AWS KMS에서 관리하지 않는 key는 외부에 공개될 수 있습니다. AWS KMS는 AWS KMS가 아니라 사용자가 직접 데이터 암호화/복호화할 수 있는 기능을 제공하는데, 이 방법을 사용하면 키들은 사용자가 직접 잘 관리해야 합니다.

 

AWS KMS 암호화/복호화 실습

 

portfolio/computer_science/kms/examples/aws-cli.md at master · choisungwook/portfolio

portfolio. Contribute to choisungwook/portfolio development by creating an account on GitHub.

github.com

 

부록A: AWS KMS를 오프라인에서 실행하는 방법(generate-data-key API)

대용량 데이터를 암호화/복호화할 때는 네트워크 제약이 있을 수 있습니다. 이런 상황을 위해 AWS KMS는 generate-data-key API를 제공합니다.

 

generate-data-key API를 사용하면, 사용자는 평문 data key와 암호화된 data key를 얻을 수 있습니다. 이 key를 사용해서 오프라인으로 암호화/복호화를 수행할 수 있습니다. 암호화/복호화는 AWS Encryption SDK를 사용해도 되고, 다른 암호화 알고리즘을 사용해도 됩니다.

출처: https://docs.aws.amazon.com/kms/latest/developerguide/overview.html

 

generate-data-key를 사용한 순간 key 관리에 대한 책임은 사용자에게 있으니 주의가 필요합니다.

 

실습 자료는 저의 github에 있습니다.
- 실습 github: https://github.com/choisungwook/portfolio/blob/master/computer_science/kms/examples/aws-cli.md

 

portfolio/computer_science/kms/examples/aws-cli.md at master · choisungwook/portfolio

portfolio. Contribute to choisungwook/portfolio development by creating an account on GitHub.

github.com

 

 

부록B: 봉투암호화 시연 웹 페이지

봉투암호화를 간단히 시연할 수 있는 웹 페이지를 만들었습니다. claude code와 codex가 만들었고, astro 프레임워크를 사용했습니다.

 

참고자료

반응형