MAC (Message Authentication Code) คืออะไร?
MAC (Message Authentication Code) เป็นรหัสยืนยันความสมบูรณ์และแหล่งที่มาของข้อความ (Data Integrity & Authenticity) ใช้คีย์ลับแบบ Symmetric Key ร่วมกันระหว่างผู้ส่งและผู้รับ เพื่อสร้างแท็ก (Tag) ขนาดคงที่ จากข้อความต้นฉบับ แล้วนำแท็กนี้ไปต่อท้ายข้อความ ผู้รับคำนวณ MAC ใหม่จากข้อความที่ได้รับและคีย์เดียวกัน หากตรงกัน แสดงว่าข้อความไม่ถูกแก้ไขและมาจากผู้ส่งจริง
คุณสมบัติหลักของ MAC
- Integrity: ตรวจพบการเปลี่ยนแปลงข้อมูลแม้เพียง 1 บิต
- Authenticity: ยืนยันว่าข้อความมาจากฝ่ายที่มีคีย์ลับ
- Symmetric: ใช้คีย์เดียวกันทั้งสร้างและตรวจสอบ (ต่างจาก Digital Signature ที่ใช้ Asymmetric)
- ไม่ให้ Non-repudiation: เพราะทั้งสองฝ่ายมีคีย์เดียวกัน ไม่สามารถพิสูจน์ได้ว่าใครสร้าง MAC
อัลกอริทึม MAC ยอดนิยม
| อัลกอริทึม | รายละเอียด |
|---|---|
| HMAC (Hash-based MAC) | ใช้ Hash Function (SHA-256, SHA-3) ร่วมกับคีย์ลับ มาตรฐาน RFC 2104 ใช้ใน TLS, IPsec, JWT |
| CMAC (Cipher-based MAC) | ใช้ Block Cipher (AES) สร้าง MAC มาตรฐาน NIST SP 800-38B |
| GMAC (Galois MAC) | ส่วนหนึ่งของ AES-GCM ให้ Authenticated Encryption (AEAD) เร็วและปลอดภัย |
| Poly1305 | MAC เร็วสูง ใช้ร่วม ChaCha20 (ChaCha20-Poly1305) ใน TLS 1.3, WireGuard |
ความแตกต่าง: MAC vs HMAC vs MAC Address
| คำศัพท์ | ความหมาย | บริบท |
|---|---|---|
| MAC (Message Authentication Code) | รหัสยืนยันความสมบูรณ์/แหล่งที่มาของข้อความ | Cryptography, Network Security |
| HMAC | ประเภทหนึ่งของ MAC ที่ใช้ Hash Function + Secret Key | Implementation ของ MAC |
| MAC Address (Media Access Control) | ที่อยู่ฮาร์ดแวร์ 48-bit ของ Network Interface (NIC) | Data Link Layer (Layer 2) |
การใช้งาน MAC ในโปรโตคอลเครือข่าย
- TLS/SSL: ใช้ HMAC (ใน TLS 1.2) หรือ AEAD (AES-GCM, ChaCha20-Poly1305 ใน TLS 1.3) เพื่อปกป้อง Integrity ของ Record Layer
- IPsec: ใช้ HMAC-SHA-256 ใน ESP/AH เพื่อยืนยันแพ็กเก็ต
- SSH: ใช้ HMAC สำหรับ Packet Integrity
- JWT (JSON Web Tokens): ใช้ HMAC-SHA256 (HS256) ลงนาม Token
- API Authentication: หลาย API ใช้ HMAC-SHA256 กับ Secret Key เพื่อลงนาม Request
MAC ใน TLS (Transport Layer Security)
ใน TLS 1.2 ใช้ HMAC ร่วมกับ Cipher Block Chaining (CBC) แบบ Encrypt-then-MAC ใน TLS 1.3 เปลี่ยนมาใช้ AEAD (Authenticated Encryption with Associated Data) เช่น AES-GCM หรือ ChaCha20-Poly1305 ซึ่งรวม Encryption และ MAC ไว้ด้วยกัน ให้ประสิทธิภาพและความปลอดภัยดีกว่า
ข้อจำกัดของ MAC
- ต้องมีช่องทางส่งคีย์ลับอย่างปลอดภัย (Key Distribution Problem)
- ไม่ให้ Non-repudiation (ใช้ Digital Signature แทน)
- หากคีย์รั่วไหล โจมตีสามารถปลอม MAC ได้
สรุป
MAC เป็นองค์ประกอบพื้นฐานของความปลอดภัยเครือข่าย ให้บริการ Integrity และ Authenticity ด้วย Symmetric Key HMAC เป็นการนำไปใช้ที่นิยมที่สุดในโปรโตคอลสมัยใหม่ ในขณะที่ AEAD (AES-GCM, ChaCha20-Poly1305) กำลังแทนที่ HMAC ใน TLS 1.3 และโปรโตคอลสมัยใหม่เพื่อประสิทธิภาพและความปลอดภัยที่ดีขึ้น