Công cụ cho lập trình viên

Tạo HMAC

Ký một thông điệp bằng khóa bí mật. Không có gì được truyền đi.

Tạo HMAC Chạy trên thiết bị của bạn
  • Chạy ngay trên trình duyệt của bạn — văn bản của bạn không bao giờ được gửi đi đâu cả
  • Không cần đăng ký, không có hạn mức, dùng miễn phí bao nhiêu lần tùy thích

Cách hoạt động

HMAC chứng minh đồng thời hai điều: thông điệp chưa bị thay đổi, và người tạo ra nó nắm giữ khóa bí mật chung. Nó được dùng để ký webhook, yêu cầu API và liên kết tải xuống trên phần lớn web.

Khác với mã băm thông thường ở điểm quan trọng

Ai cũng có thể tính SHA-256 của một thông điệp, nên một mã băm trơn không chứng minh được gì về người tạo ra nó — đổi thông điệp, tính lại mã băm, và không ai phân biệt được. HMAC đưa một khóa bí mật vào phép tính, nên không thể tính lại nếu không có khóa. Đó chính là toàn bộ mục đích, và là lý do chữ ký webhook dùng HMAC chứ không dùng mã băm.

Xác minh an toàn

Khi kiểm tra HMAC trên máy chủ, hãy so sánh bằng hàm có thời gian không đổi — crypto.timingSafeEqual trong Node, hash_equals trong PHP. Toán tử == thông thường trả kết quả ngay khi hai byte khác nhau, và thời gian thực hiện làm lộ ra phần chữ ký đúng là bao nhiêu, đủ để làm giả một chữ ký nếu đủ kiên nhẫn. Đây là một kiểu tấn công có thật, không chỉ là lý thuyết.

Thuật toán nào

SHA-256, trừ khi có quy định khác. SHA-1 được đưa vào vì nhiều API cũ vẫn yêu cầu HMAC-SHA-1, và HMAC-SHA-1 chưa bị phá vỡ như SHA-1 thông thường — nhưng không có lý do gì để chọn nó cho thứ gì mới.

Hex hay Base64

Hoàn toàn tùy vào bên nhận mong đợi gì. Hex dài gấp đôi và dễ đọc hơn; Base64 gọn hơn và phổ biến trong tiêu đề HTTP. Cùng một chữ ký được hiển thị ở cả hai dạng.

Khóa của bạn ở lại đây

Được tạo bằng Web Crypto API có sẵn của trình duyệt. Khóa và thông điệp không bao giờ bị gửi đi đâu, đó là cách duy nhất có trách nhiệm để cung cấp công cụ này — một công cụ ký mà tải khóa bí mật của bạn lên đã trao đi chính thứ mà khóa bí mật bảo vệ.

Câu hỏi thường gặp

Tạo HMAC — câu hỏi thường gặp

HMAC khác mã băm thông thường ở điểm nào?

Ai cũng có thể tính lại mã băm. HMAC cần có khóa bí mật, nên nó chứng minh được ai là người đã tạo ra nó.

Tôi nên dùng thuật toán nào?

SHA-256, trừ khi API quy định khác. SHA-1 được cung cấp cho các hệ thống cũ vẫn còn yêu cầu nó.

Tôi nên dùng hex hay Base64?

Tùy bên nhận mong đợi dạng nào. Cả hai đều được hiển thị cho cùng một chữ ký.

Vì sao việc so sánh phải có thời gian không đổi?

Phép so sánh thông thường thoát sớm ở chỗ khác nhau đầu tiên, và chênh lệch thời gian làm lộ ra phần đúng là bao nhiêu — đủ để làm giả chữ ký.

Khóa bí mật của tôi có bị gửi đi đâu không?

Không. Mọi thứ chạy ngay trên trình duyệt của bạn thông qua Web Crypto API.