Rủi ro khi sử dụng các thuật toán mã hóa lỗi thời như MD5 hay SHA-1
Dùng MD5 hay SHA-1 cho mục đích bảo mật hiện nay là rủi ro thật: cả hai đã bị phá tính kháng va chạm, nghĩa là kẻ tấn công có thể tạo ra hai dữ liệu khác nhau có cùng giá trị băm. Điều này cho phép giả mạo chữ ký số, chứng chỉ, tệp phần mềm, và với mật khẩu được băm bằng MD5 hoặc SHA-1 thuần, việc dò ngược trở nên rất nhanh. Bài viết tóm tắt các cột mốc khiến hai thuật toán bị loại bỏ, phân tích rủi ro theo từng kiểu sử dụng và cách chuyển đổi an toàn.
Lưu ý về thuật ngữ: MD5 và SHA-1 là hàm băm, không phải thuật toán mã hóa, dù thường bị gọi chung như vậy. Phần kiến thức nền có trong bài hàm băm mật mã và vai trò xác thực.
Những cột mốc khiến MD5 và SHA-1 mất uy tín
MD5
- Năm 2004: nhóm nghiên cứu của Wang Xiaoyun công bố cách tìm va chạm MD5 thực tế.
- Năm 2008: các nhà nghiên cứu dùng va chạm MD5 để tạo chứng chỉ CA giả được trình duyệt thời đó chấp nhận, cho thấy rủi ro không còn là lý thuyết.
- Năm 2012: mã độc gián điệp Flame bị phát hiện dùng va chạm MD5 để giả mạo chữ ký mã của Microsoft, phát tán qua cơ chế cập nhật Windows.
SHA-1
- Năm 2005: các phân tích lý thuyết chỉ ra SHA-1 yếu hơn thiết kế.
- Năm 2017: Google và viện CWI Amsterdam công bố SHAttered, va chạm SHA-1 thực tế đầu tiên với hai tệp PDF khác nội dung cùng giá trị băm.
- Năm 2020: tấn công va chạm tiền tố tự chọn (chosen-prefix) với chi phí khả thi, nguy hiểm hơn vì kẻ tấn công kiểm soát phần đầu của cả hai tài liệu.
- Các trình duyệt lớn đã ngừng chấp nhận chứng chỉ SHA-1, và NIST đã công bố kế hoạch loại bỏ SHA-1 hoàn toàn trước cuối năm 2030.
Rủi ro theo từng kiểu sử dụng
| Cách sử dụng | Mức rủi ro với MD5/SHA-1 | Lý do |
|---|---|---|
| Chữ ký số, chứng chỉ | Rất cao | Va chạm cho phép giả mạo tài liệu hoặc chứng chỉ có chữ ký hợp lệ |
| Lưu mật khẩu | Rất cao | Hàm băm nhanh, dễ dò bằng GPU và bảng tra; vấn đề tồn tại ngay cả với SHA-256 thuần |
| Kiểm tra toàn vẹn tệp tải về khi có thể bị can thiệp | Cao | Kẻ tấn công có thể chuẩn bị tệp sạch và tệp độc cùng giá trị băm |
| HMAC-MD5, HMAC-SHA1 | Trung bình, nên thay | HMAC không phụ thuộc trực tiếp vào kháng va chạm, nhưng là dấu hiệu hệ thống cũ, nên chuyển sang HMAC-SHA256 |
| Kiểm tra lỗi truyền tệp ngẫu nhiên, chống trùng lặp không mang tính bảo mật | Thấp | Không có đối thủ cố tình tạo va chạm, nhưng vẫn nên dùng thuật toán hiện đại cho nhất quán |
Trường hợp nguy hiểm nhất: mật khẩu băm bằng MD5
Nhiều hệ thống cũ, đặc biệt website tự viết hoặc mã nguồn lâu năm, vẫn lưu mật khẩu dạng MD5 không có salt. Khi cơ sở dữ liệu bị rò rỉ, phần lớn mật khẩu phổ biến có thể tìm ra gần như ngay lập tức bằng bảng tra có sẵn, phần còn lại bị dò bằng card đồ họa với tốc độ rất lớn. Đây là lý do khi đọc tin về cơ sở dữ liệu mật khẩu bị lộ, cách băm mật khẩu quyết định mức thiệt hại.
Lưu ý: vấn đề không chỉ ở MD5. Mọi hàm băm nhanh dùng thuần cho mật khẩu đều không phù hợp. Giải pháp đúng là hàm băm mật khẩu chuyên dụng như Argon2id, scrypt, bcrypt.
Vì sao thuật toán lỗi thời vẫn tồn tại
- Hệ thống kế thừa: phần mềm viết từ nhiều năm trước, không ai dám động vào.
- Thiết bị nhúng: router, camera, thiết bị công nghiệp với firmware cũ và khó cập nhật.
- Thói quen và tài liệu cũ: hướng dẫn trên mạng vẫn dùng md5() làm ví dụ.
- Yêu cầu tương thích: giao thức trao đổi với đối tác chưa nâng cấp.
- Nhầm lẫn mục đích: dùng MD5 làm mã định danh rồi sau đó vô tình được dùng cho kiểm tra bảo mật.
Lộ trình chuyển đổi an toàn
1. Kiểm kê
Tìm trong mã nguồn các lời gọi md5, sha1; rà cấu hình máy chủ, VPN, SSH, chứng chỉ nội bộ; hỏi nhà cung cấp phần mềm về thuật toán đang dùng. Công cụ quét bảo mật mã nguồn và quét cấu hình TLS hỗ trợ tốt bước này.
2. Ưu tiên theo rủi ro
Thứ tự hợp lý: chữ ký và chứng chỉ, mật khẩu, kiểm tra toàn vẹn phần mềm, sau cùng là các mục đích không bảo mật.
3. Thay thuật toán
- Chữ ký, chứng chỉ, kiểm tra tệp: SHA-256, SHA-384 hoặc SHA-3.
- HMAC: HMAC-SHA256.
- Mật khẩu: Argon2id hoặc bcrypt với tham số phù hợp.
4. Chuyển đổi mật khẩu không cần bắt người dùng đổi
Có hai cách phổ biến. Cách thứ nhất: khi người dùng đăng nhập thành công, hệ thống có mật khẩu dạng rõ trong chốc lát, băm lại bằng thuật toán mới và lưu. Cách thứ hai, áp dụng ngay cho toàn bộ: bọc giá trị MD5 cũ bằng thuật toán mới, tức lưu Argon2(MD5(mật khẩu)), rồi chuyển dần sang dạng chuẩn khi người dùng đăng nhập. Tài khoản lâu không đăng nhập nên bị buộc đặt lại mật khẩu.
5. Xây dựng tính linh hoạt
Lưu kèm định danh thuật toán và tham số với mỗi giá trị băm, để lần chuyển đổi sau không phải bắt đầu từ đầu. Bài học này cũng áp dụng cho các cuộc chuyển đổi lớn sắp tới như mật mã hậu lượng tử.
Dấu hiệu nhận biết với người dùng phổ thông
Bạn khó biết dịch vụ dùng thuật toán gì, nhưng vài dấu hiệu đáng ngờ: dịch vụ gửi lại mật khẩu cũ qua email khi bạn quên (nghĩa là họ lưu được dạng đọc), giới hạn độ dài mật khẩu quá ngắn, hoặc trang tải phần mềm chỉ cung cấp giá trị MD5 để kiểm tra. Với trình duyệt, cảnh báo chứng chỉ không an toàn cũng có thể đến từ chứng chỉ dùng thuật toán cũ; xem thêm về cách chứng chỉ SSL/TLS hoạt động. Cách tự bảo vệ tốt nhất vẫn là mật khẩu riêng cho từng dịch vụ, để một nơi yếu kém không kéo theo các tài khoản khác.
Câu hỏi thường gặp
MD5 còn dùng để kiểm tra tệp tải về được không?
Chỉ để phát hiện lỗi tải ngẫu nhiên. Nếu cần chắc chắn tệp không bị kẻ xấu thay thế, hãy dùng SHA-256 kèm chữ ký số từ nhà phát hành.
Git dùng SHA-1 có nguy hiểm không?
Git đã bổ sung cơ chế phát hiện các tệp được tạo ra theo kiểu tấn công va chạm đã biết và hỗ trợ định dạng kho dùng SHA-256. Rủi ro thực tế với người dùng thông thường thấp nhưng xu hướng chung là chuyển sang SHA-256.
Thêm salt vào MD5 có đủ an toàn cho mật khẩu không?
Không đủ. Salt chống bảng tra sẵn, nhưng MD5 quá nhanh nên kẻ tấn công vẫn dò từng mật khẩu với tốc độ rất cao. Cần hàm băm mật khẩu chậm có chủ đích như Argon2id hoặc bcrypt.
SHA-256 có thể bị phá như SHA-1 không?
Hiện chưa có tấn công va chạm thực tế nào với SHA-256. Cộng đồng mật mã vẫn coi SHA-2 và SHA-3 là an toàn, và luôn theo dõi các nghiên cứu mới.
Bài liên quan

Bảo mật dữ liệu trên đám mây: Mã hóa ở trạng thái nghỉ và chuyển động
Giải thích mã hóa dữ liệu đám mây ở trạng thái nghỉ và khi chuyển động, mã hóa phong bì, các mô hình quản lý khóa KMS, HSM và danh sách việc cho doanh nghiệp.

Cách bảo vệ file tài liệu quan trọng bằng mã hóa GPG/PGP
Hướng dẫn mã hóa file bằng GPG: mã hóa bằng mật khẩu, bằng khóa công khai, ký số, mã hóa thư mục, quản lý và sao lưu khóa, các sai lầm cần tránh.

Hàm băm Cryptographic Hash Functions: Vai trò trong xác thực dữ liệu
Hàm băm mật mã hoạt động thế nào, ba tính chất bảo mật cốt lõi, so sánh MD5, SHA-1, SHA-2, SHA-3 và ứng dụng trong chữ ký số, lưu mật khẩu, kiểm tra tệp.

Hiểu rõ về chứng chỉ SSL/TLS và cách thức hoạt động trên Website
Giải thích chứng chỉ SSL/TLS: nội dung chứng chỉ, chuỗi tin cậy, bắt tay TLS 1.3, các loại DV, OV, EV, ý nghĩa ổ khóa và cấu hình HTTPS đúng cho quản trị web.