MAC (Message Authentication Code)
MAC là thẻ xác thực thông điệp, được tạo bởi hàm băm có khóa (keyed hash) trên thông điệp và khóa bí mật K. MAC cung cấp:
- Tính toàn vẹn: Phát hiện thay đổi thông điệp.
- Xác thực nguồn gốc: Chỉ người nắm khóa K mới tạo được MAC hợp lệ.
Đặc điểm: Cần khóa đối xứng (cùng khóa cho tạo và kiểm tra). Các loại phổ biến: HMAC (dùng SHA-256/512), KMAC (SHA-3), CMAC (AES), Poly1305 (ChaCha20).
Hash Function (Hàm băm mật mã)
Hàm băm một chiều (one-way) chuyển đầu vào tùy ý thành chuỗi độ dài cố định (ví dụ SHA-256: 256-bit). Không dùng khóa. Đặc tính cốt lõi:
- Preimage resistance: Khó tìm M từ h = H(M).
- Second-preimage resistance: Khó tìm M' ≠ M với H(M') = H(M).
- Collision resistance: Khó tìm M₁ ≠ M₂ với H(M₁) = H(M₂).
Hash đơn lẻ không cung cấp xác thực vì ai cũng tính được H(M). Để xác thực, phải kết hợp với chữ ký số (ký hash bằng khóa riêng) hoặc MAC.
Bảng so sánh
| Tiêu chí | MAC | Hash Function |
|---|---|---|
| Khóa | Cần khóa bí mật đối xứng | Không dùng khóa |
| Mục đích | Toàn vẹn + Xác thực nguồn | Toàn vẹn (chỉ khi hash được tin cậy) |
| Tạo/Xác thực | Chỉ bên nắm khóa | Ai cũng tính được |
| Non-repudiation | Không (khóa đối xứng) | Không (trừ khi ký số) |
| Ví dụ | HMAC-SHA256, CMAC-AES, Poly1305 | SHA-256, SHA-3, BLAKE2 |
Khi nào dùng gì?
- MAC: Kênh bảo mật hai chiều có khóa chung (TLS record layer, IPsec, JWT HS256).
- Hash + Chữ ký số: Xác thực công khai, non-repudiation (certificate, firmware signing).
- Hash đơn: Kiểm tra tải tệp, Merkle tree, blockchain, commit git — nơi nguồn hash được tin cậy qua kênh khác.