HMAC 생성기
HMAC는 대부분의 서명된 웹훅, AWS Signature v4 헤더, 그리고 JWT HS256 토큰의 기반이 되는 알고리즘입니다. 메시지와 비밀 키를 입력하고 해시 계열을 선택하면 이 생성기는 RFC 2104에서 규정한 대로 정확한 HMAC 값을 생성합니다. 이는 백엔드가 전송하려는 데이터를 검증하거나 API로부터 수신한 서명을 재현하는 데 유용합니다.
HMAC을 계산하는 방법
-
1
메시지를 붙여넣으세요
서명할 정확한 바이트, 웹훅 페이로드, 정규화된 요청, 또는 임의의 문자열입니다.
-
2
비밀 키를 입력하세요
텍스트 또는 16진수 형식일 수 있습니다. 생성기는 RFC 규정에 따라 키를 블록 크기에 맞게 패딩하거나 해시 처리합니다.
-
3
해시 알고리즘을 선택하세요
기본값은 SHA-256이며, 기존 시스템과의 호환성이 필요한 경우 SHA-1, SHA-384, SHA-512 또는 MD5를 선택할 수 있습니다.
-
4
서명을 복사하세요
출력은 소문자 16진수 형식으로, 웹훅 설정이나 Authorization 헤더에 바로 붙여넣을 수 있습니다.
HMAC의 내부 원리
HMAC은 일반 해시 함수를 키 기반 구조로 감싸, 키가 없으면 서명을 위조할 수 없도록 합니다.
RFC 2104 레시피
HMAC(k, m) = H((k' ⊕ opad) ∥ H((k' ⊕ ipad) ∥ m))
여기서 k'는 해시 블록 크기에 맞게 패딩된 키이며, opad = 0x5c repeated와 ipad = 0x36 repeated는 패딩 상수입니다.
알고리즘 선택
| 알고리즘 | 블록 크기 | 출력 길이 | 권장 용도 |
|---|---|---|---|
| HMAC-SHA-256 | 64바이트 | 32바이트 | 현대적 기본값, 웹훅 서명 |
| HMAC-SHA-384 | 128바이트 | 48바이트 | 높은 보안이 필요한 API 서명 |
| HMAC-SHA-512 | 128바이트 | 64바이트 | 장기 유효 토큰 |
| HMAC-SHA-1 | 64바이트 | 20바이트 | 레거시 (AWS S3 v2, OAuth 1.0) |
| HMAC-MD5 | 64바이트 | 16바이트 | 레거시 전용; 새 작업에는 사용하지 마십시오 |
HMAC가 사용되는 곳
- GitHub, Stripe, Shopify 웹훅: 헤더
X-Hub-Signature-256,Stripe-Signature등. - AWS Signature v4: 정규화된 요청에 연쇄적으로 적용되는 HMAC-SHA256.
- JWT HS256: 토큰 서명은
HMAC-SHA-256(header.payload, secret)입니다. - 비밀번호 재설정 토큰: user_id, 만료 시간, 사이트 비밀 값을 결합해 생성한 HMAC.
흔한 실수
- 16진수로 인코딩된 키를 먼저 바이트로 디코딩하지 않고 문자열 형태로 전달하는 것.
- 잘못된 페이로드 바이트에 서명하는 것: 일부 웹훅은 공백을 포함한 원시 요청 본문에 서명하고, 다른 웹훅은 정규화된 형식에 서명합니다.
- 서명 비교에 JavaScript나 Python의
==를 사용하는 것; 타이밍 공격을 막기 위해 항상 타이밍 세이프(timing-safe) 비교를 사용하세요.
자주 묻는 질문
거의 항상 메시지 바이트가 서로 다르기 때문입니다. JSON으로 파싱된 본문에 서명하면 공백 문자가 변경되므로, 원시 요청 본문에 직접 서명해야 합니다. 또한 양측에서 키가 동일한 방식(16진수 대 원시 바이트)으로 디코딩되는지 반드시 확인하세요.
네. 키가 해시 블록 크기보다 짧으면 0으로 패딩되고, 길면 먼저 해시 처리됩니다. RFC 2104는 키 길이가 출력 길이(SHA-256의 경우 32바이트) 이상이 되도록 권장합니다.
HMAC는 알려진 MD5 충돌 공격에도 여전히 안전한데, 해당 공격이 HMAC 구조에는 그대로 적용되지 않기 때문입니다. 그럼에도 불구하고 새 코드에는 HMAC-SHA-256을 사용하세요. 도구와 감사자 모두 이를 기대합니다.
네. HMAC을 계산하기 위해 메시지와 비밀 키가 암호화된 HTTPS 연결로 당사 서버에 전송됩니다. 계산에만 사용되며 저장되거나 기록되지 않습니다.
관련 도구
Base64 파일 인코더
모든 파일(PDF, ZIP, 이미지, 실행 파일)을 Base64 텍스트로 인코딩해 JSON, 이메일, YAML, data URI에 삽입하세요. 브라우저에서 로컬로 실행되며 업로드가 없습니다.
체크섬 검증기
텍스트의 MD5, SHA-1, SHA-256, SHA-384, SHA-512 또는 CRC32 체크섬을 계산하고 기대값과 비교해 일치 여부를 명확하게 확인하세요.
암호 식별기
암호문을 붙여 넣으면 Base64, hex, 이진수, 모스, 시저 또는 치환, JWT, 일반적인 해시 등 가능성이 높은 인코딩/암호 방식을 제안합니다.
CSR 생성기
PEM 형식의 인증서 서명 요청과 그에 맞는 RSA 개인 키를 생성합니다. common name, 조직 필드, 키 크기(2048, 3072, 4096비트)를 지정할 수 있습니다.
SSL 인증서 생성기
자체 서명 SSL/TLS 인증서와 RSA 개인 키를 전부 브라우저에서 생성하세요. 사용자 지정 Common Name, SAN, 유효 기간을 PEM으로 내보냅니다.
Base58 인코더 및 디코더
UTF-8 텍스트나 16진수 바이트를 인코딩하고 Bitcoin, Ripple, Flickr 알파벳으로 Base58을 안전하게 디코딩하세요.
이 도구는 다른 언어로도 제공됩니다
- Générateur HMAC [FR]
- مولّد HMAC [AR]
- HMAC-generator [SV]
- HMAC-Generator [DE]
- Bộ tạo HMAC [VI]
- ตัวสร้าง HMAC [TH]
- Generador de HMAC [ES]
- HMACジェネレーター [JA]
- HMAC Generator [ID]
- Generator HMAC [PL]
- Gerador de HMAC [PT]
- HMAC-generator [NL]
- HMAC Generator [EN]
- Generatore HMAC [IT]
- Генератор HMAC [RU]
- HMAC Jeneratörü [TR]
- HMAC 生成器 [ZH]