Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워크 보안

네트워크 보안에서 HMAC이란? 개념부터 작동 원리, 활용법까지 총정리

HMAC이란 무엇인가?

HMAC(Hash-based Message Authentication Code, 해시 기반 메시지 인증 코드)는 암호학적 해시 함수와 비밀 키를 결합하여 메시지 인증 코드(MAC)를 생성하는 기술입니다. 이름 그대로 해싱(hash)을 기반으로 한 인증 코드로, 메시지의 무결성(integrity)진위성(authenticity)을 동시에 검증할 수 있어 네트워크 보안에서 핵심적인 역할을 담당합니다.

HMAC의 작동 원리

HMAC은 암호화 해시 함수와 MAC(Message Authentication Code)을 결합하여 개발되었습니다. 인증하려는 데이터에 암호화 해시 함수를 실행하고, 여기에 송신자와 수신자만 알고 있는 비밀 공유 키(secret shared key)를 함께 사용해 메시지를 인증합니다. 이처럼 해싱과 MAC을 결합함으로써, HMAC은 다른 인증 방식보다 훨씬 안전한 인증 코드를 만들어냅니다.

구체적으로 HMAC은 키와 메시지를 각각 별도로 해싱하고, 내부 해시와 외부 해시를 두 단계에 걸쳐 적용하는 구조로 되어 있습니다. 이러한 이중 구조 덕분에 길이 확장 공격(length extension attack)과 같은 해시 함수 자체의 취약점으로부터도 안전합니다.

HMAC의 목적과 활용 분야

HMAC의 핵심 목적은 다음과 같습니다.

  • 메시지 무결성 검증: 전송 과정에서 데이터가 변조되지 않았는지 확인합니다.
  • 발신자 진위성 확인: 메시지가 올바른 비밀 키를 가진 발신자로부터 온 것임을 입증합니다.
  • 애플리케이션 간 데이터 보호: 애플리케이션 사이에 전달되는 데이터의 무결성을 검증하고, 취약한 저장 영역을 보호하는 데 활용됩니다.

실제로 TLS/SSL, JWT(JSON Web Token), IPsec 등 현대 인터넷 보안 프로토콜 대부분이 HMAC을 활용하고 있습니다.

HMAC이 일반 MAC보다 안전한 이유

HMAC은 일반 MAC에 비해 더 높은 보안성을 제공하는데, 그 핵심 이유는 키와 메시지를 별도로 해싱하기 때문입니다. 또한 HMAC의 안전성은 내부적으로 사용하는 해시 함수의 암호학적 강도, 해시 출력값의 길이, 그리고 비밀 키의 크기와 유형에 따라 결정됩니다.

HMAC-SHA256은 얼마나 안전할까?

충분히 긴 비밀 키와 함께 HMAC을 사용하면, 제3자가 무차별 대입(brute-force) 공격으로 해시값의 원본 데이터를 알아내는 것은 사실상 불가능합니다. HMAC-SHA256에는 256비트 비밀 키면 충분하며, 이메일 주소 하나당 고유한 키를 사용할 필요조차 없습니다.

HMAC의 설계 목표

HMAC은 설계 단계에서 다음과 같은 목표를 두고 만들어졌습니다.

  • 기존에 사용 가능한 해시 함수를 수정 없이 그대로 활용한다.
  • 더 빠르거나 더 안전한 해시 함수가 발견될 경우, 내장된 해시 함수를 손쉽게 교체할 수 있다.
  • 원래 해시 함수의 성능을 최대한 유지한다.

MAC과 HMAC의 관계

HMAC은 가장 기본적인 형태의 MAC 중 하나입니다. MAC은 메시지를 인증하기 위한 태그(tag) 또는 정보 조각을 의미하는 포괄적인 개념이며, HMAC은 여기에 암호화 해시 함수와 비밀 암호화 키를 결합한 구체적인 구현 방식입니다. 즉, 모든 HMAC은 MAC이지만, 모든 MAC이 HMAC인 것은 아닙니다.

파이썬(Python)에서의 HMAC

파이썬은 표준 라이브러리에서 hmac 모듈을 제공합니다. 이 모듈은 RFC 2104에 정의된 keyed-hashing 방식의 메시지 인증 기법을 구현하며, 주요 메서드는 다음과 같습니다.

  • update(): 메시지를 HMAC 객체에 업데이트합니다.
  • digest(): 지금까지 update() 메서드에 전달된 바이트를 처리한 최종 다이제스트 값을 반환합니다.
  • hexdigest(): digest()와 유사하지만, 2배 길이의 16진수 문자열 형태로 결과를 반환합니다.
  • copy(): 현재 상태의 HMAC 객체 복사본을 생성합니다.

이 모듈은 애플리케이션 간에 전달되는 데이터의 무결성을 검증할 수 있으며, 보안이 취약한 저장 영역을 보호하는 데도 유용하게 사용됩니다.

OpenSSL에서의 HMAC

OpenSSL 계열 라이브러리(예: Ruby의 OpenSSL::HMAC)에서도 HMAC을 손쉽게 계산할 수 있습니다. HMAC은 해시 함수와 키를 함께 사용하는 MAC의 한 종류로, 메시지의 무결성을 검증하여 해당 메시지가 신뢰할 수 있는 발신자에게서 온 것임을 인증하는 데 활용됩니다.

참고: 건설 분야에서의 'HMAC'

흥미롭게도 건설 업계에서 HMAC(Hot Mix Asphalt Concrete)은 열혼합 아스팔트 콘크리트를 의미합니다. 이는 앞서 설명한 암호학의 HMAC과는 전혀 다른 용어이므로 혼동하지 않도록 주의가 필요합니다.