HMAC (Hash-based Message Authentication Code) là công nghệ xác thực thông điệp được sử dụng rộng rãi, được định nghĩa trong RFC 2104. HMAC xử lý khóa cùng với thông điệp thông qua hàm hash để tạo ra chữ ký có độ dài cố định. Khác với hash thông thường, HMAC yêu cầu biết khóa để tạo hoặc xác minh chữ ký, đảm bảo cả tính toàn vẹn và tính xác thực của thông điệp.
**HMAC là nền tảng của bảo mật API hiện đại**. Stripe, GitHub, Shopify, Slack và Twilio sử dụng HMAC-SHA256 để ký các sự kiện webhook, đảm bảo rằng các yêu cầu thực sự đến từ nền tảng. AWS sử dụng HMAC-SHA256 để ký yêu cầu Signature V4. Thuật toán HS256 của JWT về bản chất là HMAC-SHA256. Hiểu HMAC là bước đầu tiên để nắm vững bảo mật API.
**Mỗi nền tảng có định dạng chữ ký khác nhau**: Định dạng của Stripe là `t=timestamp,v1=hex_signature`, ký `timestamp.payload`; GitHub sử dụng `X-Hub-Signature-256` với định dạng `sha256=hex_signature`; Shopify sử dụng `X-Shopify-Hmac-Sha256` với giá trị mã hóa Base64. Công cụ này hỗ trợ phân tích cú pháp và xác minh tự động cho các định dạng phổ biến này.
**Tại sao xác minh chữ ký thất bại?** Nguyên nhân phổ biến nhất là định dạng thông điệp không khớp: nền tảng có thể đang ký `timestamp.payload` thay vì nội dung thông điệp thô; hoặc thông điệp chứa xuống dòng thừa; hoặc chữ ký bao gồm tiền tố (như `sha256=`) cần phải xóa. Kiểm tra kỹ tài liệu nền tảng và so sánh bằng cách sử dụng giá trị thập lục phân thô.
Công cụ này sử dụng **Web Crypto API** (SubtleCrypto) tích hợp sẵn của trình duyệt cho tính toán HMAC — cùng thư viện mật mã chạy HTTPS và TLS. Tất cả tính toán diễn ra cục bộ; khóa và thông điệp không bao giờ được gửi đến bất kỳ máy chủ nào. Mở bảng Network trong Công cụ dành cho nhà phát triển của trình duyệt để xác minh không có yêu cầu bên ngoài nào được thực hiện.