it-box

HMAC 생성기

비밀 키와 선택한 해시 함수로 HMAC을 계산합니다.

HMAC 생성기 도구 열기

평문과 비밀 키로 HMAC 값을 계산합니다. MD5, RIPEMD160, SHA-1, SHA-2, SHA3 중 해시 함수를 고르고 결과 인코딩을 바꿀 수 있습니다.

사용 순서

  1. 해시를 계산할 평문을 입력합니다.
  2. 비밀 키를 입력합니다. 비워 두면 빈 키로 계산됩니다.
  3. 해시 함수와 출력 인코딩을 고릅니다.
  4. 결과 칸의 값을 Copy HMAC 버튼으로 복사합니다.

예시

평문 The quick brown fox jumps over the lazy dog, 비밀 키 key, HMAC-SHA256, Hex 출력이면 f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8이 나옵니다.

한계

결과는 암호화가 아니라 해시 값이므로 평문을 되돌릴 수 없습니다. 이 도구에는 검증 기능이 없어서 생성한 값을 직접 눈으로 비교해야 합니다. 키를 비워도 오류 없이 계산됩니다.

보안 주의

같은 키와 평문을 알면 누구나 같은 HMAC을 만들 수 있으므로, 키가 노출될 수 있는 화면이나 스크린샷에 값을 남기지 마세요. 실제 서명 키로 계산한 결과를 로그나 문서에 붙여 넣지 않는 것이 좋습니다.

배경 지식

HMAC은 해시 함수와 비밀 키를 함께 써서 메시지가 바뀌지 않았고 키를 가진 쪽이 보냈다는 것을 확인하는 코드입니다. 해시만 쓰면 누구나 같은 값을 만들 수 있지만, 키를 모르면 같은 HMAC을 만들 수 없습니다. 웹훅 서명과 API 요청 서명에서 가장 흔히 보는 방식입니다. 그래서 HMAC 값은 메시지와 함께 전달되고, 받는 쪽은 같은 키로 다시 계산해 일치하는지 봅니다.

HMAC은 키를 메시지 뒤에 단순히 붙여 해시하는 방식이 아닙니다. 키를 블록 크기에 맞춘 뒤 안쪽과 바깥쪽에서 두 번 해시하는 구조입니다. 덕분에 길이 확장 공격을 막습니다. 검증할 때는 두 값을 비교하는 함수가 값의 앞부분부터 달라지는 시간 차이로 정보를 흘리지 않도록, 상수 시간 비교 함수를 쓰는 것이 중요합니다. 이 과정을 직접 구현할 때 일반 문자열 비교 연산자를 그대로 쓰면 검사가 무력해질 수 있습니다.

자주 묻는 질문

HMAC과 단순 해시의 차이는 무엇인가요?

단순 해시는 누구나 계산할 수 있지만 HMAC은 비밀 키가 있어야 같은 값을 만들 수 있습니다. 그래서 HMAC은 발신자 확인과 변조 방지에 쓰이고, 단순 해시는 내용 지문에 쓰입니다.

어떤 해시 함수를 골라야 하나요?

상대 시스템이 정한 알고리즘을 그대로 쓰는 것이 원칙입니다. 새로 설계한다면 SHA-256 기반이 흔한 선택입니다. MD5나 SHA-1 기반 HMAC은 호환성 때문에만 쓰는 편이 좋습니다.

HMAC 값을 어떻게 비교하면 되나요?

받은 값과 직접 계산한 값을 같은 인코딩으로 맞춰 한 글자씩 비교하면 됩니다. 실제 서버 코드에서는 일반 문자열 비교 대신 상수 시간 비교 함수를 사용해야 합니다.