메시지 키 (Message Key)
메시지 키(Message Key)는 메시지와 함께 전송되어 메시지 해독에 사용되는 키입니다. 일반적으로 메시지 키는 하나의 메시지를 위해 새로 만드는 큰 무작위 값으로, 그 메시지의 데이터를 암호화하는 대칭 키가 됩니다. 메시지 키 자체는 사용자 키로 암호화된 상태로 메시지에 붙여 보냅니다. 문맥에 따라 데이터 암호화 키(DEK), 세션 키라고도 부릅니다.
하이브리드 암호에서의 역할
공개 키 암호는 긴 데이터를 직접 암호화하기에는 느리고, 대칭 키 암호는 빠르지만 키를 안전하게 전달하기 어렵습니다. 메시지 키는 두 방식을 결합하는 하이브리드 암호의 핵심입니다.
- 송신자는 메시지마다 무작위 메시지 키를 생성합니다.
- 메시지 본문은 이 키로 AES 같은 대칭 키 알고리즘을 써서 암호화합니다.
- 메시지 키는 수신자의 공개 키나 미리 공유된 사용자 키(키 암호화 키, KEK)로 암호화합니다.
- 암호화된 본문과 암호화된 메시지 키를 함께 보냅니다.
- 수신자는 자신의 개인 키나 사용자 키로 메시지 키를 먼저 복호화한 다음, 그 메시지 키로 본문을 복호화합니다.
OpenPGP 이메일 암호화의 세션 키가 대표적인 예입니다. 클라우드 서비스에서는 같은 구조를 봉투 암호화(envelope encryption)라고 부르며, 데이터는 DEK로 암호화하고 DEK는 키 관리 서비스(KMS)가 보관하는 마스터 키로 암호화합니다. 최근 표준에서는 공개 키로 메시지 키를 직접 암호화하는 대신, 키 캡슐화 메커니즘(KEM)으로 송신자와 수신자가 공유 비밀을 만들고 그로부터 메시지 키를 유도하기도 합니다.
논스와의 차이
메시지 키는 비밀로 유지해야 하는 키이고, 논스(nonce)나 초기화 벡터(IV)는 같은 키로 여러 번 암호화할 때 결과가 겹치지 않도록 넣는 값으로 보통 공개됩니다. 두 값은 역할이 다르므로 혼동하지 않아야 합니다.
이점
- 피해 범위 제한: 메시지마다 키가 다르므로 하나의 메시지 키가 유출되어도 피해가 해당 메시지로 한정됩니다. 다만 사용자 키가 유출되면 그 키로 보호된 메시지 키가 모두 위험해집니다.
- 효율성: 느린 공개 키 연산은 짧은 메시지 키에만 쓰고, 긴 본문은 빠른 대칭 키 암호로 처리합니다.
- 여러 수신자: 본문은 한 번만 암호화하고, 같은 메시지 키를 수신자별 키로 각각 암호화해 붙이면 여러 사람에게 보낼 수 있습니다.
주의할 점
- 난수 품질: 메시지 키를 예측 가능한 난수로 만들면 암호화 전체가 무력해집니다. 암호학적으로 안전한 난수 생성기를 써야 합니다.
- 사용자 키 보호: 시스템의 안전성은 결국 메시지 키를 감싸는 사용자 키나 개인 키를 얼마나 안전하게 보관하느냐에 달려 있습니다.
- 오버헤드: 메시지마다 암호화된 키가 붙으므로 전송 데이터가 조금 늘어납니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.