# HMAC-SHA256 생성기

메시지와 비밀 키로 HMAC-SHA256 서명을 만듭니다. 두 입력을 UTF-8로 인코딩하고 SHA-256을 사용해 RFC 2104의 HMAC 구성을 적용한 뒤 256비트 태그를 16진수 또는 Base64로 반환합니다. 개발자는 이를 사용해 Stripe, GitHub 또는 Slack 같은 서비스의 웹훅 서명을 디버깅하고, API 요청에 서명하며, 자체 코드의 결과와 비교할 수 있습니다. 키는 반환되거나 로그에 기록되지 않습니다.

## 자주 묻는 질문

### HMAC-SHA256이란 무엇인가요?

HMAC-SHA256은 RFC 2104에 정의된 대로 SHA-256과 비밀 키를 사용해 만든 메시지 인증 코드입니다. 올바른 메시지 태그를 계산할 수 있는 사람은 키를 가진 사람뿐입니다. 결과는 32바이트 또는 16진수 64자입니다.

### 웹훅 서명은 어떻게 확인하나요?

요청 본문 원문을 메시지로, 서명 비밀 값을 키로 붙여넣은 다음 결과를 서명 헤더와 비교하세요. Stripe처럼 타임스탬프, 마침표, 본문을 조합해 서명하는 서비스가 많으므로 해당 문서에 설명된 방식대로 메시지를 구성해야 합니다. 바이트 하나만 달라져도 태그가 달라집니다.

### 알려진 테스트 벡터가 있나요?

RFC 4231 테스트 사례 2에서는 키 Jefe와 메시지 what do ya want for nothing?을 사용하며, 예상 결과는 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843입니다. 이 도구는 정확히 이 값을 반환합니다.

### 키와 메시지는 어떻게 인코딩되나요?

둘 다 UTF-8 텍스트로 인코딩됩니다. 일부 서비스처럼 비밀 값이 16진수나 Base64 형식으로 주어지면, 표시되는 텍스트와 바이트가 다르므로 먼저 자체 코드에서 키를 디코딩해야 합니다. 두 필드 모두 공백과 줄바꿈도 포함됩니다.

### 비밀 키가 저장되나요?

아니요. 요청 중 태그를 계산할 때만 키를 사용합니다. 응답에 포함되지 않고 로그에 기록되거나 저장되지도 않습니다.

### 키는 비어 있거나 매우 길어도 되나요?

HMAC은 빈 키를 포함해 길이에 관계없이 키를 사용할 수 있습니다. RFC에 명시된 대로 64바이트보다 긴 키는 먼저 SHA-256으로 해시됩니다. 실제 사용 시에는 길이가 32바이트 이상인 무작위 키를 선택하세요.

### 16진수와 Base64 중 무엇을 선택해야 하나요?

상대 시스템이 보내는 형식을 사용하세요. GitHub와 Stripe는 16진수를 사용하고, Slack는 16진수 앞에 v0=를 붙이며, 많은 AWS 기반 및 JWT 기반 시스템은 Base64를 사용합니다. 둘 다 같은 32바이트를 인코딩합니다.

### HMAC-SHA256은 키와 메시지를 이어 붙인 뒤 SHA-256한 결과와 같은가요?

아니요. HMAC은 내부 및 외부 패딩 키를 사용해 메시지를 두 번 해시하여 길이 확장 공격을 방지합니다. 키와 메시지를 연결한 뒤 한 번 해시하면 다른 취약한 결과가 나옵니다.

### 코드에서 서명을 어떻게 비교해야 하나요?

Node.js의 crypto.timingSafeEqual 또는 Python의 hmac.compare_digest 같은 상수 시간 비교 함수를 사용하세요. 일반 문자열 비교는 예상 태그에 관한 타이밍 정보를 노출할 수 있습니다.

### 메시지 크기는 얼마나 될 수 있나요?

메시지와 키를 합쳐 최대 5 MiB의 텍스트를 사용할 수 있습니다. 일반적인 웹훅 페이로드와 API 요청을 처리하기에 충분한 크기입니다.

여기에 광고를 게재하시겠어요?

[이메일 보내기](mailto:hi@dennn.is?subject=OneClick%20Pro%20%EA%B4%91%EA%B3%A0%20%EB%AC%B8%EC%9D%98)

[광고 WordPress을 위한 에이전트 지원 플러그인 모음입니다.](https://sleekwp.com/?ref=oneclickpro)
