วิธีใช้งาน
- ป้อนคีย์ลับ แล้วเลือกรูปแบบว่าเป็นข้อความธรรมดาหรือไบต์ hex
- วางข้อความ เช่น เนื้อหา webhook ตามที่ได้รับมาโดยไม่แก้ไข
- เลือกอัลกอริทึมและรูปแบบผลลัพธ์ที่บริการของคุณใช้ ระบบจะอัปเดต HMAC ขณะพิมพ์
- หากต้องการตรวจสอบลายเซ็น ให้วางลงในช่องตรวจสอบ แล้วดูว่าผลเป็น “ตรงกัน” หรือไม่
วิธีการทำงาน
HMAC (RFC 2104) ผสานคีย์ลับเข้ากับฟังก์ชันแฮชเพื่อสร้างลายเซ็นที่มีเพียงผู้ที่มีคีย์เท่านั้นที่สร้างได้ บริการต่าง ๆ เช่น webhook และคำขอ API ที่ลงลายเซ็น จะส่ง HMAC ไปพร้อมกับแต่ละข้อความ เพื่อให้ผู้รับตรวจสอบได้ว่าข้อความมาจากแหล่งที่ถูกต้องและไม่มีการเปลี่ยนแปลง
เครื่องมือนี้ใช้ Web Crypto API ของเบราว์เซอร์ (crypto.subtle.importKey และ sign) และตรวจสอบความถูกต้องด้วยชุดทดสอบ RFC 4231 และ RFC 2202 คีย์ข้อความและข้อความจะถูกเข้ารหัสเป็น UTF-8 ส่วนคีย์ hex จะถูกถอดรหัสเป็นไบต์ดิบ โดยไม่สนใจช่องว่าง เครื่องหมายโคลอน และ 0x ที่นำหน้า HMAC-SHA-256 เป็นตัวเลือกที่นิยมใช้มากที่สุด ส่วน HMAC-SHA-1 ยังถือว่าปลอดภัยในฐานะ MAC แต่ส่วนใหญ่ใช้กับ API รุ่นเก่า
หากลายเซ็นไม่ตรงกัน ให้ตรวจสอบรายละเอียดที่มักแตกต่างกัน ได้แก่ ไบต์ของข้อความที่ตรงกันทุกประการ (ผู้ให้บริการ webhook หลายรายเซ็นข้อมูลดิบใน body ไม่ใช่ JSON ที่จัดรูปแบบใหม่) timestamp หรือข้อความนำหน้าที่ผู้ให้บริการเพิ่มเข้าไปในสตริงที่ลงลายเซ็น วิธีใช้คีย์ว่าเป็นข้อความหรือต้องถอดรหัสจาก hex หรือ Base64 ก่อน และรูปแบบลายเซ็นที่คาดไว้ว่าเป็น hex หรือ Base64 รวมถึงมีข้อความนำหน้าอย่าง “sha256=” หรือไม่ ซึ่งควรลบออกก่อนเปรียบเทียบ
ตัวอย่าง
กรณีทดสอบ RFC 4231
ใช้คีย์ “Jefe” (ข้อความ) ข้อความ “what do ya want for nothing?” และ HMAC-SHA-256 จะได้ 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 เลือก “ลองตัวอย่าง” เพื่อโหลดข้อมูลนี้
ตรวจสอบลายเซ็น webhook
ผู้ให้บริการส่งส่วนหัว X-Signature: sha256=… มากับทุกคำขอ วาง body ของคำขอดิบเป็นข้อความ ใส่ webhook secret เป็นคีย์ เลือก HMAC-SHA-256 และ Hex จากนั้นวางค่าหลัง “sha256=” ลงในช่องตรวจสอบ
คีย์ที่เข้ารหัสเป็น hex
บางระบบออกคีย์เป็นสตริง hex เช่น 0b0b0b… เลือก Hex เป็นรูปแบบคีย์เพื่อให้เครื่องมือใช้ไบต์ที่ถอดรหัสแล้วในการสร้างลายเซ็น หากใช้สตริงเดียวกันเป็นข้อความ ผลลัพธ์จะแตกต่างกันโดยสิ้นเชิง
คำถามที่พบบ่อย
HMAC ต่างจากแฮชทั่วไปอย่างไร
ทุกคนสามารถคำนวณแฮชทั่วไป เช่น SHA-256 จากข้อความได้ แต่ HMAC ใช้คีย์ลับร่วมด้วย จึงมีเพียงผู้ที่มีคีย์เท่านั้นที่สร้างหรือตรวจสอบได้ วิธีนี้พิสูจน์ว่าข้อความมาจากผู้ที่มีคีย์และไม่มีการแก้ไข
ทำไม HMAC ของฉันจึงไม่ตรงกับค่าจากเซิร์ฟเวอร์
โดยมากไบต์ข้อมูลนำเข้าไม่ตรงกัน เช่น การขึ้นบรรทัดใหม่ ช่องว่าง ลำดับคีย์ JSON การเข้ารหัสอักขระ หรือคีย์ที่ควรถอดรหัสจาก hex หรือ Base64 นอกจากนี้ ให้เปรียบเทียบโดยใช้รูปแบบเดียวกัน (hex หรือ Base64) และลบข้อความนำหน้าอย่าง “sha256=” ออก
มีการส่งคีย์ลับของฉันไปที่อื่นหรือไม่
ไม่ คีย์และข้อความจะถูกใช้โดย Web Crypto API ในแท็บเบราว์เซอร์นี้เท่านั้น ไม่มีการอัปโหลด จัดเก็บ หรือรวมไว้ในการวิเคราะห์ข้อมูล
HMAC-SHA-1 ยังปลอดภัยอยู่หรือไม่?
การชนกันของ SHA-1 ไม่ได้ทำให้ HMAC-SHA-1 ใช้ไม่ได้โดยตรง และยังยอมรับให้ใช้เพื่อความเข้ากันได้กับระบบเดิม สำหรับระบบใหม่ ให้ใช้ HMAC-SHA-256 หรืออัลกอริทึมที่แข็งแกร่งกว่า
ความเป็นส่วนตัว
คีย์ ข้อความ และผลลัพธ์จะอยู่ในแท็บเบราว์เซอร์นี้เท่านั้น ไม่มีการอัปโหลด จัดเก็บ หรือส่งข้อมูลไปยังระบบวิเคราะห์ จะบันทึกเฉพาะเหตุการณ์แบบไม่ระบุตัวตนว่ามีการใช้เครื่องมือนี้