12장. 메시지 인증 코드 (MAC)
학습 목표
- 메시지 인증과 관련된 공격 유형을 나열·설명한다.
- 메시지 인증 코드(MAC)를 정의한다.
- MAC의 요구사항을 나열·설명한다.
- HMAC의 개요를 제시한다.
- CMAC의 개요를 제시한다.
- 인증 암호화(authenticated encryption)의 개념을 설명한다.
- CCM과 GCM의 개요를 제시한다.
- 키 래핑(key wrapping)의 개념과 용도를 설명한다.
- 해시 함수/MAC 기반 의사난수 생성을 이해한다.
12.1 메시지 인증 요구사항
네트워크 통신에서 식별할 수 있는 8가지 공격:
| # | 공격 | 설명 | 대응 범주 |
|---|---|---|---|
| 1 | Disclosure | 비인가자에게 메시지 내용 노출 | 기밀성 |
| 2 | Traffic Analysis | 통신 패턴(빈도·기간·길이) 분석 | 기밀성 |
| 3 | Masquerade | 위조된 출처로 메시지 삽입 | 메시지 인증 |
| 4 | Content Modification | 삽입·삭제·전치·수정 | 메시지 인증 |
| 5 | Sequence Modification | 메시지 순서 변조(삽입·삭제·재정렬) | 메시지 인증 |
| 6 | Timing Modification | 메시지 지연 또는 재전송 | 메시지 인증 |
| 7 | Source Repudiation | 송신자의 송신 부인 | 전자서명 |
| 8 | Destination Repudiation | 수신자의 수신 부인 | 전자서명 + 프로토콜 |
메시지 인증은 수신된 메시지가 주장된 출처에서 왔으며 변조되지 않았음을 검증하는 절차이다. 순서와 적시성도 검증할 수 있다. 전자서명은 인증에 더해 송신자의 부인 방지를 포함한다.
12.2 메시지 인증 함수
인증 메커니즘은 두 수준의 기능을 가진다: (1) **인증자(authenticator)**를 생성하는 하위 함수, (2) 인증자를 사용하여 메시지를 검증하는 상위 프로토콜. 인증자를 생성하는 함수는 세 가지로 분류된다.
메시지 암호화
대칭 암호화 — 공유 비밀키 로 전송: 기밀성 + 인증을 제공한다. 단, 수신자가 복호화 결과가 유효한 평문인지 판별할 수 있어야 한다. 평문이 임의 비트 패턴이면 인증이 불가능하므로, 내부 오류 제어(FCS를 먼저 붙인 뒤 암호화)로 구조를 부여해야 한다.
처럼 FCS를 먼저 계산하고 전체를 암호화(내부 오류 제어)해야 인증이 된다. 처럼 암호문에 FCS를 추가하면(외부), 공격자가 유효한 FCS를 가진 위조 메시지를 생성할 수 있다.
공개키 암호화 — : 기밀성만 제공 (인증 없음). : 인증 + 서명 (기밀성 없음). : 기밀성 + 인증 + 서명 (공개키 연산 4회).
메시지 인증 코드 (MAC)
비밀키 와 메시지 의 함수로 고정 길이 인증자(태그)를 생성한다:
송신자가 을 전송하면, 수신자가 동일한 로 MAC을 재계산하여 비교한다.
MAC이 일치하면 보장되는 것:
- 메시지가 변조되지 않았음 (공격자가 없이 유효한 MAC 생성 불가)
- 메시지가 주장된 송신자로부터 온 것 (다른 누구도 를 모름)
- 시퀀스 번호가 포함되면 적절한 순서가 보장됨
MAC 함수는 비가역적(reversible할 필요 없음)인 다대일 함수이다. 비트 MAC, 개 가능한 메시지()이면, 각 MAC 값은 평균 개의 메시지에 대응한다.
세 가지 사용 형태:
| 형태 | 전송 내용 | 제공 서비스 |
|---|---|---|
| (a) 인증만 | 인증 | |
| (b) 평문 기반 인증 + 기밀성 | 인증 + 기밀성 | |
| (c) 암호문 기반 인증 + 기밀성 | 인증 + 기밀성 |
일반적으로 인증을 평문에 직접 연결하는 (b) 방식이 선호된다.
별도 MAC이 필요한 6가지 이유:
- 브로드캐스트 환경에서 하나의 수신자만 인증 담당
- 부하가 큰 시스템에서 선택적 인증 검사
- 평문 프로그램의 무결성 검증 (매번 복호화 없이)
- SNMPv3처럼 기밀성 없이 인증만 필요한 경우
- 인증과 기밀성의 아키텍처적 분리 (다른 계층에서 수행)
- 수신 후에도 장기적 보호 유지
MAC은 송·수신자가 동일한 키를 공유하므로, 제3자에 대한 증명(부인 방지)을 제공하지 못한다.
12.3 MAC의 요구사항
에 대해, 공격자가 MAC 함수를 알지만 를 모를 때:
- 과 을 관찰해도 인 을 구성하기 불가능
- 이 균등 분포: 랜덤 , 에 대해
- 알려진 변환 에 대해서도
무차별 키 탐색 비용 분석
(키 크기 > 태그 크기)일 때, 알려진 에 대해 모든 키를 시도하면 약 개의 후보키가 남는다. 추가 쌍으로 반복하면 라운드 후 유일한 키를 찾을 수 있다.
예: 80비트 키, 32비트 태그 → 1라운드에서 개 후보 → 2라운드에서 개 → 3라운드에서 1개.
12.4 MAC의 보안
무차별 대입 공격
MAC의 보안 속성은 **계산 저항(computation resistance)**이다: 알려진 텍스트-MAC 쌍 로부터 새로운 유효한 쌍 을 계산하기 불가능.
두 가지 공격 경로:
| 공격 대상 | 비용 | 설명 |
|---|---|---|
| 키 공간 | 모든 가능한 키를 시도 | |
| 태그 값 | 주어진 메시지에 유효한 태그를 찾기 (오프라인 공격 제한) |
따라서 무차별 대입 비용은 이며, (예: )을 권장한다.
암호분석
이상적인 MAC 알고리즘은 무차별 대입 이상의 암호분석 노력을 요구해야 한다.
12.5 해시 기반 MAC: HMAC
HMAC 설계 목표
- 기존 해시 함수를 수정 없이 블랙박스로 사용
- 내장 해시 함수의 쉬운 교체 (예: SHA-2 → SHA-3)
- 원래 해시 함수의 성능 유지
- 키 처리를 단순하게 유지
- 내장 해시 함수의 강도에 기반한 증명 가능한 보안
HMAC 알고리즘
- : 내장 해시 함수 (예: SHA-256)
- : 에 0을 패딩하여 블록 길이 비트에 맞춤
- :
0x36을 회 반복 - :
0x5C를 회 반복
처리 과정:
- 를 에 선행 결합 → 내부 해시 계산
- 를 내부 해시 결과에 선행 결합 → 외부 해시 계산
와 를 사전 계산하면, 키가 바뀔 때만 재계산하면 되므로 메시지당 추가 비용은 압축 함수 1회에 불과하다.
HMAC의 보안
HMAC의 보안은 내장 해시 함수의 강도에 증명 가능하게 의존한다. 공격자가 HMAC을 깨려면:
- 랜덤·비밀 IV로 압축 함수의 출력을 계산하거나
- 랜덤·비밀 IV로 해시 함수의 충돌을 찾아야 한다
MD5의 충돌 저항은 이지만, HMAC에서는 공격자가 오프라인으로 메시지/코드 쌍을 생성할 수 없으므로, 1Gbps 링크에서 키 변경 없이 15만 년 이상 관측해야 공격 가능하다. 따라서 HMAC에서는 MD5도 여전히 수용 가능하다.
12.6 블록 암호 기반 MAC: DAA와 CMAC
DAA (Data Authentication Algorithm)
DES의 CBC 모드를 IV = 0으로 사용:
FIPS PUB 113, ANSI X9.17으로 표준화되었으나, 고정 길이 메시지에만 안전하다는 약점이 발견되어 현재는 CMAC으로 대체되었다.
1블록 메시지 의 CBC MAC이 이면, 2블록 메시지 의 MAC도 이다. 이를 통해 메시지 길이가 고정되지 않으면 위조가 가능하다.
CMAC (Cipher-Based MAC)
DAA의 취약점을 해결. AES 또는 3DES를 사용하며, NIST SP 800-38B에 표준화되었다.
핵심: 암호화 키 외에 두 개의 비트 보조 키 , 를 사용. 마지막 블록이 완전한 블록이면 을, 불완전하면 (패딩 후) 를 XOR한다.
보조 키 도출:
여기서 곱셈은 에서 수행된다. 기약 다항식: (AES), (3DES).
12.7 인증 암호화: CCM과 GCM
**인증 암호화 (Authenticated Encryption, AE)**는 기밀성과 인증을 동시에 제공하는 단일 알고리즘이다.
네 가지 일반적 접근법
| 접근법 | 순서 | 사용 프로토콜 |
|---|---|---|
| 해시 → 암호화 | WEP (취약) | |
| MAC → 암호화 | SSL/TLS | |
| 암호화 → MAC | IPsec | |
| 독립적 암호화·MAC | SSH |
CCM (Counter with CBC-MAC)
IEEE 802.11 Wi-Fi용으로 표준화 (NIST SP 800-38C). **단일 키 **로 AES CTR 암호화 + CMAC 인증을 수행.
입력 3요소:
- : 인증 + 암호화 대상 (평문)
- : 인증만 대상 (관련 데이터, 예: 프로토콜 헤더)
- : 논스 (재전송 방지)
동작:
- 인증: , , 를 블록 로 포맷 → CMAC 적용 → 태그 생성
- 암호화: 카운터 으로 태그를 암호화, 로 평문을 CTR 모드 암호화
- 출력: 암호문 ∥ 암호화된 태그
평문을 2회 완전 통과 (MAC용 1회 + 암호화용 1회). 논스 길이와 태그 길이 간에 트레이드오프가 있다는 제약이 있으나, 높은 보안 수준으로 평가된다.
GCM (Galois/Counter Mode)
NIST SP 800-38D. 병렬 처리가 가능하도록 설계되어 고속·저비용·저지연을 달성한다.
두 핵심 함수:
GHASH — 키 기반 해시 함수. 해시키 을 사용:
여기서 는 에서의 곱셈. 동일 해시키로 여러 메시지를 인증하면 를 사전 계산하여 각 블록을 병렬 처리 가능.
GCTR — CTR 모드 변형. 카운터를 단순 1씩 증가시키며 AES 암호화:
전체 GCM 절차:
- IV로부터 프리카운터 블록 생성
- — 평문 암호화
- — 태그 생성
- 출력:
CTR 기반이므로 암호화와 인증 모두 병렬화 가능. 갈로아 필드 곱셈은 하드웨어에서 효율적으로 구현되어 높은 처리량과 보안을 동시에 달성한다.
12.8 키 래핑 (Key Wrapping)
배경
대칭키를 안전하게 교환하기 위해, 이미 공유된 **키 암호화 키(KEK)**로 새 키를 감싸는(wrap) 기법이다. NIST SP 800-38F (KW 모드). 키 데이터는 다른 데이터보다 가치가 높으므로 (한 키의 타협이 모든 암호문에 영향), 일반 모드보다 강건한 암호화가 필요하다.
핵심 특성
일반 CBC/CTR 모드에서는 마지막 평문 블록이 마지막 암호문 블록에만 영향을 주지만, KW 모드에서는 모든 출력 비트가 모든 입력 비트의 함수이다. 대신 처리량이 낮으므로 키 관리 등 소량 데이터에만 사용한다.
래핑 알고리즘
64비트 블록 단위로 동작. 개의 평문 키 블록 과 KEK 를 입력 받아, 개의 암호문 블록 을 출력.
단계(stage)를 수행하며, 각 단계에서:
= ICV (A6A6A6A6A6A6A6A6). 출력은 슬라이딩 버퍼를 통해 단계 후에야 다시 입력으로 사용되어 눈사태 효과를 극대화한다.
언래핑 (Key Unwrapping)
래핑의 역과정. 복호화 함수 를 사용하고, 복원된 ICV가 A6A6A6A6A6A6A6A6과 일치하면 키를 수락하고, 그렇지 않으면 무결성 오류로 거부한다. 따라서 키 래핑은 기밀성 + 데이터 무결성을 동시에 제공한다.
12.9 해시/MAC 기반 의사난수 생성
해시 기반 PRNG (SP 800-90)
시드 와 해시 함수 를 사용:
출력 시퀀스: . 강력한 해시 알고리즘(예: SHA-2)에 대해 알려진 약점 없음.
MAC 기반 PRNG (SP 800-90 / HMAC)
키 와 시드 를 사용. HMAC을 반복 적용:
해시 기반보다 실행 시간이 2배 (HMAC = 해시 2회)이지만 보안 신뢰도가 더 높다.
프로토콜별 HMAC PRNG 비교
| 방식 | 데이터 입력 | 특징 |
|---|---|---|
| SP 800-90 | (이전 출력) | 표준 |
| IEEE 802.11i | (시드 + 카운터) | 입출력 분리로 보안 강화 |
| TLS/WTLS | , | HMAC 2회/블록 (보안 과잉 가능) |
주요 용어
| 한글 | 영문 |
|---|---|
| 인증자 | authenticator |
| 블록 암호 기반 MAC | Cipher-Based MAC (CMAC) |
| CBC-MAC 카운터 모드 | Counter with CBC-MAC (CCM) |
| 암호학적 체크섬 | cryptographic checksum |
| 데이터 인증 알고리즘 | Data Authentication Algorithm (DAA) |
| 갈로아/카운터 모드 | Galois/Counter Mode (GCM) |
| 해시 기반 MAC | HMAC |
| 키 암호화 키 | key encryption key (KEK) |
| 키 래핑 | key wrapping |
| 메시지 인증 | message authentication |
| 메시지 인증 코드 | message authentication code (MAC) |