Initializing, please wait a moment

Các Lựa Chọn Thay Thế MD5: bcrypt vs Argon2id vs SHA-256 - Khi Nào Mỗi Cái Phù Hợp

Các lựa chọn thay thế MD5 phụ thuộc vào công việc: Argon2id hoặc bcrypt để lưu mật khẩu, SHA-256 với HMAC để bảo vệ toàn vẹn, PBKDF2 để dẫn xuất khóa. MD5 vẫn hợp lệ cho cache và khử trùng lặp trên dữ liệu không có đối thủ.

Câu trả lời trong 30 giây. Lựa chọn thay thế đúng cho MD5 phụ thuộc vào công việc. Lưu trữ mật khẩu? Dùng Argon2id (khuyến nghị hiện tại của OWASP) hoặc bcrypt (hỗ trợ thư viện rộng). Bảo vệ toàn vẹn chống đối thủ? Dùng SHA-256 với HMAC. Dẫn xuất khóa từ mật khẩu? Dùng PBKDF2 (môi trường yêu cầu FIPS) hoặc Argon2id ở nơi khác. Khóa cache, ETag, khử trùng lặp trên dữ liệu không đối thủ? MD5 vẫn ổn - chạy qua trình chuyển đổi MD5.

Quyết định trong một bảng

Quyết định trong một bảng là Argon2id hoặc bcrypt cho mật khẩu, SHA-256 cho toàn vẹn, và PBKDF2 khi FIPS bắt buộc - trên MD5 Alternatives hãy chọn hàng đúng việc.

Compare bon truong hop su dung voi thuat toan bam phu hop using the four points in this diagram.
Chọn băm theo việc cần làm at a glance.
Trường hợp sử dụngChọnVì saoKhông chọn MD5 vì
Lưu mật khẩu người dùng (web, di động, API)Argon2id (ưu tiên), bcrypt (dự phòng)Cứng-bộ-nhớ + chi phí tinh chỉnh; chống vét cạn GPUMD5 quá nhanh - GPU băm hàm hàng tỉ hash/giây, mật khẩu phổ biến sụp đổ trong mili giây
DB mật khẩu MD5 hiện có (cũ)Di chuyển sang Argon2id ở lần đăng nhập tiếp theoBọc MD5(mật khẩu) bên trong Argon2id trong khi reset cuộnHash MD5 thuần rò rỉ nhanh; giả sử bị xâm phạm khi tiết lộ
Toàn vẹn tệp chống đầu vào đối thủSHA-256Tấn công va chạm thực tế chống MD5 từ 2004; SHA-256 vẫn an toànKẻ tấn công có thể tạo hai tệp khác nhau cùng MD5
Toàn vẹn tệp chỉ chống lỗi hỏng ngẫu nhiênMD5 hoặc SHA-256 (cái nào cũng được)Dữ liệu tự nhiên không va chạm với MD5 trong thực tế(MD5 chấp nhận ở đây; chọn theo tiện lợi của toolchain)
Xác thực thông điệp (HMAC)HMAC-SHA-256HMAC gắn khóa vào hash; HMAC-MD5 vô hiệu trong thực tếHMAC-MD5 đã bị NIST và IETF không tán thành
Dẫn xuất khóa từ mật khẩuArgon2id (ưu tiên), PBKDF2 (FIPS)Thiết kế cho dẫn xuất mật khẩu-thành-khóa với hệ số chi phíMD5 không có hệ số chi phí; tạo ra cùng digest trong nano giây
Khóa cache, ETag, khóa khử trùng lặpMD5 (ổn)Dấu vân tay độ dài cố định từ đầu vào tùy ý; va chạm không quan trọng cho dữ liệu không đối thủ(đây là nơi MD5 vẫn xứng vị trí)
Lưu trữ theo địa chỉ nội dung (CAS) dưới ảnh hưởng kẻ tấn côngSHA-256Tấn công va chạm sẽ cho kẻ tấn công thay thế nội dung với cùng địa chỉMD5 không thể đảm bảo tính duy nhất chống các đầu vào được tạo

Argon2id vs bcrypt cho mật khẩu

Argon2id là hash mật khẩu được OWASP khuyến nghị từ 2022. Nó là cứng-bộ-nhớ, nghĩa là kẻ tấn công GPU phải cấp phát hàng trăm megabyte cho mỗi lần đoán song song. Điểm khởi đầu khuyến nghị là Argon2id, m=64MB, t=3, p=4. Hệ số chi phí mở rộng theo phần cứng: đánh giá lại mỗi hai năm và tăng các tham số.

bcrypt là á quân được hỗ trợ tốt. Nó cũ hơn (1999), sử dụng hệ số chi phí có thể tinh chỉnh biểu thị như log2 của số lần lặp (chi phí 12 vào thời điểm viết bài). Nó không cứng-bộ-nhớ, đây là điểm yếu chính so với Argon2id, nhưng hỗ trợ thư viện của nó qua mọi framework web rộng hơn. Chọn bcrypt chỉ khi nền tảng của bạn chưa có kết nối Argon2id được duy trì.

Một tùy chọn cứng-bộ-nhớ thứ ba là scrypt (RFC 7914). Nó xuất hiện trước Argon2id và sử dụng phương pháp chi phí bộ nhớ và CPU tương tự. Ưu tiên Argon2id khi nền tảng của bạn hỗ trợ nó; sử dụng scrypt làm phương án dự phòng nếu các kết nối Argon2id chưa có sẵn và bạn cần tính cứng-bộ-nhớ mà không có giới hạn chỉ-CPU của bcrypt.

Argon2id hoặc bcrypt đều đúng trong 2026. Không lưu mật khẩu dạng MD5 + salt - sơ đồ đó sụp đổ trước một GPU đơn lẻ trong vài ngày ngay cả với salt ngẫu nhiên dài, vì MD5 là nút thắt, không phải salting.

SHA-256 vs MD5 cho toàn vẹn

Nếu đầu vào có thể được tạo bởi kẻ tấn công, dùng SHA-256. Tấn công Wang 2004 và va chạm Stevens / Lenstra 2008 chống chứng chỉ X.509 đã chỉ ra rằng hai đầu vào khác nhau có thể được tạo để chia sẻ một MD5 duy nhất. Cho chữ ký số, ký mã, hoặc bất kỳ thứ gì kẻ tấn công có thể thay thế nội dung của họ cho của bạn, MD5 vô hiệu; SHA-256 là nguyên hàm đúng.

Nếu đầu vào chỉ là một tải xuống bạn kiểm soát hoặc một artifact build bạn tạo ra, MD5 vẫn ổn cho kiểm tra toàn vẹn. Nó bắt các bit lật ngẫu nhiên bạn thực sự thấy trong thực tế (tia vũ trụ, cáp xấu, đĩa xấu). Toàn bộ tập trade-off MD5 vs SHA-256 trong MD5 vs SHA-256 - khi nào băm hàm với mỗi cái.

PBKDF2 - đường FIPS

PBKDF2 là hàm dẫn xuất khóa dựa trên mật khẩu mà NIST chấp nhận vào 2000. Nó dựa trên lặp: bạn chọn một số đếm, chạy một hash cơ số số lần đó, và hệ số công việc theo đó. Nó không cứng-bộ-nhớ, vì vậy yếu hơn Argon2id chống GPU hiện đại, nhưng là lựa chọn đúng khi môi trường của bạn yêu cầu thuật toán FIPS 140-2 / 140-3. Số lặp sử dụng trong 2026 với HMAC-SHA-256 bên dưới là 600.000 hoặc cao hơn theo hướng dẫn OWASP; với HMAC-SHA-512 là 210.000 hoặc cao hơn. Số thấp hơn vẫn phổ biến trong code cũ; tăng chúng ở lần triển khai tiếp theo.

"MD5 vẫn thuộc về đâu" - danh sách làm việc

Compare bon tinh huong MD5 van phu hop using the four points in this diagram.
MD5 cho cache, ETag, toàn vẹn, dedup at a glance.
  • Khóa cache. Băm một URL dài hoặc chuỗi query thành khóa độ dài cố định cho memcached, Redis hoặc một tên tệp. Va chạm không quan trọng; tốc độ quan trọng.
  • Dấu vân tay nội dung kiểu ETag. Phát MD5 của một thân phản hồi như header ETag để các client có thể kiểm tra lại mà không tải xuống lại.
  • Kiểm tra toàn vẹn tệp trên một tải xuống bạn tạo ra. Công bố MD5 bên cạnh tệp; người dùng so sánh cục bộ. Nhiều mirror Linux vẫn công bố cả MD5 và SHA-256 vì tính tương thích.
  • Khử trùng lặp tải lên đến. Dấu vân tay luồng byte với MD5 để ngắt mạch lưu trữ bản sao chính xác trước khi bạn giữ lại.
  • Fixture kiểm tra và ID snapshot. Băm một blob JSON chính tắc để tạo ID xác định cho fixture kiểm tra đơn vị.

Với tất cả những cái đó, trình chuyển đổi MD5 là bề mặt đúng - dán văn bản, lấy hash, sao chép kết quả.

Danh sách kiểm tra di chuyển - chuyển một app hiện có khỏi MD5

Compare bon buoc chuyen doi khoi MD5 using the four points in this diagram.
Kiểm toán, Argon2id, HMAC-SHA-256, SHA-256 at a glance.
  1. Kiểm toán nơi MD5 được dùng. Grep mã nguồn cho md5, MessageDigest.getInstance("MD5"), hashlib.md5, crypto.createHash('md5'). Gán thẻ mỗi sử dụng là một trong: mật khẩu, MAC, toàn vẹn, cache.
  2. Mật khẩu - di chuyển cuộn. Thêm một trình xác minh Argon2id bên cạnh trình xác minh MD5. Ở lần đăng nhập thành công tiếp theo, tính lại mật khẩu dưới Argon2id, lưu trình xác minh mới, bỏ hàng MD5. Xoay mọi tài khoản trong 90 ngày; buộc reset bất kỳ cái gì còn lại.
  3. MAC - thay bằng HMAC-SHA-256. Triển khai HMAC-MD5 từ thời 2010 trong API nên xoay khóa và phát hành lại client với HMAC-SHA-256.
  4. Toàn vẹn chống đối thủ - thay bằng SHA-256. Bất kỳ thứ gì ký nội dung do người dùng tải lên, phân phối gói, hoặc code bên thứ ba đi sang SHA-256 ngay.
  5. Toàn vẹn không đối thủ, cache, ETag, khử trùng lặp - để yên. Không khuấy động code đang chạy vì lý do lý thuyết. MD5 ổn ở đây.

Liên quan

Các hướng dẫn liên quan này đề cập đến các câu hỏi kèm theo khi cân nhắc các lựa chọn thay thế MD5 - so sánh đầy đủ MD5 vs SHA-256, lý do MD5 không thể đảo ngược và công cụ cho các trường hợp MD5 vẫn phù hợp.