Điểm:1

Tránh xung đột MD5 với băm một phần thứ cấp

lá cờ cn

Tôi đang cố gắng thiết kế một chương trình giống như VCS để xác định xem các tệp có giống nhau hay không bằng cách so sánh các giá trị băm MD5 của chúng.

Sau đó, tôi đọc về va chạm MD5 đâyvà tôi tự hỏi liệu tôi có thể giải quyết vấn đề đó bằng cách thực hiện kiểm tra thứ cấp bằng cách chỉ băm các phần của tệp nếu lần kiểm tra đầu tiên dẫn đến xung đột.

Một số vấn đề với phương pháp này có thể thấy trước là gì?

bk2204 avatar
lá cờ fr
Vui lòng không sử dụng MD5 hoặc thậm chí SHA-1 cho mục đích này (hoặc bất kỳ mục đích nào). Git gần đây đã thêm hỗ trợ cho SHA-256 đặc biệt vì hai cái còn lại rất tệ và như kelaraka đã đề xuất, BLAKE2, BLAKE3 hoặc SHA-2 đều là những lựa chọn tuyệt vời.
Điểm:3
lá cờ in

Nó có thể là một vấn đề lớn trong trường hợp của bạn vì có một xung đột tiền tố giống hệt nhau trong MD5;

 |tiền tố giống hệt nhau | phần miễn phí của tệp A | hậu tố giống hệt nhau |
 |tiền tố giống hệt nhau | phần miễn phí của tập tin B | hậu tố giống hệt nhau |
                                         ^
                 họ có va chạm ở đây | Phần còn lại là như nhau

Mặc dù ngày nay, việc phát hiện xung đột cho MD5 rất dễ dàng, nơi kẻ tấn công có thể kiểm soát khối trung gian của MD5, xác suất xảy ra điều này có thể giảm đi nếu các tệp không phải là tùy ý vì nó sẽ cung cấp cho cuộc tấn công ít ứng viên có khả năng xảy ra xung đột hơn.

Trong trường hợp của bạn, không có kẻ tấn công và bạn đang tìm kiếm sự va chạm không kiểm soát. Trong VCS, các tệp có nhiều chỉnh sửa có thể rơi vào nhóm các tình huống xung đột có thể xảy ra, cùng một tiền tố, một số phần đã thay đổi và hậu tố giống hệt nhau. Vấn đề chính của bạn sẽ là xác định phần nào cần kiểm tra; chỉ khối thứ hai ( MD5 có các khối 512 bit) hoặc chỉ khối thứ ba hoặc khối thứ hai và thứ ba...

Tại sao phải bận tâm với MD5 và kiểm tra thứ cấp trong khi chúng tôi có thể có các lựa chọn thay thế tốt hơn và nhanh hơn.

  • BLACK2 là nhanh nhất xung quanh bây giờ có BLACK3 mà thậm chí còn nhanh hơn. BLAKE2 ~2 lần và BLAKE3 nhanh hơn ~9 lần so với MD5. Sử dụng BLAKE2/3 với đầu ra 512-bit và có một $2^{256}$- thời gian chống va chạm; vì vậy việc tạo ra một vụ va chạm là không khả thi về mặt tính toán.
  • SHA-512 gần như có cùng tốc độ với MD5 và nó có thể đảm bảo khả năng chống va chạm tốt hơn nhiều mà MD5 không thể sánh bằng.

Các kết luận của Corkami;

Giết MD5!

Trừ khi bạn chủ động kiểm tra các khối dị dạng hoặc xung đột trong tệp, đừng sử dụng MD5!

Nó không phải là hàm băm mật mã, nó là một chức năng đồ chơi!

kelalaka avatar
lá cờ in
Chà, [Git đã sử dụng SHA-1](https://www.zdnet.com/article/linus-torvalds-on-sha-1-and-git-the-sky-isnt-falling/), và bây giờ [ họ cải thiện nó](https://github.blog/2021-09-01-improving-git-protocol-security-github/)
Morrolan avatar
lá cờ ng
Xin lưu ý rằng mặc định của Git và trên thực tế, điều duy nhất được hỗ trợ bởi các máy chủ Git chính như Github là *vẫn* SHA1. Xem ví dụ [câu trả lời này](https://stackoverflow.com/a/65874596). Liên kết thứ hai của bạn là về việc Github ngừng hỗ trợ SHA1 cùng với SSH. Đó là về một phương thức vận chuyển mà người ta có thể truy cập Git, chứ không phải về git như một cách để xử lý nội dung.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.