기능
HMAC(해시 기반 메시지 인증 코드, RFC 2104)은 비밀 키와 해시 함수를 결합해 메시지에 서명합니다. 같은 키를 아는 수신자가 HMAC을 다시 계산해 함께 전송된 값과 비교합니다. 메시지가 변경되었거나 보낸 사람이 키를 모른다면 값이 일치하지 않습니다.
HMAC은 웹훅 서명(GitHub, Stripe, Slack), API 요청 서명, HS256 JWT, 쿠키 서명, 일회용 비밀번호 등 어디에나 쓰입니다. 이 도구는 HMAC-MD5, HMAC-SHA1, HMAC-SHA256, HMAC-SHA384, HMAC-SHA512를 동시에 계산하므로 시스템이 사용하는 알고리즘과 바로 비교할 수 있습니다.
사용 방법
- 비밀 키를 입력합니다. 키가 일반 텍스트가 아니라 16진수나 Base64 바이트라면 키 형식을 바꿉니다.
- 메시지를 붙여 넣거나 예시를 클릭합니다.
- 입력할 때마다 모든 HMAC이 갱신됩니다. 16진수 또는 Base64 출력을 선택하고 필요한 값을 복사합니다.
메시지는 입력한 그대로, 공백과 줄바꿈까지 UTF-8로 인코딩됩니다.
예시
키가 key이고 메시지가 The quick brown fox jumps over the lazy dog이면 HMAC-SHA256은 f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8입니다. 명령줄에서도 같은 값을 확인할 수 있습니다:
echo -n "The quick brown fox jumps over the lazy dog" | openssl dgst -sha256 -hmac "key"
-n에 주의하세요. 이것이 없으면 echo가 줄바꿈을 추가해 HMAC이 달라집니다.
웹훅 검증
웹훅을 검증하려면 JSON 파싱 전의 원본 요청 본문을 가져와 제공자 문서에 나온 문자열(흔히 timestamp.body)을 만들고, 서명 비밀 키로 HMAC을 계산해 서명 헤더와 비교합니다. 직접 작성하는 코드에서는 타이밍 공격을 막기 위해 상수 시간 비교 함수를 사용하세요.
자주 묻는 질문
› 해시와 HMAC의 차이는 무엇인가요?
SHA-256 같은 일반 해시는 누구나 계산할 수 있습니다. HMAC은 해시에 비밀 키를 섞기 때문에 키를 아는 사람만 값을 만들거나 검증할 수 있습니다. 단순한 체크섬이 아니라 메시지 인증 코드입니다.
› 어떤 HMAC 알고리즘을 써야 하나요?
보통 HMAC-SHA256을 씁니다. 대부분의 API와 웹훅이 이를 요구합니다. HMAC-SHA512도 괜찮습니다. HMAC-MD5와 HMAC-SHA1도 MAC으로서는 아직 안전하다고 보지만, 오래된 시스템이 요구할 때만 사용하세요.
› 서버의 HMAC과 일치하지 않는 이유는 무엇인가요?
메시지의 정확한 바이트(끝의 줄바꿈이나 JSON 공백 차이로 결과가 완전히 달라집니다), 키 형식(텍스트인지 16진수·Base64인지), 출력 인코딩을 확인하세요. 웹훅 제공자는 보통 타임스탬프와 원본 요청 본문으로 만든 문자열에 서명합니다.
› 비밀 키가 저장되거나 전송되나요?
아니요. HMAC은 브라우저에서 계산됩니다. 키는 이 페이지의 메모리에만 있고, 저장되거나 주소창에 기록되거나 공유 링크에 포함되지 않습니다.