메시지 인증 코드 (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자는 태그를 검증할 수 없습니다. 소프트웨어 업데이트처럼 누구나 출처를 확인해야 하는 경우에는 디지털 서명을 씁니다.
  • 확장성 부족: 여러 사용자가 관여하는 경우 각 쌍에 고유한 키가 필요하며, 이는 대규모 네트워크에서 번거로워질 수 있습니다.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.