Bộ tạo HMAC
HMAC là thuật toán nền tảng cho hầu hết các webhook có chữ ký, tiêu đề AWS Signature phiên bản 4 và token JWT HS256. Chỉ cần nhập một thông điệp cùng khóa bí mật, chọn một họ hàm mã hóa, bộ tạo này sẽ sinh ra giá trị HMAC đúng như quy định trong RFC 2104 – rất hữu ích để xác minh nội dung dữ liệu sắp được gửi từ hệ thống phía sau hoặc tái tạo chữ ký nhận được từ một API.
Cách tính giá trị HMAC
-
1
Dán thông điệp
Các byte cụ thể cần được ký, một payload của webhook, một yêu cầu chuẩn, hoặc bất kỳ chuỗi nào.
-
2
Nhập khóa bí mật
Có thể là văn bản hoặc giá trị thập lục phân (hex). Bộ tạo sẽ đệm hoặc băm khóa cho vừa kích thước khối theo quy định của RFC.
-
3
Chọn thuật toán mã hóa hash
SHA-256 là giá trị mặc định; bạn có thể chọn SHA-1, SHA-384, SHA-512 hoặc MD5 để đảm bảo tương thích với các hệ thống cũ.
-
4
Sao chép chữ ký
Đầu ra là định dạng hex viết thường, sẵn sàng dán vào cấu hình webhook hoặc tiêu đề Authorization.
HMAC bên trong hệ thống
HMAC bao bọc một hàm băm thông thường trong một cấu trúc có khóa, nhằm đảm bảo chữ ký không thể bị giả mạo nếu thiếu khóa.
Công thức RFC 2104
HMAC(k, m) = H((k' ⊕ opad) ∥ H((k' ⊕ ipad) ∥ m))
trong đó k' là khóa được đệm cho vừa kích thước khối băm, còn opad = 0x5c repeated và ipad = 0x36 repeated là các hằng số đệm.
Các lựa chọn thuật toán
| Thuật toán | Kích thước khối | Độ dài đầu ra | Khuyến nghị cho |
|---|---|---|---|
| HMAC-SHA-256 | 64 byte | 32 byte | Giá trị mặc định hiện đại, dùng để ký chữ ký webhook |
| HMAC-SHA-384 | 128 byte | 48 byte | Chữ ký API với mức độ bảo mật cao hơn |
| HMAC-SHA-512 | 128 byte | 64 byte | Token có tuổi thọ dài |
| HMAC-SHA-1 | 64 byte | 20 byte | Phiên bản cũ (AWS S3 v2, OAuth 1.0) |
| HMAC-MD5 | 64 byte | 16 byte | Chỉ dùng cho phiên bản cũ; không nên sử dụng trong các ứng dụng mới |
Nơi mà HMAC xuất hiện
- GitHub, Stripe, Shopify webhook: tiêu đề
X-Hub-Signature-256,Stripe-Signature, v.v. - AWS Signature v4: một chuỗi chữ ký HMAC-SHA256 được áp dụng lên yêu cầu chuẩn.
- JWT HS256: chữ ký của token là
HMAC-SHA-256(header.payload, secret). - Token khôi phục mật khẩu: HMAC được tính từ user_id, thời hạn hết hạn và mật mã riêng của trang web.
Các lỗi phổ biến
- Truyền khóa được mã hóa hex dưới dạng văn bản thay vì giải mã nó thành các byte trước tiên.
- Ký sai các byte tải trọng (payload): một số webhook ký toàn bộ thân yêu cầu thô (bao gồm cả khoảng trắng), trong khi những webhook khác lại ký theo dạng chuẩn.
- Dùng
==trong JavaScript hoặc Python để so sánh chữ ký; luôn áp dụng cách so sánh an toàn về thời gian (timing-safe) nhằm chống lại các cuộc tấn công dựa trên thời gian.
Câu hỏi thường gặp
Hầu như luôn là do các byte thông điệp khác nhau. Việc ký vào phần nội dung đã được phân tích dưới dạng JSON sẽ gây ra sự thay đổi về khoảng trắng; vì vậy nên ký trực tiếp vào phần nội dung yêu cầu thô. Đồng thời, cần kiểm tra xem khóa có được giải mã theo cùng một cách (từ dạng hex đến dạng byte thô) ở cả hai phía hay không.
Đúng vậy. Nếu khóa ngắn hơn kích thước khối hash thì sẽ được lấp đầy bằng các bit không; nếu dài hơn thì sẽ được thực hiện phép tính hash trước tiên. RFC 2104 khuyến nghị rằng độ dài khóa phải ít nhất bằng độ dài kết quả đầu ra (32 byte đối với SHA-256).
HMAC vẫn có khả năng chống lại các cuộc tấn công va chạm MD5 đã biết, bởi vì cơ chế tấn công này không ảnh hưởng đến quá trình xây dựng hàm HMAC. Tuy nhiên, bạn nên sử dụng HMAC-SHA-256 cho mọi mã nguồn mới – cả các công cụ phát triển lẫn các tổ chức kiểm toán đều yêu cầu điều này.
Có. Thông điệp và khóa bí mật được gửi tới máy chủ của chúng tôi qua kết nối HTTPS được mã hóa để tính toán HMAC. Chúng chỉ được dùng cho việc tính toán và không được lưu trữ hay ghi nhật ký.
Công cụ liên quan
Bộ mã hóa tệp Base64
Mã hóa mọi tệp (PDF, ZIP, ảnh, tệp thực thi) thành văn bản Base64 để nhúng vào JSON, email, YAML hoặc data URI. Chạy cục bộ, không tải lên.
Trình tạo CSR
Tạo Yêu cầu ký chứng chỉ dạng PEM và private key RSA tương ứng. Chỉ định common name, các trường tổ chức và kích thước khóa (2048, 3072 hoặc 4096 bit).
Bộ mã hóa và giải mã Base58
Mã hóa văn bản UTF-8 hoặc byte thập lục phân và giải mã Base58 an toàn bằng bảng chữ cái Bitcoin, Ripple hoặc Flickr.
Nhận diện mật mã
Dán văn bản mã hóa vào, công cụ nhận diện sẽ gợi ý các sơ đồ mã hóa/mật mã khả dĩ: Base64, hex, nhị phân, Morse, Caesar hoặc thay thế, JWT và các hàm băm phổ biến.
Bộ mã hóa mật mã Caesar
Mã hóa và giải mã văn bản bằng mật mã Caesar. Hỗ trợ mọi độ dịch 1-25, có ROT13 như một trường hợp đặc biệt, giữ nguyên dấu câu và chữ hoa/thường.
Trình kiểm tra checksum
Tính checksum MD5, SHA-1, SHA-256, SHA-384, SHA-512 hoặc CRC32 của bất kỳ văn bản nào và đối chiếu với giá trị mong đợi để có kết luận rõ ràng là khớp hay không.
Công cụ này có phiên bản bằng các ngôn ngữ khác
- Gerador de HMAC [PT]
- Generador de HMAC [ES]
- HMACジェネレーター [JA]
- مولّد HMAC [AR]
- HMAC-generator [SV]
- Générateur HMAC [FR]
- HMAC-Generator [DE]
- ตัวสร้าง HMAC [TH]
- HMAC 생성기 [KO]
- HMAC-generator [NL]
- HMAC Generator [ID]
- Generator HMAC [PL]
- Генератор HMAC [RU]
- HMAC Jeneratörü [TR]
- HMAC 生成器 [ZH]
- HMAC Generator [EN]
- Generatore HMAC [IT]