홈 › 개발·웹 도구

HMAC 서명 만들기

웹훅이 보낸 서명이 맞는지 확인할 때, 받은 요청 본문을 ‘메시지’에, 서명 헤더 값을 ‘비교할 서명’에 붙여넣으세요.

입력한 내용은 서버로 보내지 않고 이 기기에서만 처리돼요

HMAC 서명은 무엇이고 언제 쓰나요

HMAC(해시 기반 메시지 인증 코드)은 비밀 키와 메시지를 함께 해시해서 만든 서명이에요. 키를 아는 사람만 같은 서명을 만들 수 있어서, 결제·쇼핑몰·메신저 같은 서비스가 보내는 웹훅이 진짜인지, API 요청이 중간에 바뀌지 않았는지 확인하는 데 쓰여요. JWT의 HS256 서명도 HMAC-SHA256이에요.

쓰는 방법

비밀 키와 메시지를 넣으면 결과가 바로 나와요. 키나 메시지가 16진수·Base64로 주어졌다면 형식을 바꿔 주세요(예: 서비스가 키를 Base64로 준 경우 글자 그대로 넣으면 다른 서명이 나와요). 서비스마다 서명을 16진수로 주기도 하고 Base64로 주기도 하니 ‘결과 형식’을 맞추세요. ‘비교할 서명’에 받은 값을 붙여넣으면 형식(16진수 대·소문자, Base64, Base64URL, ‘sha256=’ 머리말)을 알아서 맞춰 비교해요.

서명이 다르게 나오는 가장 흔한 이유는 메시지가 한 글자라도 다른 것이에요. 웹훅은 받은 요청 본문을 JSON으로 다시 정리하지 말고 받은 그대로(빈칸·줄바꿈 포함) 넣어야 해요. 서비스에 따라 ‘시간값 + 점 + 본문’처럼 여러 값을 이어 붙여 서명하기도 하니 그 서비스의 문서를 확인하세요.

계산 방식과 주의할 점

RFC 2104의 HMAC 정의대로, 키를 해시 블록 크기(SHA-256은 64바이트, SHA-512는 128바이트)에 맞춰 ipad·opad와 섞은 뒤 두 번 해시해요. 결과는 파이썬 hmac.new(key, msg, hashlib.sha256)과 같고, 그 값으로 검증했어요. 운영 서버에서 서명을 비교할 때는 hmac.compare_digest처럼 시간이 일정한 비교 함수를 써야 해요.

실제 운영 키는 가능하면 테스트용 키로 확인하고, 화면을 공유하지 마세요. 이 도구는 키와 메시지를 어디에도 보내거나 저장하지 않아요.

참고한 자료

자주 묻는 질문

HMAC과 그냥 SHA-256 해시는 뭐가 달라요?

해시는 누구나 같은 값을 만들 수 있지만, HMAC은 비밀 키가 있어야 같은 값을 만들 수 있어서 ‘보낸 사람 확인’이 돼요.

키를 Base64로 받았어요.

‘키 형식’을 Base64로 바꾸세요. 글자 그대로 넣으면 키 바이트가 달라져 서명이 달라져요.

HMAC-MD5·SHA1도 안전한가요?

HMAC 구조 덕분에 당장 깨지지는 않았지만 새로 만드는 시스템에는 HMAC-SHA256 이상을 권해요.

함께 쓰면 좋은 도구