HMAC 생성기

메시지와 시크릿 키를 입력하여 HMAC(Hash-based Message Authentication Code)을 생성합니다.

HMAC은 메시지의 무결성과 인증을 동시에 보장하는 암호화 기법입니다. 시크릿 키와 해시 함수를 결합하여 API 인증, 데이터 서명 등에 널리 사용됩니다. 모든 연산은 브라우저에서 로컬로 처리되어 안전합니다.
HMAC-SHA-256 결과

HMAC 생성기 완벽 가이드

HMAC(Hash-based Message Authentication Code)은 암호화 해시 함수와 시크릿 키를 결합하여 메시지의 무결성(integrity)과 인증(authentication)을 동시에 보장하는 메시지 인증 코드(MAC) 알고리즘입니다. 1996년 Mihir Bellare, Ran Canetti, Hugo Krawczyk에 의해 제안되었으며, RFC 2104로 표준화되었습니다. HMAC은 현재 TLS/SSL 프로토콜, API 인증(AWS Signature V4, GitHub Webhooks 등), JWT(JSON Web Token) 서명, IPsec VPN 통신 등 인터넷 보안의 핵심 기반 기술로 광범위하게 사용되고 있습니다. 일반 해시 함수와 달리 시크릿 키가 포함되므로, 키를 모르는 제3자가 메시지를 변조하거나 위조된 인증 코드를 생성하는 것이 사실상 불가능합니다.

HMAC의 작동 원리

HMAC은 내부적으로 두 번의 해시 연산을 수행합니다. 먼저 시크릿 키를 해시 함수의 블록 크기에 맞게 패딩한 뒤, 내부 패딩(ipad, 0x36)과 XOR 연산하여 메시지와 결합한 것을 해시합니다. 이 중간 해시값을 다시 외부 패딩(opad, 0x5c)과 XOR한 키와 결합하여 최종 해시를 생성합니다. 수식으로 표현하면 HMAC(K, m) = H((K' XOR opad) || H((K' XOR ipad) || m))입니다. 이 이중 해시 구조 덕분에 길이 확장 공격(Length Extension Attack) 등 일반 해시 함수의 취약점으로부터 안전합니다.

HMAC vs 일반 해시 함수

SHA-256 같은 일반 해시 함수는 데이터 무결성만 검증할 수 있습니다. 누구나 같은 해시값을 생성할 수 있기 때문에, 해시값만으로는 메시지의 출처를 인증할 수 없습니다. 반면 HMAC은 시크릿 키를 알고 있는 당사자만 올바른 인증 코드를 생성할 수 있어 메시지의 출처까지 검증할 수 있습니다. 예를 들어, API 서버가 클라이언트에게 시크릿 키를 발급하고, 클라이언트가 요청에 HMAC 서명을 포함하면 서버는 동일한 키로 HMAC을 재계산하여 요청의 진위 여부를 확인합니다.

해시 알고리즘별 HMAC 특성

HMAC의 실무 활용 사례

자주 묻는 질문 (FAQ)

Q. HMAC과 일반 해시의 차이점은 무엇인가요?

A. 일반 해시(SHA-256 등)는 키 없이 누구나 동일한 해시값을 생성할 수 있어 데이터 무결성만 검증합니다. HMAC은 시크릿 키를 사용하므로 키를 가진 당사자만 올바른 인증 코드를 만들 수 있어 메시지의 출처 인증과 무결성 검증이 모두 가능합니다.

Q. 시크릿 키의 길이는 얼마나 되어야 하나요?

A. HMAC의 시크릿 키는 최소한 해시 함수의 출력 길이 이상이 권장됩니다. HMAC-SHA-256의 경우 최소 32바이트(256비트) 이상의 랜덤 키를 사용하는 것이 좋습니다. 키가 해시 블록 크기보다 길면 먼저 해시된 후 사용되며, 짧은 키는 0으로 패딩됩니다. 너무 짧거나 추측 가능한 키는 보안 위험이 있습니다.

Q. 이 도구에서 입력한 데이터는 안전한가요?

A. 네, 이 도구는 브라우저에 내장된 Web Crypto API(crypto.subtle)를 사용하여 모든 HMAC 연산을 사용자의 브라우저에서 로컬로 수행합니다. 메시지나 시크릿 키가 서버로 전송되지 않으므로 민감한 데이터도 안전하게 처리할 수 있습니다.

Q. Hex 출력과 Base64 출력은 어떤 차이가 있나요?

A. Hex(16진수)는 바이트를 0-9, a-f 두 글자로 표현하며 디버깅이나 로그 확인에 적합합니다. Base64는 바이트를 A-Z, a-z, 0-9, +, / 문자로 인코딩하여 같은 데이터를 더 짧게 표현합니다. AWS 서명은 Hex, JWT는 Base64를 주로 사용하므로 서비스 요구사항에 맞게 선택하세요.

Q. HMAC-SHA-256은 현재도 안전한가요?

A. 네, HMAC-SHA-256은 2024년 현재 알려진 실질적 공격이 없으며 매우 안전합니다. HMAC 구조 자체가 기저 해시 함수의 충돌 취약점에도 어느 정도 내성을 가지므로, SHA-256의 이론적 취약성이 발견되더라도 HMAC-SHA-256의 안전성이 즉시 위협받지는 않습니다.