CoderTools

HMAC 생성기

여러 해시 알고리즘으로 안전한 HMAC 인증 코드 생성

HMAC 생성에 사용되는 비밀 키입니다. 기밀로 유지하세요!

* SHA-1은 안전하지 않은 것으로 간주됩니다. ** MD5는 암호학적으로 깨졌으며 레거시 호환성을 위해서만 사용해야 합니다. 새 응용 프로그램에는 SHA-256 또는 SHA-512를 사용하세요.

HMAC 정보

HMAC(Keyed-Hash Message Authentication Code)는 암호화 해시 함수와 비밀 암호화 키를 포함하는 메시지 인증 코드(MAC)의 특정 유형입니다. RFC 2104에 명시된 바와 같이 데이터 무결성과 메시지 인증을 모두 확인하는 데 사용할 수 있습니다.

데이터 무결성(우발적 변경 감지)만 보장하는 표준 해시 함수(예: SHA-256)와 달리 HMAC는 비밀 키를 사용하여 진위성(공격자에 의한 변조 감지)을 보장합니다. API 인증(예: AWS 서명 v4), JWT(JSON Web Tokens) 및 금융 데이터 전송에 널리 사용됩니다. HMAC의 강도는 기본 해시 함수의 암호화 강도, 해시 출력의 비트 길이 및 키의 품질에 따라 달라집니다.

지원되는 HMAC 알고리즘

이 도구는 SHA-256, SHA-512, SHA-384, SHA-224 및 최신 SHA-3 변형을 포함한 포괄적인 HMAC 알고리즘을 지원합니다. 레거시 지원에는 MD5SHA-1이 포함됩니다. 핵심 계산은 HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m)) 공식을 따릅니다.

일반적인 사용 사례

API 요청 인증 및 서명 검증
HS256/HS384/HS512를 사용한 JWT(JSON 웹 토큰) 서명
웹훅 페이로드 검증
비밀번호 기반 키 파생(PBKDF2)
보안 통신에서의 메시지 무결성 검증

보안 고려 사항

보안은 비밀 키에 크게 의존합니다. 키 강도: 키는 무작위여야 하며 최소한 해시 함수의 출력 길이(예: SHA-256의 경우 32바이트)만큼 길어야 합니다. 알고리즘 선택: 최신 애플리케이션에는 SHA-256 또는 SHA-512를 사용하십시오. 충돌 공격에 취약한 MD5 및 SHA-1은 피하십시오.

예제

메시지: "Hello, World!"

비밀 키: "secret-key-2025"

알고리즘: HMAC-SHA256

출력:

e4d7f1b4c4e5a8d3e...

자주 묻는 질문 (FAQ)

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

해시(SHA-256 등)는 단방향 함수로 누구나 계산할 수 있습니다. HMAC는 해시 함수에 '비밀 키'를 더한 것입니다. 비밀 키를 가진 사람만이 올바른 HMAC를 생성하거나 검증할 수 있으므로 인증에 적합합니다.

왜 단순히 Hash(Key + Message)를 사용하지 않나요?

단순히 키와 메시지를 연결하는 것(`H(Key + Message)`)은 MD5나 SHA-1과 같은 특정 해시 함수에서 '길이 확장 공격(Length Extension Attack)'에 취약합니다. HMAC의 중첩 구조는 이러한 공격을 방지하기 위해 특별히 설계되었습니다.

HMAC는 되돌릴 수 있나요(복호화 가능)?

아니요. HMAC는 암호화 해시 함수이지 암호화 알고리즘이 아닙니다. 단방향입니다. 출력에서 원본 메시지나 키를 복원할 수 없습니다. 데이터를 숨기는 것이 아니라 진위성을 확인하는 데 사용됩니다.

비밀 키는 얼마나 길어야 하나요?

RFC 2104는 최소한 해시 출력 길이(예: SHA-256의 경우 32바이트)와 동일한 키 길이를 권장합니다. 블록 크기보다 긴 키는 해시되므로 보안을 크게 증가시키지 않습니다.

비밀번호 저장에 사용할 수 있나요?

단순 해시보다는 낫지만 비밀번호에는 PBKDF2, bcrypt, Argon2와 같은 전문 키 유도 함수(KDF)를 사용해야 합니다. PBKDF2는 내부적으로 HMAC를 사용하지만 무차별 대입 공격을 늦추기 위해 반복을 추가합니다.

이 도구를 사용해도 내 키가 안전한가요?

네. 이 도구는 완전히 클라이언트 측에서 실행됩니다. HMAC 계산은 브라우저에서 JavaScript(Web Crypto API 또는 CryptoJS)를 사용하여 직접 수행됩니다. 키와 메시지는 서버로 전송되지 않습니다.

빠른 메뉴

최근 사용 도구 없음