ตัวสร้าง HMAC

HMAC เป็นอัลกอริทึมที่ใช้ในเว็บฮุกที่มีลายเซ็นส่วนตัว ส่วนหัวข้อมูล AWS Signature v4 และโทเคน JWT HS256 ส่วนใหญ่ เพียงกรอกข้อความและกุญแจลับ จากนั้นเลือกกลุ่มแฮช ก็จะได้ค่า HMAC ตามที่กำหนดไว้ใน RFC 2104 อย่างแม่นยำ ซึ่งมีประโยชน์สำหรับการตรวจสอบเนื้อหาที่ระบบหลังบ้านกำลังจะส่งออกไป หรือการสร้างลายเซ็นขึ้นมาใหม่จาก API ที่ได้รับมา

วิธีการคำนวณ HMAC

  1. 1

    วางข้อความไว้

    ไบต์ที่ต้องการลงนามอย่างแม่นยำ, ได้แก่ เพย์โหลดของเว็บฮุก (webhook payload), คำขอแบบแคนอนิคัล (canonical request), หรือสตริงใดๆ ก็ตาม

  2. 2

    กรุณาป้อนกุญแจลับ

    สามารถเป็นข้อความหรือเลขฐานสิบหก (hex) ได้ เครื่องสร้างจะเติมหรือแฮชกุญแจให้ได้ขนาดบล็อกตามมาตรฐาน RFC

  3. 3

    เลือกอัลกอริทึมแฮช

    SHA-256 เป็นมาตรฐานเริ่มต้น; หากต้องการให้ระบบรองรับรุ่นเก่า ให้เลือก SHA-1, SHA-384, SHA-512 หรือ MD5

  4. 4

    คัดลอกลายเซ็น

    ผลลัพธ์จะแสดงเป็นเลขฐานสิบหก (hex) ตัวพิมพ์เล็ก พร้อมนำไปวางในค่าตั้งค่า webhook หรือส่วนหัวสำหรับอนุญาต (Authorization header)

HMAC ภายในระบบ

HMAC ห่อหุ้มฟังก์ชันแฮชแบบธรรมดาไว้ในโครงสร้างที่ใช้กุญแจ เพื่อให้ไม่สามารถปลอมแปลงลายเซ็นได้หากไม่มีกุญแจ

สูตร RFC 2104

HMAC(k, m) = H((k' ⊕ opad) ∥ H((k' ⊕ ipad) ∥ m))

โดยที่ k' เป็นคีย์ที่ปรับให้สอดคล้องกับขนาดของบล็อกแฮช ส่วน opad = 0x5c repeated และ ipad = 0x36 repeated

การเลือกอัลกอริทึม

อัลกอริทึม ขนาดบล็อก ความยาวผลลัพธ์ เหมาะสำหรับ
HMAC-SHA-256 64 ไบต์ 32 ไบต์ การตั้งค่าเริ่มต้นในยุคปัจจุบันสำหรับการลงนามด้วย webhook
HMAC-SHA-384 128 ไบต์ 48 ไบต์ การลงนาม API ที่มีความปลอดภัยสูงกว่า
HMAC-SHA-512 128 ไบต์ 64 ไบต์ โทเคนที่มีอายุการใช้งานยาวนาน
HMAC-SHA-1 64 ไบต์ 20 ไบต์ เวอร์ชันเก่า (AWS S3 v2, OAuth 1.0)
HMAC-MD5 64 ไบต์ 16 ไบต์ ใช้ได้เฉพาะรูปแบบเก่าเท่านั้น; ควรหลีกเลี่ยงการใช้ในงานใหม่

จุดที่ HMAC ปรากฏขึ้น

  • GitHub, Stripe, Shopify Webhooks: หัวข้อ (header) X-Hub-Signature-256, Stripe-Signature และอื่นๆ
  • AWS Signature v4: ชุดลายเซ็น HMAC-SHA256 ที่ประยุกต์ใช้กับคำขอตามมาตรฐาน
  • JWT HS256: ลายเซ็นของโทเคนคือ HMAC-SHA-256(header.payload, secret)
  • โทเคนสำหรับการตั้งรหัสผ่านใหม่: HMAC ที่คำนวณจาก user_id, expiry และค่าลับของเว็บไซต์

ข้อผิดพลาดที่พบบ่อย

  • ส่งคีย์ที่เข้ารหัสแบบเฮกซาเดซิมอลในรูปแบบข้อความ โดยไม่ต้องถอดรหัสเป็นไบต์ก่อน
  • การลงนามในไบต์ของพารามิเตอร์ที่ไม่ถูกต้อง: Webhook บางตัวจะลงนามในเนื้อหาคำขอในรูปแบบดิบรวมถึงช่องว่าง ส่วนอื่นๆ จะลงนามในรูปแบบมาตรฐาน
  • ใช้ == ใน JavaScript หรือ Python เพื่อเปรียบเทียบลายเซ็น; ควรใช้วิธีการเปรียบเทียบที่ปลอดภัยต่อการโจมตีด้านเวลาเสมอ เพื่อป้องกันการโจมตีดังกล่าว

คำถามที่พบบ่อย

เกือบจะเสมอเนื่องจากไบต์ของข้อความมีความแตกต่างกัน การลงชื่อในส่วนเนื้อหาที่ถูกวิเคราะห์ด้วย JSON จะทำให้เกิดการเปลี่ยนแปลงของพื้นที่ว่าง ดังนั้นควรลงชื่อในส่วนเนื้อหาคำขอดิบแทน นอกจากนี้ ควรตรวจสอบให้แน่ใจว่ากุญแจถูกถอดรหัสในลักษณะเดียวกัน (ระหว่างรูปแบบเฮกซาเดซิมอล กับไบต์ดิบ) ทั้งสองฝ่าย

ใช่ หากคีย์มีความยาวน้อยกว่าขนาดของบล็อกแฮช จะมีการเติมค่าศูนย์เพื่อให้เท่ากัน ส่วนหากคีย์มีความยาวมากกว่า จะถูกประมวลผลด้วยการแฮชก่อนเป็นลำดับแรก RFC 2104 แนะนำให้คีย์มีความยาวไม่น้อยกว่าขนาดของผลลัพธ์ (32 ไบต์ สำหรับ SHA-256)

HMAC ยังคงมีความต้านทานต่อการโจมตีแบบการชนกันของ MD5 ที่ทราบกันดี เนื่องจากการโจมตีดังกล่าวไม่ส่งผลกระทบต่อกระบวนการสร้างค่า HMAC อย่างไรก็ตาม ควรใช้ HMAC-SHA-256 สำหรับโค้ดใหม่ทุกชุด เพราะทั้งผู้พัฒนาและผู้ตรวจสอบระบบต่างคาดหวังให้มีการใช้มาตรฐานนี้

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

เครื่องมือที่เกี่ยวข้อง

รหัสแปลงตัวเลขเป็นตัวอักษร

แปลงตัวเลขเป็นตัวอักษรและย้อนกลับด้วยรหัส A=1, B=2 (A1Z26) สำหรับปริศนา คำทาย และเบาะแสในห้องเอสเคปรูม

เครื่องมือเข้ารหัสข้อความ

เข้ารหัสและถอดรหัสข้อความโดยใช้ AES พร้อมรหัสผ่าน เพื่อให้มีเพียงผู้รับเท่านั้นที่สามารถอ่านข้อความได้

เครื่องมือเข้ารหัส Vigenère

เข้ารหัสและถอดรหัสข้อความด้วยรหัส Vigenère แบบคลาสสิกโดยใช้คำสำคัญ เลื่อนตัวอักษรละติน A-Z พร้อมคงตัวพิมพ์ใหญ่-เล็ก ช่องว่าง และเครื่องหมายวรรคตอน

ตัวสร้าง TOTP

สร้างรหัสผ่านแบบใช้ครั้งเดียวตามเวลา (RFC 6238) จากคีย์ลับ Base32 รองรับ SHA-1, SHA-256, SHA-512 จำนวน 6 ถึง 8 หลัก และช่วงเวลา 30 หรือ 60 วินาที

เครื่องสร้างแฮช SHA1

สร้างค่าแฮช SHA-1 (ยาว 40 ตัวอักษรเฮกซาเดซิมอล) จากข้อความใดๆ เหมาะอย่างยิ่งสำหรับการตรวจสอบค่าเช็คซัมแบบดั้งเดิม รหัสประจำออบเจกต์ของ Git และการตรวจสอบความสมบูรณ์ที่ไม่เกี่ยวข้องกับความปลอดภัย

เครื่องมือสร้างคีย์ SSH

สร้างคู่คีย์ SSH แบบ RSA (2048, 3072 หรือ 4096 บิต) ทั้งหมดในเบราว์เซอร์ของคุณ ทั้งคีย์ส่วนตัวและคีย์สาธารณะไม่ออกจากอุปกรณ์ของคุณ เพิ่มความคิดเห็นและดาวน์โหลดทั้งสองได้

เครื่องมือนี้มีให้บริการในภาษาอื่น