เครื่องมือนี้ทำอะไร
HMAC (รหัสยืนยันข้อความแบบใช้แฮช, RFC 2104) รวมคีย์ลับเข้ากับฟังก์ชันแฮชเพื่อลงนามข้อความ ผู้รับที่รู้คีย์เดียวกันจะคำนวณ HMAC ใหม่แล้วเทียบกับค่าที่ส่งมา หากข้อความถูกแก้ไขหรือผู้ส่งไม่รู้คีย์ ค่าจะไม่ตรงกัน
HMAC ถูกใช้แทบทุกที่ ทั้งลายเซ็น webhook (GitHub, Stripe, Slack) คำขอ API ที่ลงนาม JWT แบบ HS256 การลงนามคุกกี้ และรหัสผ่านใช้ครั้งเดียว เครื่องมือนี้คำนวณ HMAC-MD5, HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 และ HMAC-SHA512 พร้อมกัน เพื่อให้เทียบกับอัลกอริทึมที่ระบบของคุณใช้ได้ทันที
วิธีใช้
- พิมพ์ คีย์ลับ หากคีย์เป็นไบต์แบบฐานสิบหกหรือ Base64 แทนข้อความธรรมดา ให้เปลี่ยน รูปแบบคีย์
- วาง ข้อความ หรือคลิก ตัวอย่าง
- HMAC ทั้งหมดอัปเดตขณะพิมพ์ เลือกผลลัพธ์ ฐานสิบหก หรือ Base64 แล้วคัดลอกค่าที่ต้องการ
ข้อความถูกเข้ารหัสเป็น UTF-8 ตามที่พิมพ์ทุกตัว รวมช่องว่างและการขึ้นบรรทัดใหม่
ตัวอย่าง
เมื่อคีย์คือ key และข้อความคือ The quick brown fox jumps over the lazy dog ค่า HMAC-SHA256 คือ f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8 ตรวจสอบค่าเดียวกันได้ในคอมมานด์ไลน์:
echo -n "The quick brown fox jumps over the lazy dog" | openssl dgst -sha256 -hmac "key"
สังเกต -n หากไม่มี echo จะเติมการขึ้นบรรทัดใหม่และ HMAC จะเปลี่ยนไป
การตรวจสอบ webhook
การตรวจสอบ webhook ให้นำ body ดิบของคำขอก่อนแปลง JSON มาประกอบสตริงตามเอกสารของผู้ให้บริการ (มักเป็น timestamp.body) คำนวณ HMAC ด้วย signing secret แล้วเทียบกับ header ลายเซ็น ในโค้ดของคุณเอง ให้เทียบลายเซ็นด้วยฟังก์ชันเวลาคงที่เพื่อป้องกันการโจมตีด้านเวลา
คำถามที่พบบ่อย
› แฮชกับ HMAC ต่างกันอย่างไร
แฮชทั่วไปอย่าง SHA-256 ใครก็คำนวณได้ HMAC ผสมคีย์ลับเข้าไปในแฮช จึงมีเพียงผู้ที่รู้คีย์เท่านั้นที่สร้างหรือตรวจสอบค่าได้ จึงเป็นรหัสยืนยันความถูกต้องของข้อความ ไม่ใช่แค่ checksum
› ควรใช้อัลกอริทึม HMAC แบบไหน
โดยทั่วไปใช้ HMAC-SHA256 ซึ่ง API และ webhook ส่วนใหญ่ต้องการ HMAC-SHA512 ก็ใช้ได้ HMAC-MD5 และ HMAC-SHA1 ยังถือว่าปลอดภัยเมื่อใช้เป็น MAC แต่ควรใช้เฉพาะเมื่อระบบเก่าบังคับ
› ทำไม HMAC ของฉันไม่ตรงกับของเซิร์ฟเวอร์
ตรวจสอบไบต์ของข้อความให้ตรงทุกตัว (การขึ้นบรรทัดใหม่ท้ายข้อความหรือช่องว่างใน JSON ที่ต่างกันทำให้ผลเปลี่ยนทั้งหมด) รูปแบบคีย์ (ข้อความ hex หรือ Base64) และการเข้ารหัสผลลัพธ์ ผู้ให้บริการ webhook มักลงนามสตริงที่ประกอบจาก timestamp กับ body ดิบของคำขอ
› คีย์ลับของฉันถูกบันทึกหรือส่งไปที่ไหนหรือไม่
ไม่ HMAC คำนวณในเบราว์เซอร์ของคุณ คีย์อยู่ในหน่วยความจำของหน้านี้เท่านั้น ไม่ถูกบันทึก ไม่ถูกเขียนลงแถบที่อยู่ และไม่รวมอยู่ในลิงก์แชร์