인증(Authentication): 신원을 증명하는 행위이다.
인가(Authorization): 권한을 부여하는 행위이다.
MAC(Message Authentication Code)은 message authentication(메시지 송신자의 신원이 유효한지 확인) 그리고 message integrity(메시지가 변경되지 않았음을 확인)를 보장하기 위해 사용한다.
MAC을 이용한 message authentication 과정은 아래와 같다.
Alice와 Bob은 MAC을 생성할 때 사용할 cryptography hash function을 선정한다.
안전한 채널을 이용해 Alice와 Bob은 MAC에서 사용할 symmetric key를 공유한다.
MAC에는 송신자와 수신자 사이에 symmetric key, 가 존재한다.
Alice는 공유된 key 그리고 송신할 message를 이용하여 MAC을 만들어 낸다.
Alice는 message와 MAC을 모두 Bob에게 송신한다.
Bob은 Alice로 부터 수신한 message와 공유된 key를 이용하여 MAC을 생성하고 ALice로 부터 수신한 MAC과 비교한다.
다만 공격자 eve가 사용된 hash function을 알고 있는 경우 message와 MAC을 가로채 brute force 방식으로 key를 알아낼 수 있다.
실제 상용화된 MAC은 NIST에서 사용하는 표준 MAC인 HMAC이다.
HMAC을 생성하는 과정은 아래와 같다.
사용할 key를 block(b bits)으로 padding 한다.
이때 key 왼쪽에 b bits가 될 때까지 0으로 padding 한다.
상수 ipad와 padded key를 XOR 연산하여 block()을 생성한다.
위 과정에서 생성된 를 message 왼쪽에 붙인다.
위 과정에서 생성된 stream을 hashing하여 digest를 만들고, digest를 b bits로 padding한다.
이때 생성된 digest를 intermediate HMAC이라고 한다.
상수 opad와 padded key를 XOR 연산하여 block()을 생성한다.
위 과정에서 생성된 를 padded intermediate HMAC의 왼쪽에 붙인다.
위 과정에서 생성된 stream을 hashing 하여 digest를 만들어낸다.
이때 생성된 digest를 HMAC이라고 한다.