도구스개발

HMAC 계산기

메시지와 키를 안쪽·바깥쪽 두 번 해시로 감싸는 HMAC(RFC 2104)을 SHA-1·SHA-256·SHA-512로 계산합니다. Stripe·GitHub 같은 웹훅 서명 검증에 바로 쓸 수 있는 16진수·Base64 값을 함께 냅니다.

메시지

HMAC은 해시 두 번으로 메시지를 감쌉니다. HMAC(K, m) = H((K′⊕opad) ‖ H((K′⊕ipad) ‖ m))에서 K′는 키를 해시 블록 크기에 맞춘 것이고, ipad·opad는 각각 0x36·0x5c를 반복한 고정 상수입니다. 안쪽 해시만으로는 길이확장 공격에 취약할 수 있는데, 바깥쪽 해시로 한 번 더 감싸는 것이 단순히 SHA-256(key‖message)로 하는 것보다 안전한 핵심입니다.
웹훅 서명 검증에 이렇게 씁니다. Stripe·GitHub 같은 서비스는 요청 본문(메시지)과 미리 공유한 비밀키로 HMAC을 계산해 요청 헤더에 실어 보냅니다. 받는 쪽이 같은 계산을 다시 해서 값이 같으면, 그 요청이 정말 그 서비스가 보낸(그리고 중간에 안 바뀐) 것임을 확인할 수 있습니다.
dev/totp는 이 계산의 특수한 경우입니다 — 메시지가 항상 «8바이트 카운터» 하나로 고정된 HMAC-SHA1입니다. 이 계산기는 임의의 메시지·키·해시 함수를 받는 범용 버전입니다.
입력한 키와 메시지는 서버로 전송되지 않습니다. 계산은 브라우저의 SubtleCrypto로 이뤄지고, 이 페이지를 벗어나지 않습니다.

사용 방법

  1. 1키와 메시지를 넣습니다(텍스트·16진수·Base64 중 골라서).
  2. 2해시 함수(SHA-1·SHA-256·SHA-512)를 고릅니다.
  3. 316진수·Base64 값을 확인하고 필요하면 복사합니다.

자주 묻는 질문

메시지와 키를 안쪽·바깥쪽 두 번 해시로 감싸 만드는 값(RFC 2104)입니다. HMAC(K,m) = H((K′⊕opad) ‖ H((K′⊕ipad) ‖ m))으로, 같은 키를 아는 두 쪽만 같은 값을 계산할 수 있어 메시지가 그 키를 가진 쪽이 보낸 것이고 중간에 안 바뀌었는지 확인하는 데 씁니다.

많은 해시 함수(SHA-256 포함)는 길이확장 공격에 취약해서, 원래 메시지를 몰라도 H(key‖message)를 알면 H(key‖message‖추가데이터)를 계산해버릴 수 있습니다. HMAC은 안쪽 해시 결과를 바깥쪽 해시로 한 번 더 감싸 이 공격을 막습니다.

TOTP는 이 계산의 특수한 경우입니다 — 메시지가 항상 "8바이트 카운터" 하나로 고정된 HMAC-SHA1입니다. 이 계산기는 임의의 메시지·키·해시 함수(SHA-1/256/512)를 받는 범용 버전입니다.

Stripe·GitHub 같은 서비스는 요청 본문(메시지)과 미리 공유한 비밀키로 HMAC을 계산해 요청 헤더에 실어 보냅니다. 받는 쪽이 같은 키·메시지·해시 함수로 이 계산기에 넣어 나온 값이 헤더 값과 같으면, 그 요청이 정말 그 서비스가 보낸 것임을 확인할 수 있습니다.

전송되지 않습니다. 모든 계산은 브라우저의 SubtleCrypto로 이뤄지고, 입력값은 이 기기에만 남습니다.

알아두면 좋은 점

  • 이 계산기는 방문 기록·즐겨찾기·입력값 저장 대상에서 제외됩니다. API 키 같은 민감한 값을 다룰 수 있기 때문입니다.
  • 키가 해시의 블록 크기(SHA-1·SHA-256은 64바이트, SHA-512는 128바이트)보다 길면 먼저 그 해시로 줄인 뒤 계산합니다(RFC 2104 규정).

함께 보면 좋은 도구

마지막 검증: 2026년 9월 3일 · 결과는 참고용 추정치입니다.