본문 바로가기
cs

[알고리즘] HMAC (Hash-based Message Authentication Codes) 이란?

by 최연탄 2023. 3. 19.
728x90
반응형

참고: https://www.okta.com/identity-101/hmac/

Hash-based message authentication code(HMAC)는 해시 함수와 비밀 키를 사용하는 암호화 인증 기술입니다.

서명 및 비대칭 암호화와는 다르게 HMAC은 공유 암호를 사용하여 인증하고 데이터가 올바르고 신뢰할 수 있는지를 확안합니다.

HMAC 작동 방법

송신자와 수신자는 통신 시 서로 주고 받는 내용이 비공개이길 원합니다. 또한 인터넷은 신뢰할 수 없는 매체이기 때문에 수신된 패킷이 변조되지는 않았는지 확인할 방법이 필요합니다. 이런 경우 HMAC이 효과적인 솔루션입니다.

HMAC 키는 두 부분으로 구성됩니다. 이는 다음과 같습니다:

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

이 시스템을 사용하는 쌍은 다음 사항을 만족해야 합니다:

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

작업이 완료되면 메시지는 되돌릴 수 없는 것으로 간주되며 해킹에 저항력이 생깁니다. 이 메시지를 가로챈 사람에게 길이를 추측할 수 조차 없게 합니다. 또한 암호를 모르는 사람에게는 메시지를 쓸모없는 것으로 만들어버립니다.

HMAC 테스트 도구는 이런 기능이 어떻게 작동하는지 보여줍니다. 다음과 같은 입력을 처리한다고 가정해 보겠습니다:

  • Potential message: 코인 100개 살래요
  • Secret key: 666
  • Algorithm: MD5

위 입력의 결과는 다음과 같습니다: "d687d616768b50e2448300b9ada5dd0e"

간단한 변환처럼 보이지만 밑바탕에는 밀도 높은 수학 계층이 깔려 있습니다. HMAC이 수학적으로 어떻게 생겼는지 보여줄 때 다음과 같은 다이어그램을 사용합니다.

수학을 이해하는 것은 개발자에게 매우 중요합니다. 작업 및 제공하는 보호 기능에 대해 설명해달라는 요청이 있을 경우, 다이어그램은 종종 말보다 더 나은 것을 보여줄 수 있습니다.

하지만 일반적인 컴퓨터 사용자는 수학을 알 필요가 없을 지도 모릅니다. 그들에게는 자신의 메시지가 보호되고 있다는 것만으로도 충분할 수 있습니다.

https://www.okta.com/identity-101/hmac/

HMAC 구현 방법

개인 또는 웹 개발자로서 HMAC을 사용하려면 세 가지 중요 사항을 지켜야 합니다. 하나는 수신자와 해당 항목에 대한 합의가 필요하므로 모두 동일한 도구를 사용해야 한다는 것 입니다.

나머지 두 항목은 다음과 같습니다:

  • 공유된 암호
  • 해쉬 도구

오직 서버만이 위의 세 가지 항목에 대해 모두 알고있어야 합니다. 그리고 그 데이터는 철저하게 보호되어야 합니다. 회원의 비밀 키를 아는 사람은 누구든지 서버를 장악하거나 사기성 데이터를 보낼 수 있습니다.

모든 웹 사이트와 개발 환경은 다르지만 예제를 살펴보는 게 도움이 될 수 있습니다.

Google 광고를 통해서 웹 사이트에 들어온 트래픽에 HMAC을 사용하고 싶다고 가정해 보겠습니다.

  • Ad Manager에서 토큰 만들기: 방문/시간에 대한 세부 정보를 지정하고 Google의 인증 키를 사용하여 "비밀 키"를 만듭니다.
  • 구현: 새로 만든 토큰을 인증 요청 헤더 내에 넣거나 쿼리 또는 폼 데이터로 전달합니다.

Google은 이 과정을 빠르고 쉽게 해줍니다. 개발자는 간단한 튜토리얼을 보고 몇 분 안에 코드를 복사할 수 있습니다.

Google Ads를 통해 온 방문자에게 코드를 외우라거나 디코드 하라고 하는 것이 아닙니다. 사용자의 서버가 웹 사이트 내의 코드 요구 사항을 알아야하고 모든 토큰 설정 및 변환은 사용자에게 보이지 않아야 합니다.

게다가 배포하기 전에 이 환경을 많이 테스트해봐야 합니다. 코딩 오류가 발생하면 사기꾼인 것처럼 보이기 때문에 사용자가 사이트에 액세스하지 못하도록 차단할 수도 있습니다. 이런 시스템을 세상에 배포하기 전 여러 장치에서 테스트하는 것이 좋습니다.

언제 HMAC을 사용하는가?

대부분의 회사는 민감한 정보를 가지고 있습니다. 예를 들어 결제하는 루틴이 있는 경우 신용카드 번호를 받을 것이고, 직원이 있는 경우 훔칠만한 주민번호가 있을 것 입니다.

하지만 일부 회사는 더 심각한 문제가 있을 수 있습니다. 의료와 같이 엄격하게 규제되는 환경에 있거나 군수품과 같은 영업 비밀을 다루는 경우 기존보다 더 강한 보안 조치를 하는 것이 좋습니다.

이중 보호 수준을 갖춘 HMAC은 자산을 최대한 신중히 보호하고 있다고 증명해야하는 기업에게 이상적입니다.

관련 글

해시(hash) 알고리즘 이란?

MD5 hash 알고리즘 이란?

SHA hash 알고리즘 이란?

반응형

댓글