웹훅 서명 실험실
이 로컬 도구는 자체적인 공급자 중립 규칙을 사용합니다. ASCII 유닉스 초, ASCII 점 하나, 원문 본문 바이트를 순서대로 이어 HMAC-SHA256으로 인증합니다. 헤더 형식은 t=<초>,v1=<64자리 소문자 16진수>입니다. 텍스트 모드는 입력칸의 UTF-8을 사용하고, CRLF나 임의 바이트가 중요하면 16진수 또는 원본 파일을 선택하세요. 검증은 MAC, ± 시간창과 이 탭의 작은 중복 기록을 확인합니다. Stripe·GitHub 호환 헤더나 운영용 웹훅 수신 서버는 아닙니다.
주요 기능
- 텍스트·16진수·로컬 파일의 정확한 바이트를 Web Crypto HMAC-SHA256으로 서명
- 엄격한 타임스탬프 헤더와 서명 입력의 바이트 수·미리보기
- 내용에 따라 조기 중단하지 않는 고정 길이 32바이트 비교로 해시 검증
- 본문 변조·기한 만료·너무 미래인 시각·같은 탭에서 중복 수신을 구분
- 비밀키를 이 페이지 메모리에서만 처리하며 자동 저장·폼 제출·API 호출 없음
사용 방법
- 예제를 불러오거나 텍스트·16진수·원본 파일에서 본문을 선택하고 임시 UTF-8 또는 16진수 키를 입력합니다.
- 서명 시각을 비워 현재 유닉스 초를 쓰거나 재현할 고정 값을 입력한 후 서명합니다.
- 생성된 t=...,v1=... 헤더와 초·점·원문 바이트 입력 규칙을 확인합니다.
- 동일한 원문 바이트와 키로 검증하고 필요하면 시험 시계와 허용 초를 지정합니다.
- 본문 한 바이트를 바꾸거나 시험 시계를 옮기거나 같은 헤더를 두 번 확인해 실패·만료·중복을 관찰합니다.
활용 예시
- CRLF와 LF 차이로 생긴 웹훅 서명 불일치 재현
- 고정된 시계에서 300초 허용 경계 확인
- 올바른 MAC만으로는 시간창 내 재전송을 막지 못함을 확인
- 수신 측이 인증해야 하는 정확한 타임스탬프 접두 바이트 검토
자주 묻는 질문
특정 웹훅 공급자와 호환되나요?
아닙니다. 이 도구는 t=<유닉스 초>,v1=<소문자 16진수>라는 자체 규칙으로 ASCII 시각·점·원문 바이트를 인증합니다. 실제 공급자의 헤더·인코딩·재전송 규칙은 다를 수 있으므로 운영 환경에서는 해당 공급자의 공식 명세를 따르세요.
붙여넣은 JSON이 수신 요청과 다르게 검증되는 이유는 무엇인가요?
서명은 JSON의 의미가 아닌 바이트를 대상으로 합니다. 공백·키 순서·문자 인코딩·CRLF/LF가 결과를 바꿉니다. 브라우저 텍스트 입력칸은 줄바꿈을 정규화할 수 있으므로 정확한 수신 바이트는 원본 파일이나 16진수로 입력하세요.
타임스탬프만으로 재전송을 막을 수 있나요?
아닙니다. ± 시간창은 오래되었거나 너무 미래인 요청을 거르지만 유효한 메시지는 시간창 안에서 다시 전송될 수 있습니다. 이 페이지는 최대 256개 헤더를 한 탭에서만 기억하며 닫거나 지우면 사라집니다. 운영 수신기는 만료 시간이 있는 공유 이벤트 ID·서명 저장소가 필요합니다.
비교가 완전히 일정 시간에 실행되나요?
비교 루프는 32바이트 모두를 첫 불일치에서 멈추지 않고 검사합니다. 다만 JavaScript 엔진과 브라우저는 물리적으로 일정한 실행 시간을 보장하지 않습니다. 이 데모를 부채널 안전성 인증으로 여기지 마세요.
빈 본문도 서명할 수 있나요?
네. 서명 입력에는 시각과 점 다음에 0바이트 본문이 붙습니다. 파일 모드는 선택된 파일이 필요하지만 텍스트·16진수 모드는 빈 입력을 허용합니다.
비밀키가 업로드되거나 저장되나요?
아닙니다. 이 도구는 본문이나 키를 보내는 엔드포인트와 localStorage를 사용하지 않습니다. 비밀키는 지우거나 탭을 닫기 전까지 탭의 React 상태에 남으며 브라우저와 확장 프로그램은 도구의 통제 밖입니다.
개인정보 안내
본문 바이트·헤더·비밀키는 브라우저 메모리에서 처리됩니다. 서명 입력이나 비밀키를 애플리케이션 서버로 보내거나 자동 저장하지 않습니다. 실제 자격 증명을 썼다면 사용 후 입력을 지우세요.
댓글과 질문