Computer >> Hướng Dẫn Máy Tính >  >> Kết Nối Mạng >> An Ninh Mạng

Hash (Hàm băm) trong an ninh mạng: Nguyên lý, thuật toán, ứng dụng & best practices

Hash (Hàm băm) là gì?

Hash function (Hàm băm) là một thuật toán toán học xác định (deterministic) nhận đầu vào (input/message) có độ dài tùy ý và tạo ra đầu ra (output/hash value/digest/checksum) có độ dài cố định (fixed-length), thường được biểu diễn dưới dạng chuỗi hexadecimal.

Ví dụ: SHA-256("Hello World") = a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e (64 ký tự hex = 256 bits).

Đặc tính cốt lõi (Cryptographic Hash Properties)

Đặc tínhGiải thíchTầm quan trọng
Deterministic (Xác định)Cùng input → Luôn cùng output.Xác minh tính toàn vẹn (Integrity verification).
Quick Computation (Tính toán nhanh)Hash lớn dữ liệu trong milliseconds.Hiệu năng thực tế (TLS, Git, Blockchain, Password storage).
Pre-image Resistance (Kháng nguyên ảnh - One-way)Khó khăn tính toán ngược: Từ hash h → Tìm input x sao cho H(x)=h. Không thể "giải mã" hash.Lưu trữ mật khẩu an toàn. Không khôi phục được pass từ hash.
Second Pre-image Resistance (Kháng nguyên ảnh thứ 2)Cho input x1, khó tìm x2 ≠ x1 sao cho H(x1)=H(x2).Ngăn chặn thay thế file/certificate độc hại có cùng hash.
Collision Resistance (Kháng va chạm)Khó tìm bất kỳ cặp x1 ≠ x2 nào sao cho H(x1)=H(x2). Birthday Attack: Cần ~2^(n/2) phép thử cho n-bit hash.Chữ ký số, Certificate, Git, Blockchain. MD5/SHA-1 BỊ PHÁ (Collision found).
Avalanche Effect (Hiệu ứng tuyết rơi)Thay đổi 1 bit input → Thay đổi ~50% bit output.Đảm bảo sự khác biệt rõ rệt, ngăn chặn phân tích thống kê.

Các thuật toán Hash phổ biến & Trạng thái bảo mật

Thuật toánĐộ dài OutputTrạng tháiỨng dụng điển hình / Lưu ý
MD5 (Message Digest 5)128-bit (32 hex)❌ BỊ PHÁ (Broken) - Collision practical (2004), Chosen-prefix collision (2009). Tốc độ nhanh.KHÔNG DÙNG cho bảo mật (cert, password, signature). Chỉ dùng: Checksum file non-security (error detection), legacy interop.
SHA-1 (Secure Hash Algorithm 1)160-bit (40 hex)❌ BỊ PHÁ (Broken) - SHAttered collision (2017, Google). Deprecated by NIST, Browser, CA/B Forum.KHÔNG DÙNG cho bảo mật. Chỉ legacy: Git (đang chuyển SHA-256), một số cert cũ đã hết hạn.
SHA-2 Family (FIPS 180-4)SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256✅ AN TOÀN (Secure) - Không collision attack thực tế. Chuẩn NIST, TLS 1.2/1.3, Cert, Bitcoin, Password hashing (với salt/iteration).TIÊU CHUẨN HIỆN NAY. SHA-256 phổ biến nhất. SHA-384/512 cho bảo mật cao hơn/hiệu năng 64-bit.
SHA-3 Family (Keccak, FIPS 202)SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256 (XOF)✅ AN TOÀN (Secure) - Cấu trúc Sponge khác SHA-2. Dự phòng nếu SHA-2 bị phá. Hiệu năng phần mềm chậm hơn SHA-2 (nhanh trên hardware dedicated).Tiêu chuẩn mới, bắt đầu được áp dụng (TLS 1.3, Ethereum 2.0, các protocol mới). SHAKE cho output độ dài tùy ý (XOF).
BLAKE2 / BLAKE3BLAKE2b (512), BLAKE2s (256), BLAKE3 (256, parallelizable)✅ AN TOÀN, HIỆU SUẤT CAO - Nhanh hơn MD5/SHA-1/SHA-2/3 trên software. BLAKE3 song song cực nhanh.Thay thế MD5/SHA-1 cho non-crypto checksum (file integrity, deduplication). BLAKE2 dùng trong WireGuard, Argon2, Restic, BorgBackup. Chưa chuẩn hóa NIST FIPS cho federal US.
RIPEMD-160160-bit⚠️ CŨ, KHÔNG KHUYẾN NGHỊ MỚI - Dùng trong Bitcoin Address (SHA-256 + RIPEMD-160). Không collision attack công khai nhưng thiết kế cũ.Legacy Bitcoin/Blockchain.

Ứng dụng chính trong An ninh mạng

1. Lưu trữ Mật khẩu (Password Hashing) - QUAN TRỌNG NHẤT

KHÔNG BAO GIỜ dùng SHA-256/SHA-512/MD5/SHA-1 trực tiếp cho password! Chúng quá nhanh → Dễ brute-force (GPU/ASIC hàng tỷ hash/giây).

Phải dùng Password Hashing Functions (PHF) / Key Derivation Functions (KDF) - Chậm, Memory-hard, Salted:

  • Argon2id (Winner PHC 2015) - Tiêu chuẩn vàng hiện nay. Tham số: time_cost, memory_cost, parallelism. Dùng libsodium, argon2 lib.
  • scrypt - Memory-hard, dùng trong Litecoin, Tarsnap. Tham số: N, r, p.
  • bcrypt - Dựa trên Blowfish, work factor (cost). Phổ biến, an toàn, nhưng không memory-hard như Argon2/scrypt. Giới hạn 72 bytes input.
  • PBKDF2 (HMAC-SHA-256/512) - Chỉ CPU-hard, không memory-hard. Cần iterations cao (>600k OWASP 2024). Dùng cho FIPS compliance.

Quy trình: `Stored = Algorithm(Salt + Password, Params) || Salt || Params`. Verify: `Compute(Stored_Salt + Input_Pass, Stored_Params) == Stored_Hash`.

2. Kiểm tra Toàn vẹn Dữ liệu (Data Integrity)

  • File download: SHA-256 checksum (Linux ISO, Software release).
  • Git: SHA-1 (đang chuyển SHA-256) cho commit/tree/blob.
  • Package Manager: npm (SHA-512), PyPI (SHA-256), Docker (SHA-256), apt (SHA-256).
  • FIM (File Integrity Monitoring): Tripwire, AIDE, Wazuh, OSSEC hash critical system files.
  • Blockchain: Bitcoin (Double SHA-256), Ethereum (Keccak-256). Merkle Tree root hash.

3. Chữ ký Số (Digital Signatures) & PKI

  • Hash message → Ký hash bằng Private Key (RSA/ECDSA/EdDSA).
  • X.509 Certificates: Hash (SHA-256) của TBSCertificate được ký bởi CA.
  • Code Signing: Hash file/executable → Ký.
  • Document Signing: PAdES, CAdES, XAdES.

4. TLS/SSL & Network Protocols

  • TLS 1.2/1.3: PRF (Pseudo-Random Function) dựa trên HMAC-SHA-256/384. Key Derivation, Finished message verification.
  • Certificate Transparency: Merkle Tree với SHA-256.
  • IPSec/IKEv2: PRF (HMAC-SHA-256/384/512), Integrity (HMAC-SHA-256).
  • SSH: Key Exchange (KDF), Integrity (HMAC-SHA-256/512).

5. MAC (Message Authentication Code) - HMAC & KMAC

  • HMAC (RFC 2104): `HMAC(K, m) = H((K' ⊕ opad) || H((K' ⊕ ipad) || m))`. Chứng thực tính toàn vẹn & nguồn gốc (cần shared secret key). Dùng: API Auth (AWS SigV4, JWT HS256), TLS, IPsec, SSH.
  • KMAC (SHA-3 based): `KMAC(K, X, L, S)`. Built-in keyed mode của SHA-3 (Keccak). Đơn giản, an toàn hơn HMAC.

6. KDF (Key Derivation Functions) - Không phải Password Hashing

  • HKDF (HMAC-based KDF - RFC 5869): Extract-then-Expand. Dùng trong TLS 1.3, Signal Protocol, Age encryption, JWT. Input: IKM (Input Key Material), Salt, Info.
  • PBKDF2: Cũng dùng làm KDF (derive key từ password cho encryption).

7. Các ứng dụng đặc thù khác

  • Bloom Filters / Cuckoo Filters: Probabilistic data structures dùng hash cho membership test (Cert Revocation, Malware URL DB).
  • Consistent Hashing: Phân phối load (Memcached, Redis Cluster, DynamoDB, Cassandra, Load Balancer).
  • Proof of Work: Bitcoin (Double SHA-256 < target), Hashcash.
  • Commitment Schemes: `Commit(m, r) = H(m || r)`. Reveal sau: public m, r.
  • Verifiable Random Functions (VRF): Hash-based (ECVRF) cho Random Beacon, Leader Election (Algorand, Cardano).

Best Practices & Common Mistakes

✅ DO (Nên làm)❌ DON'T (Không nên làm)
Dùng SHA-256/384/512, SHA3-256/384/512, BLAKE2/3 cho integrity, signature, KDF, blockchain.Dùng MD5, SHA-1, RIPEMD-160 cho bất kỳ mục đích bảo mật nào (cert, signature, password, integrity check quan trọng).
Dùng Argon2id, scrypt, bcrypt, PBKDF2-HMAC-SHA256 (với params mạnh) cho Password Hashing.Dùng Fast Hash (SHA-256, MD5...) trực tiếp cho Password. Không salt. Salt ngắn/fix cứng. Iteration thấp.
Luôn dùng Salt ngẫu nhiên, duy nhất, đủ dài (≥16 bytes) cho mỗi password/hash mục đích.Hardcode salt, dùng username làm salt, không salt.
Dùng HMAC-SHA256/512 hoặc KMAC cho Message Authentication (API, Token, Inter-service).Dùng `H(secret || message)` hoặc `H(message || secret)` (Length Extension Attack trên SHA-2/Merkle-Damgård).
Kiểm tra Constant-time comparison khi verify hash/MAC (tránh Timing Attack).Dùng `==` hoặc `strcmp` trực tiếp trên hash/MAC string/bytes.
Cập nhật thuật toán theo NIST SP 800-107 Rev. 1, 800-131A Rev. 2 (Transition dates).Dùng thuật toán deprecated (SHA-1 cho cert, 3DES, RSA-1024).
Sử dụng thư viện crypto chuẩn, được duyệt (OpenSSL, BoringSSL, libsodium, Go crypto, Java JCA, .NET System.Security.Cryptography, Python cryptography/hazmat).Viết crypto/hash thủ công (Roll your own crypto).

Kết luận

Hash là cơ sở vô hình nhưng vững chắc của an ninh mạng hiện đại: Từ mật khẩu (Argon2id), chữ ký số (SHA-256 + RSA/ECDSA), TLS (HMAC-SHA256), Blockchain (SHA-256/Keccak), đến kiểm tra toàn vẹn file (SHA-256/BLAKE3). Hiểu đúng đặc tính, chọn đúng thuật toán cho đúng mục đích (Password Hashing ≠ General Hashing ≠ KDF ≠ MAC), và dùng thư viện chuẩn là chìa khóa. MD5/SHA-1 đã "chết" cho bảo mật - hãy loại bỏ hoàn toàn khỏi hệ thống mới và lên kế hoạch migrate hệ thống cũ.