HMAC ย่อมาจาก Keyed-Hashing สำหรับการตรวจสอบข้อความ เป็นรหัสการตรวจสอบความถูกต้องของข้อความที่ได้รับจากการเรียกใช้ฟังก์ชันแฮชเข้ารหัส (เช่น MD5, SHA1 และ SHA256) เหนือข้อมูล (เพื่อรับรองความถูกต้อง) และคีย์ลับที่ใช้ร่วมกัน HMAC ถูกกำหนดไว้ใน RFC 2104
HMAC เหมือนกับลายเซ็นดิจิทัล ทั้งคู่ให้ความสมบูรณ์และความถูกต้อง ทั้งคู่ต้องการคีย์การเข้ารหัสและทั้งคู่ใช้ฟังก์ชันแฮช ความแตกต่างที่สำคัญคือลายเซ็นดิจิทัลต้องการคีย์ที่ไม่สมมาตร ในขณะที่ HMAC ต้องการคีย์สมมาตร (ไม่มีคีย์สาธารณะ)
สามารถใช้ HMAC ตามลำดับกับฟังก์ชันแฮชเข้ารหัสแบบวนซ้ำ MD5 และ SHA-1 เป็นอินสแตนซ์ของฟังก์ชันแฮช HMAC ยังต้องการคีย์ส่วนตัวสำหรับการคำนวณและยืนยันค่าการตรวจสอบความถูกต้องของข้อความ
รหัสการตรวจสอบความถูกต้องของข้อความที่แฮชสามารถตรวจสอบความถูกต้องของข้อความและความสมบูรณ์ของข้อมูลที่เกี่ยวข้องได้พร้อมกัน ขนาดของรหัสลับที่ใช้กำหนดความทนทานในการเข้ารหัสของรหัสตรวจสอบข้อความที่แฮช
รหัสการตรวจสอบความถูกต้องของข้อความที่แฮชสามารถใช้กับฟังก์ชันแฮชเข้ารหัสแบบวนซ้ำได้ ซึ่งรวมถึง SHA-1 และ MD-5 พร้อมกับรหัสลับ รหัสยืนยันข้อความที่แฮชรองรับคีย์สาธารณะและส่วนตัวสำหรับทั้งเซิร์ฟเวอร์และไคลเอ็นต์ แม้ว่าคีย์สาธารณะจะรู้จัก แต่คีย์ส่วนตัวจะรู้จักเฉพาะกับไคลเอนต์และเซิร์ฟเวอร์เท่านั้น
กระบวนการทั้งหมดเริ่มต้นด้วยไคลเอนต์สร้างรหัสตรวจสอบข้อความที่แฮชโดยเฉพาะตามข้อมูลที่ร้องขอและแฮชข้อมูลที่ร้องขอพร้อมกับคีย์ส่วนตัว
สิ่งนี้ถูกส่งเป็นองค์ประกอบของคำขอไปยังเซิร์ฟเวอร์ ซึ่งสัมพันธ์กันระหว่างรหัสตรวจสอบความถูกต้องของข้อความที่แฮชทั้งสอง และหากพบว่าเหมือนกัน จะช่วยให้ไคลเอนต์สามารถเชื่อถือได้และดำเนินการตามคำขอ กระบวนการที่สมบูรณ์เรียกอีกอย่างว่าการจับมือแบบลับๆ
เป้าหมายหลักของ HMAC มีดังนี้ -
-
สามารถใช้ฟังก์ชันแฮชที่มีอยู่ได้โดยไม่มีการเปลี่ยนแปลง โดยเฉพาะอย่างยิ่ง ฟังก์ชันแฮชที่ใช้งานได้ดีในซอฟต์แวร์ และโค้ดที่สามารถใช้ได้อย่างเสรีและในวงกว้าง
-
สามารถรักษาประสิทธิภาพเดิมของฟังก์ชันแฮชได้โดยไม่ลดทอนประสิทธิภาพลงอย่างมาก
-
สามารถใช้และจัดการคีย์ได้ด้วยวิธีง่ายๆ
-
มันสามารถมีการวิเคราะห์การเข้ารหัสที่เข้าใจได้ดีเกี่ยวกับความทนทานของโครงสร้างการตรวจสอบความถูกต้องตามสมมติฐานที่สมเหตุสมผลเกี่ยวกับฟังก์ชันแฮชพื้นฐาน
-
สามารถเปลี่ยนฟังก์ชันแฮชพื้นฐานได้ง่ายในกรณีที่พบหรือต้องการฟังก์ชันแฮชที่เร็วกว่าหรือปลอดภัยกว่า
-
วัตถุประสงค์หลักของรหัสตรวจสอบความถูกต้องของข้อความที่แฮชคือได้รับอิทธิพลน้อยกว่าจากการชนกัน และถือเป็นกำลังดุร้ายในการรับคีย์ลับการเข้ารหัส
-
รหัสการตรวจสอบความถูกต้องของข้อความที่แฮชสนับสนุนวิธีการที่สะดวกในการตรวจสอบว่าข้อมูลถูกดัดแปลงและความถูกต้องของผู้ใช้หรือไม่