티스토리 뷰

보안

Hmac

Bong Gu 2021. 4. 21. 15:17
728x90

HMAC

MAC 이란

개념

  • Message Authentication code
  • 메세지를 인증하기 위해서 사용하는 정보

동작원리

  1. 송신 메세지를 준비
  2. 송신 메세지를 MAC 함수에 통과
  3. MAC 함수를 이용해 메세지를 이용해서 MAC 정보를 만들고 이것을 메세지에 붙인다.
  4. 메세지를 수신
  5. 수신측 역시 MAC 함수를 이용하여 메세지에 대한 MAC을 생성
  6. MAC함수의 결과로 나온 MAC정보와 수신 메세지의 MAC 정보가 일치하면, 안전한 메세지로 인증된다.

HMAC이란

개념

  • HMAC이란 REST API가 요청을 받았을 때, 이 요청이 신뢰할 수 있는 호출인지 확인하는 방법 중 하나이다.
  • 사용자의 ID와 암호 같이 민감한 정보를 직접 받을 필요 없이 사전에 공유한 secret key와 전송할 메세지를 기반으로 MAC을 검증해서 secret key를 소유한 클라이언트가 보낸 메세지가 맞는지 인증할 수 있다.

동작원리

image-20210420140558128

  • 해쉬 생성 : 클라이언트는 key + message를 HMAC 알고리즘으로 처리하여 해쉬값 생성
  • 요청보내기 : 생성된 해쉬와 message를 HTTP 요청으로 REST API 서버에 보낸다.
    • 해쉬는 보통 헤더 or URL에 포함
  • 해쉬 생성 : 서버는 클라이언트에서 받은 요청 내의 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을 사용하고 전자계약 등 사용자의 부인 방지가 필요한 업무에만 전자 서명을 사용하는 것이 좋습니다.

참고

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday