1. CMS 개요 : 보안 메시지 포맷의 이해
CMS(Cryptographic Message Syntax)는 디지털 환경이나 암호화를 통해 데이터를 안전하게 보호하는 데 사용하는 표준 형식이다. 예를 들어 파일이나 이메일을 주고받을 때, 누군가 내용을 몰래 바꾸거나 훔쳐보지 못하도록 감싸는 역할을 한다. CMS는 다양한 방식으로 정보를 보호할 수 있어서 상황에 따라 적절한 형태를 선택하여 사용할 수 있다. 이러한 CMS 기술 덕분에 우리는 디지털 환경에서 메일을 보내거나 중요한 문서를 공유할 때 보다 안심할 수 있다. 쉽게 말해, CMS는 데이터를 안전하게 포장하고 보호해 주는 '보안 포맷'이라고 할 수 있다.
2. CMS의 이해를 돕기 위한 비유
CMS에 대한 이해를 돕기 위해 딱딱한 정의보다는 비유를 들고자 한다. 닝닝이가 윈터에게 편지를 보내고 싶다고 가정하자. 다만, 편지를 그냥 보내면 다른 사람이 내용을 엿볼 수 있으니, 닝닝이는 자물쇠가 달린 상자를 사용한다.
- ✉️ 닝닝이는 편지를 작성한다.
- ✍🏻 닝닝이는 작성한 편지와 자신의 서명을 상자에 넣는다.
- 🔐 닝닝이는 윈터의 공개 키로 상자를 잠가 윈터에게 보낸다.
- 🔑 상자를 받은 윈터는 자신의 개인 키로 잠금을 해제한다.
- 📦 윈터는 상자 안의 서명을 확인하여 닝닝이가 보낸 것임을 증명한다.
- 📝 윈터는 닝닝이의 편지를 열람한다.
이 예시에서 상자가 바로 CMS이다. CMS는 메시지를 안전하게 담을 수 있고, 누가 보냈는지 확인할 수 있게 하며(디지털 서명), 다른 사람이 볼 수 없도록 보호할 수 있다.(암호화)
요약하자면, CMS는 보안 메시지를 안전하게 포장하고 해석하는 규칙이자 형식이다. 필요한 보안 기능에 따라 CMS 상자에 어떤 데이터를 포함하고 해석하는지는 달라지지만 큰 틀에서 보는 CMS는 디지털 환경에서 신뢰할 수 있는 메시지 전달을 가능하게 한다.
3. CMS의 주요 타입 소개
CMS에는 다양한 보안 기능을 제공하며, 각 기능은 다른 구조를 가진다. 즉, 상자의 종류에 따라 담기는 내용과 기능이 달라진다. 주요 CMS 타입은 다음과 같다.
- SignedData
- EnvelopedData
- SignedAndEnvelopedData
- DigestedData
- EncryptedData
- AuthenticatedData
각각의 종류에 따라 담기는 데이터와 그 데이터를 해석하고 검증하는 방식은 각기 다르지만 해당 글에서는 앞서 든 비유를 기반으로 각 구조의 차이점을 살펴보는 것을 기준으로 설명한다.
3-1. SignedData
닝닝이는 📦 SignedData에 다음의 데이터를 포함시킨다.
- ✉️ 편지
- ✍🏻 디지털 서명
- 💿 검증에 필요한 부가 정보
윈터는 📦 상자를 전달받아 내용을 열람한 후 서명 검증을 통해 메시지가 위변조 되지 않았고 윈터가 보낸 것임을 확인할 수 있다. 하지만 암호화가 적용되지 않았기 때문에 메시지의 내용은 전송 중 제삼자에게 노출될 수 있다. 즉, 서명만 있고 암호화는 없는 구조이다.
SignedData의 구조와 검증 예시는 링크를 참조한다.
3-2. EnvelopedData
닝닝이는 📦 EnvelopedData에 다음의 데이터를 포함시킨다.
- ✉️ 암호화된 편지
- 🔐 암호화된 (수신저 전용) 열쇠 정보
- 💿 필요한 부가 정보
윈터는 📦 상자를 전달받아 자신의 개인 키로 열쇠를 복호화한 뒤 편지를 볼 수 있다. 이 구조는 전송 중 편지 내용이 노출되지 않도록 보호하는데 중점이 있다. 즉, 내용 보호를 위해 암호화하지만 서명은 없는 구조이다.
EnvelopedData의 구조와 검증 예시는 링크를 참조한다.
3-3. SignedAndEnvelopedData
닝닝이는 📦 SignedAndEnvelopedData에 다음의 데이터를 포함시킨다.
- ✉️ 암호화된 편지
- 🔐 암호화된 열쇠 정보
- ✍🏻 디지털 서명
- 💿 검증에 필요한 부가 정보
윈터는 📦 상자를 전달받아 자신의 개인 키로 열쇠를 복호화한 뒤 편지를 열고, 서명을 검증함으로써 내용의 위변조 여부와 발신자 확인까지 모두 가능하다. 즉, SignedData와 EnvelopedData가 결합된 조합이다.
※ 주의
SignedAndEnvelopedData의 경우 현재 사용되지 않으며, 최신 표준에서는 아예 구조 자체가 제외되었다. 따라서 암호화와 서명을 통한 무결성 및 서명자 인증이 모두 필요한 경우 SignedData를 우선 생성 후 이를 EnvelopedData로 감싸는 방식으로 대체한다.
출처 : #RFC 2315, #RFC 5652
3-4. DigestedData
닝닝이는 📦 DigestedData에 다음의 데이터를 포함시킨다.
- ✉️ 편지
- ⭐️ 편지의 요약본 (=해시값)
- 💿 검증에 필요한 부가 정보
윈터는 📦 상자를 전달받아 편지를 열람하고, 스스로 생성한 해시값과 상자에 담긴 해시값을 비교하여 무결성을 확인할 수 있다. 하지만 서명이 없기 때문에 발신자가 누구인지 확인할 수 없고 암호화가 적용되지 않아 내용이 외부에 노출될 수도 있다. 즉, 이 구조는 무결성만 확인 가능한 가벼운 구조이다.
DigestedData의 검증 예시는 링크를 참조한다.
3-5. EncryptedData
닝닝이는 📦 EncryptedData에 다음의 데이터를 포함시킨다.
- ✉️ 암호화된 편지
윈터는 닝닝이와 사전에 공유한 대칭 키를 이용해 암호화된 편지 내용을 복호화한다. 이 구조는 한 명의 수신자에게만 보낼 때 적합하다. 즉, 단순한 암호화 구조이나 수신자와 키를 사전에 공유해야 한다.
3-6. AuthenticatedData
닝닝이는 📦 AuthenticatedData에 다음의 데이터를 포함시킨다.
- ✉️ 편지
- ❗️인증 코드(MAC, Message Authentication Code)
- 💿 검증에 필요한 부가 정보
윈터는 📦 상자를 전달받아 편지를 열람하고, MAC 값을 확인함으로써 무결성을 검증할 수 있다. 하지만 서명이 없기 때문에 누가 보냈는지는 확인할 수 없다. 즉, 이 구조는 MAC을 통한 빠른 무결성 검증이 필요할 때 사용된다.
4. 마무리
이번 글을 정리하면 다음과 같다.
- CMS는 디지털 메시지의 보안과 신뢰성을 위한 표준 포맷이다.
- CMS는 암호화를 통해 메시지의 비밀성을 보장하고, 서명을 통해 발신자 확인 및 위변조 검증이 가능하다.
- 필요한 보안 기능에 따라 다양한 CMS의 종류 중 하나를 선택해 사용할 수 있다.
- CMS는 이메일 보안, 전자 서명, 인증서 기반 통신 등 다양한 분야에서 핵심 역할을 한다.
'보안 > 전자 서명' 카테고리의 다른 글
전자 서명이란? 원리, 과정, 기반 기술까지 이해하기 (0) | 2025.03.23 |
---|