Message Authentication Code
Message Authentication Code는 메시지의 무결성(integrity)과 출처 인증(authentication)을 동시에 보장하기 위한 암호학적 도구로, 메시지와 비밀키를 입력으로 받아 고정된 길이의 값을 생성하며, 이 값은 메시지에 대한 일종의 디지털 지문 역할을 한다.
예를 들어, Alice가 Bob에게 메시지를 보낼 때를 생각해보자.
Alice는 메시지와 함께 MAC 값을 전송하고, Bob은 수신한 메시지로부터 동일한 비밀키를 사용하여 MAC 값을 계산한다. 두 MAC 값이 일치한다면, Bob은 메시지가 변조되지 않았으며 실제로 Alice가 보낸 것임을 확신할 수 있다.
MAC의 동작 원리와 프로세스
MAC의 동작은 다음과 같은 세 가지 주요 알고리즘으로 구성된다:
키 생성 (Key Generation):
- 충분한 엔트로피를 가진 암호학적으로 안전한 난수 생성기를 사용
- 생성된 키는 송신자와 수신자가 안전하게 공유
MAC 생성 (Tag Generation):
- 입력: 메시지(M)와 비밀키(K)
- 출력: MAC 태그(T)
- T = MAC(K, M)
MAC 검증 (Tag Verification):
- 입력: 메시지(M), 비밀키(K), 수신된 MAC 태그(T)
- 출력: 검증 결과(유효/무효)
- 수신된 태그와 계산된 태그를 비교
MAC의 주요 종류와 구현 방식
HMAC (Hash-based MAC):
가장 널리 사용되는 MAC 구현 방식으로, 암호학적 해시 함수를 기반으로 한다.1
HMAC(K, M) = H((K' ⊕ opad) || H((K' ⊕ ipad) || M))
여기서:
- H는 해시 함수 (예: SHA-256)
- K’은 해시 함수의 블록 크기에 맞게 조정된 키
- opad와 ipad는 서로 다른 상수 값
- ||는 연접(concatenation) 연산
CMAC (Cipher-based MAC):
블록 암호를 기반으로 하는 MAC. 주로 AES와 같은 블록 암호를 사용한다.PMAC (Parallelizable MAC):
병렬 처리가 가능한 MAC으로, 대용량 메시지 처리에 효율적이다.
MAC의 보안 특성과 요구사항
불변성(Unforgeability):
비밀키를 모르는 공격자는 유효한 MAC 태그를 생성할 수 없어야 한다.충돌 저항성(Collision Resistance):
서로 다른 메시지에 대해 동일한 MAC 값이 생성될 확률이 무시할 만큼 작아야 한다.강한 키 의존성:
키가 조금만 바뀌어도 완전히 다른 MAC 값이 생성되어야 한다.
실제 응용 분야와 사례
통신 보안:
- TLS/SSL 프로토콜에서의 메시지 무결성 검증
- 네트워크 패킷의 인증
- VPN 통신의 보안
금융 거래:
- 전자 금융 거래의 무결성 보장
- 신용카드 거래 인증
- 디지털 서명 시스템의 보조 수단
데이터 저장:
- 저장된 데이터의 무결성 검증
- 백업 데이터의 유효성 확인
- 소프트웨어 패키지의 인증
MAC과 다른 보안 메커니즘의 비교
- MAC vs 디지털 서명:
- MAC: 대칭키 사용, 빠른 처리 속도, 송수신자 간 키 공유 필요
- 디지털 서명: 공개키 사용, 느린 처리 속도, 부인 방지 기능 제공
- MAC vs 해시 함수:
- MAC: 키를 사용하여 인증 제공
- 해시 함수: 키를 사용하지 않음, 무결성만 제공
구현 시 고려사항과 모범 사례
키 관리:
- 안전한 키 생성과 분배
- 정기적인 키 교체
- 안전한 키 저장
구현 보안:
- 타이밍 공격 방지
- 적절한 난수 생성기 사용
- 상수 시간 비교 연산 사용
성능 최적화:
- 적절한 MAC 알고리즘 선택
- 캐싱 전략 수립
- 병렬 처리 활용 검토