# 메시지 인증 코드 (Message Authentication Code, MAC)

메시지 인증 코드(Message Authentication Code, MAC)는 메시지 인증을 위해 비밀 키와 메시지로 계산하는 짧은 값, 또는 그 값을 만드는 키가 있는 함수입니다. 태그(tag)라고도 하며, 메시지가 비밀 키를 가진 상대방으로부터 왔고(진위) 변경되지 않았음(무결성)을 확인하는 데 사용됩니다. 가장 흔한 형태는 키 해시 함수(HMAC)이지만, 블록 암호 기반(CMAC)이나 범용 해시 기반(GMAC, Poly1305) 방식도 있습니다. 공개 키를 쓰는 디지털 서명과 달리 MAC은 송신자와 수신자가 공유하는 하나의 비밀 키를 씁니다.

## MAC의 핵심: 키가 있는 함수

- 송신자는 메시지와 비밀 키를 MAC 알고리즘에 넣어 짧은 태그를 계산하고, 메시지에 태그를 붙여 보냅니다.
- 같은 비밀 키를 가진 수신자는 받은 메시지로 태그를 다시 계산해 받은 태그와 비교합니다.
- 두 태그가 일치하면 메시지가 키를 가진 상대에게서 왔고 전송 중에 바뀌지 않았다고 판단합니다. 메시지가 단 1비트만 바뀌어도 태그가 달라지며, 키를 모르는 공격자는 올바른 태그를 만들 수 없습니다.

MAC은 무결성과 진위를 확인할 뿐 내용을 숨기지는 않습니다. 기밀성은 암호화로 따로 확보합니다.

## 대표적인 MAC 방식

- **HMAC:** SHA-256 같은 해시 함수에 비밀 키를 결합하는 방식(RFC 2104)으로, 가장 널리 쓰입니다.
- **CMAC:** AES 같은 블록 암호로 태그를 만드는 방식입니다.
- **GMAC·Poly1305:** 고속 연산에 맞춘 방식으로, 암호화와 인증을 함께 하는 AEAD 방식(AES-GCM, ChaCha20-Poly1305)의 인증 태그로 쓰입니다.

## MAC이 사용되는 주요 영역

- **통신 프로토콜:** TLS, IPsec, SSH는 주고받는 각 레코드·패킷에 MAC(오늘날에는 주로 AEAD 태그)을 붙여 전송 중 변조를 탐지합니다.
- **API 요청 서명:** 많은 웹 서비스와 거래소 API는 이용자에게 발급한 비밀 키로 요청 내용의 HMAC을 계산해 함께 보내게 하고, 서버가 같은 계산으로 요청이 위조·변경되지 않았는지 확인합니다.
- **토큰과 쿠키:** 서버가 발급한 세션 토큰(예: HMAC으로 서명한 JWT)이 변조되지 않았는지 검증합니다.
- **IoT 기기:** 안전하지 않을 수 있는 네트워크로 전송된 메시지를 검증해 기기 간 통신을 보호합니다.

예를 들어 주문자가 중개인과 공유한 비밀 키로 주문 메시지의 MAC을 만들어 함께 보내면, 중개인은 같은 키로 MAC을 다시 계산해 주문이 도중에 바뀌지 않았는지 확인할 수 있습니다. 편지에 찍는 밀랍 봉인이나 변조 방지 봉인과 비슷한 역할입니다. 금융 거래에서는 이렇게 주문, 체결 확인, 시장 데이터 피드 같은 민감한 메시지를 보호하는 데 MAC이 쓰입니다.

## MAC 사용의 장점

- **보안:** 키를 모르는 제3자의 위조와 변조를 탐지해 무결성과 진위를 보장합니다.
- **효율성:** 공개 키 서명에 비해 계산이 훨씬 가벼워 대량의 메시지에 적합합니다.
- **단순성:** 표준 알고리즘이 널리 구현되어 있어 기존 시스템과 통합하기 쉽습니다.

## MAC 사용의 단점

- **키 관리:** 당사자 간에 비밀 키를 안전하게 배포하고 관리해야 합니다.
- **부인 방지 없음:** 양쪽 당사자가 같은 키를 공유하므로 수신자도 같은 태그를 만들 수 있습니다. 따라서 보낸 사람이 나중에 발송 사실을 부인해도 이를 반박할 증거가 되지 못하고, 키가 없는 제3자는 태그를 검증할 수 없습니다. 소프트웨어 업데이트처럼 누구나 출처를 확인해야 하는 경우에는 디지털 서명을 씁니다.
- **확장성 부족:** 여러 사용자가 관여하는 경우 각 쌍에 고유한 키가 필요하며, 이는 대규모 네트워크에서 번거로워질 수 있습니다.

---
출처: https://achivx.kr/glossary/message-authentication-code-%EB%A9%94%EC%8B%9C%EC%A7%80-%EC%9D%B8%EC%A6%9D-%EC%BD%94%EB%93%9C/ · ACHIVX 용어 사전 · 수정일 2026-10-20
