ตัวสร้าง HMAC
HMAC เป็นอัลกอริทึมที่ใช้ในเว็บฮุกที่มีลายเซ็นส่วนตัว ส่วนหัวข้อมูล AWS Signature v4 และโทเคน JWT HS256 ส่วนใหญ่ เพียงกรอกข้อความและกุญแจลับ จากนั้นเลือกกลุ่มแฮช ก็จะได้ค่า HMAC ตามที่กำหนดไว้ใน RFC 2104 อย่างแม่นยำ ซึ่งมีประโยชน์สำหรับการตรวจสอบเนื้อหาที่ระบบหลังบ้านกำลังจะส่งออกไป หรือการสร้างลายเซ็นขึ้นมาใหม่จาก API ที่ได้รับมา
วิธีการคำนวณ HMAC
-
1
วางข้อความไว้
ไบต์ที่ต้องการลงนามอย่างแม่นยำ, ได้แก่ เพย์โหลดของเว็บฮุก (webhook payload), คำขอแบบแคนอนิคัล (canonical request), หรือสตริงใดๆ ก็ตาม
-
2
กรุณาป้อนกุญแจลับ
สามารถเป็นข้อความหรือเลขฐานสิบหก (hex) ได้ เครื่องสร้างจะเติมหรือแฮชกุญแจให้ได้ขนาดบล็อกตามมาตรฐาน RFC
-
3
เลือกอัลกอริทึมแฮช
SHA-256 เป็นมาตรฐานเริ่มต้น; หากต้องการให้ระบบรองรับรุ่นเก่า ให้เลือก SHA-1, SHA-384, SHA-512 หรือ MD5
-
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 โดยจะใช้เพื่อการคำนวณเท่านั้น และจะไม่ถูกจัดเก็บหรือบันทึกไว้
เครื่องมือที่เกี่ยวข้อง
ตัวเข้ารหัสไฟล์ Base64
เข้ารหัสไฟล์ใดก็ได้ (PDF, ZIP, รูปภาพ, ไฟล์ปฏิบัติการ) เป็นข้อความ Base64 เพื่อฝังใน JSON, อีเมล, YAML หรือ data URI ทำงานในเครื่องของคุณ ไม่มีการอัปโหลด
ตัวตรวจสอบ checksum
คำนวณ checksum แบบ MD5, SHA-1, SHA-256, SHA-384, SHA-512 หรือ CRC32 ของข้อความใดก็ได้ แล้วเปรียบเทียบกับค่าที่คาดไว้เพื่อดูผลชัดเจนว่าตรงกันหรือไม่
ตัวสร้าง CSR
สร้าง Certificate Signing Request แบบ PEM และคีย์ส่วนตัว RSA ที่จับคู่กัน ระบุ Common Name ช่องข้อมูลองค์กร และขนาดคีย์ (2048, 3072 หรือ 4096 บิต)
เครื่องแปลง ETH เป็น USD
แปลงอีเธอเรียม (ETH) เป็นดอลลาร์สหรัฐด้วยอัตรา ETH/USD แบบเรียลไทม์หรืออัตราที่คุณกำหนดเอง ดูว่าจำนวน ETH เท่าใดก็ได้มีมูลค่าเป็น USD เท่าไร
ตัวเข้ารหัสและถอดรหัส Base58
เข้ารหัสข้อความ UTF-8 หรือไบต์เลขฐานสิบหก และถอดรหัส Base58 อย่างปลอดภัยด้วยชุดอักขระ Bitcoin, Ripple หรือ Flickr
เครื่องมือสร้างใบรับรอง SSL
สร้างใบรับรอง SSL/TLS ที่ลงนามด้วยตนเองและคีย์ส่วนตัว RSA ทั้งหมดในเบราว์เซอร์ กำหนด Common Name, SAN และช่วงอายุเอง ส่งออกเป็น PEM
เครื่องมือนี้มีให้บริการในภาษาอื่น
- HMAC-generator [SV]
- مولّد HMAC [AR]
- Générateur HMAC [FR]
- HMAC Generator [ID]
- HMAC-Generator [DE]
- HMAC 생성기 [KO]
- HMAC-generator [NL]
- HMACジェネレーター [JA]
- Generator HMAC [PL]
- Generador de HMAC [ES]
- Bộ tạo HMAC [VI]
- Gerador de HMAC [PT]
- HMAC Generator [EN]
- Generatore HMAC [IT]
- Генератор HMAC [RU]
- HMAC Jeneratörü [TR]
- HMAC 生成器 [ZH]