Cryptographic hash và message authentication
Hash ánh xạ input bất kỳ thành digest có độ dài cố định. Không có key và không decrypt. Thuộc tính chính: preimage, second-preimage và collision resistance.
Dùng đúng
- SHA-256/SHA-512 phù hợp fingerprint, content integrity và thành phần construction.
- MD5 và SHA-1 đã collision-broken; không dùng cho security decision.
- Hash thường không xác thực nguồn: attacker sửa dữ liệu rồi tính lại digest.
- HMAC kết hợp secret key với hash để cung cấp integrity + authenticity; verify bằng constant-time comparison.
Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(key, "HmacSHA256")); byte[] tag = mac.doFinal(message);Không tự chế: đừng tạo MAC bằng
SHA256(key || message); dùng HMAC chuẩn.