티스토리 뷰
보안
Bong Gu
2021. 4. 21. 15:17
HMAC
MAC 이란
개념
- Message Authentication code
- 메세지를 인증하기 위해서 사용하는 정보
동작원리
- 송신 메세지를 준비
- 송신 메세지를 MAC 함수에 통과
- MAC 함수를 이용해 메세지를 이용해서 MAC 정보를 만들고 이것을 메세지에 붙인다.
- 메세지를 수신
- 수신측 역시 MAC 함수를 이용하여 메세지에 대한 MAC을 생성
- MAC함수의 결과로 나온 MAC정보와 수신 메세지의 MAC 정보가 일치하면, 안전한 메세지로 인증된다.
HMAC이란
개념
- HMAC이란 REST API가 요청을 받았을 때, 이 요청이 신뢰할 수 있는 호출인지 확인하는 방법 중 하나이다.
- 사용자의 ID와 암호 같이 민감한 정보를 직접 받을 필요 없이 사전에 공유한 secret key와 전송할 메세지를 기반으로 MAC을 검증해서 secret key를 소유한 클라이언트가 보낸 메세지가 맞는지 인증할 수 있다.
동작원리

- 해쉬 생성 : 클라이언트는 key + message를 HMAC 알고리즘으로 처리하여 해쉬값 생성
- 요청보내기 : 생성된 해쉬와 message를 HTTP 요청으로 REST API 서버에 보낸다.
- 해쉬 생성 : 서버는 클라이언트에서 받은 요청 내의 message와 본인이 가지고 있던 키를 조합하여 HMAC 알고리즘으로 해쉬값을 생성한다.
- 비교 : 클라이언트에서 넘어온 해쉬와 서버에서 생성된 해쉬가 동일한지 비교한다.
HMAC을 더 안전하게 사용하는 방법
- 전송 시, 안전한 채널(HTTPS) 사용
- HMAC은 secret Key가 없다면 message 위변조가 불가능하지만, 원문 message를 같이 보내야 하므로 보안을 위해 HTTPS와 같이 안정한 전송채널을 사용하는것이 좋다.
- Secret Key 관리
- 클라이언트가 전송한 요청은 중간에 해커가 가로 챌 수 있지만, secret key가 없다면 위변조 해도 서버의 검증 광정에서 에러가 발생한다.
- 반대로 secret key가 유출되면 해커가 임의로 위변조 할 수 있으므로 secret key를 안전하게 관리하고 유출 우려가 있는경우 재발급하여 사용한다.
- Reply attach 방지
- 클라이언트가 전송한 요청은 중간에 해커가 가로채서 reply attack에 할용할 수 있다.
- 전송 메세지에 timestamp나 serial, nonce등 변하는 값을 포함하는게 필요하다.
전자서명과의 비교
- HMAC대신 전자 서명을 사용하면 더 안전하고 견고해지지만 클라이언트에게 인증서를 발급하고 등록 및 분실/만료시 재발급/갱신해야 하는 부담이 있습니다.
- 특히 전자 서명은 HMAC 방식에 비해서 많은 연산을 필요로 하므로 서버 부하가 많이 생기고 속도가 느린 단점이 있으므루 REST API등에는 HMAC을 사용하고 전자계약 등 사용자의 부인 방지가 필요한 업무에만 전자 서명을 사용하는 것이 좋습니다.
참고