Tạo và kiểm tra HMAC
Tạo và kiểm tra chữ ký HMAC-SHA256 cùng các loại HMAC khác bằng khóa bí mật.
Không bắt buộc. Giá trị header X-Hub-Signature-256 của GitHub (sha256=…) có thể dán nguyên như vậy.
HMAC là chữ ký được tạo từ một thông điệp và một khóa bí mật dùng chung: ai có khóa đều tính lại được, và bất kỳ thay đổi nào ở thông điệp hay khóa đều cho ra giá trị khác. Webhook (GitHub, Stripe, Slack), yêu cầu API có ký và token JWT HS256 đều dùng nó. HMAC cập nhật ngay khi bạn gõ, và bạn có thể dán một chữ ký để kiểm tra. Giá trị được tính bằng Web Crypto có sẵn trong trình duyệt, nên thông điệp và khóa không bao giờ rời khỏi thiết bị của bạn; công cụ miễn phí và không cần đăng ký.
Cách tạo và kiểm tra HMAC
- Dán thông điệp đúng y như khi được ký — với webhook, đó là phần thân (body) thô của yêu cầu.
- Nhập khóa bí mật, hoặc bấm Tạo để có khóa ngẫu nhiên; chọn Hex nếu khóa bạn nhận được ở dạng byte hex.
- Chọn thuật toán (SHA-256 nếu không có yêu cầu khác) và sao chép kết quả dạng hex hoặc Base64.
- Để kiểm tra chữ ký, dán nó vào mục Kiểm tra chữ ký — giá trị header sha256=… của GitHub dùng được nguyên như vậy.
Tính năng
- HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 và HMAC-SHA512
- Khóa bí mật dạng văn bản (UTF-8) hoặc hex, hoặc khóa ngẫu nhiên 32 byte từ nút Tạo
- Kết quả dạng hex hoặc Base64, cập nhật ngay khi bạn gõ
- Kiểm tra chữ ký nhận được dạng hex hoặc Base64 (kể cả URL-safe), có hoặc không có tiền tố sha256= của GitHub hay v0= của Slack
- Báo cho bạn khi chữ ký có độ dài của thuật toán khác, kèm nút để chuyển sang thuật toán đó
- Tính bằng Web Crypto có sẵn trong trình duyệt
Có riêng tư không?
Có. HMAC được tính bằng Web Crypto có sẵn trong trình duyệt; thông điệp và khóa bí mật chỉ ở trên trang này và không bao giờ bị tải lên hay lưu lại.
Câu hỏi thường gặp
Làm sao xác minh chữ ký webhook GitHub?
Dán phần thân thô của yêu cầu làm thông điệp, secret của webhook làm khóa văn bản, và giá trị header X-Hub-Signature-256 vào mục Kiểm tra chữ ký. GitHub gửi sha256= kèm theo HMAC-SHA256 dạng hex của phần thân, và tiền tố này được đọc nguyên như vậy.
Làm sao kiểm tra chữ ký JWT HS256?
Dán phần header và payload của token — mọi thứ trước dấu chấm thứ hai — làm thông điệp, secret làm khóa, chọn SHA-256, rồi dán phần thứ ba của token vào mục Kiểm tra chữ ký. Chuỗi Base64 URL-safe của nó được đọc nguyên như vậy.
Vì sao chữ ký của tôi không khớp?
Thông điệp phải giống từng byte với nội dung đã được ký: JSON bị định dạng lại, thiếu hoặc thừa ký tự xuống dòng ở cuối, hay kiểu xuống dòng Windows (CRLF) đều làm HMAC thay đổi. Văn bản gõ ở đây dùng kiểu xuống dòng LF. Hãy kiểm tra cả thuật toán và việc khóa là văn bản hay hex.
Kết quả có giống OpenSSL không?
Có. printf '%s' 'message' | openssl dgst -sha256 -hmac 'key' in ra cùng giá trị hex, và khóa hex khớp với -mac HMAC -macopt hexkey:…. Hãy dùng printf hoặc echo -n: echo thông thường thêm một ký tự xuống dòng và ký tự đó cũng bị ký theo.
HMAC-SHA1 có còn an toàn không?
Với HMAC thì trên thực tế là có: các va chạm SHA-1 đã biết không phá được HMAC-SHA1, vì thế các webhook cũ vẫn dùng nó. Với mọi thứ mới, hãy chọn HMAC-SHA256.