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

MD5 trong an ninh mạng: Nguyên lý, ứng dụng và lý do không nên dùng cho mật khẩu

MD5 là gì?

MD5 (Message Digest Algorithm 5) là hàm băm mật mã (cryptographic hash function) nhận đầu vào độ dài tùy ý, tạo ra giá trị băm (hash/digest) 128-bit (32 ký tự hex). Được thiết kế bởi Ronald Rivest năm 1991 thay thế MD4.

Cách MD5 hoạt động (tóm tắt)

  1. Padding: Thêm bit để độ dài ≡ 448 (mod 512)
  2. Append Length: Thêm 64-bit biểu thị độ dài bản tin gốc
  3. Initialize MD Buffer: 4 thanh ghi 32-bit (A,B,C,D) với hằng số cố định
  4. Process 512-bit blocks: 4 vòng (round), mỗi vòng 16 bước, dùng hàm phi tuyến F,G,H,I
  5. Output: Nối 4 thanh ghi → 128-bit digest

Đặc điểm MD5

  • Đầu ra cố định 128-bit (32 hex chars)
  • Tính xác định (deterministic): Cùng input → cùng output
  • Hiệu ứng tuyết (avalanche effect): Thay 1 bit → thay ~50% bit output
  • Tốc độ nhanh (đây là nhược điểm cho mật khẩu)
  • One-way: Khó đảo ngược (pre-image resistance) - nhưng đã bị phá vỡ

Ứng dụng MD5 (hiện tại)

  • Kiểm tra toàn vẹn file (Checksum): So sánh MD5 file tải về với giá trị công bố
  • Deduplication: Xác định file trùng lặp
  • Indexing/Database: Key nhanh cho dữ liệu lớn
  • Non-cryptographic purposes: Không yêu cầu chống va chạm

Tại sao MD5 KHÔNG AN TOÀN cho mật khẩu?

  1. Va chạm (Collision): Tìm 2 input khác nhau cho cùng hash (2004: Wang et al., 2008: Rogue CA cert)
  2. Tốc độ quá nhanh: GPU hiện đại tính ~300 tỷ MD5/giây → brute-force dễ dàng
  3. Rainbow table: Bảng tra cứu sẵn hash phổ biến
  4. Không có saltbuilt-in: Cần triển khai riêng (dễ sai)
  5. NIST deprecated: SP 800-131A cấm dùng MD5 cho mục đích mật mã
  6. So sánh MD5 vs SHA-1 vs SHA-256 vs bcrypt

    Tính MD5 trên các hệ điều hành

    • Windows: `certutil -hashfile MD5` hoặc PowerShell `Get-FileHash -Algorithm MD5`
    • Linux/macOS: `md5sum ` hoặc `md5 `
    • PHP: `md5($string)` → 32 hex chars

    Kết luận

    MD5 vẫn hữu ích cho kiểm tra toàn vẹn file không nhạy cảm (checksum tải phần mềm, ISO). TUYỆT ĐỐI KHÔNG DÙNG MD5 cho mật khẩu, token, chữ ký số, chứng chỉ SSL/TLS. Hãy dùng Argon2id, bcrypt, scrypt hoặc PBKDF2 với salt ngẫu nhiên và cost factor phù hợp.

    Thuật toánĐộ dàiTốc độAn toàn cho passTrạng thái
    MD5128-bitRất nhanh❌ KhôngDeprecated
    SHA-1160-bitNhanh❌ KhôngDeprecated
    SHA-256256-bitNhanh❌ Không (nếu dùng đơn lẻ)OK cho non-pass
    bcrypt184-bitChậm (config)✅ CóKhuyến nghị
    scrypt256-bitChậm, tốn RAM✅ CóKhuyến nghị
    Argon2Tuỳ chỉnhChậm, tốn RAM/CPU✅ Có (tốt nhất)Khuyến nghị #1
    PBKDF2Tuỳ chỉnhChậm (config)✅ CóChấp nhận được