본문으로 건너뛰기
yutils
예시

입력 (Message + Secret + Signature + 알고리즘)

Message: GET /api/orders
Secret: your-256-bit-secret
Signature: f4a4d5e1c8d2b3a9...
Algorithm: SHA-256

결과

✓ 서명 일치 — 메시지가 secret 으로 서명되었음 확인

참고

constant-time 비교 — 첫 다른 바이트에서 early return 하지 않아 timing attack 회피. webhook payload 검증 (Stripe/GitHub/Slack) 시 동일 패턴 필수.

사용법 / 자주 묻는 질문

이런 경우 사용하세요

  • Stripe / GitHub / Slack webhook payload 의 X-Signature 검증
  • AWS Signature V4 디버깅 — 예상 서명과 실제 서명 비교
  • API 요청 서명 검증 로직 로컬 테스트
  • JWT HS256 토큰의 서명 부분 직접 검증
  • HMAC Generator (짝) 결과를 즉시 다시 검증 — 양방향 워크플로

자주 묻는 질문

Q.왜 constant-time 비교가 중요한가요?
A.단순 `==` 비교는 첫 다른 바이트에서 early return — 그 시간 차이를 측정하면 한 글자씩 정답을 추측할 수 있는 timing attack 가능. 본 도구는 모든 바이트를 XOR 합산해 일정 시간에 비교.
Q.서명이 Base64 인데요?
A.현재 hex 입력만 지원합니다. Base64 서명은 Base64 → bytes → hex 한 번 변환 후 사용하세요 (Base64 도구로 디코딩 → 다시 hex 인코딩). 후속 작업에서 Base64 직접 지원 검토 중.
Q.secret 이 외부로 전송되나요?
A.아닙니다 — Web Crypto API 의 `crypto.subtle.importKey` + `subtle.sign` 모두 브라우저에서만 동작. secret · message · signature 어느 것도 yutils 서버나 외부 API 로 나가지 않습니다.