Trong lĩnh vực Mật mã học, MD5 (tiếng Anh viết tắt của Message-Digest algorithm 5, Thuật toán Tiêu hóa-tin nhắn 5) là một hàm băm mật mã học được sử dụng rộng rãi với giá trị băm dài 128-bit. MD5 là một chuẩn Internet (RFC 1321) và được áp dụng trong nhiều ứng dụng bảo mật, cũng như kiểm tra tính toàn vẹn của các tập tin. Giá trị băm MD5 thường được biểu diễn bằng chuỗi 32 ký tự thập lục phân.
Lịch sử và Thuật toán
MD5 được thiết kế bởi Ronald Rivest vào năm 1991 nhằm thay thế cho hàm băm trước đó là MD4. Tuy nhiên, vào năm 1996, một lỗ hổng trong MD5 đã được phát hiện và dấy lên nghi vấn về tính an toàn của thuật toán này. Trong năm 2004, nhiều lỗ hổng khác được khám phá, từ đó khẳng định sự nghi vấn về việc sử dụng MD5 cho mục đích bảo mật.
Thuật toán MD5 chuyển đổi một đoạn thông tin có độ dài thay đổi thành một kết quả có độ dài cố định là 128 bit. Mẩu tin đầu vào được chia thành các khối có độ dài 512 bit và sau đó được độn sao cho độ dài của nó là bội số của 512. Quá trình độn sao vào mẩu tin bắt đầu bằng một bit "1", sau đó là một dãy các bit "0" và cuối cùng là một số nguyên 64-bit đại diện cho độ dài của mẩu tin gốc.
Ứng dụng
MD5 được sử dụng rộng rãi trong các phần mềm trên toàn thế giới để đảm bảo tính toàn vẹn của việc truyền tải tập tin. Ví dụ, máy chủ tập tin thường tính toán một checksum MD5 cho tập tin trước khi người dùng tải về, từ đó cho phép so sánh với checksum của tập tin đã tải. Các hệ điều hành dựa trên Unix đã tích hợp tính năng MD5 sum vào các gói phân phối của mình, trong khi người dùng Windows thường sử dụng ứng dụng của bên thứ ba.
Tuy nhiên, hiện nay đã có khá nhiều phương pháp tạo ra xung đột MD5, nghĩa là người dùng có thể tạo ra một tập tin có cùng checksum với tập tin gốc, vì vậy phương pháp này không thể chống lại các hình thức giả mạo nguy hiểm. Ngoài ra, trong một số trường hợp, checksum không thể được tin tưởng (ví dụ, nếu nó được lấy từ một lệnh như tập tin đã tải về), trong trường hợp đó, MD5 chỉ có thể được sử dụng để kiểm tra lỗi trong quá trình tải tập tin lớn.
Các Bảng băm MD5
Bảng băm MD5 có độ dài 128-bit (16 byte) và thường được biểu diễn dưới dạng chuỗi 32 số thập lục phân. Dưới đây là ví dụ về đầu vào ASCII 43 byte (368-bit) và bảng băm MD5 tương ứng:
MD5("The quick brown fox jumps over the lazy dog") = 9e107d9d372bb6826bd81d3542a419d6
Một thay đổi nhỏ trong mẩu tin sẽ dẫn đến một bảng băm hoàn toàn khác, điều này là do hiệu ứng thác. Ví dụ, thay "d" thành "e":
MD5("The quick brown fox jumps over the lazy eog") = ffd93f16876049265fbaef4da268dd0e
Bảng băm của một chuỗi rỗng là:
MD5("") = d41d8cd98f00b204e9800998ecf8427e
Để tìm hiểu thêm về MD5 và các ứng dụng liên quan, bạn có thể tham khảo các nguồn tham khảo bên dưới.
Nguồn: Wikipedia