HMAC 생성기이란?
HMAC 생성기는 비밀 키와 해시 알고리즘(SHA-256, SHA-512 등)을 사용하여 키 기반 해시 메시지 인증 코드를 생성합니다. HMAC은 데이터 무결성과 진위성을 모두 검증하며, API 인증, 웹훅 서명, JWT 토큰에 일반적으로 사용됩니다.
HMAC는 비밀 키를 해시에 섞어 넣으므로, 그 키를 아는 사람만 서명을 검증할 수 있습니다. SHA-1·SHA-256·SHA-384·SHA-512를 지원하고 출력은 16진수, Base64, Base64URL 또는 원시 바이너리 중에서 고를 수 있습니다. 또한 GitHub, Stripe, Slack, Shopify 웹훅을 위한 원클릭 프리셋이 있어 올바른 알고리즘과 헤더 접두사를 자동으로 채웁니다. 메시지는 일반 텍스트로 입력하거나 16진수, Base64, Base64URL로 이미 인코딩된 상태로 붙여넣을 수 있으며, 서명 전에 원시 바이트로 디코딩됩니다. 실시간 바이트 수 표시가 프로덕션에 안전한 32바이트보다 짧은 키를 알려 주고, 입력에 맞춰 서명이 다시 계산되며, 검증란은 이들 제공자가 보내는 sha256= 또는 v0= 접두사도 허용합니다. 메시지와 키는 모두 사용자 기기에서 처리됩니다.
사용 방법
- 1단계 — 메시지와 비밀 키를 입력합니다.
- 2단계 — 웹훅 프리셋(GitHub, Stripe, Slack, Shopify)을 고르거나, 해시 알고리즘(SHA-1, SHA-256, SHA-384 또는 SHA-512)과 출력 인코딩(16진수, Base64, Base64URL 또는 바이너리)을 직접 설정합니다. 이미 인코딩된 페이로드를 붙여넣으려면 메시지 입력을 16진수나 Base64로 전환하세요.
- 3단계 — 생성된 HMAC 서명을 복사하여 API 헤더나 웹훅 검증에 사용합니다.
사용 시기
- 수신 측이 출처와 무결성을 검증할 수 있도록 웹훅 페이로드에 서명할 때.
- AWS Signature Version 4 같은 API 인증 방식에 필요한 요청 서명을 만들 때.
- HS256, HS384, HS512 알고리즘으로 JWT 서명을 생성할 때.
결과
결제 API에서 HMAC-SHA256으로 서명된 요청이 필요합니다. 요청 본문을 메시지로, API 시크릿을 키로 입력하고, 생성된 서명을 X-Signature 헤더에 복사하세요.
자주 묻는 질문
- HMAC와 message+key를 그냥 SHA-256으로 한 번 해시한 것이 다른 점은?
- HMAC는 안쪽과 바깥쪽에 패딩한 키를 쓰는 이중 해시 구조입니다. 이 구조 덕분에 SHA-1이나 SHA-256 기반의 단순 hash(key‖message) 방식이 취약한 길이 확장 공격을 막을 수 있습니다.
- 출력은 hex와 Base64 중 무엇을 쓰나요?
- API나 웹훅 제공자가 요구하는 형식에 맞추세요. HTTP 헤더에는 hex가 흔하고(Stripe, GitHub), JSON 본문과 JWT에는 Base64가 흔합니다. 같은 서명이고 인코딩만 다릅니다.
- 비밀 키의 길이는 얼마나 되어야 하나요?
- 최소 32바이트(256비트)의 임의 데이터, 가급적 암호학적 난수원에서 얻은 값이 좋습니다. 너무 짧으면 보안이 약해지고, 해시 블록 크기(SHA-256은 64바이트)보다 길게 잡아도 HMAC 내부에서 다시 압축하므로 의미가 없습니다.
- API가 보낸 서명과 내가 계산한 서명이 다른 이유는?
- 대부분 서명 대상 문자열이 다른 게 원인입니다. 공백, 줄바꿈, 쿼리 파라미터 순서, URL 인코딩, 타임스탬프 포함 여부까지 모두 영향을 줍니다. 제공자의 서명 레시피를 바이트 단위로 재현하세요.
- HMAC-SHA1은 지금도 안전한가요?
- 신규 시스템에서는 HMAC-SHA256 이상을 권장합니다. HMAC 구조 자체가 충돌 저항에 의존하지 않으므로 HMAC-SHA1은 기술적으로 여전히 안전하지만, 장기적으로는 SHA-1에서 완전히 벗어나는 편이 무난합니다.