Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Hashing được sử dụng như thế nào trong mã hóa bảo mật?

Hashing là hàm một chiều (one-way) — dễ tính H(M), khó khôi phục M từ H(M). Không dùng để "mã hóa" (encryption) vì không thể giải mã. Vai trò trong bảo mật: toàn vẹn, xác thực, dẫn xuất khóa, cam kết.

Ứng dụng bảo mật chính

1. Lưu trữ mật khẩu (Password Storage) — Quan trọng nhất

  • Sai: Lưu plaintext, encrypt reversible, hash nhanh (SHA-256, MD5) — dễ brute-force/rainbow table.
  • Đúng: Password Hashing KDF (Key Derivation Function) chậm + Salt duy nhất:
    • Argon2id (mặc định 2024): memory-hard, time-hard, parallelism. Params: m=64MB, t=3, p=4.
    • bcrypt: cost factor ≥ 12 (2024). Giới hạn 72 byte.
    • scrypt: N=16384, r=8, p=1.
    • PBKDF2-HMAC-SHA256: iterations ≥ 600,000 (chỉ khi bắt buộc FIPS).
  • Lưu format MCF: $algo$params$salt$hash. Verify constant-time. Upgrade on login.

2. Chữ ký số (Digital Signature)

  • Ký: Sig = Sign(SK, H(M)) — ký hash thay vì ký message lớn.
  • Verify: Verify(PK, M, Sig) → tính H(M), check sig.
  • Thuật toán: RSA-PSS (SHA-256/384/512), ECDSA (SHA-256/384/512), EdDSA (Ed25519/Ed448 - internal hash), Dilithium (PQC, SHAKE256).
  • Hash phải collision resistant (SHA-256+, SHA-3). MD5/SHA-1 cấm.

3. Xác thực toàn vẹn tệp (File Integrity)

  • Tải xuống: So sánh SHA-256 hash của file với hash công bố (website, sig file).
  • Git: Commit ID = SHA-1 (đang chuyển SHA-256). Merkle tree.
  • Blockchain: Block hash = SHA-256d (Bitcoin), Keccak-256 (Ethereum).
  • Binary transparency / Reproducible builds: Hash build artifact.

4. Message Authentication Code (MAC / HMAC)

  • HMAC(K, M) = H((K⊕opad) || H((K⊕ipad) || M)) — RFC 2104.
  • Dùng: TLS record (HMAC-SHA256), JWT (HS256/HS512), API auth, cookie signing.
  • Keyed hash: Cần khóa K. An toàn nếu H collision-resistant hoặc HMAC security proof.
  • Thay thế hiện đại: AEAD (AES-GCM, ChaCha20-Poly1305) — enc+auth cùng lúc.

5. Key Derivation Function (KDF)

  • HKDF (RFC 5869): HKDF-Extract(salt, IKM) → PRK; HKDF-Expand(PRK, info, L) → OKM. Dùng SHA-256/512. TLS 1.3, Signal, MLS.
  • SHAKE256 (XOF): Dẫn xuất khóa độ dài tùy ý, domain separation tự nhiên.
  • Password-based KDF: Argon2id, bcrypt, scrypt, PBKDF2 (xem mục 1).

6. Commitment Scheme

  • Commit: C = H(r || m) (r = random blinding).
  • Reveal: (r, m) → verify H(r||m) == C.
  • Ứng dụng: Coin flip, sealed-bid auction, ZKP, blockchain (UTXO commitment).

7. Pseudorandom Function (PRF) / Randomness Extraction

  • HMAC / HKDF / SHAKE dùng làm PRF, KDF, randomness extractor (NIST SP 800-90B).
  • Deterministic RNG (HMAC-DRBG, Hash-DRBG, CTR-DRBG).

Hashing KHÔNG phải Encryption

HashingEncryption
Một chiều (không đảo ngược)Hai chiều (có khóa giải mã)
Không khóa (hoặc keyed MAC)Bắt buộc khóa
Mục đích: Integrity, Fingerprint, KDFMục đích: Confidentiality
Deterministic (cùng input = cùng output)Probabilistic (IV/nonce → khác nhau mỗi lần)

Lời khuyên: Hiểu rõ mục đích → chọn đúng công cụ. Password → Argon2id. File integrity → SHA-256/BLAKE3. MAC → HMAC-SHA256 hoặc AEAD. KDF → HKDF/SHAKE. Chữ ký → Hash + Sign. Không bao giờ dùng hashing thay cho encryption khi cần confidentiality.