메시지 인증코드(MAC)
해시함수는 데이터의 무결성을 보장하지만 발신지에 대한 신원 확인이 불가능하다. 이런 문제를 해결하기 위해 인증 절차를 추가한 것이 메시지 인증 코드이다.(무결성, 인증 제공)
MAC 절차
* A와 B는 사전에 비밀키K를 공유한다.
1. 송신자 A는 원본 메시지(M)를 공유 비밀키(K)와 병합하여 해시를 수행한다.
2. 해시를 통해 만들어진 MAC과 메시지M을 수신자B에게 전송한다.
3. 수신자 B는 수신한 메시지(M)와 자신이 가지고있는 공유 비밀키(K)로 MAC’를 생성한다.
4. 해시를 통해 만들어진 MAC’와 송신자 A로부터 받은 MAC을 비교한다.
5. 두 값이 서로 동일하다면 메시지(M)가 정상적인 송신자 A로부터 온 것이라고 판단할 수 있다.
MAC 사용 사례
IPSec, SSL/TLS, VPN 등
MAC 취약점
- 재전송 공격에 노출
송신자 A가 수신자 B에게 메시지(M)와 MAC를 전송하는 과정에서 중간에 C가 가로챌 경우, C는 메시지(M) MAC를 B에게 그대로 재전송한다면 수신자 B는 정상적인 송신자 A라고 오인하게 되어 서비스 요청이 가능하다.
* 재전송 공격을 막을 수 있는 방법
① 순서번호(Sequence Number) : 송신 메시지에 매회 1씩 증가하는 번호를 넣는다.
② 타임스탬프(Timestamp) : 송신 메시지에 현재 시각을 넣는다.
③ 비표(Nonce) : 수신자는 메시지를 수신하기에 앞서 송신자에게 일회용의 랜덤한 값(비표)을 전달한다.
MAC으로 해결할 수 없는 문제
① 제3자에 대한 증명 불가
MAC는 A와 B 둘만 알고 있는 공유 비밀키를 이용하기 때문에 MAC를 계산할 수 있는 것은 A와 B뿐이다. 제3자에게 A와 B 중 MAC을 누가 계산했는지 말할 수 없기 때문에 증명이 불가능하다.
② 부인방지 불가
제3자에 대한 증명이 불가능하기 때문에 송신자 A가 ‘내가 메시지를 보낸적이 없다’라고 주장한다면 수신자 B는 A가 거짓말하고 있다는 사실도 증명할 수 없다.