2009-03-08 42 views
5

Nếu ai đó đang cố gắng sửa đổi hai tệp để có cùng một băm, thì cách nào để ngăn chặn chúng? Có thể md5 và sha1 ngăn chặn trường hợp đa số?Cố ý tạo hai tệp để có cùng một băm?

Tôi đã nghĩ đến việc viết của riêng mình và tôi hình ngay cả khi tôi không làm tốt công việc nếu người dùng không biết băm của tôi anh ta có thể không đánh lừa được tôi.

Cách tốt nhất để ngăn chặn điều này là gì?

+0

Bạn đang cố gắng đạt được điều gì? –

+0

Bạn đã đánh mất tôi trong đoạn thứ hai, bạn có thể sửa lại không? –

Trả lời

18

MD5 thường được coi là không an toàn nếu xung đột băm là mối quan tâm chính. SHA1 cũng không còn được coi là chấp nhận được bởi chính phủ Hoa Kỳ. Có là một competition theo cách để tìm một thuật toán băm thay thế, nhưng đề xuất tại thời điểm này là sử dụng họ SHA2 - SHA-256, SHA-384 hoặc SHA-512. [Cập nhật: 2012-10-02 NIST đã chọn SHA-3 làm thuật toán Keccak.]

Bạn có thể thử tạo mã băm của riêng mình - có thể không tốt bằng MD5 và 'bảo mật thông qua tối nghĩa' cũng không được khuyến khích.

Nếu bạn muốn bảo mật, hãy băm bằng nhiều thuật toán băm. Có thể tạo đồng thời các tệp có xung đột băm bằng cách sử dụng một số thuật toán quá mức không thể xảy ra. [Và, trong ánh sáng của bình luận, hãy để tôi nói rõ: Tôi muốn xuất bản cả hai giá trị SHA-256 và Whirlpool cho tệp - không kết hợp các thuật toán băm để tạo ra một giá trị duy nhất, nhưng sử dụng các thuật toán riêng biệt để tạo các giá trị riêng biệt. Nói chung, một tệp bị hỏng sẽ không khớp với bất kỳ thuật toán nào; nếu, perchance, ai đó đã quản lý để tạo ra một giá trị va chạm bằng cách sử dụng một thuật toán, cơ hội cũng tạo ra xung đột thứ hai trong một trong các thuật toán khác là không đáng kể.]

Public TimeStamp sử dụng một loạt các thuật toán. Xem, ví dụ: sqlcmd-86.00.tgz để minh họa.

+0

MD5 hoàn toàn bị hỏng. Đó là rác và không bao giờ nên được sử dụng trong các hệ thống mới. Kết hợp nhiều hàm băm là một ý tưởng tốt CHỈ NẾU bạn cần một băm rất dài (> 512 bit). Nếu không, một băm dài duy nhất sẽ mạnh hơn: SHA2-384 có cơ hội va chạm thấp hơn, ví dụ, SHA1 và RIPEMD-160 được nối với nhau. – kquinn

+2

Phần thứ hai về bảo mật là không đúng sự thật - kết hợp nhiều thuật toán băm là vô tình mà không có sự hiểu biết sâu về toán học về cách chúng tương tác. Lỗ trong một có thể được khuếch đại bởi người khác. –

+1

Ý của tôi là gì và những gì được minh họa bởi trang web TimeStamp công khai, được xuất bản đồng thời SHA-256, RIPEMD-160, SHA1 và có thể là băm Whirlpool; 4 băm độc lập của cùng một tệp. Ngay cả khi một băm bị đánh bại, cơ hội của cùng một tập tin cũng đánh bại những người khác là không đáng kể. –

2

Tại sao bạn đang cố gắng tạo thuật toán băm của riêng mình? Có gì sai với SHA1HMAC?

Có, có lặp lại cho băm.
Bất kỳ giá trị băm nào ngắn hơn bản rõ ràng đều cần ít thông tin hơn. Điều đó có nghĩa là sẽ có một số lặp lại. Chìa khóa cho băm là lặp lại rất khó để đảo ngược kỹ sư.

Xem xét CRC32 - thường được sử dụng làm băm. Đó là một số lượng 32-bit. Bởi vì có hơn 2^32 thông điệp trong vũ trụ, sau đó sẽ lặp lại với CRC32. Ý tưởng tương tự cũng áp dụng cho các băm khác.

+0

Trên thực tế, việc tạo ra xung đột với CRC32 dễ dàng hơn nhiều so với đánh giá 2^31 của hàm băm. Băm này thậm chí không có bảo mật 32 bit, một băm 32 bit "bảo mật" (như 32 bit của SHA-512) sẽ có. –

1

Điều này được gọi là "va chạm băm" và cách tốt nhất để tránh nó là sử dụng hàm băm mạnh. MD5 tương đối dễ dàng để tạo các tệp va chạm một cách giả tạo, như đã thấy here. Tương tự như vậy, nó được biết là có một relatively efficient method cho máy tính va chạm với các tệp SH1, mặc dù trong trường hợp này "tương đối hiệu quả" vẫn mất nhiều thời gian tính toán.

Nói chung, MD5 và SHA1 vẫn còn tốn kém để crack, nhưng không phải là không thể. Nếu bạn thực sự lo lắng về nó, hãy sử dụng hàm băm mạnh hơn, như SHA256.

Viết của riêng bạn thực sự không phải là một ý tưởng hay trừ khi bạn là một chuyên gia mật mã khá chuyên nghiệp. hầu hết các ý tưởng đơn giản đã được thử và có những cuộc tấn công nổi tiếng chống lại chúng.

Nếu bạn thực sự muốn tìm hiểu thêm về nó, hãy xem Mật mã ứng dụng của Schneier.

+0

Hãy lưu ý rằng Schneier đã bày tỏ sự đặt trước về giá trị của cuốn sách đó để đặt người. Trích dẫn là một số về rất nhiều mã mật mã xấu được viết bởi những người đã đọc Mật mã ứng dụng. Nhưng nó là một đọc tốt. – dmckee

+1

Thật tuyệt vời nếu bạn quan tâm đến các chi tiết đẫm máu. Các đặt phòng của Schneier chủ yếu tập trung vào thực tế là toán học đằng sau mật mã là xa và là phần an toàn nhất của mật mã hiện đại, và cuốn sách đó không giải quyết được mối quan tâm của con người, đó là những vấn đề thực sự nằm ở đâu. –

+0

@Bill: Vâng. Tóm tắt hay. – dmckee

0

Tôi không nghĩ đến thuật toán băm của riêng bạn là một lựa chọn tốt.

Một tùy chọn tốt khác được sử dụng Muối MD5. Ví dụ, đầu vào cho hàm băm MD5 của bạn được nối với chuỗi "acidzom! @ #" Trước khi chuyển đến hàm MD5.

Ngoài ra còn có một số đọc tốt tại Slashdot.

+3

Tôi biết câu trả lời này là cũ, nhưng nó đã được bỏ phiếu vì vậy tôi muốn thêm một cảnh báo nhanh. Đầu tiên, MD5 bị hỏng và làm muối nó không khắc phục được sự cố. Salting có công dụng của nó, đặc biệt là trong việc ngăn chặn các bảng cầu vồng, nhưng nó không giúp ích gì cả vì cả hai bên sẽ cần muối. Các chi tiết khác là muối phải được thêm vào trước, không được nối thêm, nếu không thì không có gì để phân biệt giữa một cặp các bản rõ được thiết kế để va chạm. Tôi khuyên bạn nên sử dụng một cái gì đó trong gia đình SHA2, như những người khác đã gợi ý. –

4

Nếu người dùng không biết thuật toán băm của bạn, họ cũng không thể xác minh chữ ký của bạn trên tài liệu mà bạn thực sự đã ký.

Tùy chọn tốt nhất là sử dụng thuật toán băm một chiều công khai tạo ra băm dài nhất. SHA-256 tạo ra một băm 256 bit, do đó, một trình giả mạo sẽ phải thử 2 các tài liệu khác nhau (trung bình) trước khi chúng tạo một tài liệu phù hợp với một tài liệu đã cho, khá an toàn. Nếu vẫn không đủ an toàn cho bạn, có SHA-512.

Ngoài ra, tôi nghĩ rằng điều đáng nói đến là một cách thức công nghệ thấp để bảo vệ bạn khỏi các tài liệu được ký điện tử giả mạo là chỉ cần giữ một bản sao của bất kỳ thứ gì bạn ký. Bằng cách đó, nếu có tranh chấp, bạn có thể chứng minh rằng tài liệu gốc mà bạn đã ký đã bị thay đổi.

+0

Nghịch lý sinh nhật? 2^128, tôi nghĩ ... Tuy nhiên, một số khủng khiếp ... –

+1

Bạn không chia số mũ cho 2, bạn giảm số mũ xuống một, đó là lý do tại sao nó là 255 thay vì 256. –

+2

Xem ra sự khác biệt giữa phù hợp với một mục tiêu cụ thể và cố gắng tạo ra một cặp va chạm. Bill tlaking về cựu, Jonathan về sau này. – dmckee

2

Có một hệ thống phân cấp độ khó (đối với kẻ tấn công) tại đây. Nó dễ dàng hơn để tìm hai tập tin với cùng một băm hơn để tạo ra một để phù hợp với một băm nhất định, và dễ dàng hơn để làm sau này nếu bạn không phải tôn trọng hình thức/nội dung/độ dài hạn chế.

Do đó, nếu có thể sử dụng cấu trúc và độ dài tài liệu được xác định rõ ràng, bạn có thể làm cho kẻ tấn công khó khăn hơn bất kể bạn sử dụng băm nào.

Các vấn đề liên quan