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

Thuật toán băm an toàn (Secure Hash Algorithm - SHA) trong an ninh mạng

Secure Hash Algorithm (SHA) là gì?

SHA (Secure Hash Algorithm) là họ các hàm băm mật mã (Cryptographic Hash Functions) được thiết kế bởi NSA và công bố bởi NIST (Mỹ). Hàm băm nhận đầu vào (message) độ dài tùy ý, cho ra đầu ra (hash value / message digest / fingerprint) có độ dài cố định, tính chất một chiều (one-way): dễ tính hash từ message, không thể 역 tính message từ hash.

Đặc tính bảo mật cốt lõi của hàm băm an toàn

  1. Pre-image Resistance (Kháng nguyên ảnh): Cho hash h, không thể tính được m sao cho H(m)=h.
  2. Second Pre-image Resistance (Kháng nguyên ảnh thứ 2): Cho m1, không thể tìm m2≠m1 sao cho H(m1)=H(m2).
  3. Collision Resistance (Kháng va chạm): Không thể tìm cặp m1≠m2 sao cho H(m1)=H(m2). (Birthday Attack: độ phức tạp ~2^(n/2) với n-bit hash).

Các phiên bản SHA - Sự tiến hóa

Thuật toánNămĐộ dài HashKích thước BlockTrạng tháiỨng dụng điển hình
SHA-0 (SHA)1993160-bit512-bitĐã phá vỡ (Collision attack 2^33)Không dùng nữa
SHA-11995160-bit (40 hex)512-bitĐã bị phá vỡ thực tế (SHAttered 2017: 2^63.1 operations). Cấm dùng cho chữ ký số, cert TLS (Chrome, Firefox, Edge, Safari từ chối cert SHA-1 từ 2017).Git (commit ID - đang chuyển SHA-256), Legacy systems, TLS cert (đã loại bỏ)
SHA-2242001224-bit512-bitAn toàn (truncated SHA-256)Ít dùng, tương thích DSS
SHA-2562001256-bit (64 hex)512-bitTiêu chuẩn vàng hiện tại. Không có tấn công thực tế. Yêu cầu bởi chính phủ Mỹ (FIPS 180-4).TLS 1.2/1.3 Certificates, Bitcoin/Blockchain, PKI, Code Signing, Password Hashing (với salt/iteration), File Integrity, HMAC-SHA256
SHA-3842001384-bit1024-bitAn toàn (truncated SHA-512)TLS 1.3, High-security apps
SHA-5122001512-bit (128 hex)1024-bitAn toàn. Nhanh hơn SHA-256 trên CPU 64-bit.High-security, Password hashing (sha512crypt)
SHA-512/224, SHA-512/2562012224/256-bit1024-bitAn toàn. Truncated SHA-512 với IV khác.Thay thế SHA-224/256 nếu muốn hiệu năng 64-bit
SHA-3 (Keccak)2015224, 256, 384, 512-bit1600-bit (Sponge)Tiêu chuẩn mới nhất (FIPS 202). Kiến trúc Sponge khác hoàn toàn SHA-2. Dự phòng nếu SHA-2 bị phá.Ethereum (Keccak-256), New designs, Post-quantum readiness research
SHAKE128, SHAKE256 (XOF)2015Độ dài tùy ý1600-bitExtendable Output Functions (XOF)Key derivation, Random generation, Custom length hash

Ứng dụng chính của SHA trong an ninh mạng

1. Chữ ký số (Digital Signatures) - PKI/TLS

  • Hash dữ liệu (SHA-256) → Ký bằng Private Key (RSA/ECDSA/EdDSA) → Signature.
  • Xác thực: Hash dữ liệu → Verify bằng Public Key.
  • X.509 Certificates (TLS/HTTPS): Signed with SHA-256withRSA / SHA-256withECDSA / SHA-384withECDSA / SHA-512withRSA.

2. Xác thực thông điệp (Message Authentication - HMAC)

  • HMAC-SHA256 / HMAC-SHA512: Kết hợp khóa bí mật (Secret Key) + Hash → Chứng minh toàn vẹn & nguồn gốc.
  • Dùng trong: TLS (PRF, Finished), IPsec, JWT (HS256/HS512), API Authentication (AWS SigV4, Azure Shared Key), OATH TOTP/HOTP.

3. Băm mật khẩu (Password Hashing) - CẦN LƯU Ý

SHA-256/SHA-512 KHÔNG PHÙ HỢP để băm mật khẩu trực tiếp vì tính toán quá nhanh (GPU/ASIC tính tỷ hash/giây).

Phải dùng KDF (Key Derivation Function) chậm, có salt:

  • Argon2id (Thắng Password Hashing Competition 2015) - Khuyên dùng nhất.
  • scrypt (Memory-hard)
  • bcrypt (Blowfish-based, cost factor)
  • PBKDF2-HMAC-SHA256/SHA512 (NIST SP 800-132, ít nhất 100.000-1.000.000 iterations)

4. Toàn vẹn File & Phần mềm (File Integrity)

  • Checksum SHA-256/SHA-512 cho file download (Linux ISO, Installer, Firmware).
  • Git: Commit ID = SHA-1 (đang chuyển SHA-256).
  • Reproducible Builds: Hash artifact đảm bảo build giống hệt source.
  • SBOM (Software Bill of Materials): Hash mỗi component.

5. Blockchain & Cryptocurrency

  • Bitcoin: Double SHA-256 (SHA-256(SHA-256(block header))) cho Proof-of-Work & Merkle Tree.
  • Ethereum: Keccak-256 (SHA-3 variant) cho Address, Transaction Hash, State Root.

6. TLS/SSL & PKI

  • Certificate Signature: SHA-256withRSA/ECDSA (bắt buộc từ 2016).
  • TLS 1.2 PRF: P_HMAC-SHA256. TLS 1.3: HKDF-SHA-256/384.
  • Certificate Transparency: SHA-256 Merkle Tree.

7. Key Derivation & KDF

  • HKDF (HMAC-based Key Derivation Function) - RFC 5869: Extract-Expand dùng HMAC-SHA256.
  • PBKDF2 (Password-Based Key Derivation Function 2).

So sánh hiệu năng & Bảo mật

Thuật toánTốc độ (Relative)Bảo mật (Collision)Khuyến nghị
MD5Rất nhanhĐã phá hoàn toàn (2^24)CẤM DÙNG cho bảo mật
SHA-1NhanhĐã phá (SHAttered 2^63)CẤM DÙNG cho cert, chữ ký. Chỉ dùng non-security (Git commit - migrating)
SHA-256Trung bình2^128 (An toàn)TIÊU CHUẨN HIỆN TẠI cho hầu hết mục đích
SHA-512Nhanh trên 64-bit2^256 (An toàn)High security, Password KDF (sha512crypt)
SHA-3 (Keccak)Chậm hơn SHA-2 (SW), Nhanh (HW)2^(n/2) (An toàn, khác cấu trúc)Dự phòng, Thiết kế mới, Ethereum

Tấn công nổi tiếng lên SHA

  • SHAttered (2017): Google & CWI tạo collision SHA-1 thực tế (2 file PDF khác nhau, cùng SHA-1). Kết thúc SHA-1 cho chữ ký số.
  • Chosen-prefix Collision SHA-1 (2019): Tạo collision với prefix tùy chọn → Tấn công thực tế mạnh hơn.
  • Length Extension Attack: SHA-1, SHA-256, SHA-512 dễ bị (nếu dùng H(k||m) làm MAC). Giải pháp: HMAC (H(k⊕opad || H(k⊕ipad || m))) hoặc SHA-3 (miễn dịch tự nhiên).
  • Birthday Attack: Tìm collision bất kỳ ~2^(n/2). SHA-256: 2^128 (vô vọng). SHA-1: 2^80 (có thể với nation-state).

Best Practices sử dụng SHA

  1. Mặc định dùng SHA-256 cho: Cert TLS, Chữ ký số, HMAC, File Integrity, Blockchain, KDF (HKDF).
  2. Dùng SHA-384/512 cho: High-security, Long-term protection, TLS 1.3 cipher suites yêu cầu.
  3. KHÔNG dùng SHA-1/MD5 cho bất kỳ mục đích bảo mật nào (Chữ ký, Cert, MAC, Password). Chỉ dùng cho non-security (Git object ID, checksum non-critical).
  4. Mật khẩu: Dùng Argon2id / scrypt / bcrypt / PBKDF2-HMAC-SHA256. KHÔNG dùng SHA-256 trực tiếp.
  5. Length Extension: Dùng HMAC thay vì H(key||message). SHA-3 miễn dịch tự nhiên.
  6. Domain Separation: Dùng context string/prefix cho mỗi mục đích (ví dụ: "TLS13-KEY-EXPANSION-", "JWT-SIGNING-") tránh cross-protocol attack.
  7. Crypto Agility: Thiết kế hệ thống dễ chuyển thuật toán (Algorithm Identifier, Parameter negotiation).

Kết luận

SHA (đặc biệt SHA-256, SHA-384, SHA-512, SHA-3) là xương sống mật mã học hiện đại, hỗ trợ: Chữ ký số (PKI/TLS), Xác thực (HMAC), Toàn vẹn (File/Code/Blockchain), Dẫn xuất khóa (HKDF/PBKDF2). SHA-256 là tiêu chuẩn mặc định an toàn hiện nay. SHA-3 (Keccak) là dự phòng chiến lược với kiến trúc khác biệt. Quan trọng: Không dùng hàm băm nhanh (SHA-256) trực tiếp cho mật khẩu - phải dùng KDF chậm, có salt (Argon2id). Luôn tuân thủ NIST SP 800-107, FIPS 180-4, FIPS 202 và cập nhật theo khuyến cáo chuyển đổi thuật toán (Post-Quantum Cryptography chuẩn bị cho tương lai).