HMAC 생성기

비밀 키로 메시지의 서명값(HMAC)을 만듭니다. API 연동에서 요청이 위조되지 않았음을 확인할 때 씁니다. 만든 값을 상대가 보낸 값과 맞춰 보는 검증도 함께 제공합니다.

설정

입력

서명값

키와 메시지는 브라우저 안에서만 처리되며 서버로 전송되지 않습니다. 브라우저에 내장된 Web Crypto 로 계산합니다.

HMAC 생성기는 비밀 키로 메시지의 서명값을 만듭니다. API 를 주고받을 때 요청이 중간에 바뀌지 않았고 아는 사람이 보냈다는 것을 확인하는 용도입니다. 상대가 보낸 서명값과 맞춰 보는 검증도 함께 할 수 있습니다. 키와 메시지는 브라우저 안에서만 처리하며 서버로 보내지 않습니다.

HMAC생성 사용 방법

  1. 해시 알고리즘을 고릅니다. 특별한 이유가 없으면 HMAC-SHA256 입니다.
  2. 비밀 키를 넣습니다. 상대가 키를 16진수나 Base64 로 줬다면 키 형식을 그에 맞게 바꿉니다.
  3. 메시지를 넣으면 서명값이 바로 나옵니다.
  4. 상대가 보낸 서명값이 있으면 맞춰 보기 칸에 붙여 넣습니다. 일치 여부를 알려 줍니다.

지원 형식과 입력 조건

알고리즘
HMAC-SHA256 · SHA512 · SHA384 · SHA1
키 형식
글자 그대로(UTF-8) · 16진수 · Base64
출력 형식
16진수 · Base64 · Base64URL
검증
표기가 달라도(대소문자·구분자·패딩) 값이 같으면 일치로 판단합니다
계산 위치
브라우저 내장 Web Crypto. 키·메시지를 서버로 보내지 않습니다

HMAC 이 무엇을 지켜 주나요

  • 메시지가 중간에 바뀌지 않았다는 것(무결성)과, 비밀 키를 아는 쪽이 만들었다는 것(인증)을 함께 확인해 줍니다.
  • 단순 해시(SHA256)만 쓰면 누구나 같은 값을 만들 수 있어 "누가 만들었는지"를 알 수 없습니다. HMAC 은 키를 함께 넣어 그 문제를 없앱니다.
  • 암호화가 아닙니다. 메시지 내용을 숨기지는 못합니다. 내용을 감춰야 한다면 별도로 암호화해야 합니다.
  • 결제·배송 API 의 서명, 웹훅이 진짜 그 서비스에서 왔는지 확인하는 데 널리 쓰입니다.

값이 상대와 안 맞을 때 볼 것

  • 키 형식이 가장 흔한 원인입니다. 상대가 준 키가 16진수 문자열인데 글자 그대로로 넣으면 완전히 다른 바이트가 됩니다.
  • 메시지에 눈에 안 보이는 차이가 있는지 봅니다. 줄바꿈이 CR+LF 인지 LF 인지, 끝에 줄바꿈이 하나 더 있는지에 따라 값이 달라집니다.
  • 서명 대상 문자열을 만드는 규칙(연결 순서, 구분자, 정렬 방식)이 상대 문서와 정확히 같은지 확인합니다.
  • 출력 형식이 다를 뿐 값은 같을 수 있습니다. 맞춰 보기 칸은 16진수·Base64 를 알아서 구분해 비교하므로 그대로 붙여 넣어 보세요.

SHA1 은 써도 되나요

  • 새로 만드는 시스템에는 권장하지 않습니다. SHA-256 이상을 쓰세요.
  • 다만 HMAC-SHA1 은 단순 SHA1 해시와 달리 아직 실용적인 위조 공격이 알려져 있지 않습니다. 옛 규격과 맞춰야 할 때 쓰라고 남겨 두었습니다.
  • AWS 구형 서명, 일부 국내 결제사 규격 등 SHA1 을 요구하는 곳이 아직 있습니다.

자주 묻는 질문

비밀 키를 여기 넣어도 안전한가요?

키와 메시지는 브라우저 안에서만 처리되며 서버로 전송되지 않습니다. 인터넷을 끊고도 동작합니다. 다만 공용 PC 에서는 입력한 값이 화면에 남으므로 사용 후 지우기를 눌러 주세요.

값이 안 나오고 오류가 뜹니다.

키 형식을 16진수나 Base64 로 골랐는데 실제 값이 그 형식이 아니면 읽지 못합니다. 형식을 글자 그대로로 바꿔 보세요.

http 로 열었더니 안 됩니다.

서명 계산에 쓰는 브라우저 기능(Web Crypto)은 보안 연결에서만 동작합니다. 주소를 https 로 바꿔 다시 열어 주세요.

결과가 맞는지 어떻게 믿나요?

브라우저에 내장된 표준 구현을 그대로 씁니다. 널리 공개된 시험값(HMAC-SHA256 으로 키 key, 메시지 The quick brown fox jumps over the lazy dog → f7bc83f4… )과 일치하는 것을 확인했습니다.