어제 KMS key는 HSM 밖으로 나오지 않는다고 했다. 그런데 1GB짜리 파일을 암호화하려면 어떻게 할까? 1GB를 KMS API로 보내 암호화받을 수는 없다 — KMS의 Encrypt API는 최대 4KB까지만 받는다. 이 모순을 해결하는 것이 **봉투 암호화(envelope encryption)**다. 핵심 발상은 "데이터는 로컬에서 빠른 대칭 키로 암호화하고, 그 데이터 키만 KMS로 암호화한다"는 것이다. KMS는 작은 키 하나만 보호하면 되고, 큰 데이터 암호화는 로컬 CPU가 처리한다.
봉투 암호화는 SCS-C03에서 반드시 손에 익혀야 하는 개념이다. S3 SSE-KMS, EBS, RDS 암호화가 전부 내부적으로 이 메커니즘을 쓰며, 시험은 "데이터 키가 어디에 어떤 형태로 저장되는가", "복호화 흐름은 어떤 순서인가"를 집요하게 묻는다.
KMS의 Encrypt API가 4,096바이트에서 멈추는 것은 임의의 숫자가 아니라 서비스 설계의 결과다. KMS는 모든 암호 연산을 HSM 안에서 수행하고, 그 HSM 플릿은 전 세계 수많은 계정이 공유한다. 만약 임의 크기의 데이터를 받는다면 네트워크로 평문을 왕복시켜야 하고, HSM은 데이터 크기에 비례해 시간을 쓰며, 리전 전체의 처리량이 한 고객의 큰 파일에 묶인다. 그래서 KMS는 "큰 데이터는 아예 받지 않는다"는 경계를 그었다.
이 제약이 오히려 더 나은 아키텍처를 강제한다