MQTT 메시지 암호화: 전송층 vs 애플리케이션층 비교
MQTT 메시지 암호화 방법으로 전송층(TLS)과 애플리케이션층(payload) 암호화의 차이, 장단점, 구현 포인트와 보안 권장사항을 정리한 기술자료
목차
개요
사물인터넷 환경에서 경량 프로토콜인 MQTT는 널리 사용된다. 이때 메시지 보안을 어떻게 확보할지 결정하는 일은 매우 중요하다. 본문에서는 mqtt 메시지 암호화 방법을 중심으로 전송층 보안과 애플리케이션층 암호화의 차이점을 쉽게 설명한다. 초보자도 이해할 수 있도록 개념, 장단점, 구현 예시와 고려사항을 함께 정리한다.
기본 개념 정리
전송층 보안(TLS)
TLS는 통신 채널 전체를 암호화한다. 클라이언트와 브로커 간의 연결이 암호화되어 중간에서의 도청과 변조를 방지한다. 연결 성립 시 인증서 기반의 인증을 사용해 상대를 확인할 수 있다.
애플리케이션층 암호화
애플리케이션층 암호화는 MQTT 페이로드 자체를 암호화한다. 메시지 내용은 발신자가 암호화하고 수신자가 복호화한다. 브로커는 암호화된 페이로드를 중개만 하며 내용을 알 수 없다.
비교: 장단점
TLS의 장점
- 설정이 단순하고 표준화되어 있음.
- 전송 중 도청 및 변조 방지 제공.
- 서버 인증으로 중간자 공격(MITM) 방지 가능.
- 대부분 MQTT 라이브러리에서 기본 지원.
TLS의 한계
- 브로커는 평문을 볼 수 있으므로 내부 위협에는 취약.
- 연결 오버헤드와 인증서 관리 부담 존재.
애플리케이션층 암호화의 장점
- 종단간 비밀성 제공: 브로커가 메시지를 볼 수 없음.
- 다중 경로 전송에서 페이로드 보호 가능.
- 메시지 단위로 세부 제어가 가능.
애플리케이션층 암호화의 한계
- 키 관리가 복잡하고 오류 가능성이 높음.
- 브로커 기반의 라우팅 규칙이나 필터링 적용이 어려움.
- 추가 연산으로 단말 성능에 영향.
실무 관점의 고려사항
어떤 방식을 선택할지 결정할 때는 위협 모델과 운영 환경을 우선 고려해야 한다. 중앙 관리형 브로커를 신뢰하고 내부망 보안이 확보되어 있다면 TLS만으로 충분한 경우가 많다. 반대로 브로커가 제3자에 의해 관리되거나 다수의 테넌트가 존재한다면 application layer mqtt 암호화 도입을 검토해야 한다.
성능과 배터리
경량 디바이스는 연산과 전송 비용에 민감하다. TLS 연결 수립 비용은 세션 재사용과 세션 티켓으로 완화할 수 있다. 반면 payload encryption은 각 메시지 암복호화 비용이 지속적으로 발생한다.
운영·디버깅
TLS만 사용하면 브로커에서 메시지 내용을 확인해 문제를 진단할 수 있다. 애플리케이션층 암호화는 진단을 어렵게 만든다. 따라서 암호화된 로그, 복호화 권한, 키 회전 정책을 함께 설계해야 한다.
구현 예시
TLS 설정 요약
- 브로커와 클라이언트 모두에서 TLS 인증서 설치
- 최소 TLS 버전(TLS 1.2 이상) 강제 적용
- 클라이언트 인증이 필요한 환경에서는 상호 인증(mTLS) 사용
페이로드 암호화 예시 (AES-GCM, Python 스타일 의사코드)
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 키는 안전한 KMS에서 관리
key = get_key_from_kms()
nonce = get_random_bytes(12)
cipher = AES.new(key, AES.MODE_GCM, nonce=nonce)
plaintext = b"sensor=23.4"
ciphertext, tag = cipher.encrypt_and_digest(plaintext)
# 전송: nonce | tag | ciphertext
message = nonce + tag + ciphertext
수신측에서는 nonce와 tag를 분리해 복호화 검증을 수행한다. 위 구조는 mqtt tls vs payload encryption 관점에서 두 방법을 결합한 예로, TLS로 전송 보안을 유지하면서 페이로드를 끝단 암호화하는 패턴이다.
권장 아키텍처
대부분의 실무 환경에서는 TLS를 기본으로 적용하고, 민감 데이터에 대해서만 애플리케이션층 암호화를 추가하는 혼합형 접근을 권장한다. 이렇게 하면 전송 보안과 종단간 비밀성 두 가지를 확보할 수 있다. 또한 키 관리는 중앙 KMS와 연동하고, 키 회전·접근 제어·감사 로그를 반드시 도입해야 한다.
결론
mqtt 메시지 암호화 방법 선택은 단일 정답이 없다. 요구 보안 수준, 운영 복잡도, 성능 제약을 고려해 TLS만으로 충분한지 또는 애플리케이션층 암호화를 병행할지를 결정한다. 대부분의 경우 TLS를 기본으로 하고 민감 메시지에 대해 payload encryption을 적용하는 것이 현실적이고 안전한 접근법이다.