Message Authentication Code (MAC) là gì?
MAC (Message Authentication Code) – còn gọi là Keyed Hash Function – là một đoạn mã (tag) ngắn được sinh ra từ thông điệp (message) và khóa bí mật chung (secret key) bằng thuật toán mật mã đối xứng. MAC đảm bảo 2 thuộc tính:
- Integrity (Toàn vẹn): Thông điệp không bị thay đổi trên đường truyền.
- Authenticity (Xác thực nguồn gốc): Chỉ người nắm khóa bí mật mới tạo được MAC hợp lệ.
Khác biệt: MAC vs Hash vs Chữ ký số (Digital Signature)
| Đặc điểm | MAC (HMAC, CMAC, GMAC...) | Cryptographic Hash (SHA-256, SHA-3) | Digital Signature (RSA/ECDSA/EdDSA) |
| Khóa | Đối xứng (Secret Key - cùng 1 khóa) | Không có khóa (Public) | Bất đối xứng (Private Key ký, Public Key verify) |
| Chức năng | Integrity + Authenticity | Chỉ Integrity | Integrity + Authenticity + Non-repudiation |
| Tốc độ | Rất nhanh | Rất nhanh | Chậm hơn (công suất lớn) |
| Kích thước đầu ra | Cố định (128-256 bit) | Cố định (256/384/512 bit) | Phụ thuộc khóa (256-512 bit) |
| Non-repudiation | Không (cả 2 bên nắm khóa) | Không | Có (chỉ người nắm private key mới ký được) |
Các thuật toán MAC phổ biến
- HMAC (Hash-based MAC): HMAC-SHA256, HMAC-SHA384, HMAC-SHA512 (RFC 2104). Dùng hàm băm + khóa. Tiêu chuẩn TLS, IPsec, JWT, AWS SigV4.
- CMAC (Cipher-based MAC): AES-CMAC, TDES-CMAC (NIST SP 800-38B). Dùng block cipher (AES).
- GMAC (Galois MAC): Dùng trong AES-GCM (Authenticated Encryption). Hiệu năng cao, song song hóa tốt.
- Poly1305: One-time authenticator, dùng với ChaCha20 (ChaCha20-Poly1305 – TLS 1.3, WireGuard).
- SipHash: Hash table DoS protection, short input, nhanh (Rust, Python dict).
Quy trình tạo & Xác thực MAC
- Key Agreement: Hai bên thiết lập khóa bí mật chung (K) – qua TLS, Diffie-Hellman, KMS, hoặc pre-shared.
- Sender (Tạo MAC):
tag = MAC_Algorithm(K, message). Gửi (message, tag).
- Receiver (Xác thực): Tính
tag' = MAC_Algorithm(K, message). So sánh tag' == tag (constant-time comparison để chống timing attack). Khớp → chấp nhận.
Ứng dụng thực tế
| Lĩnh vực | Ứng dụng MAC |
| TLS/SSL (HTTPS) | HMAC trong TLS 1.2 (HMAC-SHA256), AES-GCM/ChaCha20-Poly1305 trong TLS 1.3 (AEAD) |
| IPsec (VPN) | HMAC-SHA256 (AH/ESP), AES-GCM (ESP) |
| SSH | HMAC-SHA2-256/512, UMAC, HMAC-SHA1 (cũ) |
| JWT (JSON Web Token) | HS256 (HMAC-SHA256), HS384, HS512 – JWS (JSON Web Signature) |
| AWS / Cloud API | AWS Signature Version 4 (HMAC-SHA256) ký request |
| Payment (EMV, 3-D Secure) | MAC (ISO 9797-1) xác thực giao dịch thẻ/chip |
| Secure Messaging | Signal Protocol (HMAC-SHA256), WhatsApp, Telegram MTProto |
| File Integrity | Tripwire, AIDE, RPM/DPKG verify (HMAC/SHA256) |
Tấn công lên MAC & Phòng chống
- Length Extension Attack: Tấn công HMAC(MD5/SHA1) nếu dùng sai cách (H(K||m)). Phòng: Dùng HMAC chuẩn (H(K⊕opad || H(K⊕ipad || m))) hoặc SHA-256/3.
- Collision/Preimage Attack: Phá vỡ hàm băm nền. Phòng: Duyệt thuật toán mạnh (SHA-256/384/512, SHA-3, BLAKE2/3).
- Key Recovery / Side-channel: Timing attack, power analysis. Phòng: Constant-time compare, HSM/TEE, key rotation.
- Replay Attack: Gửi lại (message, tag) cũ. Phòng: Nonce/timestamp/sequence number trong message.
- Forgery (ChữaMAC): Tạo tag hợp lệ không biết khóa. Phòng: Key length ≥ 128-bit, thuật toán an toàn (HMAC-SHA256, AES-GCM, Poly1305).
Lưu ý quan trọng
- MAC không cung cấp Confidentiality (Bảo mật nội dung). Cần kết hợp Encryption (AES-GCM, ChaCha20-Poly1305 – AEAD) hoặc Encrypt-then-MAC.
- Không dùng MAC thay thế Digital Signature khi cần Non-repudiation (chống chối cối).
- Key Management: Sinh khóa ngẫu nhiên an toàn (CSPRNG), lưu trữ an toàn (HSM, KMS, Vault), xoay vòng (rotate) định kỳ.