참고: https://www.okta.com/identity-101/hmac/
Hash-based message authentication code(HMAC)는 해시 함수와 비밀 키를 사용하는 암호화 인증 기술입니다.
서명 및 비대칭 암호화와는 다르게 HMAC은 공유 암호를 사용하여 인증하고 데이터가 올바르고 신뢰할 수 있는지를 확안합니다.
HMAC 작동 방법
송신자와 수신자는 통신 시 서로 주고 받는 내용이 비공개이길 원합니다. 또한 인터넷은 신뢰할 수 없는 매체이기 때문에 수신된 패킷이 변조되지는 않았는지 확인할 방법이 필요합니다. 이런 경우 HMAC이 효과적인 솔루션입니다.
HMAC 키는 두 부분으로 구성됩니다. 이는 다음과 같습니다:
- Cryptographic keys: 암호화 알고리즘은 데이터를 변경시키며, 수신자는 데이터를 다시 읽기 위해 특정 코드(key)가 필요합니다. HMAC은 공유된 비밀 키 세트에 의존합니다.
- Hash function: 해시 알고리즘은 메시지를 한 번 더 변경시키거나 요약합니다. HMAC은 SHA-1, MD5, RIPEMD-128/60과 같은 일반 암호화 해시 함수를 사용합니다.
이 시스템을 사용하는 쌍은 다음 사항을 만족해야 합니다:
- Secret Keys: 받은 메시지를 디코드할 방법이 있어야 합니다. 비밀 키가 이 일을 담당하며, 비밀 키는 비밀로 유지하고 숨겨야 합니다.
- Algorithm: 모든 메시지에 적용할 하나의 해시 함수를 선택해야 합니다.
작업이 완료되면 메시지는 되돌릴 수 없는 것으로 간주되며 해킹에 저항력이 생깁니다. 이 메시지를 가로챈 사람에게 길이를 추측할 수 조차 없게 합니다. 또한 암호를 모르는 사람에게는 메시지를 쓸모없는 것으로 만들어버립니다.
HMAC 테스트 도구는 이런 기능이 어떻게 작동하는지 보여줍니다. 다음과 같은 입력을 처리한다고 가정해 보겠습니다:
- Potential message: 코인 100개 살래요
- Secret key: 666
- Algorithm: MD5
위 입력의 결과는 다음과 같습니다: "d687d616768b50e2448300b9ada5dd0e"
간단한 변환처럼 보이지만 밑바탕에는 밀도 높은 수학 계층이 깔려 있습니다. HMAC이 수학적으로 어떻게 생겼는지 보여줄 때 다음과 같은 다이어그램을 사용합니다.
수학을 이해하는 것은 개발자에게 매우 중요합니다. 작업 및 제공하는 보호 기능에 대해 설명해달라는 요청이 있을 경우, 다이어그램은 종종 말보다 더 나은 것을 보여줄 수 있습니다.
하지만 일반적인 컴퓨터 사용자는 수학을 알 필요가 없을 지도 모릅니다. 그들에게는 자신의 메시지가 보호되고 있다는 것만으로도 충분할 수 있습니다.
HMAC 구현 방법
개인 또는 웹 개발자로서 HMAC을 사용하려면 세 가지 중요 사항을 지켜야 합니다. 하나는 수신자와 해당 항목에 대한 합의가 필요하므로 모두 동일한 도구를 사용해야 한다는 것 입니다.
나머지 두 항목은 다음과 같습니다:
- 공유된 암호
- 해쉬 도구
오직 서버만이 위의 세 가지 항목에 대해 모두 알고있어야 합니다. 그리고 그 데이터는 철저하게 보호되어야 합니다. 회원의 비밀 키를 아는 사람은 누구든지 서버를 장악하거나 사기성 데이터를 보낼 수 있습니다.
모든 웹 사이트와 개발 환경은 다르지만 예제를 살펴보는 게 도움이 될 수 있습니다.
Google 광고를 통해서 웹 사이트에 들어온 트래픽에 HMAC을 사용하고 싶다고 가정해 보겠습니다.
- Ad Manager에서 토큰 만들기: 방문/시간에 대한 세부 정보를 지정하고 Google의 인증 키를 사용하여 "비밀 키"를 만듭니다.
- 구현: 새로 만든 토큰을 인증 요청 헤더 내에 넣거나 쿼리 또는 폼 데이터로 전달합니다.
Google은 이 과정을 빠르고 쉽게 해줍니다. 개발자는 간단한 튜토리얼을 보고 몇 분 안에 코드를 복사할 수 있습니다.
Google Ads를 통해 온 방문자에게 코드를 외우라거나 디코드 하라고 하는 것이 아닙니다. 사용자의 서버가 웹 사이트 내의 코드 요구 사항을 알아야하고 모든 토큰 설정 및 변환은 사용자에게 보이지 않아야 합니다.
게다가 배포하기 전에 이 환경을 많이 테스트해봐야 합니다. 코딩 오류가 발생하면 사기꾼인 것처럼 보이기 때문에 사용자가 사이트에 액세스하지 못하도록 차단할 수도 있습니다. 이런 시스템을 세상에 배포하기 전 여러 장치에서 테스트하는 것이 좋습니다.
언제 HMAC을 사용하는가?
대부분의 회사는 민감한 정보를 가지고 있습니다. 예를 들어 결제하는 루틴이 있는 경우 신용카드 번호를 받을 것이고, 직원이 있는 경우 훔칠만한 주민번호가 있을 것 입니다.
하지만 일부 회사는 더 심각한 문제가 있을 수 있습니다. 의료와 같이 엄격하게 규제되는 환경에 있거나 군수품과 같은 영업 비밀을 다루는 경우 기존보다 더 강한 보안 조치를 하는 것이 좋습니다.
이중 보호 수준을 갖춘 HMAC은 자산을 최대한 신중히 보호하고 있다고 증명해야하는 기업에게 이상적입니다.
관련 글
'cs' 카테고리의 다른 글
[네트워크] 포트 스캔 이란? (port scanning) (7) | 2023.06.19 |
---|---|
[네트워크] 포트 설명 및 작동방법 (port) (9) | 2023.06.16 |
[알고리즘] MD5 해시 알고리즘 이란? (7) | 2023.03.13 |
[알고리즘] 해시(hash) 알고리즘 이란? (3) | 2023.03.12 |
[정보보안] JSON Web Token(JWT) 설명 (3) | 2023.03.02 |
댓글