Cách sử dụng
- Nhập khóa bí mật và chọn định dạng văn bản thuần hoặc byte hex.
- Dán thông điệp, chẳng hạn nội dung webhook nguyên trạng như khi nhận được.
- Chọn thuật toán và định dạng đầu ra mà dịch vụ của bạn sử dụng; HMAC sẽ được cập nhật khi bạn nhập.
- Để kiểm tra chữ ký, hãy dán chữ ký vào ô xác minh và tìm kết quả “Khớp”.
Cách hoạt động
HMAC (RFC 2104) kết hợp khóa bí mật với hàm băm để tạo chữ ký mà chỉ người có khóa mới tạo được. Các dịch vụ như webhook và yêu cầu API có chữ ký gửi HMAC kèm theo mỗi thông điệp để bên nhận có thể kiểm tra tính xác thực và nguyên vẹn của thông điệp.
Công cụ này sử dụng Web Crypto API của trình duyệt (crypto.subtle.importKey và sign) và đã được kiểm tra bằng các bộ giá trị kiểm thử RFC 4231 và RFC 2202. Khóa dạng văn bản và thông điệp được mã hóa thành UTF-8. Khóa hex được giải mã thành byte thô; khoảng trắng, dấu hai chấm và tiền tố 0x ở đầu sẽ bị bỏ qua. HMAC-SHA-256 là lựa chọn phổ biến nhất; HMAC-SHA-1 vẫn được xem là an toàn khi dùng làm MAC nhưng chủ yếu được các API cũ sử dụng.
Nếu chữ ký không khớp, hãy kiểm tra những chi tiết thường gây khác biệt: byte chính xác của thông điệp (nhiều nhà cung cấp webhook ký phần thân thô, không phải JSON đã được định dạng lại), dấu thời gian hoặc tiền tố mà nhà cung cấp thêm vào chuỗi được ký, khóa được dùng dưới dạng văn bản hay cần giải mã từ hex hoặc Base64 trước, và chữ ký dự kiến ở dạng hex hay Base64, có tiền tố như “sha256=” hay không. Hãy xóa tiền tố đó trước khi so sánh.
Ví dụ
Trường hợp kiểm thử RFC 4231
Khóa “Jefe” (dạng văn bản), thông điệp “what do ya want for nothing?” và HMAC-SHA-256 cho kết quả 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Chọn “Thử ví dụ” để tải nội dung này.
Kiểm tra chữ ký webhook
Nhà cung cấp gửi tiêu đề X-Signature: sha256=… kèm theo mỗi yêu cầu. Dán phần thân thô của yêu cầu làm thông điệp, dùng bí mật webhook làm khóa, chọn HMAC-SHA-256 và Hex, rồi dán giá trị sau “sha256=” vào ô xác minh.
Khóa được mã hóa dưới dạng hex
Một số hệ thống cấp khóa dưới dạng chuỗi hex như 0b0b0b…. Chọn Hex làm định dạng khóa để công cụ ký bằng các byte đã giải mã; nếu coi cùng chuỗi đó là văn bản, kết quả sẽ hoàn toàn khác.
Câu hỏi thường gặp
HMAC khác gì với mã băm thông thường?
Bất kỳ ai cũng có thể tính mã băm thông thường như SHA-256 của một thông điệp. HMAC còn phụ thuộc vào khóa bí mật, vì vậy chỉ người có khóa mới tạo hoặc kiểm tra được. Điều này chứng minh thông điệp đến từ người nắm giữ khóa và chưa bị thay đổi.
Tại sao HMAC của tôi không khớp với HMAC trên máy chủ?
Byte đầu vào hầu như luôn khác nhau: ký tự xuống dòng, khoảng trắng, thứ tự khóa JSON, bảng mã ký tự hoặc khóa cần được giải mã từ hex hay Base64. Ngoài ra, hãy so sánh cùng định dạng (hex hoặc Base64) và xóa các tiền tố như “sha256=”.
Khóa bí mật của tôi có được gửi đi đâu không?
Không. Khóa và thông điệp chỉ được Web Crypto API sử dụng trong thẻ trình duyệt này. Chúng không được tải lên, lưu trữ hoặc đưa vào hệ thống phân tích.
HMAC-SHA-1 còn an toàn không?
Các va chạm SHA-1 không trực tiếp làm mất tính an toàn của HMAC-SHA-1; thuật toán này vẫn được chấp nhận để đảm bảo khả năng tương thích. Với hệ thống mới, hãy dùng HMAC-SHA-256 trở lên.
Quyền riêng tư
Khóa, thông điệp và kết quả chỉ tồn tại trong thẻ trình duyệt này. Không có dữ liệu nào được tải lên, lưu trữ hoặc gửi đến dịch vụ phân tích; chỉ ghi nhận một sự kiện ẩn danh cho biết công cụ đã được sử dụng.