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

Khác biệt giữa SHA và MD5 trong An ninh Thông tin

Tổng quan

Thuộc tínhSHA-1SHA-2 (256/384/512)SHA-3 (Keccak)MD5
Độ dài đầu ra160-bit256/384/512-bit224/256/384/512-bit128-bit
Thiết kếMerkle-DamgårdMerkle-DamgårdSponge (Keccak-f[1600])Merkle-Damgård
Số vòng8064/8024 (permutation)64
Trạng thái bảo mậtĐã phá vỡ (collision 2017)An toàn (không collision thực tế)An toàn (thiết kế khác biệt)Đã phá vỡ (collision 2004)
Tốc độ (CPU hiện đại)~0.5 cpb~0.5-1 cpb~1-2 cpb (phần mềm)~0.3 cpb (nhanh nhất)
Khuyến nghị NISTChỉ dùng legacy (HMAC-SHA1 chấp nhận được)Tiêu chuẩn hiện tại (FIPS 180-4)Tiêu chuẩn bổ sung (FIPS 202)Cấm dùng cho mật mã

Chi tiết MD5

  • Ron Rivest, 1991. Thay thế MD4.
  • Collision thực tế: 2004 (Wang), 2008 (chosen-prefix), 2012 (Flame malware dùng MD5 collision giả chứng chỉ Microsoft).
  • Preimage: vẫn ~2¹²³ (không thực tế), nhưng collision đủ hủy hoại chữ ký số, certificate.
  • Vẫn dùng: checksum tệp (non-security), hash table, deduplication, git (commit ID - đang chuyển SHA-256).

Chi tiết SHA-1

  • NIST/NSA, 1995 (FIPS 180-1).
  • Collision thực tế: SHAttered (Google/CWI, 2017) — 2⁶³.¹ operations, 110 GPU-year.
  • Cấm: TLS certificate (2017), Git (chuyển SHA-256), code signing.
  • HMAC-SHA1: Vẫn chấp nhận được (HMAC bảo vệ collision), nhưng nên chuyển HMAC-SHA256.

SHA-2 Family (Tiêu chuẩn vàng hiện tại)

  • SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256.
  • SHA-256: 32-bit word, 64 vòng. SHA-512: 64-bit word, 80 vòng.
  • Hỗ trợ phần cứng: Intel SHA extensions, ARMv8 SHA.
  • Dùng cho: TLS 1.2/1.3, Bitcoin (SHA-256d), certificate, JWT (RS256/ES256), HKDF.

SHA-3 (Keccak) — Thiết kế dự phòng

  • NIST SHA-3 competition winner (2012). Sponge construction: absorb → squeeze.
  • Không dùng Merkle-Damgård → tránh length extension attack tự nhiên.
  • SHAKE128/256 (XOF - extendable output function).
  • Dùng khi: cần đa dạng thuật toán (cryptographic agility), XOF, hoặc chống side-channel tốt hơn (permutation-based).

Khuyến nghị thực tế (2024)

  1. Mặc định: SHA-256 (hoặc SHA-512 trên 64-bit).
  2. Cần XOF / domain separation dễ dàng: SHAKE256 (SHA-3).
  3. Chống length extension không dùng HMAC: SHA-3 hoặc SHA-512/256 (truncated).
  4. Tuyệt đối không dùng: MD5, SHA-1 cho chữ ký số, certificate, MAC, password hashing, blockchain mới.
  5. Password hashing: Không dùng SHA/MD5 trực tiếp. Dùng Argon2id, bcrypt, scrypt, PBKDF2-HMAC-SHA256.