Trong thực tế, vâng, một hàm băm mật mã giống hệt nhau có nghĩa là các tệp giống nhau, miễn là các tệp không được tạo bởi kẻ tấn công hoặc thực thể độc hại khác. Tỷ lệ va chạm ngẫu nhiên với bất kỳ hàm băm mật mã được thiết kế tốt là rất nhỏ đến mức không đáng kể trong thực tế và trong trường hợp không có kẻ tấn công hoạt động.
Nói chung, tuy nhiên, không, chúng ta không thể nói rằng hai tập tin tùy ý có băm cùng chắc chắn có nghĩa rằng họ là giống hệt nhau.
Cách thức hoạt động của hàm băm mật mã là lấy đầu vào có độ dài tùy ý và xuất giá trị độ dài cố định được tính từ đầu vào. Một số hàm băm có nhiều độ dài đầu ra để lựa chọn, nhưng đầu ra vẫn ở một mức độ nào đó là giá trị độ dài cố định. Giá trị này sẽ dài tới vài chục byte; các thuật toán băm có giá trị đầu ra dài nhất được sử dụng phổ biến hiện nay có đầu ra 512 bit và đầu ra 512 bit là 64 byte.
Nếu một đầu vào cho hàm băm dài hơn đầu ra của hàm băm, một số độ trung thực phải được loại bỏ để làm cho đầu vào phù hợp với đầu ra. Do đó, phải tồn tại nhiều đầu vào có độ dài lớn hơn độ dài của đầu ra, tạo ra cùng một đầu ra.
Hãy lấy ví dụ hiện tại, SHA-256 làm ví dụ. Nó xuất ra một hàm băm 256 bit hoặc 32 byte. Nếu bạn có hai tệp có độ dài chính xác 32 byte, nhưng khác nhau, những tệp này (giả sử không có lỗ hổng trong thuật toán) băm vào các giá trị khác nhau, bất kể nội dung của các tệp; trong thuật ngữ toán học, hàm băm là một hàm ánh xạ không gian đầu vào 2 256 lên không gian đầu ra 2 256 , có thể thực hiện mà không cần va chạm. Tuy nhiên, nếu bạn có hai tệp dài 33 byte, thì phải tồn tại một số tổ hợp đầu vào có cùng giá trị băm đầu ra 32 byte cho cả hai tệp, vì chúng tôi hiện đang ánh xạ không gian đầu vào 2 264 lên 2 256không gian đầu ra; Ở đây, chúng ta có thể dễ dàng thấy rằng, trung bình, nên tồn tại 2 8 đầu vào cho mỗi đầu ra. Thực hiện điều này hơn nữa và với các tệp 64 byte nên tồn tại 2 256 đầu vào cho mỗi đầu ra!
Các hàm băm mật mã được thiết kế sao cho khó tính toán một đầu vào cung cấp một đầu ra cụ thể hoặc kết hợp hai đầu vào cung cấp cùng một đầu ra. Điều này được gọi là kháng tấn công tiền tố hoặc kháng tấn công va chạm . Không thể tìm thấy những va chạm này; nó chỉ nhằm mục đích thực sự, thực sự, thực sự, thực sự khó khăn. (Một chút trường hợp đặc biệt của một cuộc tấn công va chạm là một cuộc tấn công sinh nhật .)
Một số thuật toán tốt hơn những thuật toán khác trong việc chống lại những kẻ tấn công. MD5 thường được coi là hoàn toàn bị phá vỡ trong những ngày này, nhưng cuối cùng tôi đã nhìn thấy, nó vẫn có khả năng kháng tiền đầu tiên khá tốt . SHA-1 cũng bị phá vỡ hiệu quả; các cuộc tấn công tiền giả đã được chứng minh, nhưng đòi hỏi các điều kiện cụ thể, mặc dù không có lý do nào để tin rằng đó sẽ là trường hợp vô thời hạn; như người ta vẫn nói, các cuộc tấn công luôn trở nên tốt hơn, chúng không bao giờ trở nên tồi tệ hơn. SHA-256/384/512 hiện vẫn được cho là an toàn cho hầu hết các mục đích. Tuy nhiên , nếu bạn chỉ muốn xem liệu hai thứ không độc hại, hợp lệcác tệp là như nhau, sau đó bất kỳ tệp nào trong số này cũng đủ, bởi vì không gian đầu vào đã bị hạn chế đủ, bạn sẽ chủ yếu quan tâm đến các xung đột ngẫu nhiên. Nếu bạn có bất kỳ lý do nào để tin rằng các tệp được tạo độc hại, thì ít nhất bạn cần sử dụng hàm băm mật mã hiện được cho là an toàn, đặt thanh thấp hơn ở SHA-256.
Tiền đề đầu tiên là tìm một đầu vào mang lại giá trị băm đầu ra cụ thể; tiền đề thứ hai là tìm một đầu vào cung cấp cùng một đầu ra với đầu vào được chỉ định khác; va chạm là tìm ra hai đầu vào mang lại cùng một đầu ra, mà không quan tâm đến đó là gì và đôi khi không liên quan đến đầu vào là gì.
Tất cả những gì đã nói, điều quan trọng cần lưu ý là các tệp có thể có các biểu diễn dữ liệu rất khác nhau và vẫn hiển thị chính xác như nhau. Vì vậy, chúng có thể giống nhau mặc dù các giá trị băm mật mã của chúng không khớp, nhưng nếu các giá trị băm khớp với nhau thì chúng cực kỳ có khả năng xuất hiện giống nhau.
cmp
Unix hoặcfc
(so sánh tệp) trên Windows.