MAC (Message Authentication Code) là gì?
MAC (Message Authentication Code) - Mã xác thực thông điệp - là một đoạn dữ liệu ngắn (tag) được sinh ra từ một thông điệp và một khóa bí mật (secret key) dùng để đảm bảo tính toàn vẹn (integrity) và tính xác thực (authenticity) của thông điệp. Chỉ người nắm khóa bí mật mới có thể tạo hoặc kiểm tra MAC hợp lệ.
Chức năng chính của MAC
- Xác thực nguồn gốc: Khẳng định thông điệp đến từ người gửi nắm khóa bí mật.
- Kiểm tra toàn vẹn: Phát hiện mọi thay đổi (tùy ý hoặc lỗi truyền输) của thông điệp trong quá trình truyền.
- Không cung cấp tính bảo mật (confidentiality): MAC không mã hóa nội dung thông điệp.
Các thuật toán MAC phổ biến
1. HMAC (Hash-based MAC) - Phổ biến nhất
Kết hợp hàm băm mật mã (cryptographic hash function) như SHA-256, SHA-384, SHA-512 với khóa bí mật.
HMAC(K, m) = H((K ⊕ opad) || H((K ⊕ ipad) || m))
- HMAC-SHA256: Tiêu chuẩn rộng rãi (TLS 1.2, JWT, AWS Signature, API authentication).
- HMAC-SHA512: An toàn hơn, dùng cho hệ thống yêu cầu bảo mật cao.
2. CMAC (Cipher-based MAC)
Dựa trên block cipher (AES, 3DES). Dùng trong AES-CMAC, thường thấy trong 802.11i, Bluetooth, Zigbee.
3. GMAC (Galois MAC)
Dựa trên phép nhân trong trường Galois, dùng trong chế độ AES-GCM (Authenticated Encryption). Hiệu năng cao, song song hóa tốt.
4. Poly1305
MAC dựa trên đa thức, dùng trong ChaCha20-Poly1305 (TLS 1.3, WireGuard). Rất nhanh trên phần cứng không có AES-NI.
MAC trong TLS/SSL
- TLS 1.2: Dùng HMAC-SHA256/384 trong bộ mật mã (cipher suite) như
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(GCM dùng GMAC tích hợp). - TLS 1.3: Chỉ hỗ trợ AEAD (AES-GCM, ChaCha20-Poly1305) - MAC tích hợp trong mã hóa đã xác thực, không dùng HMAC riêng.
So sánh MAC, HMAC, Chữ ký số (Digital Signature)
| Đặc điểm | MAC / HMAC | Chữ ký số (RSA/ECDSA/EdDSA) |
|---|---|---|
| Khóa | Đối xứng (khóa chung) | Bất đối xứng (khóa riêng/khóa công khai) |
| Tính không thể chối cãi (Non-repudiation) | Không (cả hai bên cùng nắm khóa) | Có (chỉ người có khóa riêng mới ký được) |
| Hiệu năng | Rất nhanh | Chậm hơn đáng kể |
| Quản lý khóa | Khó chia sẻ khóa an toàn cho nhiều bên | Dễ dàng phân phối khóa công khai |
| Ứng dụng điển hình | API auth, TLS record layer, JWT (HS256), kiểm tra toàn vẹn file | TLS handshake, chứng chỉ số, ký code, blockchain |
Yêu cầu bảo mật của MAC
- Kháng va chạm (Collision resistance): Khó tìm hai thông điệp khác nhau có cùng MAC.
- Kháng tiền hình (Preimage resistance): Khó tìm thông điệp cho MAC cho trước.
- Kháng khóa (Key recovery resistance): Khó suy ra khóa bí mật từ cặp (message, MAC).
- Độ dài tag đủ lớn: Tối thiểu 128-bit (16 bytes) - HMAC-SHA256 cho 256-bit.
Ứng dụng thực tế
- Xác thực API: AWS Signature v4, Azure Shared Key, Google Cloud HMAC.
- JWT (JSON Web Token): HS256 = HMAC-SHA256.
- Kiểm tra toàn vẹn file/tải xuống: SHA256SUMS + GPG sign, hoặc HMAC do nhà cung cấp ký.
- Bảo mật IoT: Thiết bị hạn chế tài nguyên dùng CMAC/Poly1305.
- TLS/HTTPS: Bảo vệ toàn vẹn gói tin record layer.
Lưu ý quan trọng
- MAC không thay thế cho mã hóa (encryption) nếu cần bảo mật nội dung.
- Luôn dùng hàm băm hiện đại (SHA-2/SHA-3), tránh MD5, SHA-1.
- Bảo vệ khóa bí mật: lưu trong HSM, Key Vault, biến môi trường - không hardcode trong code.
- Sử dụng so sánh thời gian không đổi (constant-time comparison) để chống tấn công side-channel timing.