tigtools

เครื่องมือสร้าง HMAC

คำนวณรหัสตรวจสอบความถูกต้องของข้อความแบบใช้คีย์ (HMAC) จากข้อความและคีย์ลับ หรือตรวจสอบลายเซ็นที่ได้รับ คีย์และข้อความจะอยู่ในเบราว์เซอร์ของคุณ

ทำงานในเบราว์เซอร์ของคุณ ไม่ต้องสมัคร

คีย์และข้อความจะประมวลผลในแท็บเบราว์เซอร์นี้เท่านั้น และจะไม่ถูกส่งไปที่ใด อย่างไรก็ตาม หลีกเลี่ยงการวางข้อมูลลับที่ใช้จริงบนคอมพิวเตอร์ที่ใช้ร่วมกับผู้อื่นหรือไม่น่าเชื่อถือ
รูปแบบคีย์

ลงลายเซ็นเป็น UTF-8 ตามที่พิมพ์ทุกประการ การเว้นวรรคหรือขึ้นบรรทัดใหม่ที่ท้ายข้อความจะทำให้ผลลัพธ์เปลี่ยนไป

รูปแบบผลลัพธ์

วางลายเซ็นในรูปแบบ hex (ตัวพิมพ์เล็กหรือใหญ่ก็ได้) หรือ Base64 เพื่อเปรียบเทียบกับผลลัพธ์ด้านบน

วิธีใช้งาน

  1. ป้อนคีย์ลับ แล้วเลือกรูปแบบว่าเป็นข้อความธรรมดาหรือไบต์ hex
  2. วางข้อความ เช่น เนื้อหา webhook ตามที่ได้รับมาโดยไม่แก้ไข
  3. เลือกอัลกอริทึมและรูปแบบผลลัพธ์ที่บริการของคุณใช้ ระบบจะอัปเดต HMAC ขณะพิมพ์
  4. หากต้องการตรวจสอบลายเซ็น ให้วางลงในช่องตรวจสอบ แล้วดูว่าผลเป็น “ตรงกัน” หรือไม่

วิธีการทำงาน

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 หรืออัลกอริทึมที่แข็งแกร่งกว่า

ความเป็นส่วนตัว

คีย์ ข้อความ และผลลัพธ์จะอยู่ในแท็บเบราว์เซอร์นี้เท่านั้น ไม่มีการอัปโหลด จัดเก็บ หรือส่งข้อมูลไปยังระบบวิเคราะห์ จะบันทึกเฉพาะเหตุการณ์แบบไม่ระบุตัวตนว่ามีการใช้เครื่องมือนี้