• 정의 및 개요

    • 중간자 공격으로부터의 메시지의 무결성과 인증을 보장하는 메시지 인증 코드(message authentication code)
      • 쉽게 말해 메시지가 중간에 탈취되어 위변조 되었는가를 확인하기 위해 사용하는 코드이다.
    • SHA-256, SHA-1, MD5와 같은 해시 함수에 기반하며, 이 해시 함수는 데이터를 일정한 크기의 고유한 값(해시값)으로 변환시킨다.
    • 암호화 메커니즘으로 대칭키 암호화 방식을 사용한다.
    • TLS(전송 계층 보안) 프로토콜에서 대칭키 암호화와 함께 HMAC을 사용하여 무결성과 인증을 보장한다.
  • 사용 의의

    • 서버 응답을 중간자가 가로채 수정했다고 가정
    • 중간자는 대칭키에 대해 알지 못하므로, (헤더 또는 url에 포함될) hash를 함부로 생성하지 못하고 message 만 수정하게 될 것이다.
    • 클라이언트는 해당 message 를 통해 hash 를 생성한 후 비교 검증을 하게 되고, 이는 곧 검증 실패로 이어진다.
  • 동작 방식

    • 클라이언트는 HMAC 알고리즘을 통해 key + message 값을 hash로 변환
    • 클라이언트는 이렇게 생성된 hash 와 원본 message 를 서버에 전달
      • 보통 hash는 HTTP 헤더 또는 url에 포함시킨다.
    • hash 생성
      • 서버는 message와 본인이 가지고 있던 key를 조합하여 hash 값 생성
      • 클라이언트에서 넘어온 hash와 서버에서 생성된 hash가 같은지 비교