MAC(메시지 인증 코드)이란?
MAC(Message Authentication Code, 메시지 인증 코드)은 흔히 '태그(tag)'라고도 부르는 인증 정보입니다. 메시지의 출처와 특성을 인증하는 데 활용되며, 네트워크를 통해 전송되거나 사람 간에 전달되는 정보의 적법성을 확인하기 위해서는 반드시 인증 암호화가 뒷받침되어야 합니다.
MAC은 메시지에 키가 결합된 안전한 해시 함수(keyed secure hash function)를 적용해 생성합니다. 이를 통해 메시지 무결성을 보장할 수 있습니다. 즉, MAC으로 보호된 메시지가 중간에 변조되더라도 메시지에 포함된 MAC 값과 수신 측에서 재계산한 MAC 값을 비교하면 변조 여부를 바로 식별할 수 있습니다.
메시지 인증 코드는 실무에서도 매우 널리 쓰입니다. 은행, 증권사, 신탁 기관은 물론 온라인 서비스를 제공하는 예금·투자·보험 회사들이 계좌 개설 및 거래 과정에서 이 코드를 활용하며, 금융 암호학(financial cryptography)의 핵심 구성 요소로 자리 잡고 있습니다.
MAC은 '키드 해시(keyed hash)'라고도 불립니다. 다만 모든 MAC이 해시 함수에서 만들어지는 것은 아닙니다. HMAC과 KMAC은 기본 해시 함수를 기반으로 하는 키드 해시인 반면, AES-CMAC은 이름에서 알 수 있듯이 AES 블록 암호에 의존하는 방식입니다.
메시지 인증 코드 역시 단방향(one-way)이라는 점에서 해시와 유사하지만, MAC 값을 생성하려면 비밀 키와 메시지 두 가지를 모두 알아야 합니다. 덕분에 서명에서 단방향 해시가 수행하는 역할과 마찬가지로 메시지 무결성과 진위성(authenticity)을 동시에 지원할 수 있습니다.
한 가지 주의할 점은, 상대방이 MAC을 검증하려면 송신자와 동일한 대칭 키(symmetric key)를 반드시 공유해야 한다는 것입니다. 이는 곧 검증자 스스로도 인증 태그를 만들어낼 수 있다는 의미이므로, 검증에 참여하는 당사자들 사이에는 어느 정도의 상호 신뢰 관계가 전제되어야 합니다.
해시(Hash) 함수란?
단방향 해시 함수는 계산을 아무리 수행해도 입력 메시지에 대한 어떠한 정보도 되찾을 수 없는 함수를 말합니다. 이런 단방향 해시 함수는 통상 '암호학적으로 안전한 해시 함수'로 분류되며, 대표적인 예로 SHA-256, SHA-512 등 SHA-2 계열 파생 함수와 이후 도입된 SHA-3 해시군을 들 수 있습니다.
MD5와 SHA-1 역시 단방향 해시 함수에 속하지만, 해시 충돌(hash collision)을 인위적으로 만들어낼 수 있음이 밝혀지면서 더 이상 안전한 알고리즘으로 간주되지 않습니다. 해시 함수는 메시지의 무결성과 진위성을 확인하는 데 유용하지만, 그 전제는 해시 값 자체를 신뢰할 수 있어야 한다는 점입니다.
왜냐하면 공격자는 서로 다른 메시지에 대해 해시를 새로 계산해 원래 해시 값을 대체할 가능성이 있기 때문입니다. 이러한 신뢰 문제는 개인 키를 이용한 연산, 즉 디지털 서명(signature)으로 보완할 수 있습니다. 또 다른 방법으로는 신뢰할 수 있는 사이트에 원본 해시를 저장해 두고, 미러 사이트에 배포된 파일의 무결성을 해당 해시와 대조하여 검증하는 방식이 있습니다.
MAC과 해시 함수의 핵심 차이
- 키 사용 여부: 해시 함수는 키 없이 누구나 계산할 수 있지만, MAC은 비밀 키가 반드시 필요합니다.
- 검증 방식: 해시 값은 별도의 신뢰 경로(서명, 신뢰 사이트 등)가 필요하고, MAC은 같은 키를 공유한 당사자만 검증할 수 있습니다.
- 보장 범위: 해시는 주로 무결성 확인에 쓰이며, MAC은 무결성과 출처 인증(진위성)을 함께 제공합니다.