본문 바로가기
기타/CS

HMAC(Hash-based Message Authentication Code)

by 샐리_ 2025. 1. 7.

프로젝트 진행 중에 데이터 암호화에 관해 HMAC 기술에 대한 얘기가 나왔는데 처음 들어본 기술이어서 한번 알아보자.


HMAC(Hash-based Message Authentication Codes) 란?

해시 함수와 비밀 키를 사용하는 암호화 인증 기술이다.

공유 암호를 사용하여 인증하고 데이터가 올바르고 신뢰할 수 있는지를 확인한다.

송신자와 수신자는 통신 시 서로 주고받는 내용이 비공개이길 원하고, 인터넷은 신뢰할 수 없는 매체이기 때문에 수신된 패킷이 변조되었는지를 확인할 방법이 필요하다.

 

HMAC 이전에 MAC에 대해서 먼저 알아보자.

 

MAC

메시지에서부터 해시함수를 이용해 계산된 해시값을 Message Digest라고 부르는데 이 Message Digest에 인증 절차를 추가한 것을 메시지 인증 코드(Message Authneticaion Code)라고 한다. 쉽게 메시지 인증에 쓰이는 작은 코드의 정보라 생각하면 되고, 메시지의 무결성 및 인증을 보장하는 용도로 사용한다.

 

송신자는 message에서 MAC을 계산하여, message와 MAC을 함께 보낸다. 수신자는 message와 MAC을 받았을 때 메시지를 송신자가 사용한 동일한 해시 함수를 사용하여 그 결괏값을 수신한 MAC과 비교하여 message가 변조되었는지 조사하여 메시지 무결성을 증명할 수 있다.

(참고: Digest - 해시 함수를 통과하기 전의 원본 데이터를 메시지(message)라고 부르고, 통과된 이후의 데이터를 다이제스트(digest)라 부른다.)

 

해시함수와 MAC

해시 함수를 이용하여 MAC을 계산하는 이점은 암호화 알고리즘을 사용하지 않아 빠른 계산이 가능한 장점이 있지만, 메시지 암호화는 안된다는 단점이 있다.

그리고 단순한 해시 함수를 MAC으로 사용하는 것은 메시지 무결성을 보장하지 못한다. 메시지를 보내는 과정에서 제 3자가 메시지를 바꿨다고 가정했을 때, 어떤 해시 알고리즘을 사용한 해시 함수인지 알려져 있기 때문에 동일한 해시 함수를 사용한다면 수신자 입장에서는 데이터가 변조되지 않았다고 볼 수 있다.

그렇다면 어떻게 해야 MAC을 이용해서 메시지가 변경되지 않았다는 메시지 무결성을 증명할 수 있을까?

 

송신자와 수신자는 서로만이 알고 있는 공유하고 있는 비밀 값이 있다. 해시를 사용하여 MAC을 계산할 때 메시지와 비밀값을 같이 입려 하여 계산하면 메시지 무결성을 증명할 수 있다. 이러한 방법에 사용되는 해시 함수를 keyed hash라고 한다.

송신자가 메시지에 대해 해시함수를 통해 MAC을 계산할 때 메시지와 비밀값을 같이 입력하면, 수신자도 메시지에 대해 동일한 해시 함수를 통해 MAC을 계산할 때 공유된 비밀값을 입력하고 그 둘을 비교하여 위조가 되었는지를 검사하여 메시지 무결성을 증명할 수 있다. 그리고 송신자와 수신자만이 가지고 있는 비밀값을 가지고 있기 때문에 송신자를 인증할 수 있다.

 

HMAC 구성

HMAC 키는 두 부분으로 구성된다.

  1. Cryptographic keys: 암호화 알고리즘은 데이터를 변경시키며, 수신자는 데이터를 다시 읽기 위해 특정 코드(key)가 필요하다. HMAC은 공유된 비밀 키 세트에 의존한다.
  2. Hash function: 해시 알고리즘은 메시지를 한 번 더 변경시키거나 요약한다. HMAC은 SHA-1, MD5, RIPEMD-128/60과 같은 일반 암호화 해시 함수를 사용한다.

이 시스템을 사용하는 쌍은 다음 사항을 만족해야 한다.

  • Secret Keys: 받은 메시지를 디코드 할 방법이 있어야 한다. 비밀 키가 이를 담당하며, 비밀키는 비밀로 유지하고 숨겨야 한다.
  • Algorithm: 모든 메시지에 적용할 하나의 해시 함수를 선택해야 한다.

참고

https://oneny.tistory.com/68

반응형