HMACSIGNATURESECURITY
HMAC 생성기
비밀키와 다양한 해시 알고리즘을 사용하여 HMAC 메시지 인증 코드를 생성합니다.
도구 설명 및 사용 방법
비밀키와 다양한 해시 알고리즘을 사용하여 HMAC 메시지 인증 코드를 생성합니다.
사용 단계
1
인증받을 원본 메시지 텍스트를 기재합니다.
2
연산에 연계할 대칭 비밀키(Secret Key) 정보를 키 입력창에 정확히 기입합니다.
3
사용할 해시 암호 엔진(SHA-256, SHA-512 등)을 옵션에서 선택합니다.
4
생성된 HMAC 인증 바이트 스트링을 복사하여 요청 정보의 시그니처 매개변수로 적용합니다.
작동 원리 및 상세 설명
HMAC(Hash-based Message Authentication Code)은 RFC 2104 표준 사양을 준수합니다. 입력된 비밀키의 비트 길이가 해시 엔진의 블록 크기보다 길면 해싱을 거치고, 짧으면 패딩 비트(0x00)로 패딩합니다. 이후 키값에 내부 패딩 상수(ipad, 0x36) 및 외부 패딩 상수(opad, 0x5c)를 각각 XOR 연산해 메시지에 결합한 뒤 2회의 중첩 해싱을 수행하여 서명 비트를 도출합니다.
자주 묻는 질문 (FAQ)
HMAC은 일반 Hashing(해시)과 무엇이 다른가요?
일반 해시는 메시지 내용의 변경만 감지(체크섬)하지만, HMAC은 사전에 합의된 "비밀키(Secret Key)"를 해시 연산식에 결합하여 계산합니다. 이를 통해 제3자가 메시지를 조작한 뒤 해시값까지 재계산해 위장하는 공격(길이 연장 공격 등)을 원천 차단하여 송신자가 진짜인지 인증해 줍니다.
실무에서는 주로 어디에 쓰이나요?
결제 대행사(PG) 결제 요청 패킷의 보안 시그니처 생성, 또는 Webhook 수신 시 헤더의 위변조 검증용 서명 코드로 가장 널리 활용됩니다.
코드 사용 예시
JavaScript Web Crypto API를 활용한 HMAC-SHA256 서명 생성 예시
javascript
async function generateHMAC(message, secretKey) {
const enc = new TextEncoder();
// 1. 대칭 비밀키 임포트
const key = await window.crypto.subtle.importKey(
"raw", enc.encode(secretKey),
{ name: "HMAC", hash: { name: "SHA-256" } },
false, ["sign"]
);
// 2. 메시지에 서명 적용
const signature = await window.crypto.subtle.sign(
"HMAC", key, enc.encode(message)
);
// 3. 16진수 문자열로 포맷
return Array.from(new Uint8Array(signature))
.map(b => b.toString(16).padStart(2, '0')).join('');
}비밀키 대조 서명 기능(HMAC)을 브라우저 SubtleCrypto API를 활용해 생성하는 고난도 크립토 예제입니다.