Làm thế nào chính xác là `md5sum`?


27

Khi sử dụng md5sumđể xác minh tính toàn vẹn của một tập tin, quá trình này chính xác đến mức nào?

Liệu MD5 được xác minh có nghĩa là MERYI bit giống hệt nhau hay có một ngưỡng phải bị phá vỡ trước khi thay đổi nhị phân được phản ánh trong MD5?

Bất kỳ tài liệu nào về cách tạo ra md5 cũng sẽ được đánh giá cao.



@choroba nếu tôi đọc tất cả những điều này một cách chính xác, thì xác suất thay đổi không bị phát hiện sẽ tăng theo kích thước của tệp được xác minh. Tuy nhiên, đó vẫn là một xác suất và chắc chắn 100% chỉ có thể có với một tệp 16 byte. Tôi có đúng không
Konner Rasmussen

@Konner Tôi đọc câu hỏi của bạn liên quan đến chuyển tập tin. Đối với mục đích đó, nó là an toàn. Khả năng một chút bị hỏng khi chuyển tiền là rất nhỏ và nhiều khả năng là bạn mất một phần tệp được sao chép khi chuyển, giả sử tôi hiểu tình huống trước đó của bạn . MD5 là một nỗ lực tương đương với việc so sánh cả hai tệp, với một số lợi thế trong thực tế là bạn không cần phải truy cập cả hai tệp cùng một lúc.
Doktoro Reichard

15
"MD5 đã được xác minh có nghĩa là MERYI bit giống hệt nhau chưa." Lưu ý rằng điều này là không thể, nhờ Nguyên tắc Pigeonhole. vi.wikipedia.org/wiki/Pigeonhole_principl
Plutor

3
Tôi không nghĩ bạn có được sự đảm bảo cho các tệp 16 byte.
Vịt Mooing

Câu trả lời:


65

MD5 bị phá vỡ cho mục đích này chống lại một kẻ thù thông minh. Có thể xây dựng độc hại hai khối dữ liệu khác nhau tạo ra cùng một hàm băm MD5.

Tuy nhiên, nó hoàn toàn phù hợp (mặc dù có những cách gần như chắc chắn tốt hơn) để sử dụng MD5 để bảo vệ chống lại tham nhũng dữ liệu do sơ ý trong quá cảnh hoặc trong lưu trữ. Mặc dù có thể hình dung rằng một sự kiện như vậy có thể khiến băm MD5 giống nhau, nhưng xác suất thấp đến mức gần như không thể tưởng tượng được rằng đó sẽ là một xác suất đáng lo ngại. Thất bại gây ra bởi bức xạ nền, đường hầm, tĩnh và hàng chục nguồn khác sẽ là những mệnh lệnh có thể xảy ra nhiều hơn.

Ngay cả khi bạn có một triệu đơn vị dữ liệu, xác suất MD5 không khớp sẽ tạo ra hàm băm MD5 thuộc một trong số một triệu đơn vị đó là ít hơn một phần triệu.


Mặc dù về mặt lý thuyết có thể tạo hai tệp có cùng hàm băm, nhưng thực tế có thể không khả thi. Đặc biệt là nếu các tập tin thay thế cũng có ý nghĩa. Ví dụ, nếu tệp gốc là văn bản tiếng Anh, có thể không có bất kỳ kết quả khớp nào khác cũng là tiếng Anh. Hoặc nếu đó là bảng tính Excel, thì không có tệp nào có cùng hàm băm sẽ là bảng tính hợp lệ.
Barmar

1
@Barmar: win.tue.nl/hashclash/Nostradamus những người này đã tạo ra một số tệp pdf có cùng hàm băm MD5 để chứng minh rằng nó thực tế khả thi.
philfr

26

MD5 là một hàm băm. Về cơ bản, nó ánh xạ toàn bộ nội dung của một tệp thành một chuỗi nhỏ dài 16 byte IIRC.

Rõ ràng sẽ có nhiều tệp băm vào cùng một tổng MD5. Do đó, tổng MD5 phù hợp không đảm bảo khớp chính xác giữa các tệp.

Không có ngưỡng như vậy bởi vì cách băm hoạt động. Vì vậy, tổng MD5 có thể phát hiện ngay cả một thay đổi bit. Tuy nhiên, rất nhiều thay đổi bit đơn cùng nhau có thể khiến hàm băm MD5 giống nhau. Do đó, khá hợp lý khi sử dụng MD5 để xác thực tính toàn vẹn của tệp chống lại tham nhũng ngẫu nhiên nhưng không nếu mục đích độc hại có thể xảy ra vì ai đó có thể sửa đổi tệp trong khi đảm bảo băm MD5 giống nhau.


1
Câu chuyện dài quá ngắn là md5 không có gì khác hơn là cách nhanh chóng và bẩn để xác minh tính toàn vẹn của tệp và chỉ nên được sử dụng khi một lỗi không bị phát hiện sẽ không gây ra hậu quả thảm khốc ... đúng không?
Konner Rasmussen

3
việc sử dụng tốt nhất của nó là để phát hiện tham nhũng trong quá trình chuyển hoặc sao chép. không thực sự là một điều an ninh.
Michael Martinez

12
@KonnerRasmussen - đó không phải là vấn đề về mức độ hậu quả, đó là bản chất của mối đe dọa. Nếu bạn lo lắng rằng hai tài liệu có thể vô tình có cùng MD5, hãy ngừng lo lắng: tỷ lệ cược cao hơn đáng kể là máy tính của bạn sẽ tự bốc cháy; nếu bạn lo lắng một kẻ tấn công thông minh có thể tạo ra một tài liệu phù hợp với tài liệu bạn đã có, đó là một mối quan tâm nghiêm trọng và bạn sẽ có được hàm băm tốt hơn; nếu bạn lo lắng kẻ tấn công thông minh có thể tạo ra hai tài liệu khớp với nhau, đừng "lo lắng": điều đó chắc chắn sẽ xảy ra.
Malvolio

5
Tất nhiên, về mặt lý thuyết, trong khi tạo xung đột băm MD5 là có thể, tạo ra xung đột hữu ích (như trong, tệp va chạm là cùng loại tệp và nội dung của nó ít nhất là xác thực) khó hơn rất nhiều ...
Shadur

6
@Shadur: Điều đó từng là trường hợp, nhưng nghiên cứu bảo mật đang diễn ra đã phát hiện ra những cách mới để tạo ra xung đột MD5 giúp việc đó trở nên dễ dàng hơn. Đặc biệt, nếu định dạng tệp của bạn cho phép các khối dữ liệu "nhận xét" định dạng miễn phí, có thể khớp với bất kỳ hàm băm MD5 nào bằng cách chèn một nhận xét phù hợp.
MSalters

17

Một MD5-Hash bao gồm 128 bit. Một bit lật đơn trong các lần lật nguồn (trung bình) 64 bit trong hàm băm.

Xác suất của hai lần băm vô tình va chạm là 1/2 ^ 128, tức là 1 trong 340 số tiền không phải là 282 tỷ, 36.000 tỷ không phải là 920 triệu 938 triệu 463 triệu 463 triệu 374 nghìn tỷ 607 nghìn tỷ 432 tỷ 768 triệu 211 nghìn 456.

Tuy nhiên nếu bạn giữ tất cả các giá trị băm thì nhờ xác suất nghịch lý sinh nhật cao hơn một chút. Để có 50% cơ hội cho bất kỳ va chạm băm nào, bạn cần 2 ^ 64 băm. Điều này có nghĩa là để có được một vụ va chạm, trung bình, bạn sẽ cần băm 6 tỷ tệp mỗi giây trong 100 năm.

Nguồn: porneL, https://stackoverflow.com/questions/201705/how-many-random-elements-b Before-md5-products-collutions


8
Vì vậy, bạn đang nói vẫn còn cơ hội? : p
Holloway

1
Vấn đề là mặc dù bạn CẦN băm 6 tỷ tệp mỗi giây trong 100 năm để chắc chắn rằng bạn tìm thấy một sự va chạm; nó cũng có thể xảy ra trong giây đầu tiên.
deroby

Đúng, nó có thể xảy ra giây đầu tiên. Nhưng như mọi khi, nó về các lý do cân bằng. Có thể là các ứng dụng quân sự mà rủi ro đó không được chấp nhận, nhưng tôi sẽ thuê một chiếc xe mà không cần suy nghĩ thứ hai về việc các cảm biến túi khí sử dụng md5. Hãy nhớ rằng, rất có thể bạn bị sét đánh nhiều lần trong khi chờ va chạm md5.
Zsolt Szilagy

Tôi xin lỗi, nhưng một nửa của 2 ^ 128 là 2 ^ 127, không phải 2 ^ 64.
fischi

2
@fischi, đọc liên kết về nghịch lý sinh nhật, và cả en.wikipedia.org/wiki/BISS_attack - đó không phải là vấn đề chỉ đơn giản là giảm một nửa tổng số băm. Với không gian tìm kiếm H, số lượng băm bạn phải tạo trước khi có 50% khả năng xảy ra va chạm là xấp xỉ sqrt ((pi / 2) * H). Nếu bạn thực hiện phép toán đó với 2 ^ 128, bạn sẽ nhận được một số xấp xỉ 2 ^ 64
Paul Dixon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.