HMACSIGNATURESECURITY
HMAC 생성기
비밀키와 다양한 해시 알고리즘을 사용하여 HMAC 메시지 인증 코드를 생성합니다.
도구 설명 및 사용 방법
메시지 전송 구간 중 변조 유무를 감지하기 위해, 공유된 비밀키와 해시 함수(SHA-256 등)를 연동 계산하여 안전한 HMAC 메시지 인증 코드를 도출합니다. API 서명 검증의 표준 방식입니다.
사용 단계
1
인증받을 원본 메시지 텍스트를 기재합니다.
2
연산에 연계할 대칭 비밀키(Secret Key) 정보를 키 입력창에 정확히 기입합니다.
3
사용할 해시 암호 엔진(SHA-256, SHA-512 등)을 옵션에서 선택합니다.
4
생성된 HMAC 인증 바이트 스트링을 복사하여 요청 정보의 시그니처 매개변수로 적용합니다.
작동 원리 및 상세 설명
HMAC (Hash-based Message Authentication Code, RFC 2104)은 암호학적 해시 함수와 비밀키를 결합하여 메시지 인증 코드를 생성합니다. 키를 모르는 공격자는 메시지를 위변조하더라도 올바른 HMAC을 생성할 수 없으므로, 수신자는 메시지의 무결성과 발신자의 신원을 검증할 수 있습니다.
실무에서는 API 인증, 웹훅 서명 검증, 파일 무결성 확인 등에 광범위하게 사용됩니다. 특히 AWS, Stripe, GitHub Webhooks 등이 이 방식을 표준으로 채택하고 있습니다.
모든 HMAC 계산이 브라우저의 Web Crypto API로 로컬에서 수행되므로, 실제 API 키나 내부 서명 로직을 외부에 노출하지 않고도 안전하게 테스트하고 이해할 수 있습니다.
자주 묻는 질문 (FAQ)
HMAC과 단순 해시의 차이는 무엇인가요?
단순 해시(SHA-256 등)는 누구나 동일한 입력에 대해 동일한 출력을 계산할 수 있습니다. HMAC은 비밀키를 추가로 사용하여, 키를 모르는 사람은 동일한 메시지에 대해 올바른 인증 코드를 생성할 수 없습니다. 이는 메시지 위변조 탐지에 필수적입니다.
HMAC 서명은 암호화인가요?
아닙니다. HMAC은 인증(authentication)과 무결성(integrity)만 보장합니다. 메시지 내용 자체는 평문으로 전송되며, 변조 여부만 검증할 수 있습니다. 기밀성이 필요한 경우 AES 등의 암호화와 함께 사용하세요.
입력한 메시지와 키가 외부로 전송되나요?
전송되지 않습니다. Web Crypto API의 subtle.sign을 사용해 브라우저 내부에서만 HMAC이 계산됩니다. API 키나 내부 서명 로직을 테스트할 때도 안전합니다.
코드 사용 예시
API 요청에 HMAC 서명 추가 (공통 패턴)
javascript
// 클라이언트에서 요청에 서명
const secret = 'your-api-secret';
const message = 'timestamp=1718467200&method=GET&path=/users';
const signature = await hmacSha256(message, secret);
fetch('/api/users', {
headers: {
'X-Signature': signature,
'X-Timestamp': '1718467200'
}
});
// 서버에서는 동일한 키로 서명을 재계산하여 비교AWS Signature Version 4, Stripe, 많은 내부 API에서 사용하는 표준 메시지 인증 방식입니다. 키를 공유한 양측만 올바른 서명을 생성할 수 있습니다.